<?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>236540</bug_id>
          
          <creation_ts>2022-02-12 10:05:47 -0800</creation_ts>
          <short_desc>[GStreamer] Initial import of the GstWebRTC backend</short_desc>
          <delta_ts>2026-02-25 05:15:26 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          <see_also>https://bugs.webkit.org/show_bug.cgi?id=238070</see_also>
    
    <see_also>https://bugs.webkit.org/show_bug.cgi?id=308636</see_also>
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>235885</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Philippe Normand">pnormand</reporter>
          <assigned_to name="Philippe Normand">pnormand</assigned_to>
          <cc>alicem</cc>
    
    <cc>annulen</cc>
    
    <cc>benjamin</cc>
    
    <cc>calvaris</cc>
    
    <cc>cdumez</cc>
    
    <cc>cgarcia</cc>
    
    <cc>cmarcelo</cc>
    
    <cc>contact+bugs.webkit.org</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>glenn</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hta</cc>
    
    <cc>jer.noble</cc>
    
    <cc>menard</cc>
    
    <cc>philipj</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>tommyw</cc>
    
    <cc>vjaquez</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1840707</commentid>
    <comment_count>0</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-12 10:05:47 -0800</bug_when>
    <thetext>Here goes nothing! Initially a significant amount of layout tests are flagged as failing. We will step-by-step increase interoperability, fix bugs, add features, in follow-up patches.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840711</commentid>
    <comment_count>1</comment_count>
      <attachid>451786</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-12 10:23:12 -0800</bug_when>
    <thetext>Created attachment 451786
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840712</commentid>
    <comment_count>2</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-12 10:39:50 -0800</bug_when>
    <thetext>EWS doesn&apos;t look happy. I&apos;ll check it...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840967</commentid>
    <comment_count>3</comment_count>
      <attachid>451811</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-13 03:06:10 -0800</bug_when>
    <thetext>Created attachment 451811
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1840983</commentid>
    <comment_count>4</comment_count>
      <attachid>451816</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-13 06:35:11 -0800</bug_when>
    <thetext>Created attachment 451816
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1841701</commentid>
    <comment_count>5</comment_count>
      <attachid>451816</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-02-15 07:20:14 -0800</bug_when>
    <thetext>Comment on attachment 451816
Patch

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

&gt; Source/WTF/Scripts/Preferences/WebPreferences.yaml:1726
&gt; +      &quot;USE(GSTREAMER_WEBRTC)&quot;: true

Perhaps a function here to check, at least, webrtcbin and webrtcdsp elements are available.

&gt; Source/WebCore/Modules/mediastream/MediaDevices.cpp:43
&gt; +#include &quot;Logging.h&quot;

Is this required?

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:141
&gt; +    // g_object_set(m_src.get(), &quot;io-mode&quot;, 2, nullptr);

crumbs left behind?

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoEncoder.cpp:300
&gt; +        &quot;video/x-h264,alignment=au,stream-format=byte-stream,profile=constrained-baseline&quot;,

this is a to-do: we ought use what SDP negotiated (and also define what is possible to negotiate depending on the used decoder).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842167</commentid>
    <comment_count>6</comment_count>
      <attachid>451816</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-16 01:06:20 -0800</bug_when>
    <thetext>Comment on attachment 451816
Patch

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

&gt;&gt; Source/WTF/Scripts/Preferences/WebPreferences.yaml:1726
&gt;&gt; +      &quot;USE(GSTREAMER_WEBRTC)&quot;: true
&gt; 
&gt; Perhaps a function here to check, at least, webrtcbin and webrtcdsp elements are available.

Agreed, but I don&apos;t plan to work on a GstWebRTCProvider for this patch, which is already quite big :( Can we keep this task as one of the many follow-ups?

&gt;&gt; Source/WebCore/Modules/mediastream/MediaDevices.cpp:43
&gt;&gt; +#include &quot;Logging.h&quot;
&gt; 
&gt; Is this required?

Yes

&gt;&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:141
&gt;&gt; +    // g_object_set(m_src.get(), &quot;io-mode&quot;, 2, nullptr);
&gt; 
&gt; crumbs left behind?

oops :)

&gt;&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerVideoEncoder.cpp:300
&gt;&gt; +        &quot;video/x-h264,alignment=au,stream-format=byte-stream,profile=constrained-baseline&quot;,
&gt; 
&gt; this is a to-do: we ought use what SDP negotiated (and also define what is possible to negotiate depending on the used decoder).

s/decoder/encoder?
Yes anyway, this needs to be revised, I&apos;ll revert this part.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842218</commentid>
    <comment_count>7</comment_count>
      <attachid>451816</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2022-02-16 03:20:36 -0800</bug_when>
    <thetext>Comment on attachment 451816
Patch

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

It&apos;s a very big patch. Took a long time and I would have to have been more thorough.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:231
&gt; +    postTask([client = m_client, data, size] {

I&apos;m worried about the lifetime of this data. Are we guaranteeing that those GBytes will be alive by the moment this is run in the MT?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:241
&gt; +    CString buffer(string, strlen(string));

Why don&apos;t you create the String from the beginning and pass that around?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:265
&gt; +    postTask([client = m_client, error] {

Again, lifetime of this error.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.h:58
&gt; +    // RTCDataChannelHandler API

Period at the end.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDtlsTransportBackend.h:41
&gt; +    // RTCDtlsTransportBackend

.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.h:41
&gt; +    // RTCIceTransportBackend

.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:305
&gt; +        pendingRemoteDescriptionSdp = description;

not moving here?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:402
&gt; +        auto cleanup = makeScopeExit([&amp;] {
&gt; +            gst_promise_unref(promise);
&gt; +        });

Can&apos;t we add GstPromise to GRefPtrGStreamer?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:623
&gt; +    // flushPendingSources(true);

Left behind?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:644
&gt; +        auto cleanup = makeScopeExit([&amp;] {

GRefPtrGStreamer?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1056
&gt; +    callOnMainThread([protectedThis = Ref(*this), description = description.release()] {

Leaking the description? Maybe move the smart ptr inside? Besides, I recall GUniqueOutPtrs should be used just locally.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1070
&gt; +    callOnMainThread([protectedThis = Ref(*this), error = error.release()] {

ditto.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1114
&gt; +        auto cleanup = makeScopeExit([&amp;] {

GRefPtrGStreamer

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1182
&gt; +    callOnMainThread([protectedThis = Ref(*this), this, stats = statsCopy.release()] {

leak?

I might have missed this pattern elsewhere? I would recommend you check all uses of release in lambda creation.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.cpp:51
&gt; +        WTFLogAlways(&quot;GstWebRTC plugin not found. Make sure to install gst-plugins-bad &gt;= 1.20 with the webrtc plugin enabled.&quot;);

Maybe ASSERT_NOT_REACHED as well?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpReceiverTransformBackend.h:39
&gt; +    // RTCRtpTransformBackend

.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.h:59
&gt; +        return WTF::switchOn(m_source,

For this easy variant handlings I prefer to use holds_alternative + get

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.h:67
&gt; +        return WTF::switchOn(m_source,

ditto

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.h:75
&gt; +        return WTF::switchOn(m_source,

ditto

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.h:100
&gt; +    GRefPtr&lt;GstElement&gt; stopSource();

Might be interesting to warn for unused return

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderTransformBackend.h:42
&gt; +    // RTCRtpTransformBackend

.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpTransceiverBackend.cpp:97
&gt; +static inline ExceptionOr&lt;GstCaps*&gt; toRtpCodecCapability(const RTCRtpCodecCapability&amp; codec)

Might be interesting to mark this as warning on unused return to prevent leaks.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpTransformBackend.h:38
&gt; +    // RTCRtpTransformBackend

.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerSctpTransportBackend.h:42
&gt; +    // RTCSctpTransportBackend

.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:247
&gt; +            gst_promise_unref(promise);

GRefPtr and move into the lambdas.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:49
&gt; +    if (!protocol || protocol.isEmpty())

redundant, isEmpty implies the other

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:59
&gt; +    if (!type || type.isEmpty())

ditto

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:71
&gt; +    if (!type || type.isEmpty())

ditto

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:136
&gt; +    if (priority &lt; 0.7)
&gt; +        return RTCPriorityType::VeryLow;
&gt; +    if (priority &lt; 1.5)
&gt; +        return RTCPriorityType::Low;
&gt; +    if (priority &lt; 2.5)

It could be a good idea to make defines for these values above.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:300
&gt; +    auto scopeExit = WTF::makeScopeExit([&amp;] {

I wonder if it could make sense to make GUniquePtr definition for this, even inside this file.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.h:97
&gt; +static inline RTCSdpType fromSessionDescriptionType(GstWebRTCSessionDescription* description)

const * or even const &amp;

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.h:208
&gt; +static inline GstWebRTCBundlePolicy bundlePolicyFromConfiguration(MediaEndpointConfiguration&amp; configuration)

const &amp;

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.h:223
&gt; +static inline GstWebRTCICETransportPolicy iceTransportPolicyFromConfiguration(MediaEndpointConfiguration&amp; configuration)

const &amp;

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerCapturer.cpp:141
&gt; +    // g_object_set(m_src.get(), &quot;io-mode&quot;, 2, nullptr);

leftovers

&gt; Source/WebCore/platform/mediastream/gstreamer/GStreamerDTMFSenderBackend.h:37
&gt; +    // RTCDTMFSenderBackend

.

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingAudioSourceGStreamer.h:38
&gt; +    // RealtimeMediaSource API

.

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingAudioSourceGStreamer.h:40
&gt; +    void stopProducingData()  final;

extra space before final

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingAudioSourceGStreamer.h:45
&gt; +    // RealtimeIncomingSourceGStreamer API

.

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.h:37
&gt; +    void lockValve() const;
&gt; +    void releaseValve() const;

Maybe it&apos;s a cultural thing, but for me it makes more sense open and close.

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingVideoSourceGStreamer.h:38
&gt; +    // RealtimeMediaSource API

.

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingVideoSourceGStreamer.h:46
&gt; +    // RealtimeIncomingSourceGStreamer API

.

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingAudioSourceGStreamer.cpp:59
&gt; +bool RealtimeOutgoingAudioSourceGStreamer::setPayloadType(GRefPtr&lt;GstCaps&gt;&amp; caps)

const &amp;

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp:144
&gt; +    g_object_get(transceiver.get(), &quot;sender&quot;, &amp;m_sender.outPtr(), nullptr);

Can this be called more than once? outPtr is not going to release an outPtr for you and it will ASSERT if there was one already.

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.h:39
&gt; +    GRefPtr&lt;GstCaps&gt; allowedCaps() const { return m_allowedCaps; }

const &amp;

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.h:76
&gt; +    // MediaStreamTrackPrivate::Observer API

.

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingVideoSourceGStreamer.cpp:61
&gt; +bool RealtimeOutgoingVideoSourceGStreamer::setPayloadType(GRefPtr&lt;GstCaps&gt;&amp; caps)

const &amp;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842394</commentid>
    <comment_count>8</comment_count>
      <attachid>451816</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-16 10:55:33 -0800</bug_when>
    <thetext>Comment on attachment 451816
Patch

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

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.h:58
&gt;&gt; +    // RTCDataChannelHandler API
&gt; 
&gt; Period at the end.

We don&apos;t put a . for this kind of comment, they&apos;re not sentences, they are preamble to virtual method overrides. :) Otherwise there&apos;s a lot of full stops to put elsewhere in WebCore. And what about &quot;namespace WebCore&quot; comments?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842403</commentid>
    <comment_count>9</comment_count>
      <attachid>451816</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-16 11:20:02 -0800</bug_when>
    <thetext>Comment on attachment 451816
Patch

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

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:402
&gt;&gt; +        });
&gt; 
&gt; Can&apos;t we add GstPromise to GRefPtrGStreamer?

Well yeah I thought about it I think, but wouldn&apos;t that be awkward because the change_func obviously passes a raw pointer, so what would we do here?

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1056
&gt;&gt; +    callOnMainThread([protectedThis = Ref(*this), description = description.release()] {
&gt; 
&gt; Leaking the description? Maybe move the smart ptr inside? Besides, I recall GUniqueOutPtrs should be used just locally.

Right, need to revisit this, passing the OutPtr around is not great

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.h:59
&gt;&gt; +        return WTF::switchOn(m_source,
&gt; 
&gt; For this easy variant handlings I prefer to use holds_alternative + get

I didn&apos;t know about this. Generally I used the same patterns as in the libwebrtc backend :)

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:300
&gt;&gt; +    auto scopeExit = WTF::makeScopeExit([&amp;] {
&gt; 
&gt; I wonder if it could make sense to make GUniquePtr definition for this, even inside this file.

I thought about reusing the ones already defined in the crypto backend, but didn&apos;t have time...

&gt;&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeIncomingSourceGStreamer.h:37
&gt;&gt; +    void releaseValve() const;
&gt; 
&gt; Maybe it&apos;s a cultural thing, but for me it makes more sense open and close.

Sounds better!

&gt;&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp:144
&gt;&gt; +    g_object_get(transceiver.get(), &quot;sender&quot;, &amp;m_sender.outPtr(), nullptr);
&gt; 
&gt; Can this be called more than once? outPtr is not going to release an outPtr for you and it will ASSERT if there was one already.

No, it&apos;s meant to be called once, maybe I can rework this a bit though....</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1842776</commentid>
    <comment_count>10</comment_count>
      <attachid>451816</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-02-17 01:14:16 -0800</bug_when>
    <thetext>Comment on attachment 451816
Patch

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

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:131
&gt; +    m_hasClient = true;
&gt; +    ASSERT(!m_client);
&gt; +    m_client = &amp;client;

We can probably use an optional here for the m_client. nullopt means it doesn&apos;t have a client and nullptr value that it has a null client.

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:231
&gt;&gt; +    postTask([client = m_client, data, size] {
&gt; 
&gt; I&apos;m worried about the lifetime of this data. Are we guaranteeing that those GBytes will be alive by the moment this is run in the MT?

We can either pass a ref to the GBytes or create a SharedBuffer and pass that. Same happens with the client, it&apos;s a WeakPtr but we are not checking it&apos;s still valid before using it.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDtlsTransportBackend.cpp:68
&gt; +    callOnMainThreadAndWait([this] {
&gt; +        if (!m_client)
&gt; +            return;

What ensures this is till alive when the lambda is called? You should make weak ref to this, I think

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.cpp:82
&gt; +        if (!protectedThis-&gt;m_client)
&gt; +            return;

You should check first if (protectedThis). In  this case protected is not a good name, because WeakPtr doesn&apos;t protect this from being destroyed, use weakThis instead.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.cpp:102
&gt; +        if (!protectedThis-&gt;m_client)

Same here.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.cpp:116
&gt; +        if (!protectedThis-&gt;m_client)

And here.

&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:402
&gt;&gt;&gt; +        });
&gt;&gt; 
&gt;&gt; Can&apos;t we add GstPromise to GRefPtrGStreamer?
&gt; 
&gt; Well yeah I thought about it I think, but wouldn&apos;t that be awkward because the change_func obviously passes a raw pointer, so what would we do here?

Adopt it

&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1056
&gt;&gt;&gt; +    callOnMainThread([protectedThis = Ref(*this), description = description.release()] {
&gt;&gt; 
&gt;&gt; Leaking the description? Maybe move the smart ptr inside? Besides, I recall GUniqueOutPtrs should be used just locally.
&gt; 
&gt; Right, need to revisit this, passing the OutPtr around is not great

Yes, I would convert the GUniqueOutPtr to GUniquePtr and make this function receive a GUnqiuePtr instead.

&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpSenderBackend.h:59
&gt;&gt;&gt; +        return WTF::switchOn(m_source,
&gt;&gt; 
&gt;&gt; For this easy variant handlings I prefer to use holds_alternative + get
&gt; 
&gt; I didn&apos;t know about this. Generally I used the same patterns as in the libwebrtc backend :)

I like switchOn, but I guess it&apos;s a matter of taste, no strong opinion anyway.

&gt;&gt;&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp:144
&gt;&gt;&gt; +    g_object_get(transceiver.get(), &quot;sender&quot;, &amp;m_sender.outPtr(), nullptr);
&gt;&gt; 
&gt;&gt; Can this be called more than once? outPtr is not going to release an outPtr for you and it will ASSERT if there was one already.
&gt; 
&gt; No, it&apos;s meant to be called once, maybe I can rework this a bit though....

Maybe we should change that for consistency with GUniqueOtrPtr() that calls reset() on outPtr() to be able to use it multiple times safely.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843494</commentid>
    <comment_count>11</comment_count>
      <attachid>451816</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-18 10:44:45 -0800</bug_when>
    <thetext>Comment on attachment 451816
Patch

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

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerPeerConnectionBackend.cpp:51
&gt;&gt; +        WTFLogAlways(&quot;GstWebRTC plugin not found. Make sure to install gst-plugins-bad &gt;= 1.20 with the webrtc plugin enabled.&quot;);
&gt; 
&gt; Maybe ASSERT_NOT_REACHED as well?

Why? It&apos;s entirely possible to have the gstwebrtc lib available at runtime, but not webrtcbin. I agree it&apos;s unlikely, but I&apos;m not sure it warrants an ASSERT :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843495</commentid>
    <comment_count>12</comment_count>
      <attachid>452541</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-18 10:45:38 -0800</bug_when>
    <thetext>Created attachment 452541
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843499</commentid>
    <comment_count>13</comment_count>
      <attachid>452544</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-18 10:49:56 -0800</bug_when>
    <thetext>Created attachment 452544
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843819</commentid>
    <comment_count>14</comment_count>
      <attachid>452632</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-19 01:34:31 -0800</bug_when>
    <thetext>Created attachment 452632
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1843822</commentid>
    <comment_count>15</comment_count>
      <attachid>452634</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-19 03:12:26 -0800</bug_when>
    <thetext>Created attachment 452634
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844673</commentid>
    <comment_count>16</comment_count>
      <attachid>452634</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-02-22 06:32:43 -0800</bug_when>
    <thetext>Comment on attachment 452634
Patch

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

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:93
&gt; +    auto channel = RTCDataChannel::create(document, WTFMove(handler), String(label.get()), WTFMove(init));

String::fromUTF8()

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:107
&gt; +        auto bytes = adoptGRef(rawBytes);
&gt; +        handler-&gt;onMessageData(WTFMove(bytes));

Is the GBytes ownership transferred? I guess it&apos;s not, so we shouldn&apos;t adoptGRef. I would not even create a smart pointer since we don&apos;t own it and this is sync call from message callback, just pass the pointer to onMessageData() and if there we need to take a ref take it there when needed.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:109
&gt; +    g_signal_connect_swapped(m_channel.get(), &quot;on-message-string&quot;, G_CALLBACK(+[](GStreamerDataChannelHandler* handler, char* message) {

const char* message

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:112
&gt; +        CString buffer(message, strlen(message));
&gt; +        auto string = String::fromUTF8(buffer);
&gt; +        handler-&gt;onMessageString(WTFMove(string));

I don&apos;t think you need the CString this could be just:

handler-&gt;onMessageString(String::fromUTF8(message));

However, I would pass the char* here for the same reasons as GBytes

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:116
&gt; +        GUniquePtr&lt;GError&gt; error(rawError);
&gt; +        handler-&gt;onError(WTFMove(error));

And the same here, we are taking the ownership of a GError, but I don&apos;t think it&apos;s transferred. Let&apos;s just pass the GError</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1844697</commentid>
    <comment_count>17</comment_count>
      <attachid>452634</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-22 07:39:27 -0800</bug_when>
    <thetext>Comment on attachment 452634
Patch

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

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:107
&gt;&gt; +        handler-&gt;onMessageData(WTFMove(bytes));
&gt; 
&gt; Is the GBytes ownership transferred? I guess it&apos;s not, so we shouldn&apos;t adoptGRef. I would not even create a smart pointer since we don&apos;t own it and this is sync call from message callback, just pass the pointer to onMessageData() and if there we need to take a ref take it there when needed.

Ah yeah it&apos;s not transferred. Maybe that&apos;s why the first version of this patch wasn&apos;t using smart ptrs :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845059</commentid>
    <comment_count>18</comment_count>
      <attachid>452634</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-02-23 02:25:25 -0800</bug_when>
    <thetext>Comment on attachment 452634
Patch

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

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.h:50
&gt; +protected:

Why protected if this class is final?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.h:77
&gt; +    std::optional&lt;WeakPtr&lt;RTCDataChannelHandlerClient&gt;&gt; m_client WTF_GUARDED_BY_LOCK(m_clientLock);
&gt; +    bool m_hasClient WTF_GUARDED_BY_LOCK(m_clientLock) { false };

Why do we need m_hasClient if m_client is optional? nullopt -&gt; no client, nullptr -&gt; has a null client

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.h:80
&gt; +    PendingMessages m_bufferedMessages WTF_GUARDED_BY_LOCK(m_clientLock);

m_pendingMessages?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDtlsTransportBackend.cpp:64
&gt; +void GStreamerDtlsTransportBackend::stateChanged()

Could this be const?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDtlsTransportBackend.cpp:70
&gt; +        if (!weakThis-&gt;m_client)
&gt; +            return;

Here you are checking m_client is not nullopt, but it can be nullptr, since it&apos;s a WeakPtr. I wonder why it&apos;s optional here, we only care if we have a valid client or not.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDtlsTransportBackend.cpp:83
&gt; +            certificates.append(WTFMove(jsRemoteCertificate));

unchedkedAppend() since you reserved the capacity

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDtlsTransportBackend.cpp:87
&gt; +            certificates.append(WTFMove(jsCertificate));

Ditto.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDtlsTransportBackend.h:38
&gt; +    void stateChanged();

Why is this public?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.cpp:85
&gt; +    // We start observing a bit late and might miss the checking state. Synthesize it as needed.
&gt; +    if (transportState &gt; GST_WEBRTC_ICE_CONNECTION_STATE_CHECKING &amp;&amp; transportState != GST_WEBRTC_ICE_CONNECTION_STATE_CLOSED) {
&gt; +        callOnMainThread([weakThis = WeakPtr { *this }] {
&gt; +            if (!weakThis || !weakThis-&gt;m_client)
&gt; +                return;
&gt; +            weakThis-&gt;m_client-&gt;onStateChanged(RTCIceTransportState::Checking);
&gt; +        });
&gt; +    }
&gt; +    callOnMainThread([weakThis = WeakPtr { *this }, transportState, gatheringState] {
&gt; +        if (!weakThis || !weakThis-&gt;m_client)
&gt; +            return;
&gt; +        weakThis-&gt;m_client-&gt;onStateChanged(toRTCIceTransportState(transportState));
&gt; +        weakThis-&gt;m_client-&gt;onGatheringStateChanged(toRTCIceGatheringState(gatheringState));

Do we really need two calls to callOnMainThread? Can we just move the if to the lambda and synthetize the Checking if needed there?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.cpp:95
&gt; +void GStreamerIceTransportBackend::stateChanged()

Could this be const?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.cpp:109
&gt; +void GStreamerIceTransportBackend::gatheringStateChanged()

Ditto

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.h:38
&gt; +    void stateChanged();
&gt; +    void gatheringStateChanged();

Why are these public?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:925
&gt; +    auto init = GStreamerDataChannelHandler::fromRTCDataChannelInit(options);
&gt; +    GST_DEBUG_OBJECT(m_pipeline.get(), &quot;Creating data channel for init options %&quot; GST_PTR_FORMAT, init.get());
&gt; +    GRefPtr&lt;GstWebRTCDataChannel&gt; channel;
&gt; +    g_signal_emit_by_name(m_webrtcBin.get(), &quot;create-data-channel&quot;, label.utf8().data(), init.get(), &amp;channel.outPtr());
&gt; +    if (!channel)
&gt; +        return nullptr;

GStreamerDataChannelHandler::fromRTCDataChannelInit is a bit confusing, could we add something like:

GRefPtr&lt;GstWebRTCDataChannel&gt; GstWebRTCDataChannel::create(GstElement* webrtcBin, const String&amp; label, const RTCDataChannelInit&amp; init);

And move all this code to the create including the converstion from RTCDataChannelInit to GstStructure</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1845594</commentid>
    <comment_count>19</comment_count>
      <attachid>452634</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-02-24 06:11:48 -0800</bug_when>
    <thetext>Comment on attachment 452634
Patch

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

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:74
&gt; +Ref&lt;RTCDataChannelEvent&gt; GStreamerDataChannelHandler::channelEvent(Document&amp; document, GRefPtr&lt;GstWebRTCDataChannel&gt;&amp;&amp; dataChannel)

This sounds like a getter too, I would just calls this createEvent()

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:81
&gt; +    static int nPipeline = 0;

Could this be unsigned or even uint32_t?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:116
&gt; +            protectedThis-&gt;addRemoteStream(pad);

Why this needs to run in the main thread and all others don&apos;t?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:143
&gt; +void GStreamerMediaEndpoint::teardownPipeline()

This is expected to be called with a valid m_pipeline, so I would either add an early return here and remove the check from the callers, or add an assert here to ensure callers do the check.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:150
&gt; +    g_signal_handlers_disconnect_by_data(m_pipeline.get(), this);

Should this  be m_webrtcBin.get() instead of m_pipeline.get()?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:190
&gt; +    gst_element_set_locked_state(m_pipeline.get(), true);

TRUE

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:195
&gt; +    gst_element_set_locked_state(m_pipeline.get(), false);

FALSE

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:637
&gt; +    g_signal_emit_by_name(m_webrtcBin.get(), signalName.ascii().data(), options.release(), gst_promise_new_with_change_func([](GstPromise* rawPromise, gpointer userData) {

Since we are not taking the ownership of the options, I think it&apos;s better to receive a raw pointer.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846045</commentid>
    <comment_count>20</comment_count>
      <attachid>452634</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-25 09:20:21 -0800</bug_when>
    <thetext>Comment on attachment 452634
Patch

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

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:116
&gt;&gt; +            protectedThis-&gt;addRemoteStream(pad);
&gt; 
&gt; Why this needs to run in the main thread and all others don&apos;t?

Because otherwise RealtimeMediaSource::forEachObserver() ASSERTs in Debug builds.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846287</commentid>
    <comment_count>21</comment_count>
      <attachid>453288</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-02-26 01:36:35 -0800</bug_when>
    <thetext>Created attachment 453288
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1846588</commentid>
    <comment_count>22</comment_count>
      <attachid>453288</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-02-28 02:41:45 -0800</bug_when>
    <thetext>Comment on attachment 453288
Patch

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

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.h:54
&gt; +    void onMessageData(GBytes*);
&gt; +    void onMessageString(const char*);
&gt; +    void onError(GError*);
&gt; +    void onBufferedAmountLow();
&gt; +    void readyStateChanged();

I think these could be private too.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:372
&gt; +    GStreamerMediaEndpoint&amp; endPoint;

Shouldn&apos;t this be a Ref&lt;&gt;? When the gst promise change func is called, the endPoint might be destriyed already, no?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:401
&gt; +        std::unique_ptr&lt;SetDescriptionCallData&gt; data(reinterpret_cast&lt;SetDescriptionCallData*&gt;(userData));

I think static_cast works here.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:411
&gt; +            callOnMainThread([error = error.get(), protectedThis = Ref(data-&gt;endPoint), failureCallback = WTFMove(data-&gt;failureCallback)] {

error needs to be copied here.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:640
&gt; +        auto* endpoint = reinterpret_cast&lt;GStreamerMediaEndpoint*&gt;(userData);

Can endPoint be destroyed at this point?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:929
&gt; +    auto init = GStreamerDataChannelHandler::fromRTCDataChannelInit(options);
&gt; +    GST_DEBUG_OBJECT(m_pipeline.get(), &quot;Creating data channel for init options %&quot; GST_PTR_FORMAT, init.get());
&gt; +    GRefPtr&lt;GstWebRTCDataChannel&gt; channel;
&gt; +    g_signal_emit_by_name(m_webrtcBin.get(), &quot;create-data-channel&quot;, label.utf8().data(), init.get(), &amp;channel.outPtr());
&gt; +    if (!channel)
&gt; +        return nullptr;
&gt; +
&gt; +    return WTF::makeUnique&lt;GStreamerDataChannelHandler&gt;(WTFMove(channel));

GStreamerDataChannelHandler::fromRTCDataChannelInit is a bit confusing, could we add something like:

GRefPtr&lt;GstWebRTCDataChannel&gt; GstWebRTCDataChannel::create(GstElement* webrtcBin, const String&amp; label, const RTCDataChannelInit&amp; init);

And move all this code to the create including the converstion from RTCDataChannelInit to GstStructure

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1061
&gt; +        if (protectedThis-&gt;isStopped())
&gt; +            return;
&gt; +
&gt; +        GUniquePtr&lt;char&gt; sdp(gst_sdp_message_as_text(description-&gt;sdp));
&gt; +        if (protectedThis-&gt;m_isInitiator)
&gt; +            protectedThis-&gt;m_peerConnectionBackend.createOfferSucceeded(sdp.get());
&gt; +        else
&gt; +            protectedThis-&gt;m_peerConnectionBackend.createAnswerSucceeded(sdp.get());

In general, I like capturing both the protectedThis and this, so that you don&apos;t have to use protectedfThis-&gt; everywhere.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1100
&gt; +        if (!receiver)
&gt; +            continue;
&gt; +
&gt; +        if (!mid)
&gt; +            continue;

if (!receiver || !mid) ?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1120
&gt; +        auto* endPoint = reinterpret_cast&lt;GStreamerMediaEndpoint*&gt;(userData);

Can endPoint be destroyed already at this point?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerRtpTransceiverBackend.cpp:40
&gt; +    g_object_set(m_rtcTransceiver.get(), &quot;do-nack&quot;, true, &quot;fec-type&quot;, GST_WEBRTC_FEC_TYPE_ULP_RED, nullptr);

TRUE

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerSctpTransportBackend.cpp:87
&gt; +    callOnMainThread([this, transportState, maxChannels, maxMessageSize] {

Should we pass a WeakPtr for this? Or not capture this, but m_client which is already a WeakPtr

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:146
&gt; +    // FIXME

Add a comment here to know what&apos;s left

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:228
&gt; +    CallbackHolder(GStreamerStatsCollector::CollectorCallback&amp;&amp; collectorCallback)

explicit

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:263
&gt; +    }, holder.release(), nullptr);

I wonder if if would be clearer to pass a destructor for user_data instead of release and adopt in the callback. Is the change func ensured to be always called before the promise is freed? We have WEBKIT_DEFINE_ASYNC_DATA_STRUCT macro in WTFGType.h for this use case, which provides create and free functions</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847468</commentid>
    <comment_count>23</comment_count>
      <attachid>453288</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-02 09:42:58 -0800</bug_when>
    <thetext>Comment on attachment 453288
Patch

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

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:929
&gt;&gt; +    return WTF::makeUnique&lt;GStreamerDataChannelHandler&gt;(WTFMove(channel));
&gt; 
&gt; GStreamerDataChannelHandler::fromRTCDataChannelInit is a bit confusing, could we add something like:
&gt; 
&gt; GRefPtr&lt;GstWebRTCDataChannel&gt; GstWebRTCDataChannel::create(GstElement* webrtcBin, const String&amp; label, const RTCDataChannelInit&amp; init);
&gt; 
&gt; And move all this code to the create including the converstion from RTCDataChannelInit to GstStructure

I used the same pattern as in the libwebrtc backend. I&apos;m not sure introducing too many changes would help much with future maintenance of both backends :(

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:263
&gt;&gt; +    }, holder.release(), nullptr);
&gt; 
&gt; I wonder if if would be clearer to pass a destructor for user_data instead of release and adopt in the callback. Is the change func ensured to be always called before the promise is freed? We have WEBKIT_DEFINE_ASYNC_DATA_STRUCT macro in WTFGType.h for this use case, which provides create and free functions

Yes, the change func is called from gst_promise_free().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847780</commentid>
    <comment_count>24</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-03 00:54:34 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #23)
&gt; Comment on attachment 453288 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453288&amp;action=review
&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:929
&gt; &gt;&gt; +    return WTF::makeUnique&lt;GStreamerDataChannelHandler&gt;(WTFMove(channel));
&gt; &gt; 
&gt; &gt; GStreamerDataChannelHandler::fromRTCDataChannelInit is a bit confusing, could we add something like:
&gt; &gt; 
&gt; &gt; GRefPtr&lt;GstWebRTCDataChannel&gt; GstWebRTCDataChannel::create(GstElement* webrtcBin, const String&amp; label, const RTCDataChannelInit&amp; init);
&gt; &gt; 
&gt; &gt; And move all this code to the create including the converstion from RTCDataChannelInit to GstStructure
&gt; 
&gt; I used the same pattern as in the libwebrtc backend. I&apos;m not sure
&gt; introducing too many changes would help much with future maintenance of both
&gt; backends :(

Ok.

&gt; &gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:263
&gt; &gt;&gt; +    }, holder.release(), nullptr);
&gt; &gt; 
&gt; &gt; I wonder if if would be clearer to pass a destructor for user_data instead of release and adopt in the callback. Is the change func ensured to be always called before the promise is freed? We have WEBKIT_DEFINE_ASYNC_DATA_STRUCT macro in WTFGType.h for this use case, which provides create and free functions
&gt; 
&gt; Yes, the change func is called from gst_promise_free().

I see the change notify being called there, but no the change func.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1847872</commentid>
    <comment_count>25</comment_count>
      <attachid>453288</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-03 07:19:16 -0800</bug_when>
    <thetext>Comment on attachment 453288
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:263
&gt;&gt;&gt;&gt; +    }, holder.release(), nullptr);
&gt;&gt;&gt; 
&gt;&gt;&gt; I wonder if if would be clearer to pass a destructor for user_data instead of release and adopt in the callback. Is the change func ensured to be always called before the promise is freed? We have WEBKIT_DEFINE_ASYNC_DATA_STRUCT macro in WTFGType.h for this use case, which provides create and free functions
&gt;&gt; 
&gt;&gt; Yes, the change func is called from gst_promise_free().
&gt; 
&gt; I see the change notify being called there, but no the change func.

Gosh yes, sorry I got confused there... But anyway, why were you asking this? I have trouble understanding the point here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848213</commentid>
    <comment_count>26</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-04 02:17:27 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #25)
&gt; Comment on attachment 453288 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453288&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:263
&gt; &gt;&gt;&gt;&gt; +    }, holder.release(), nullptr);
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; I wonder if if would be clearer to pass a destructor for user_data instead of release and adopt in the callback. Is the change func ensured to be always called before the promise is freed? We have WEBKIT_DEFINE_ASYNC_DATA_STRUCT macro in WTFGType.h for this use case, which provides create and free functions
&gt; &gt;&gt; 
&gt; &gt;&gt; Yes, the change func is called from gst_promise_free().
&gt; &gt; 
&gt; &gt; I see the change notify being called there, but no the change func.
&gt; 
&gt; Gosh yes, sorry I got confused there... But anyway, why were you asking
&gt; this? I have trouble understanding the point here.

It looks weird to me to free the user data in the update func, when there&apos;s a destroy notify func for that, and we are sure it will be called when the data is no longer needed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1848594</commentid>
    <comment_count>27</comment_count>
      <attachid>453930</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-06 08:03:55 -0800</bug_when>
    <thetext>Created attachment 453930
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849314</commentid>
    <comment_count>28</comment_count>
      <attachid>453930</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-03-08 09:43:14 -0800</bug_when>
    <thetext>Comment on attachment 453930
Patch

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

&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:192
&gt; +        return gst_structure_get_string(structure, &quot;media&quot;);

I had to change this line, otherwise I got crashes in tests, like

if (gst_structure_has_field(structure, &quot;media&quot;))
    return gst_structure_get_string(structure, &quot;media&quot;)
return &quot;unknown-rtp-media-type&quot;

The crash was in strlen-avx2.s:65 because it receives  NULL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849317</commentid>
    <comment_count>29</comment_count>
      <attachid>453930</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-08 09:51:22 -0800</bug_when>
    <thetext>Comment on attachment 453930
Patch

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

&gt;&gt; Source/WebCore/platform/graphics/gstreamer/GStreamerCommon.cpp:192
&gt;&gt; +        return gst_structure_get_string(structure, &quot;media&quot;);
&gt; 
&gt; I had to change this line, otherwise I got crashes in tests, like
&gt; 
&gt; if (gst_structure_has_field(structure, &quot;media&quot;))
&gt;     return gst_structure_get_string(structure, &quot;media&quot;)
&gt; return &quot;unknown-rtp-media-type&quot;
&gt; 
&gt; The crash was in strlen-avx2.s:65 because it receives  NULL

That&apos;s with gst main branch, right? I also see this here, I suspect it&apos;s some new regression but I haven&apos;t debugged yet (help is welcome). With 1.20 from the SDK you shouldn&apos;t see a crash, the EWS didn&apos;t report unexpected crashes either.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849337</commentid>
    <comment_count>30</comment_count>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-03-08 11:07:47 -0800</bug_when>
    <thetext>(In reply to Philippe Normand from comment #29)
&gt;
&gt; That&apos;s with gst main branch, right? I also see this here, I suspect it&apos;s
&gt; some new regression but I haven&apos;t debugged yet (help is welcome). With 1.20
&gt; from the SDK you shouldn&apos;t see a crash, the EWS didn&apos;t report unexpected
&gt; crashes either.

bisected:

https://gitlab.freedesktop.org/gstreamer/gstreamer/-/merge_requests/1762</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849339</commentid>
    <comment_count>31</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-08 11:21:09 -0800</bug_when>
    <thetext>I was wondering if this is really a regression or if we&apos;re supposed to be notified of the webrtcbin src pad caps differently now...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1849745</commentid>
    <comment_count>32</comment_count>
      <attachid>453930</attachid>
    <who name="Víctor M. Jáquez L.">vjaquez</who>
    <bug_when>2022-03-09 10:24:02 -0800</bug_when>
    <thetext>Comment on attachment 453930
Patch

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

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:706
&gt; +    auto caps = adoptGRef(gst_pad_query_caps(pad, nullptr));

Ok. I found out how to deal with the issue by looking at the example:

auto caps = adoptGRef(gst_pad_get_current_caps(pad));
if (!caps)
     caps = adoptGRef(gst_pad_query_caps(pad, nullptr));

Iiuc, it should avoid another pad query.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850040</commentid>
    <comment_count>33</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-10 05:12:43 -0800</bug_when>
    <thetext>(In reply to Víctor M. Jáquez L. from comment #32)
&gt; Comment on attachment 453930 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=453930&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:706
&gt; &gt; +    auto caps = adoptGRef(gst_pad_query_caps(pad, nullptr));
&gt; 
&gt; Ok. I found out how to deal with the issue by looking at the example:
&gt; 
&gt; auto caps = adoptGRef(gst_pad_get_current_caps(pad));
&gt; if (!caps)
&gt;      caps = adoptGRef(gst_pad_query_caps(pad, nullptr));
&gt; 
&gt; Iiuc, it should avoid another pad query.

Yeah, right. But still answering the query with incomplete RTP caps seems a bit odd.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1850686</commentid>
    <comment_count>34</comment_count>
      <attachid>454531</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-12 04:39:01 -0800</bug_when>
    <thetext>Created attachment 454531
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851758</commentid>
    <comment_count>35</comment_count>
      <attachid>454531</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2022-03-16 05:57:20 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

There are a couple of memory issues in this patch that need to be addressed. After this, I&apos;ll give a lgtm and I think Carlos should give the r+ as he did most of this review iterations.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:140
&gt; +            if (stateChange.error) {

Question, is letting this out of here to change the ready state on error legit or should we return?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.h:54
&gt; +    bool sendStringData(const CString&amp;) final;
&gt; +    bool sendRawData(const uint8_t*, size_t) final;

Not strong opinion, you could rename this to sendData and trust the language to do the overload for you.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.h:58
&gt; +    void onMessageData(GBytes*);
&gt; +    void onMessageString(const char*);

Ditto, onMessage.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.cpp:54
&gt; +    g_object_get(m_backend.get(), &quot;transport&quot;, &amp;m_iceTransport.outPtr(), nullptr);

I guess there is a possibility that m_iceTransport has a value. Calling outPtr() will get it overwritten without releasing the former value, hence leaking. Please issue a .clear() before this.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:226
&gt; +                bool result = false;

gboolean?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:412
&gt; +                errorHolder.emplace(g_error_copy(error.get()));

I would try something like:

errorHolder = GUniquePtr&lt;GError&gt;(error.release());

That way you transform GUniqueOutPtr into GUniquePtr, then the r-value logic should put that into the optional without copying the error.

In fact, it would be nice to have something like releaseIntoGUniquePtr in GUniqueOutPtr to avoid this convolution.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:545
&gt; +    RELEASE_ASSERT(!gst_pad_is_linked(sinkPad.get()));

Wouldn&apos;t it be better in this case to let it fail with just an ASSERT and leave the assertion for debug mode?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:665
&gt; +            GUniquePtr&lt;GError&gt; error(promiseError.release());
&gt; +            data-&gt;endPoint-&gt;createSessionDescriptionFailed(WTFMove(error));

See? Nicely done here.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:756
&gt; +        RELEASE_ASSERT_NOT_REACHED();

Just ASSERT?

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:837
&gt; +        GValue value = G_VALUE_INIT;
&gt; +        g_value_init(&amp;value, G_TYPE_STRING);
&gt; +        g_value_set_string(&amp;value, stream-&gt;id().utf8().data());
&gt; +        gst_value_list_append_value(&amp;streamIdsValue, &amp;value);
&gt; +        g_value_unset(&amp;value);

It might be interesting to create the GValue in the heap and use gst_value_list_append_and_take_value instead. That way you don&apos;t need to unset later and you can save some copy.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:839
&gt; +    gst_structure_take_value(initData.get(), &quot;stream-ids&quot;, &amp;streamIdsValue);

This seems to be wrong, since you are telling the structure to take that GValue*, which is stack memory.

I hope I didn&apos;t miss this pattern anywhere else, please ensure it.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:846
&gt; +            GValue value = G_VALUE_INIT;

Ditto

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:855
&gt; +            GValue value = G_VALUE_INIT;

Ditto

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:862
&gt; +    gst_structure_take_value(initData.get(), &quot;encodings&quot;, &amp;encodingsValue);

Ditto.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1144
&gt; +        std::unique_ptr&lt;GStreamerMediaEndpointHolder&gt; data(static_cast&lt;GStreamerMediaEndpointHolder*&gt;(userData));

You need to do this at the beginning of the function or you&apos;ll be leaking the userData.

Another thing is that this will only work once because the user data will be destroyed the second time it gets called or you&apos;ll be leaking if the signal is never emitted. I think the best is passing the GDestroyNotify.

I hope I did not miss this pattern anywhere else, please ensure it.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerWebRTCUtils.cpp:406
&gt; +    Vector&lt;uint8_t&gt; buffer;
&gt; +    buffer.reserveInitialCapacity(8);
&gt; +    WTF::cryptographicallyRandomValues(buffer.data(), 8);

I don&apos;t think this is ok. After you do this, the data is populated and it uses legit memory but the size is not updated, only the capacity, which is what you do when you reserve it initially.

explicit Vector(size_t size) might be what you need.

This said, since you don&apos;t use the size, just as a holder for data that does not need anything special (like calling destructors later), it won&apos;t cause trouble.

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp:40
&gt; +

Extra line

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp:148
&gt; +    g_object_get(transceiver.get(), &quot;sender&quot;, &amp;m_sender.outPtr(), nullptr);

I guess there is a possibility that m_sender has a value. Calling outPtr() will get it overwritten without releasing the former value, hence leaking. Please issue a .clear() before this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851767</commentid>
    <comment_count>36</comment_count>
      <attachid>454531</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-16 06:22:36 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.cpp:54
&gt;&gt; +    g_object_get(m_backend.get(), &quot;transport&quot;, &amp;m_iceTransport.outPtr(), nullptr);
&gt; 
&gt; I guess there is a possibility that m_iceTransport has a value. Calling outPtr() will get it overwritten without releasing the former value, hence leaking. Please issue a .clear() before this.

Yes, it&apos;s indeed disconnecting signals from previous one. I think we could call clear() in outPtr(), we do that in GUniqueOutPtr

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:226
&gt;&gt; +                bool result = false;
&gt; 
&gt; gboolean?

Yes!

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:412
&gt;&gt; +                errorHolder.emplace(g_error_copy(error.get()));
&gt; 
&gt; I would try something like:
&gt; 
&gt; errorHolder = GUniquePtr&lt;GError&gt;(error.release());
&gt; 
&gt; That way you transform GUniqueOutPtr into GUniquePtr, then the r-value logic should put that into the optional without copying the error.
&gt; 
&gt; In fact, it would be nice to have something like releaseIntoGUniquePtr in GUniqueOutPtr to avoid this convolution.

When I implemented GUniqueOutPtr, release() returned a GUniquePtr, and it was convenient for these cases, but then we changed to return a raw pointer in bug #199579 because it was not convenient when we want to release the raw pointer. I think GUniquePtr&lt;Foo&gt;(foo.release()) is easy enough and explicit

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:665
&gt;&gt; +            data-&gt;endPoint-&gt;createSessionDescriptionFailed(WTFMove(error));
&gt; 
&gt; See? Nicely done here.

We don&apos;t need the local variable + move, we can just pass promiseError.release() I think

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:839
&gt;&gt; +    gst_structure_take_value(initData.get(), &quot;stream-ids&quot;, &amp;streamIdsValue);
&gt; 
&gt; This seems to be wrong, since you are telling the structure to take that GValue*, which is stack memory.
&gt; 
&gt; I hope I didn&apos;t miss this pattern anywhere else, please ensure it.

I think this is ok, the GValue struct is copied, what it takes is the string, not the GValue pointer

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1144
&gt;&gt; +        std::unique_ptr&lt;GStreamerMediaEndpointHolder&gt; data(static_cast&lt;GStreamerMediaEndpointHolder*&gt;(userData));
&gt; 
&gt; You need to do this at the beginning of the function or you&apos;ll be leaking the userData.
&gt; 
&gt; Another thing is that this will only work once because the user data will be destroyed the second time it gets called or you&apos;ll be leaking if the signal is never emitted. I think the best is passing the GDestroyNotify.
&gt; 
&gt; I hope I did not miss this pattern anywhere else, please ensure it.

I agree, I suggested to use the GDestroyNotify too</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851775</commentid>
    <comment_count>37</comment_count>
      <attachid>454531</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-16 07:09:11 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:140
&gt;&gt; +            if (stateChange.error) {
&gt; 
&gt; Question, is letting this out of here to change the ready state on error legit or should we return?

I can&apos;t parse this question :) Can you re-phrase?

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.h:54
&gt;&gt; +    bool sendRawData(const uint8_t*, size_t) final;
&gt; 
&gt; Not strong opinion, you could rename this to sendData and trust the language to do the overload for you.

I&apos;d rather not change the RTCDataChannelHandler API which is used by the libwebrtc backend too.

&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1144
&gt;&gt;&gt; +        std::unique_ptr&lt;GStreamerMediaEndpointHolder&gt; data(static_cast&lt;GStreamerMediaEndpointHolder*&gt;(userData));
&gt;&gt; 
&gt;&gt; You need to do this at the beginning of the function or you&apos;ll be leaking the userData.
&gt;&gt; 
&gt;&gt; Another thing is that this will only work once because the user data will be destroyed the second time it gets called or you&apos;ll be leaking if the signal is never emitted. I think the best is passing the GDestroyNotify.
&gt;&gt; 
&gt;&gt; I hope I did not miss this pattern anywhere else, please ensure it.
&gt; 
&gt; I agree, I suggested to use the GDestroyNotify too

I already tried the GDestroyNotify approach and IIRC it was triggering crashes in tests, but sure, I can try again.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851789</commentid>
    <comment_count>38</comment_count>
      <attachid>454531</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-16 07:41:56 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

&gt; Source/cmake/GStreamerChecks.cmake:75
&gt; +        find_package(OpenSSL REQUIRED)

Instead of REQUIRED we should check FOUND and show a fatal message saying that OpenSSL is required when building with USE_GSTREAMER_WEBRTC</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851819</commentid>
    <comment_count>39</comment_count>
      <attachid>454531</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2022-03-16 08:29:17 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:140
&gt;&gt;&gt; +            if (stateChange.error) {
&gt;&gt; 
&gt;&gt; Question, is letting this out of here to change the ready state on error legit or should we return?
&gt; 
&gt; I can&apos;t parse this question :) Can you re-phrase?

My question is that if letting the error if fall through to dispatching the state change is ok or you forgot to return.

&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.cpp:54
&gt;&gt;&gt; +    g_object_get(m_backend.get(), &quot;transport&quot;, &amp;m_iceTransport.outPtr(), nullptr);
&gt;&gt; 
&gt;&gt; I guess there is a possibility that m_iceTransport has a value. Calling outPtr() will get it overwritten without releasing the former value, hence leaking. Please issue a .clear() before this.
&gt; 
&gt; Yes, it&apos;s indeed disconnecting signals from previous one. I think we could call clear() in outPtr(), we do that in GUniqueOutPtr

So we should do call clear before landing this then.

&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:665
&gt;&gt;&gt; +            data-&gt;endPoint-&gt;createSessionDescriptionFailed(WTFMove(error));
&gt;&gt; 
&gt;&gt; See? Nicely done here.
&gt; 
&gt; We don&apos;t need the local variable + move, we can just pass promiseError.release() I think

Carlos is right, yes.

&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:839
&gt;&gt;&gt; +    gst_structure_take_value(initData.get(), &quot;stream-ids&quot;, &amp;streamIdsValue);
&gt;&gt; 
&gt;&gt; This seems to be wrong, since you are telling the structure to take that GValue*, which is stack memory.
&gt;&gt; 
&gt;&gt; I hope I didn&apos;t miss this pattern anywhere else, please ensure it.
&gt; 
&gt; I think this is ok, the GValue struct is copied, what it takes is the string, not the GValue pointer

Gosh, Carlos, you&apos;re right. You need to actually check the code to see it because the doc is deceiving:

Sets the field with the given name field to value . If the field does not exist, it is created. If the field exists, the previous value is replaced and freed. The function will take ownership of value .

Parameters

structure
a GstStructure
 
fieldname
the name of the field to set
 
value
the new value of the field.
[transfer full]

I will have to check some EME code where I do what I ask here, which means that I am leaking.

&gt;&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp:148
&gt;&gt; +    g_object_get(transceiver.get(), &quot;sender&quot;, &amp;m_sender.outPtr(), nullptr);
&gt; 
&gt; I guess there is a possibility that m_sender has a value. Calling outPtr() will get it overwritten without releasing the former value, hence leaking. Please issue a .clear() before this.

If we call clear in GRefPtr, then this won&apos;t be needed. And IIRC, there are other places where clear is called before outPtr so we could avoid the clear in those cases as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1851824</commentid>
    <comment_count>40</comment_count>
      <attachid>454531</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2022-03-16 08:38:43 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:839
&gt;&gt;&gt;&gt; +    gst_structure_take_value(initData.get(), &quot;stream-ids&quot;, &amp;streamIdsValue);
&gt;&gt;&gt; 
&gt;&gt;&gt; This seems to be wrong, since you are telling the structure to take that GValue*, which is stack memory.
&gt;&gt;&gt; 
&gt;&gt;&gt; I hope I didn&apos;t miss this pattern anywhere else, please ensure it.
&gt;&gt; 
&gt;&gt; I think this is ok, the GValue struct is copied, what it takes is the string, not the GValue pointer
&gt; 
&gt; Gosh, Carlos, you&apos;re right. You need to actually check the code to see it because the doc is deceiving:
&gt; 
&gt; Sets the field with the given name field to value . If the field does not exist, it is created. If the field exists, the previous value is replaced and freed. The function will take ownership of value .
&gt; 
&gt; Parameters
&gt; 
&gt; structure
&gt; a GstStructure
&gt;  
&gt; fieldname
&gt; the name of the field to set
&gt;  
&gt; value
&gt; the new value of the field.
&gt; [transfer full]
&gt; 
&gt; I will have to check some EME code where I do what I ask here, which means that I am leaking.

Fortunately, I found no other code with this mistake, which is good as we are not leaking anywhere else.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852285</commentid>
    <comment_count>41</comment_count>
      <attachid>454531</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-17 07:45:22 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

&gt;&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:140
&gt;&gt;&gt;&gt; +            if (stateChange.error) {
&gt;&gt;&gt; 
&gt;&gt;&gt; Question, is letting this out of here to change the ready state on error legit or should we return?
&gt;&gt; 
&gt;&gt; I can&apos;t parse this question :) Can you re-phrase?
&gt; 
&gt; My question is that if letting the error if fall through to dispatching the state change is ok or you forgot to return.

It is ok as it is.

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:545
&gt;&gt; +    RELEASE_ASSERT(!gst_pad_is_linked(sinkPad.get()));
&gt; 
&gt; Wouldn&apos;t it be better in this case to let it fail with just an ASSERT and leave the assertion for debug mode?

I don&apos;t understand, why is a RELEASE_ASSERT a problem here?

&gt;&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:665
&gt;&gt;&gt;&gt; +            data-&gt;endPoint-&gt;createSessionDescriptionFailed(WTFMove(error));
&gt;&gt;&gt; 
&gt;&gt;&gt; See? Nicely done here.
&gt;&gt; 
&gt;&gt; We don&apos;t need the local variable + move, we can just pass promiseError.release() I think
&gt; 
&gt; Carlos is right, yes.

My compiler disagrees though:
/app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:664:60: error: reference to type &apos;GUniquePtr&lt;GError&gt;&apos; (aka &apos;unique_ptr&lt;_GError, GPtrDeleter&lt;_GError&gt;&gt;&apos;) could not bind to an rvalue of type &apos;_GError *&apos;
            data-&gt;endPoint-&gt;createSessionDescriptionFailed(promiseError.release());
                                                           ^~~~~~~~~~~~~~~~~~~~~~
/app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.h:96:61: note: passing argument to parameter here
    void createSessionDescriptionFailed(GUniquePtr&lt;GError&gt;&amp;&amp;);
                                                            ^
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852286</commentid>
    <comment_count>42</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-17 07:47:51 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #41)
&gt; Comment on attachment 454531 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=454531&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerDataChannelHandler.cpp:140
&gt; &gt;&gt;&gt;&gt; +            if (stateChange.error) {
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; Question, is letting this out of here to change the ready state on error legit or should we return?
&gt; &gt;&gt; 
&gt; &gt;&gt; I can&apos;t parse this question :) Can you re-phrase?
&gt; &gt; 
&gt; &gt; My question is that if letting the error if fall through to dispatching the state change is ok or you forgot to return.
&gt; 
&gt; It is ok as it is.
&gt; 
&gt; &gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:545
&gt; &gt;&gt; +    RELEASE_ASSERT(!gst_pad_is_linked(sinkPad.get()));
&gt; &gt; 
&gt; &gt; Wouldn&apos;t it be better in this case to let it fail with just an ASSERT and leave the assertion for debug mode?
&gt; 
&gt; I don&apos;t understand, why is a RELEASE_ASSERT a problem here?
&gt; 
&gt; &gt;&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:665
&gt; &gt;&gt;&gt;&gt; +            data-&gt;endPoint-&gt;createSessionDescriptionFailed(WTFMove(error));
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; See? Nicely done here.
&gt; &gt;&gt; 
&gt; &gt;&gt; We don&apos;t need the local variable + move, we can just pass promiseError.release() I think
&gt; &gt; 
&gt; &gt; Carlos is right, yes.
&gt; 
&gt; My compiler disagrees though:
&gt; /app/webkit/Source/WebCore/Modules/mediastream/gstreamer/
&gt; GStreamerMediaEndpoint.cpp:664:60: error: reference to type
&gt; &apos;GUniquePtr&lt;GError&gt;&apos; (aka &apos;unique_ptr&lt;_GError, GPtrDeleter&lt;_GError&gt;&gt;&apos;) could
&gt; not bind to an rvalue of type &apos;_GError *&apos;
&gt;            
&gt; data-&gt;endPoint-&gt;createSessionDescriptionFailed(promiseError.release());
&gt;                                                           
&gt; ^~~~~~~~~~~~~~~~~~~~~~
&gt; /app/webkit/Source/WebCore/Modules/mediastream/gstreamer/
&gt; GStreamerMediaEndpoint.h:96:61: note: passing argument to parameter here
&gt;     void createSessionDescriptionFailed(GUniquePtr&lt;GError&gt;&amp;&amp;);
&gt;                                                             ^
&gt; 1 error generated.

Pass GUniquePtr&lt;GError&gt;(promiseError.release()) then</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852289</commentid>
    <comment_count>43</comment_count>
      <attachid>454531</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2022-03-17 07:49:37 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

&gt;&gt;&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:665
&gt;&gt;&gt;&gt;&gt; +            data-&gt;endPoint-&gt;createSessionDescriptionFailed(WTFMove(error));
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; See? Nicely done here.
&gt;&gt;&gt; 
&gt;&gt;&gt; We don&apos;t need the local variable + move, we can just pass promiseError.release() I think
&gt;&gt; 
&gt;&gt; Carlos is right, yes.
&gt; 
&gt; My compiler disagrees though:
&gt; /app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:664:60: error: reference to type &apos;GUniquePtr&lt;GError&gt;&apos; (aka &apos;unique_ptr&lt;_GError, GPtrDeleter&lt;_GError&gt;&gt;&apos;) could not bind to an rvalue of type &apos;_GError *&apos;
&gt;             data-&gt;endPoint-&gt;createSessionDescriptionFailed(promiseError.release());
&gt;                                                            ^~~~~~~~~~~~~~~~~~~~~~
&gt; /app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.h:96:61: note: passing argument to parameter here
&gt;     void createSessionDescriptionFailed(GUniquePtr&lt;GError&gt;&amp;&amp;);
&gt;                                                             ^
&gt; 1 error generated.

This is because promiseError.release() returns a GError* here.

Why can&apos;t you call `data-&gt;endPoint-&gt;createSessionDescriptionFailed(WTFMove(promiseError))` and get rid of the error local variable?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852291</commentid>
    <comment_count>44</comment_count>
      <attachid>454531</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-17 08:00:38 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

&gt;&gt;&gt;&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:665
&gt;&gt;&gt;&gt;&gt;&gt; +            data-&gt;endPoint-&gt;createSessionDescriptionFailed(WTFMove(error));
&gt;&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt;&gt; See? Nicely done here.
&gt;&gt;&gt;&gt; 
&gt;&gt;&gt;&gt; We don&apos;t need the local variable + move, we can just pass promiseError.release() I think
&gt;&gt;&gt; 
&gt;&gt;&gt; Carlos is right, yes.
&gt;&gt; 
&gt;&gt; My compiler disagrees though:
&gt;&gt; /app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:664:60: error: reference to type &apos;GUniquePtr&lt;GError&gt;&apos; (aka &apos;unique_ptr&lt;_GError, GPtrDeleter&lt;_GError&gt;&gt;&apos;) could not bind to an rvalue of type &apos;_GError *&apos;
&gt;&gt;             data-&gt;endPoint-&gt;createSessionDescriptionFailed(promiseError.release());
&gt;&gt;                                                            ^~~~~~~~~~~~~~~~~~~~~~
&gt;&gt; /app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.h:96:61: note: passing argument to parameter here
&gt;&gt;     void createSessionDescriptionFailed(GUniquePtr&lt;GError&gt;&amp;&amp;);
&gt;&gt;                                                             ^
&gt;&gt; 1 error generated.
&gt; 
&gt; This is because promiseError.release() returns a GError* here.
&gt; 
&gt; Why can&apos;t you call `data-&gt;endPoint-&gt;createSessionDescriptionFailed(WTFMove(promiseError))` and get rid of the error local variable?

/app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:665:60: error: no viable conversion from &apos;typename remove_reference&lt;GUniqueOutPtr&lt;_GError&gt; &amp;&gt;::type&apos; (aka &apos;WTF::GUniqueOutPtr&lt;_GError&gt;&apos;) to &apos;GUniquePtr&lt;GError&gt;&apos; (aka &apos;unique_ptr&lt;_GError, GPtrDeleter&lt;_GError&gt;&gt;&apos;)
            data-&gt;endPoint-&gt;createSessionDescriptionFailed(std::move&lt;WTF::CheckMoveParameter&gt;(promiseError));
                                                           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
/usr/lib/gcc/x86_64-unknown-linux-gnu/11.2.0/../../../../include/c++/11.2.0/bits/unique_ptr.h:320:12: note: candidate constructor template not viable: no known conversion from &apos;typename remove_reference&lt;GUniqueOutPtr&lt;_GError&gt; &amp;&gt;::type&apos; (aka &apos;WTF::GUniqueOutPtr&lt;_GError&gt;&apos;) to &apos;std::nullptr_t&apos; (aka &apos;nullptr_t&apos;) for 1st argument
 constexpr unique_ptr(nullptr_t) noexcept
           ^
/usr/lib/gcc/x86_64-unknown-linux-gnu/11.2.0/../../../../include/c++/11.2.0/bits/unique_ptr.h:327:7: note: candidate constructor not viable: no known conversion from &apos;typename remove_reference&lt;GUniqueOutPtr&lt;_GError&gt; &amp;&gt;::type&apos; (aka &apos;WTF::GUniqueOutPtr&lt;_GError&gt;&apos;) to &apos;std::unique_ptr&lt;_GError, WTF::GPtrDeleter&lt;GError&gt;&gt; &amp;&amp;&apos; for 1st argument
      unique_ptr(unique_ptr&amp;&amp;) = default;
      ^
/usr/lib/gcc/x86_64-unknown-linux-gnu/11.2.0/../../../../include/c++/11.2.0/bits/unique_ptr.h:468:7: note: candidate constructor not viable: no known conversion from &apos;typename remove_reference&lt;GUniqueOutPtr&lt;_GError&gt; &amp;&gt;::type&apos; (aka &apos;WTF::GUniqueOutPtr&lt;_GError&gt;&apos;) to &apos;const std::unique_ptr&lt;_GError, WTF::GPtrDeleter&lt;GError&gt;&gt; &amp;&apos; for 1st argument
      unique_ptr(const unique_ptr&amp;) = delete;
      ^
/usr/lib/gcc/x86_64-unknown-linux-gnu/11.2.0/../../../../include/c++/11.2.0/bits/unique_ptr.h:340:2: note: candidate template ignored: could not match &apos;unique_ptr&apos; against &apos;GUniqueOutPtr&apos;
 unique_ptr(unique_ptr&lt;_Up, _Ep&gt;&amp;&amp; __u) noexcept
 ^
/usr/lib/gcc/x86_64-unknown-linux-gnu/11.2.0/../../../../include/c++/11.2.0/bits/unique_ptr.h:350:2: note: candidate template ignored: could not match &apos;auto_ptr&apos; against &apos;GUniqueOutPtr&apos;
 unique_ptr(auto_ptr&lt;_Up&gt;&amp;&amp; __u) noexcept;
 ^
/usr/lib/gcc/x86_64-unknown-linux-gnu/11.2.0/../../../../include/c++/11.2.0/bits/unique_ptr.h:281:2: note: explicit constructor is not a candidate
 unique_ptr(pointer __p) noexcept
 ^
/app/webkit/WebKitBuild/Release/WTF/Headers/wtf/glib/GUniquePtr.h:107:5: note: candidate function
    operator UnspecifiedBoolType() const { return m_ptr ? &amp;GUniqueOutPtr::m_ptr : 0; }
    ^
/app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.h:96:61: note: passing argument to parameter here
    void createSessionDescriptionFailed(GUniquePtr&lt;GError&gt;&amp;&amp;);
                                                            ^
1 error generated.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852294</commentid>
    <comment_count>45</comment_count>
      <attachid>454531</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2022-03-17 08:11:56 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:545
&gt;&gt;&gt; +    RELEASE_ASSERT(!gst_pad_is_linked(sinkPad.get()));
&gt;&gt; 
&gt;&gt; Wouldn&apos;t it be better in this case to let it fail with just an ASSERT and leave the assertion for debug mode?
&gt; 
&gt; I don&apos;t understand, why is a RELEASE_ASSERT a problem here?

In cases like this, IMHO, it is ok to crash in debug mode but for release I&apos;d prefer just a malfunction than a crash because of user experience.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852311</commentid>
    <comment_count>46</comment_count>
      <attachid>454531</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-17 08:27:23 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:837
&gt;&gt; +        g_value_unset(&amp;value);
&gt; 
&gt; It might be interesting to create the GValue in the heap and use gst_value_list_append_and_take_value instead. That way you don&apos;t need to unset later and you can save some copy.

I&apos;m not sure what you mean here. I used the usual pattern for creating and initializing GValues :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852315</commentid>
    <comment_count>47</comment_count>
      <attachid>454531</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2022-03-17 08:48:22 -0700</bug_when>
    <thetext>Comment on attachment 454531
Patch

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

&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:837
&gt;&gt;&gt; +        g_value_unset(&amp;value);
&gt;&gt; 
&gt;&gt; It might be interesting to create the GValue in the heap and use gst_value_list_append_and_take_value instead. That way you don&apos;t need to unset later and you can save some copy.
&gt; 
&gt; I&apos;m not sure what you mean here. I used the usual pattern for creating and initializing GValues :)

I mean nothing, forget it. This would be tide to the comments below and it is clear that I misunderstood the GValue doc (or better said, GValue doc could be seriously improved).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852327</commentid>
    <comment_count>48</comment_count>
      <attachid>454981</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-17 09:38:38 -0700</bug_when>
    <thetext>Created attachment 454981
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852646</commentid>
    <comment_count>49</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-18 01:19:30 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #43)
&gt; Comment on attachment 454531 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=454531&amp;action=review
&gt; 
&gt; &gt;&gt;&gt;&gt;&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:665
&gt; &gt;&gt;&gt;&gt;&gt; +            data-&gt;endPoint-&gt;createSessionDescriptionFailed(WTFMove(error));
&gt; &gt;&gt;&gt;&gt; 
&gt; &gt;&gt;&gt;&gt; See? Nicely done here.
&gt; &gt;&gt;&gt; 
&gt; &gt;&gt;&gt; We don&apos;t need the local variable + move, we can just pass promiseError.release() I think
&gt; &gt;&gt; 
&gt; &gt;&gt; Carlos is right, yes.
&gt; &gt; 
&gt; &gt; My compiler disagrees though:
&gt; &gt; /app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:664:60: error: reference to type &apos;GUniquePtr&lt;GError&gt;&apos; (aka &apos;unique_ptr&lt;_GError, GPtrDeleter&lt;_GError&gt;&gt;&apos;) could not bind to an rvalue of type &apos;_GError *&apos;
&gt; &gt;             data-&gt;endPoint-&gt;createSessionDescriptionFailed(promiseError.release());
&gt; &gt;                                                            ^~~~~~~~~~~~~~~~~~~~~~
&gt; &gt; /app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.h:96:61: note: passing argument to parameter here
&gt; &gt;     void createSessionDescriptionFailed(GUniquePtr&lt;GError&gt;&amp;&amp;);
&gt; &gt;                                                             ^
&gt; &gt; 1 error generated.
&gt; 
&gt; This is because promiseError.release() returns a GError* here.
&gt; 
&gt; Why can&apos;t you call
&gt; `data-&gt;endPoint-&gt;createSessionDescriptionFailed(WTFMove(promiseError))` and
&gt; get rid of the error local variable?

Because promiseError is a GUniqueOutPtr and createSessionDescriptionFailed expects a GUniquePtr</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852671</commentid>
    <comment_count>50</comment_count>
      <attachid>454981</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2022-03-18 03:34:19 -0700</bug_when>
    <thetext>Comment on attachment 454981
Patch

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

Other than the GDestroyNotify, it LGTM. I let Carlos do the final r+

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:1153
&gt; +    g_signal_emit_by_name(m_webrtcBin.get(), &quot;get-stats&quot;, nullptr, gst_promise_new_with_change_func([](GstPromise* rawPromise, gpointer userData) {
&gt; +        auto promise = adoptGRef(rawPromise);
&gt; +        auto result = gst_promise_wait(promise.get());
&gt; +        std::unique_ptr&lt;GStreamerMediaEndpointHolder&gt; data(static_cast&lt;GStreamerMediaEndpointHolder*&gt;(userData));
&gt; +        if (result != GST_PROMISE_RESULT_REPLIED)
&gt; +            return;
&gt; +
&gt; +        const auto* reply = gst_promise_get_reply(promise.get());
&gt; +        ASSERT(reply);
&gt; +        if (gst_structure_has_field(reply, &quot;error&quot;))
&gt; +            return;
&gt; +
&gt; +        data-&gt;endPoint-&gt;onStatsDelivered(reply);
&gt; +    }, data.release(), nullptr));

This still makes me worry. If this is called more than once, this is going to crash. You need to define the GDestroyNotify and not use the smartptr.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852673</commentid>
    <comment_count>51</comment_count>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-18 04:34:38 -0700</bug_when>
    <thetext>I already tried:

struct GStreamerMediaEndpointHolder {
    Ref&lt;GStreamerMediaEndpoint&gt; endPoint;
};
WEBKIT_DEFINE_ASYNC_DATA_STRUCT(GStreamerMediaEndpointHolder);

/app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:648:33: error: call to implicitly-deleted default constructor of &apos;WebCore::GStreamerMediaEndpointHolder&apos;
WEBKIT_DEFINE_ASYNC_DATA_STRUCT(GStreamerMediaEndpointHolder);
                                ^
/app/webkit/Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:646:33: note: default constructor of &apos;GStreamerMediaEndpointHolder&apos; is implicitly deleted because field &apos;endPoint&apos; has no default constructor
    Ref&lt;GStreamerMediaEndpoint&gt; endPoint;
                                ^</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852674</commentid>
    <comment_count>52</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-18 04:38:55 -0700</bug_when>
    <thetext>(In reply to Philippe Normand from comment #51)
&gt; I already tried:
&gt; 
&gt; struct GStreamerMediaEndpointHolder {
&gt;     Ref&lt;GStreamerMediaEndpoint&gt; endPoint;
&gt; };
&gt; WEBKIT_DEFINE_ASYNC_DATA_STRUCT(GStreamerMediaEndpointHolder);
&gt; 
&gt; /app/webkit/Source/WebCore/Modules/mediastream/gstreamer/
&gt; GStreamerMediaEndpoint.cpp:648:33: error: call to implicitly-deleted default
&gt; constructor of &apos;WebCore::GStreamerMediaEndpointHolder&apos;
&gt; WEBKIT_DEFINE_ASYNC_DATA_STRUCT(GStreamerMediaEndpointHolder);
&gt;                                 ^
&gt; /app/webkit/Source/WebCore/Modules/mediastream/gstreamer/
&gt; GStreamerMediaEndpoint.cpp:646:33: note: default constructor of
&gt; &apos;GStreamerMediaEndpointHolder&apos; is implicitly deleted because field
&gt; &apos;endPoint&apos; has no default constructor
&gt;     Ref&lt;GStreamerMediaEndpoint&gt; endPoint;
&gt;                                 ^

It should be RefPtr instead of Ref</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852680</commentid>
    <comment_count>53</comment_count>
      <attachid>455087</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-18 05:01:56 -0700</bug_when>
    <thetext>Created attachment 455087
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852684</commentid>
    <comment_count>54</comment_count>
      <attachid>455087</attachid>
    <who name="Xabier Rodríguez Calvar">calvaris</who>
    <bug_when>2022-03-18 05:29:14 -0700</bug_when>
    <thetext>Comment on attachment 455087
Patch

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852689</commentid>
    <comment_count>55</comment_count>
      <attachid>455087</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2022-03-18 05:51:46 -0700</bug_when>
    <thetext>Comment on attachment 455087
Patch

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

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerIceTransportBackend.cpp:54
&gt; +    m_iceTransport.clear();

We don&apos;t need this if we land bug #238070 first.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:372
&gt; +WEBKIT_DEFINE_ASYNC_DATA_STRUCT(SetDescriptionCallData);

; is not needed here.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerMediaEndpoint.cpp:643
&gt; +WEBKIT_DEFINE_ASYNC_DATA_STRUCT(GStreamerMediaEndpointHolder);

Ditto.

&gt; Source/WebCore/Modules/mediastream/gstreamer/GStreamerStatsCollector.cpp:241
&gt; +WEBKIT_DEFINE_ASYNC_DATA_STRUCT(CallbackHolder);

Ditto.

&gt; Source/WebCore/platform/mediastream/gstreamer/RealtimeOutgoingMediaSourceGStreamer.cpp:148
&gt; +    m_sender.clear();

Ditto.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852704</commentid>
    <comment_count>56</comment_count>
      <attachid>455092</attachid>
    <who name="Philippe Normand">pnormand</who>
    <bug_when>2022-03-18 07:24:33 -0700</bug_when>
    <thetext>Created attachment 455092
[fast-cq] Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852707</commentid>
    <comment_count>57</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2022-03-18 07:28:38 -0700</bug_when>
    <thetext>Committed r291483 (248597@main): &lt;https://commits.webkit.org/248597@main&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 455092.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1852708</commentid>
    <comment_count>58</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2022-03-18 07:29:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/90484592&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451786</attachid>
            <date>2022-02-12 10:23:12 -0800</date>
            <delta_ts>2022-02-13 03:06:02 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220212102310.patch</filename>
            <type>text/plain</type>
            <size>323502</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5Njk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDViNzM1NDcwMWNmNmE2ZTdiYTI5NzUw
N2Q2OWZjMjMzZTVjODIwYzIuLjMyNWFiNTNkMDkxZjM2MDY4OTRmYzUzZjA5MWJiZDE5NGY0OTA2
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAyLTEyICBFcmljIENhcmxzb24gIDxlcmlj
LmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gVXNlIHN5c3RlbSB3aW5kb3cg
YW5kIHNjcmVlbiBwaWNrZXIgd2hlbiBhdmFpbGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZDkwMzIyMWY3
ODIwYjFlYjY5YWEwN2U1ZWU5Y2JhOTMxY2Y1MzQ2Li5kNTA5YTgwMTY0MWRiYzRmMDNiMDQ5OTMz
ZDBkMzk2ZjQ1MDA5Y2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzc0IEBACisyMDIyLTAyLTEy
ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0
cmVhbWVyXSBJbml0aWFsIGltcG9ydCBvZiB0aGUgR3N0V2ViUlRDIGJhY2tlbmQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluaXRpYWwgR3N0V2ViUlRD
IGJhY2tlbmQuIEEgbG90IG9mIGZlYXR1cmVzIHVuaW1wbGVtZW50ZWQgc3RpbGwsIGJ1dCB3ZSB3
aWxsIGluY3JlbWVudGFsbHkKKyAgICAgICAgaW1wcm92ZSB0aGUgbGF5b3V0IHRlc3QgY292ZXJh
Z2UgaW4gZm9sbG93LXVwIHBhdGNoZXMuIE1vc3Qgbm90YWJsZSBzaG9ydC1jb21pbmdzIGN1cnJl
bnRseToKKworICAgICAgICAtIERhdGFDaGFubmVsIHN1cHBvcnQgaXMgaW5jb21wbGV0ZSAoYnVn
IDIzNTg3OSkKKyAgICAgICAgLSBOZXR3b3JrIHRyYWZmaWMgbm90IHJvdXRlZCB0aHJvdWdoIE5l
dHdvcmsgcHJvY2VzcyB5ZXQKKyAgICAgICAgLSBTdGF0cyBzdXBwb3J0IGluY29tcGxldGUKKyAg
ICAgICAgLSBEVE1GIHN1cHBvcnQgdW5pbXBsZW1lbnRlZAorICAgICAgICAtIElDRSByZXN0YXJ0
cyBub3Qgc3VwcG9ydGVkIHlldAorICAgICAgICAtIFJlLW5lZ290aWF0aW9uIHVubGlrZWx5IHRv
IHdvcmsKKyAgICAgICAgLSBTaW11bGNhc3Qgbm90IGhhbmRsZWQgeWV0CisgICAgICAgIC0gQmFs
YW5jZWQgYnVuZGxlIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgLSBSVFggYW5kIEZFQyB1bi10ZXN0
ZWQsIGJ1dCBzaG91bGRuJ3QgYmUgaGFyZCB0byBmaXgKKworICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ6OmdlbmVyYXRlQ2VydGlmaWNhdGUpOgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVl
ckNvbm5lY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmZyb21SVENEYXRhQ2hhbm5lbElu
aXQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGFu
bmVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
OjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyOjp+R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2V0Q2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFN0cmlu
Z0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpz
ZW5kUmF3RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxl
cjo6Y2hlY2tTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6OnJlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRh
dGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uTWVzc2FnZVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uRXJyb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbkJ1ZmZlcmVkQW1vdW50TG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6cG9zdFRhc2sp
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckR0bHNU
cmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kOjp+R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydEJhY2tlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lz
dGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNr
ZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNU
cmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmg6IEFkZGVkLgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRy
YW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZDo6aWNlVHJhbnNwb3J0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpnYXRoZXJpbmdT
dGF0ZUNoYW5nZWQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0
aWFsaXplUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6fkdTdHJlYW1lck1lZGlhRW5kcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6dGVhcmRvd25QaXBlbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpoYW5kbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRpc3Bvc2VFbGVtZW50Q2hhaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0Q29uZmlndXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXN0YXJ0SWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZldGNoRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZmV0Y2hTaWdu
YWxpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmlu
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvU2V0TG9jYWxE
ZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpz
ZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Ojpkb1NldFJlbW90ZURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNldERlc2NyaXB0aW9uQ2FsbERhdGE6OlNldERlc2NyaXB0aW9uQ2FsbERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0RGVzY3JpcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcmVSZW1vdGVNTGlu
ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y29uZmln
dXJlQW5kTGlua1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpyZXF1ZXN0UGFkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmFkZFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OnJlbW92ZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmRvQ3JlYXRlT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6ZG9DcmVhdGVBbnN3ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6aW5pdGlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6Z2V0U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
bWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmFkZFJlbW90ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVSZW1vdGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFuc2NlaXZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTb3VyY2VGb3JU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRTZW5k
ZXJTb3VyY2VGcm9tVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6dHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRJY2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlRGF0YUNoYW5uZWwpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25EYXRhQ2hhbm5lbCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjbG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6Om9uTmVnb3RpYXRpb25OZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDb25uZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlR2F0aGVyaW5nQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlQ2FuZGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25E
ZXNjcmlwdGlvblN1Y2NlZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y29sbGVjdFRyYW5zY2VpdmVycyk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnYXRoZXJTdGF0c0ZvckxvZ2dpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI6OlJUQ1N0YXRzTG9nZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyOjp0b0pTT05TdHJpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cHJvY2Vzc1N0YXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uU3RhdHNEZWxpdmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RhcnRMb2dnaW5n
U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcExv
Z2dpbmdTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojps
b2dDaGFubmVsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OnN0YXRzTG9nSW50ZXJ2YWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZSk6CisgICAgICAg
IChXVEY6OkxvZ0FyZ3VtZW50PFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyPjo6dG9TdHJpbmcpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5k
cG9pbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aXNT
dG9wcGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmlzTmVnb3RpYXRpb25OZWVkZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6cGlwZWxpbmUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVjZWl2ZXJDYXBh
YmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzZW5k
ZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzdXNwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVzdW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVzdGFydEljZSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldENv
bmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpnZXRTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpiYWNrZW5kRnJvbVJUUFNlbmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRv
U2V0TG9jYWxEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmRvU2V0UmVtb3RlRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0ZU9mZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9DcmVhdGVBbnN3
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpj
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OmRvU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZEV4aXN0aW5nU2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlckZyb21U
cmFja09yS2luZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OmFkZFRyYW5zY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZDo6c2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OmJhY2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpleGlzdGluZ1RyYW5zY2VpdmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6bmV3UmVtb3RlVHJh
bnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjpjb2xsZWN0VHJhbnNjZWl2ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6cmVtb3ZlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRl
b1NvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6aXNOZWdvdGlhdGlvbk5lZWRlZCBjb25z
dCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0Q29u
dHJpYnV0aW5nU291cmNlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBS
ZWNlaXZlckJhY2tlbmQ6OmdldFN5bmNocm9uaXphdGlvblNvdXJjZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpjcmVhdGVTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpydGNSdHBUcmFu
c2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFj
a2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRy
YW5zZm9ybUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhVHlwZUZy
b21SZWNlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5z
Zm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6On5HU3Ry
ZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9y
bUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVk
LgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNl
bmRlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVRyYWNrU291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0YXJ0
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0
b3BTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6
cmVwbGFjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQ6OmdldFBhcmFtZXRlcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRw
U2VuZGVyQmFja2VuZDo6c2V0UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kOjpjcmVhdGVEVE1GQmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnNldE1lZGlhU3RyZWFt
SWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmR0bHNU
cmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhVHlwZUZyb21TZW5kZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVh
bWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3Jt
QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1C
YWNrZW5kOjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJhbWUpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRl
clRyYW5zZm9ybUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OkdTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVJlY2VpdmVyQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVNlbmRlckJhY2tlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpkaXJl
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kOjpjdXJyZW50RGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c2V0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6bWlkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c3RvcCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnN0b3BwZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXRDb2RlY1By
ZWZlcmVuY2VzKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6c2V0
SW5wdXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1C
YWNrZW5kOjpjbGVhclRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OnByb2Nlc3NUcmFuc2Zvcm1lZEZyYW1l
KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBU
cmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRw
VHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJh
Y2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDU2N0cFRyYW5zcG9ydFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpH
U3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpkdGxzVHJh
bnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tl
bmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbGxS
VENTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUlRDUlRQU3RyZWFtU3RhdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsbFJUQ0NvZGVjU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6Zmls
bEluYm91bmRSVFBTdHJlYW1TdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsT3V0Ym91bmRS
VFBTdHJlYW1TdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUlRDUGVlckNvbm5lY3Rpb25T
dGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUlRDVHJhbnNwb3J0U3RhdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmlsbFJlcG9ydENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxi
YWNrSG9sZGVyOjpDYWxsYmFja0hvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJT
dGF0c0NvbGxlY3Rvcjo6Z2V0U3RhdHMpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6c2V0RWxlbWVudCk6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OnRvUlRDSWNlUHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VUY3BDYW5kaWRh
dGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlQ2FuZGlkYXRlVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1JUQ0Vycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRvV2ViUlRDQml0
UmF0ZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmZyb21SVENFbmNvZGluZ1BhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVdlYlJUQ0JpdFJhdGVQcmlvcml0eSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1JUQ0VuY29kaW5nUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmVuc3VyZURlYnVn
Q2F0ZWdvcnlJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUljZUNhbmRpZGF0
ZVNEUCk6CisgICAgICAgIChXZWJDb3JlOjp4NTA5U2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OnByaXZhdGVLZXlTZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVDZXJ0
aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZHBNZWRpYUhhc0F0dHJpYnV0ZUtleSk6Cisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRp
bHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZyb21SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjp0b1Nlc3Npb25EZXNjcmlwdGlvblR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6ZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
dG9TaWduYWxpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZUNvbm5lY3Rpb25T
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0R0bHNUcmFuc3BvcnRTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1JUQ0ljZVRyYW5zcG9ydFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvUlRDSWNlR2F0aGVyaW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6YnVuZGxlUG9saWN5
RnJvbUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6aWNlVHJhbnNwb3J0UG9saWN5
RnJvbUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENFcnJvckRldGFpbFR5
cGUpOgorICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpBdWRpb1NvdXJj
ZVByb3ZpZGVyR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlk
ZXJHU3RyZWFtZXI6On5BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OmhhbmRsZU5ld0RlaW50ZXJsZWF2
ZVBhZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1JlZlB0ckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXVEY6OmFkb3B0R1JlZik6CisgICAg
ICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6
ZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8
R3N0V2ViUlRDUlRQU2VuZGVyPik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENS
VFBTZW5kZXI+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZl
cj4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KToK
KyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4pOgorICAgICAgICAo
V1RGOjpkZXJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+KToKKyAgICAgICAgKFdURjo6cmVm
R1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0Pik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxH
c3RXZWJSVENEVExTVHJhbnNwb3J0Pik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRD
SUNFVHJhbnNwb3J0Pik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFu
c3BvcnQ+KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdT
dHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fwc01lZGlhVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlQXVkaW9T
b3VyY2VQcm92aWRlcik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
QXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpjcmVhdGVDb252ZXJ0ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJDYXB0dXJlcjo6Y3JlYXRlU291cmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tl
bmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNr
ZW5kOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6fkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpjYW5JbnNlcnREVE1G
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpwbGF5VG9u
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6dG9uZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmR1
cmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNr
ZW5kOjppbnRlclRvbmVHYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRN
RlNlbmRlckJhY2tlbmQ6Om9uVG9uZVBsYXllZCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVh
bVNvdXJjZS5jcHA6CisgICAgICAgICh3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFRyYWNrKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNv
ZGVyLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJydGNfdmlkZW9fZW5jb2Rlcl9jbGFzc19pbml0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXI6On5SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
OjpzdGFydFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWlu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNhcGFiaWxpdGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6
OnNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpS
ZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmxvY2tWYWx2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpyZWxlYXNlVmFsdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6
cmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6YmluKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6
Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXR0aW5nc0RpZENoYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNoU2Ft
cGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUpOgorICAgICAgICAo
aXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6UmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXI6OnNldFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c3RvcCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZU11dGVkQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXI6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6aW5pdGlhbGl6ZUZyb21UcmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6Omxpbmsp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
OjpzZXRTaW5rUGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyOjphbGxvd2VkQ2FwcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdv
aW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnBhZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNlbmRlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmJpbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6
OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJu
YWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0
KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0V2ViUlRDVlA5U3VwcG9ydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFdlYlJUQ1ZQOVZUQlN1cHBvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbmFibGVXZWJSVENFbmNyeXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0VXNlRFRMUzEwKToKKwogMjAyMi0wMi0xMiAg
RXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1Nd
IFVzZSBzeXN0ZW0gd2luZG93IGFuZCBzY3JlZW4gcGlja2VyIHdoZW4gYXZhaWxhYmxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFt
bCBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlcy55YW1sCmlu
ZGV4IGU3OWM3ZDkyZDEyOGE4NjY4ZjM0YzMyNDE4NTM5MTQ2MzMxZjJlY2UuLjk1NWFmNmE4Zjkw
NGU1Yzk3YjE1MzFlOWVkYWRhNzE1ZjljZTJmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvU2Ny
aXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlcy55YW1sCisrKyBiL1NvdXJjZS9XVEYvU2Ny
aXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlcy55YW1sCkBAIC0xNjgyLDcgKzE2ODIsOSBA
QCBQZWVyQ29ubmVjdGlvbkVuYWJsZWQ6CiAgICAgV2ViS2l0TGVnYWN5OgogICAgICAgZGVmYXVs
dDogdHJ1ZQogICAgIFdlYktpdDoKLSAgICAgIGRlZmF1bHQ6IFdlYkNvcmU6OkxpYldlYlJUQ1By
b3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUoKQorICAgICAgIlVTRShMSUJXRUJSVEMpIjogV2ViQ29y
ZTo6TGliV2ViUlRDUHJvdmlkZXI6OndlYlJUQ0F2YWlsYWJsZSgpCisgICAgICAiVVNFKEdTVFJF
QU1FUl9XRUJSVEMpIjogdHJ1ZQorICAgICAgZGVmYXVsdDogZmFsc2UKICAgICBXZWJDb3JlOgog
ICAgICAgZGVmYXVsdDogdHJ1ZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJl
ZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbCBiL1NvdXJjZS9XVEYvU2Ny
aXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCmluZGV4IDQ3
NzUwZWNmOTBlODc5NTYyMzhhYTBkYjc2YmMwMDQ0ZTNkMzY3NDAuLjI4NjNiYjg4Y2QwNWU0Yzdi
YzgwYmM3N2FiZDQ4OThkZWNjM2E3YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvU2NyaXB0cy9Q
cmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCisrKyBiL1NvdXJjZS9X
VEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCkBA
IC0xNjczLDkgKzE2NzMsMTEgQEAgV2ViUlRDRW5jb2RlZFRyYW5zZm9ybUVuYWJsZWQ6CiAgICAg
V2ViS2l0TGVnYWN5OgogICAgICAgZGVmYXVsdDogZmFsc2UKICAgICBXZWJLaXQ6Ci0gICAgICBk
ZWZhdWx0OiB0cnVlCisgICAgICAiVVNFKExJQldFQlJUQykiOiB0cnVlCisgICAgICBkZWZhdWx0
OiBmYWxzZQogICAgIFdlYkNvcmU6Ci0gICAgICBkZWZhdWx0OiB0cnVlCisgICAgICAiVVNFKExJ
QldFQlJUQykiOiB0cnVlCisgICAgICBkZWZhdWx0OiBmYWxzZQogCiAjIEZJWE1FOiBJcyB0aGlz
IGltcGxlbWVudGVkIGZvciBXZWJLaXRMZWdhY3k/IElmIG5vdCwgdGhpcyBzaG91bGQgYmUgZXhj
bHVkZWQgZnJvbSBXZWJLaXRMZWdhY3kgZW50aXJlbHkuCiBXZWJSVENIMjY0TG93TGF0ZW5jeUVu
Y29kZXJFbmFibGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAKaW5kZXggMWI5YWRlM2Y5MzZlZTU2
NGQzODJjMDdlZjk2NjU3NmFiNjYxOWI0MS4uOTMxMmEzZTg5NGJkOGEwZDdhMTFhNmE0NWNjYmQz
Njg3M2Y4YzUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuY3BwCkBAIC0yMjMsNiArMjIzLDIyIEBA
IHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdVcmkqIHB0cikKIH0KICNlbmRpZgogCit0ZW1w
bGF0ZSA8PgorR0FycmF5KiByZWZHUHRyKEdBcnJheSogcHRyKQoreworICAgIGlmIChwdHIpCisg
ICAgICAgIGdfYXJyYXlfcmVmKHB0cik7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0
ZSA8Pgordm9pZCBkZXJlZkdQdHIoR0FycmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAg
ICAgZ19hcnJheV91bnJlZihwdHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlm
IC8vIFVTRShHTElCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuaAppbmRleCBlNzIxZmQ1NWY0MmFjM2Q3NmI0
MDE3NjBlMGExOWI5OWZlM2UwZjhiLi42NjczNjA3ODdhYzVmNjQ5NjBiZTFkNTQ2MmRkZTU5ZDcz
NTVmNmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuaApAQCAtMjUwLDYgKzI1MCw4IEBAIHRlbXBsYXRl
IDw+IFdURl9FWFBPUlRfUFJJVkFURSBHRGF0ZVRpbWUqIHJlZkdQdHIoR0RhdGVUaW1lKiBwdHIp
OwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdEYXRlVGlt
ZSogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHREJ1c05vZGVJbmZvKiBy
ZWZHUHRyKEdEQnVzTm9kZUluZm8qIHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkZXJlZkdQdHIoR0RCdXNOb2RlSW5mbyogcHRyKTsKK3RlbXBsYXRlIDw+IFdURl9F
WFBPUlRfUFJJVkFURSBHQXJyYXkqIHJlZkdQdHIoR0FycmF5Kik7Cit0ZW1wbGF0ZSA8PiBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIoR0FycmF5Kik7CiAKICNpZiBIQVZFKEdVUkkp
CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgR1VyaSogcmVmR1B0cihHVXJpKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNl
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5j
cHAKaW5kZXggNTA2ZjMzNzRiN2U2ZDc2ZDU5OGY0OTUzZDg0OWMzOGVhYWM3MjdlOS4uN2I5YjVi
NjZkYTUxNTMyNGU2NjZjZjRiMWJhM2Y1Y2QyZmFlMGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcApAQCAtNDAsNiArNDAs
NyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQu
aCIKICNpbmNsdWRlICJKU01lZGlhRGV2aWNlSW5mby5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIK
ICNpbmNsdWRlICJNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMuaCIKICNpbmNsdWRlICJS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlv
bkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29u
bmVjdGlvbkJhY2tlbmQuY3BwCmluZGV4IDg2ZDc1NzM5OTJmNGQ1YmQ0YzM1M2RjYjYwOTcyNjRl
OTg1ZDU3ZTguLmRhYTkyNDM2YmJmZDhkYWUyMTI4NDk3Mzk0MzMzZWYwODdhMWNjMGMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25C
YWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJD
b25uZWN0aW9uQmFja2VuZC5jcHAKQEAgLTM1LDcgKzM1LDYgQEAKICNpZiBFTkFCTEUoV0VCX1JU
QykKIAogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKLSNpbmNsdWRlICJKU1JUQ0NlcnRpZmljYXRl
LmgiCiAjaW5jbHVkZSAiTGliV2ViUlRDQ2VydGlmaWNhdGVHZW5lcmF0b3IuaCIKICNpbmNsdWRl
ICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiUGFnZS5oIgpAQCAtNTMsOSArNTIsMTUgQEAKICNpbmNs
dWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5n
Q29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNs
dWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgIkpTUlRDQ2VydGlmaWNhdGUu
aCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiAhVVNFKExJQldFQlJUQykK
KyNpZiAhVVNFKExJQldFQlJUQykgJiYgIVVTRShHU1RSRUFNRVJfV0VCUlRDKQorCiBzdGF0aWMg
c3RkOjp1bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3JlYXRlTm9QZWVyQ29ubmVj
dGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mKQogewogICAgIHJldHVybiBudWxscHRyOwpA
QCAtNDM3LDEzICs0NDIsMTkgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdlbmVyYXRl
Q2VydGlmaWNhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBDZXJ0aWYKICAgICAgICAgcHJv
bWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQor
CiAgICAgTGliV2ViUlRDQ2VydGlmaWNhdGVHZW5lcmF0b3I6OmdlbmVyYXRlQ2VydGlmaWNhdGUo
ZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKSwgaW5m
bywgW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsK
ICAgICAgICAgcHJvbWlzZS5zZXR0bGUoV1RGTW92ZShyZXN1bHQpKTsKICAgICB9KTsKKyNlbGlm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorICAgIGF1dG8gY2VydGlmaWNhdGUgPSA6OldlYkNvcmU6
OmdlbmVyYXRlQ2VydGlmaWNhdGUoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwgaW5mbyk7Cisg
ICAgaWYgKGNlcnRpZmljYXRlLmhhc192YWx1ZSgpKQorICAgICAgICBwcm9taXNlLnJlc29sdmUo
KmNlcnRpZmljYXRlKTsKKyAgICBlbHNlCisgICAgICAgIHByb21pc2UucmVqZWN0KE5vdFN1cHBv
cnRlZEVycm9yKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKLSAgICBVTlVT
RURfUEFSQU0oZXhwaXJlcyk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9Q
QVJBTShpbmZvKTsKICAgICBwcm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7CiAjZW5k
aWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggNWJkZGZlYzdlNGRmYzlkOWMwMjk5YzllMjdjYTlk
YzIyZGY2NDEwNC4uOTBkZTYzOTkzNGVkNjFjNWMwYjEwMTJjMGFhNTM5N2RkMGQ4YjMyYSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJUQ1BlZXJD
b25uZWN0aW9uPj4gUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQK
ICAgICBpZiAoIXBlZXJDb25uZWN0aW9uLT5pc0Nsb3NlZCgpKSB7CiAgICAgICAgIGlmIChhdXRv
KiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKSB7CiAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi0+
cmVnaXN0ZXJUb0NvbnRyb2xsZXIocGFnZS0+cnRjQ29udHJvbGxlcigpKTsKLSNpZiAhTE9HX0RJ
U0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorI2lmIFVTRShMSUJXRUJSVEMpICYmICgh
TE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRCkKICAgICAgICAgICAgIGlmICgh
cGFnZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgICAgICAgICBwYWdlLT5s
aWJXZWJSVENQcm92aWRlcigpLnNldExvZ2dpbmdMZXZlbChMb2dXZWJSVEMubGV2ZWwpOwogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5jMzM1Y2NhZTFiMTMzM2Y4NDY5MGY1Y2I5ZDJhOGZiN2FkOTIyMjNmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcApAQCAtMCwwICsxLDMwMSBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIgorCisjaWYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
V2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbC5oIgorI2luY2x1ZGUgIlJU
Q0RhdGFDaGFubmVsRXZlbnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgorI2luY2x1ZGUgIlJU
Q1ByaW9yaXR5VHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworR1NUX0RF
QlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZp
bmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gR1N0cmVhbWVyRGF0YUNo
YW5uZWxIYW5kbGVyOjpmcm9tUlRDRGF0YUNoYW5uZWxJbml0KGNvbnN0IFJUQ0RhdGFDaGFubmVs
SW5pdCYgb3B0aW9ucykKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaW5pdChnc3Rf
c3RydWN0dXJlX25ldygib3B0aW9ucyIsICJwcm90b2NvbCIsIEdfVFlQRV9TVFJJTkcsIG9wdGlv
bnMucHJvdG9jb2wudXRmOCgpLmRhdGEoKSwgbnVsbHB0cikpOworCisgICAgaWYgKG9wdGlvbnMu
b3JkZXJlZCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgIm9yZGVyZWQi
LCBHX1RZUEVfQk9PTEVBTiwgKm9wdGlvbnMub3JkZXJlZCwgbnVsbHB0cik7CisgICAgaWYgKG9w
dGlvbnMubWF4UGFja2V0TGlmZVRpbWUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQu
Z2V0KCksICJtYXgtcGFja2V0LWxpZmV0aW1lIiwgR19UWVBFX0lOVCwgKm9wdGlvbnMubWF4UGFj
a2V0TGlmZVRpbWUsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25zLm1heFJldHJhbnNtaXRzKQor
ICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAibWF4LXJldHJhbnNtaXRzIiwg
R19UWVBFX0lOVCwgKm9wdGlvbnMubWF4UmV0cmFuc21pdHMsIG51bGxwdHIpOworICAgIGlmIChv
cHRpb25zLm5lZ290aWF0ZWQpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCks
ICJuZWdvdGlhdGVkIiwgR19UWVBFX0JPT0xFQU4sICpvcHRpb25zLm5lZ290aWF0ZWQsIG51bGxw
dHIpOworICAgIGlmIChvcHRpb25zLmlkKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0
LmdldCgpLCAiaWQiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5pZCwgbnVsbHB0cik7CisKKyAgICBH
c3RXZWJSVENQcmlvcml0eVR5cGUgcHJpb3JpdHlUeXBlOworICAgIHN3aXRjaCAob3B0aW9ucy5w
cmlvcml0eSkgeworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93OgorICAgICAgICBw
cmlvcml0eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfVkVSWV9MT1c7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpMb3c6CisgICAgICAgIHByaW9yaXR5
VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9MT1c7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpNZWRpdW06CisgICAgICAgIHByaW9yaXR5VHlwZSA9IEdT
VF9XRUJSVENfUFJJT1JJVFlfVFlQRV9NRURJVU07CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UlRDUHJpb3JpdHlUeXBlOjpIaWdoOgorICAgICAgICBwcmlvcml0eVR5cGUgPSBHU1RfV0VCUlRD
X1BSSU9SSVRZX1RZUEVfSElHSDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJwcmlvcml0eSIsIEdTVF9UWVBFX1dFQlJUQ19QUklPUklU
WV9UWVBFLCBwcmlvcml0eVR5cGUsIG51bGxwdHIpOworCisgICAgcmV0dXJuIGluaXQ7Cit9CisK
K1JlZjxSVENEYXRhQ2hhbm5lbEV2ZW50PiBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNo
YW5uZWxFdmVudChEb2N1bWVudCYgZG9jdW1lbnQsIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5u
ZWw+JiYgZGF0YUNoYW5uZWwpCit7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBsYWJlbDsKKyAg
ICBHVW5pcXVlT3V0UHRyPGNoYXI+IHByb3RvY29sOworICAgIGdib29sZWFuIG9yZGVyZWQsIG5l
Z290aWF0ZWQ7CisgICAgZ2ludCBtYXhQYWNrZXRMaWZlVGltZSwgbWF4UmV0cmFuc21pdHMsIGlk
OworICAgIGdfb2JqZWN0X2dldChkYXRhQ2hhbm5lbC5nZXQoKSwgIm9yZGVyZWQiLCAmb3JkZXJl
ZCwgImxhYmVsIiwgJmxhYmVsLm91dFB0cigpLAorICAgICAgICAibWF4LXBhY2tldC1saWZldGlt
ZSIsICZtYXhQYWNrZXRMaWZlVGltZSwgIm1heC1yZXRyYW5zbWl0cyIsICZtYXhSZXRyYW5zbWl0
cywKKyAgICAgICAgInByb3RvY29sIiwgJnByb3RvY29sLm91dFB0cigpLCAibmVnb3RpYXRlZCIs
ICZuZWdvdGlhdGVkLCAiaWQiLCAmaWQsIG51bGxwdHIpOworCisgICAgUlRDRGF0YUNoYW5uZWxJ
bml0IGluaXQ7CisgICAgaW5pdC5vcmRlcmVkID0gb3JkZXJlZDsKKyAgICBpbml0Lm1heFBhY2tl
dExpZmVUaW1lID0gbWF4UGFja2V0TGlmZVRpbWU7CisgICAgaW5pdC5tYXhSZXRyYW5zbWl0cyA9
IG1heFJldHJhbnNtaXRzOworICAgIGluaXQucHJvdG9jb2wgPSBTdHJpbmcocHJvdG9jb2wuZ2V0
KCkpOworICAgIGluaXQubmVnb3RpYXRlZCA9IG5lZ290aWF0ZWQ7CisgICAgaW5pdC5pZCA9IGlk
OworCisgICAgYXV0byBoYW5kbGVyID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lckRhdGFDaGFu
bmVsSGFuZGxlcj4oV1RGTW92ZShkYXRhQ2hhbm5lbCkpOworICAgIGF1dG8gY2hhbm5lbCA9IFJU
Q0RhdGFDaGFubmVsOjpjcmVhdGUoZG9jdW1lbnQsIFdURk1vdmUoaGFuZGxlciksIFN0cmluZyhs
YWJlbC5nZXQoKSksIFdURk1vdmUoaW5pdCkpOworICAgIHJldHVybiBSVENEYXRhQ2hhbm5lbEV2
ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLmRhdGFjaGFubmVsRXZlbnQsIEV2ZW50OjpDYW5CdWJi
bGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObywgV1RGTW92ZShjaGFubmVsKSk7Cit9CisK
K0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
KEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+JiYgY2hhbm5lbCkKKyAgICA6IG1fY2hhbm5l
bChXVEZNb3ZlKGNoYW5uZWwpKQoreworICAgIEFTU0VSVChtX2NoYW5uZWwpOworCisgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm5vdGlmeTo6cmVhZHktc3Rh
dGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIp
IHsKKyAgICAgICAgaGFuZGxlci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7
CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLW1lc3Nh
Z2UtZGF0YSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFu
ZGxlciwgR0J5dGVzKiBieXRlcykgeworICAgICAgICBoYW5kbGVyLT5vbk1lc3NhZ2VEYXRhKGJ5
dGVzKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hh
bm5lbC5nZXQoKSwgIm9uLW1lc3NhZ2Utc3RyaW5nIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBjaGFyKiBtZXNzYWdlKSB7CisgICAgICAgIGhh
bmRsZXItPm9uTWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLWVycm9yIiwgR19DQUxM
QkFDSygrW10oR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBHRXJyb3IqIGVy
cm9yKSB7CisgICAgICAgIGhhbmRsZXItPm9uRXJyb3IoZXJyb3IpOworICAgIH0pLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tYnVmZmVy
ZWQtYW1vdW50LWxvdyIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxl
ciogaGFuZGxlcikgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgdGhlIGFtb3Vu
dCBkZWx0YSBmcm9tIHdlYnJ0Y2JpbiB0byB0aGUgV2ViQ29yZSBoYW5kbGVyLgorICAgICAgICBo
YW5kbGVyLT5vbkJ1ZmZlcmVkQW1vdW50TG93KCk7CisgICAgfSksIHRoaXMpOworfQorCitHU3Ry
ZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6On5HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoKQor
eworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2NoYW5uZWwuZ2V0
KCksIHRoaXMpOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2V0Q2xp
ZW50KFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudCYgY2xpZW50LCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0SWRlbnRpZmllciBjb250ZXh0SWRlbnRpZmllcikKK3sKKyAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9jbGllbnRMb2NrIH07CisgICAgQVNTRVJUKCFtX2hhc0NsaWVudCk7CisgICAgbV9oYXND
bGllbnQgPSB0cnVlOworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0gJmNs
aWVudDsKKyAgICBtX2NvbnRleHRJZGVudGlmaWVyID0gY29udGV4dElkZW50aWZpZXI7CisKKyAg
ICBmb3IgKGF1dG8mIG1lc3NhZ2UgOiBtX2J1ZmZlcmVkTWVzc2FnZXMpIHsKKyAgICAgICAgc3dp
dGNoT24obWVzc2FnZSwgWyZdKFJlZjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiYgZGF0YSkgewor
ICAgICAgICAgICAgR1NUX0RFQlVHKCJOb3RpZnlpbmcgcXVldWVkIHJhdyBkYXRhIChzaXplOiAl
enUpIiwgZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGNsaWVudC5kaWRSZWNlaXZlUmF3RGF0
YShkYXRhLT5tYWtlQ29udGlndW91cygpLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgICAg
IH0sIFsmXShTdHJpbmcmIHRleHQpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiTm90aWZ5aW5n
IHF1ZXVlZCBzdHJpbmcgJXMiLCB0ZXh0LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNs
aWVudC5kaWRSZWNlaXZlU3RyaW5nRGF0YSh0ZXh0KTsKKyAgICAgICAgfSwgWyZdKFN0YXRlQ2hh
bmdlIHN0YXRlQ2hhbmdlKSB7CisgICAgICAgICAgICBpZiAoc3RhdGVDaGFuZ2UuZXJyb3IpIHsK
KyAgICAgICAgICAgICAgICBpZiAoYXV0byBydGNFcnJvciA9IHRvUlRDRXJyb3IoKnN0YXRlQ2hh
bmdlLmVycm9yKSkKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LmRpZERldGVjdEVycm9yKHJ0
Y0Vycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgR1NU
X0RFQlVHKCJEaXNwYXRjaGluZyBzdGF0ZSBjaGFuZ2UgdG8gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+
KHN0YXRlQ2hhbmdlLnN0YXRlKSk7CisgICAgICAgICAgICBjbGllbnQuZGlkQ2hhbmdlUmVhZHlT
dGF0ZShzdGF0ZUNoYW5nZS5zdGF0ZSk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBtX2J1ZmZl
cmVkTWVzc2FnZXMuY2xlYXIoKTsKK30KKworYm9vbCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6OnNlbmRTdHJpbmdEYXRhKGNvbnN0IENTdHJpbmcmIHRleHQpCit7CisgICAgR1NUX0RFQlVH
KCJTZW5kaW5nIHN0cmluZyAlcyIsIHRleHQuZGF0YSgpKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUobV9jaGFubmVsLmdldCgpLCAic2VuZC1zdHJpbmciLCB0ZXh0LmRhdGEoKSk7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5k
UmF3RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGF1dG8g
Ynl0ZXMgPSBhZG9wdEdSZWYoZ19ieXRlc19uZXcoZGF0YSwgbGVuZ3RoKSk7CisgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5lbC5nZXQoKSwgInNlbmQtZGF0YSIsIGJ5dGVzLmdldCgp
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6OmNsb3NlKCkKK3sKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9jaGFubmVsLmdldCgp
LCAiY2xvc2UiKTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNoZWNr
U3RhdGUoKQoreworICAgIEFTU0VSVChtX2NsaWVudExvY2suaXNIZWxkKCkpOworCisgICAgR3N0
V2ViUlRDRGF0YUNoYW5uZWxTdGF0ZSBjaGFubmVsU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1f
Y2hhbm5lbC5nZXQoKSwgInJlYWR5LXN0YXRlIiwgJmNoYW5uZWxTdGF0ZSwgbnVsbHB0cik7CisK
KyAgICBSVENEYXRhQ2hhbm5lbFN0YXRlIHN0YXRlOworICAgIHN3aXRjaCAoY2hhbm5lbFN0YXRl
KSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9ORVc6CisgICAgY2Fz
ZSBHU1RfV0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9DT05ORUNUSU5HOgorICAgICAgICBzdGF0
ZSA9IFJUQ0RhdGFDaGFubmVsU3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR1NUX1dFQlJUQ19EQVRBX0NIQU5ORUxfU1RBVEVfT1BFTjoKKyAgICAgICAgc3RhdGUg
PSBSVENEYXRhQ2hhbm5lbFN0YXRlOjpPcGVuOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdT
VF9XRUJSVENfREFUQV9DSEFOTkVMX1NUQVRFX0NMT1NJTkc6CisgICAgICAgIHN0YXRlID0gUlRD
RGF0YUNoYW5uZWxTdGF0ZTo6Q2xvc2luZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9DTE9TRUQ6CisgICAgICAgIHN0YXRlID0gUlRDRGF0
YUNoYW5uZWxTdGF0ZTo6Q2xvc2VkOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAo
IW1faGFzQ2xpZW50KSB7CisgICAgICAgIEdTVF9ERUJVRygiTm8gY2xpZW50IHlldCwgcXVldWVp
bmcgc3RhdGUiKTsKKyAgICAgICAgbV9idWZmZXJlZE1lc3NhZ2VzLmFwcGVuZChTdGF0ZUNoYW5n
ZSB7IHN0YXRlLCB7IH0gfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1f
Y2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoIkRpc3BhdGNoaW5nIHN0
YXRlIGNoYW5nZSB0byAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdGUpKTsKKyAgICBwb3N0VGFz
ayhbY2xpZW50ID0gbV9jbGllbnQsIHN0YXRlXSB7CisgICAgICAgIGNsaWVudC0+ZGlkQ2hhbmdl
UmVhZHlTdGF0ZShzdGF0ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyOjpyZWFkeVN0YXRlQ2hhbmdlZCgpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1f
Y2xpZW50TG9jayB9OworICAgIGNoZWNrU3RhdGUoKTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRh
Q2hhbm5lbEhhbmRsZXI6Om9uTWVzc2FnZURhdGEoR0J5dGVzKiBieXRlcykKK3sKKyAgICBMb2Nr
ZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisKKyAgICBpZiAoIW1faGFzQ2xpZW50KSB7Cisg
ICAgICAgIG1fYnVmZmVyZWRNZXNzYWdlcy5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoYnl0
ZXMpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9jbGllbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIGdzaXplIHNpemUgPSAwOworICAgIGNvbnN0IGF1dG8qIGRhdGEg
PSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGJ5dGVz
LCAmc2l6ZSkpOworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudCwgZGF0YSwgc2l6ZV0g
eworICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVSYXdEYXRhKGRhdGEsIHNpemUpOworICAgIH0p
OworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlU3RyaW5n
KGNoYXIqIHN0cmluZykKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisK
KyAgICBHU1RfREVCVUcoIkluY29taW5nIHN0cmluZzogJXMiLCBzdHJpbmcpOworICAgIENTdHJp
bmcgYnVmZmVyKHN0cmluZywgc3RybGVuKHN0cmluZykpOworICAgIGlmICghbV9oYXNDbGllbnQp
IHsKKyAgICAgICAgR1NUX0RFQlVHKCJObyBjbGllbnQgeWV0LCBrZWVwaW5nIGFzIGJ1ZmZlcmVk
IG1lc3NhZ2UiKTsKKyAgICAgICAgbV9idWZmZXJlZE1lc3NhZ2VzLmFwcGVuZChTdHJpbmc6OmZy
b21VVEY4KGJ1ZmZlcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2Ns
aWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHKCJEaXNwYXRjaGluZyBwYXls
b2FkIik7CisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50LCBidWZmZXIgPSBXVEZNb3Zl
KGJ1ZmZlcildIHsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlU3RyaW5nRGF0YShTdHJpbmc6
OmZyb21VVEY4KGJ1ZmZlcikpOworICAgICAgICBHU1RfREVCVUcoIkRvbmUiKTsKKyAgICB9KTsK
K30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uRXJyb3IoR0Vycm9yKiBl
cnJvcikKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisgICAgaWYgKCFt
X2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX1dBUk5JTkcoIkdvdCBkYXRhLWNo
YW5uZWwgZXJyb3IgJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgcG9zdFRhc2soW2NsaWVudCA9
IG1fY2xpZW50LCBlcnJvcl0geworICAgICAgICBpZiAoIWNsaWVudCB8fCAhZXJyb3IpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBydGNFcnJvciA9IHRvUlRDRXJyb3IoZXJy
b3IpOworICAgICAgICBpZiAoIXJ0Y0Vycm9yKQorICAgICAgICAgICAgcnRjRXJyb3IgPSBSVENF
cnJvcjo6Y3JlYXRlKFJUQ0Vycm9yOjpJbml0IHsgUlRDRXJyb3JEZXRhaWxUeXBlOjpEYXRhQ2hh
bm5lbEZhaWx1cmUsIHsgfSwgeyB9LCB7IH0sIHsgfSB9LCB7IH0pOworICAgICAgICBjbGllbnQt
PmRpZERldGVjdEVycm9yKHJ0Y0Vycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0pOworfQor
Cit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25CdWZmZXJlZEFtb3VudExvdygp
Cit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9OworICAgIGlmICghbV9jbGll
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudF0g
eworICAgICAgICAvLyBGSVhNRTogUGFzcyBhbW91bnQgdG8gaGFuZGxlciBpbnN0ZWFkIG9mIDAu
CisgICAgICAgIGNsaWVudC0+YnVmZmVyZWRBbW91bnRJc0RlY3JlYXNpbmcoMCk7CisgICAgfSk7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpwb3N0VGFzayhGdW5jdGlv
bjx2b2lkKCk+JiYgZnVuY3Rpb24pCit7CisgICAgQVNTRVJUKG1fY2xpZW50TG9jay5pc0hlbGQo
KSk7CisKKyAgICBpZiAoIW1fY29udGV4dElkZW50aWZpZXIpIHsKKyAgICAgICAgY2FsbE9uTWFp
blRocmVhZChXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAg
U2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cG9zdFRhc2tUbyhtX2NvbnRleHRJZGVudGlmaWVyLCBX
VEZNb3ZlKGZ1bmN0aW9uKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJE
YXRhQ2hhbm5lbEhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MzBhMDI2NDQ5M2UyN2ZjMGE0NjdiN2Y2
Y2E4YmFjNzBjODk0MDYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgKQEAg
LTAsMCArMSw4OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRD
RGF0YUNoYW5uZWxIYW5kbGVyLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxTdGF0ZS5oIgor
I2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgor
I2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFJUQ0RhdGFDaGFubmVsRXZl
bnQ7CitjbGFzcyBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQ7CitzdHJ1Y3QgUlRDRGF0YUNo
YW5uZWxJbml0OworCitjbGFzcyBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIgZmluYWwgOiBw
dWJsaWMgUlRDRGF0YUNoYW5uZWxIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoR1Jl
ZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4mJik7CisgICAgfkdTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlcigpOworCisgICAgc3RhdGljIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBmcm9tUlRD
RGF0YUNoYW5uZWxJbml0KGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpOworICAgIHN0YXRpYyBS
ZWY8UlRDRGF0YUNoYW5uZWxFdmVudD4gY2hhbm5lbEV2ZW50KERvY3VtZW50JiwgR1JlZlB0cjxH
c3RXZWJSVENEYXRhQ2hhbm5lbD4mJik7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIG9uTWVzc2Fn
ZURhdGEoR0J5dGVzKik7CisgICAgdm9pZCBvbk1lc3NhZ2VTdHJpbmcoY2hhciopOworICAgIHZv
aWQgb25FcnJvcihHRXJyb3IqKTsKKyAgICB2b2lkIG9uQnVmZmVyZWRBbW91bnRMb3coKTsKKyAg
ICB2b2lkIHJlYWR5U3RhdGVDaGFuZ2VkKCk7CisKK3ByaXZhdGU6CisgICAgLy8gUlRDRGF0YUNo
YW5uZWxIYW5kbGVyIEFQSQorICAgIHZvaWQgc2V0Q2xpZW50KFJUQ0RhdGFDaGFubmVsSGFuZGxl
ckNsaWVudCYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyKSBmaW5hbDsKKyAgICBi
b29sIHNlbmRTdHJpbmdEYXRhKGNvbnN0IENTdHJpbmcmKSBmaW5hbDsKKyAgICBib29sIHNlbmRS
YXdEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpIGZpbmFsOworICAgIHZvaWQgY2xvc2UoKSBm
aW5hbDsKKworICAgIHZvaWQgY2hlY2tTdGF0ZSgpOworICAgIHZvaWQgcG9zdFRhc2soRnVuY3Rp
b248dm9pZCgpPiYmKTsKKworICAgIHN0cnVjdCBTdGF0ZUNoYW5nZSB7CisgICAgICAgIFJUQ0Rh
dGFDaGFubmVsU3RhdGUgc3RhdGU7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8R0Vycm9yKj4gZXJy
b3I7CisgICAgfTsKKyAgICB1c2luZyBNZXNzYWdlID0gc3RkOjp2YXJpYW50PFN0YXRlQ2hhbmdl
LCBTdHJpbmcsIFJlZjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj47CisgICAgdXNpbmcgUGVuZGlu
Z01lc3NhZ2VzID0gVmVjdG9yPE1lc3NhZ2U+OworCisgICAgTG9jayBtX2NsaWVudExvY2s7Cisg
ICAgR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4gbV9jaGFubmVsOworICAgIFdlYWtQdHI8
UlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50PiBtX2NsaWVudCBXVEZfR1VBUkRFRF9CWV9MT0NL
KG1fY2xpZW50TG9jaykgeyBudWxscHRyIH07CisgICAgYm9vbCBtX2hhc0NsaWVudCBXVEZfR1VB
UkRFRF9CWV9MT0NLKG1fY2xpZW50TG9jaykgeyBmYWxzZSB9OworICAgIFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHRJZGVudGlmaWVyIG1fY29udGV4dElkZW50aWZpZXI7CisgICAgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4gbV9wcmV2aW91c0J1ZmZlcmVkQW1vdW50OworICAgIFBlbmRpbmdNZXNzYWdl
cyBtX2J1ZmZlcmVkTWVzc2FnZXMgV1RGX0dVQVJERURfQllfTE9DSyhtX2NsaWVudExvY2spOwor
CisgICAgTG9jayBtX29wZW5Mb2NrOworICAgIENvbmRpdGlvbiBtX29wZW5Db25kaXRpb24gV1RG
X0dVQVJERURfQllfTE9DSyhtX29wZW5Mb2NrKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5z
cG9ydEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMWZj
MDE2MDRhYjQxMDQ2NGRmZDQzMWM3NGI5MDM5YTI0MDNmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxz
VHJhbnNwb3J0QmFja2VuZC5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckR0
bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0
Q29yZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6R1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJh
bnNwb3J0PiYgdHJhbnNwb3J0KQorICAgIDogbV9iYWNrZW5kKHRyYW5zcG9ydCkKK3sKKyAgICBB
U1NFUlQobV9iYWNrZW5kKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworfQorCitHU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5k
KCkKK3sKKyAgICB1bnJlZ2lzdGVyQ2xpZW50KCk7Cit9CisKK1VuaXF1ZVJlZjxSVENJY2VUcmFu
c3BvcnRCYWNrZW5kPiBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0
QmFja2VuZCgpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R1N0cmVhbWVySWNlVHJhbnNw
b3J0QmFja2VuZD4obV9iYWNrZW5kKTsKK30KKwordm9pZCBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0
QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFt
X2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKG1fYmFja2VuZC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NBTExCQUNLKCtbXShH
U3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5k
LT5zdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQoKQoreworICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2JhY2tlbmQuZ2V0KCksIHRoaXMpOworICAgIG1f
Y2xpZW50LnJlc2V0KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6
OnN0YXRlQ2hhbmdlZCgpCit7CisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3RoaXNdIHsK
KyAgICAgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBH
VW5pcXVlT3V0UHRyPGNoYXI+IHJlbW90ZUNlcnRpZmljYXRlOworICAgICAgICBHVW5pcXVlT3V0
UHRyPGNoYXI+IGNlcnRpZmljYXRlOworICAgICAgICBHc3RXZWJSVENEVExTVHJhbnNwb3J0U3Rh
dGUgc3RhdGU7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0KG1fYmFja2VuZC5nZXQoKSwgInN0YXRl
IiwgJnN0YXRlLCAicmVtb3RlLWNlcnRpZmljYXRlIiwgJnJlbW90ZUNlcnRpZmljYXRlLm91dFB0
cigpLCAiY2VydGlmaWNhdGUiLCAmY2VydGlmaWNhdGUub3V0UHRyKCksIG51bGxwdHIpOworCisg
ICAgICAgIFZlY3RvcjxSZWY8SlNDOjpBcnJheUJ1ZmZlcj4+IGNlcnRpZmljYXRlczsKKyAgICAg
ICAgY2VydGlmaWNhdGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisgICAgICAgIGlmIChy
ZW1vdGVDZXJ0aWZpY2F0ZSkgeworICAgICAgICAgICAgYXV0byByZW1vdGVDZXJ0aWZpY2F0ZVN0
cmluZyA9IG1ha2VTdHJpbmcocmVtb3RlQ2VydGlmaWNhdGUuZ2V0KCkpOworICAgICAgICAgICAg
YXV0byBqc1JlbW90ZUNlcnRpZmljYXRlID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKHJlbW90
ZUNlcnRpZmljYXRlU3RyaW5nLmNoYXJhY3RlcnM4KCksIHJlbW90ZUNlcnRpZmljYXRlU3RyaW5n
LnNpemVJbkJ5dGVzKCkpOworICAgICAgICAgICAgY2VydGlmaWNhdGVzLmFwcGVuZChXVEZNb3Zl
KGpzUmVtb3RlQ2VydGlmaWNhdGUpKTsKKworICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZVN0
cmluZyA9IG1ha2VTdHJpbmcoY2VydGlmaWNhdGUuZ2V0KCkpOworICAgICAgICAgICAgYXV0byBq
c0NlcnRpZmljYXRlID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNlcnRpZmljYXRlU3RyaW5n
LmNoYXJhY3RlcnM4KCksIGNlcnRpZmljYXRlU3RyaW5nLnNpemVJbkJ5dGVzKCkpOworICAgICAg
ICAgICAgY2VydGlmaWNhdGVzLmFwcGVuZChXVEZNb3ZlKGpzQ2VydGlmaWNhdGUpKTsKKyAgICAg
ICAgfQorICAgICAgICAoKm1fY2xpZW50KS0+b25TdGF0ZUNoYW5nZWQodG9SVENEdGxzVHJhbnNw
b3J0U3RhdGUoc3RhdGUpLCBXVEZNb3ZlKGNlcnRpZmljYXRlcykpOworICAgIH0pOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1Ry
YW5zcG9ydEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzI1NGJjODQ3ZGE3OTE2N2I4ZmMxOTQ5YjMw
NGUxNzg3Y2VkNWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaApAQCAt
MCwwICsxLDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2lu
Y2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJSVENEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDRHRsc1RyYW5zcG9y
dEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFj
a2VuZD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgZXhw
bGljaXQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJS
VENEVExTVHJhbnNwb3J0PiYpOworICAgIH5HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCgp
OworCisgICAgdm9pZCBzdGF0ZUNoYW5nZWQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENEdGxz
VHJhbnNwb3J0QmFja2VuZAorICAgIGNvbnN0IHZvaWQqIGJhY2tlbmQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKyAgICBVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0
QmFja2VuZD4gaWNlVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworICAgIHZvaWQgcmVnaXN0ZXJD
bGllbnQoQ2xpZW50JikgZmluYWw7CisgICAgdm9pZCB1bnJlZ2lzdGVyQ2xpZW50KCkgZmluYWw7
CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IG1fYmFja2VuZDsKKyAgICBz
dGQ6Om9wdGlvbmFsPFdlYWtQdHI8Q2xpZW50Pj4gbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJh
Y2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA5NGU2YjMzNzgyMDQ0M2IxODM5Nzk2MThmZjhmYTIzYjYy
ZjUxN2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcApAQCAtMCwwICsx
LDEyNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaCIKKworI2lmIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJl
YW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIu
aD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVySWNlVHJhbnNwb3J0
QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+JiB0cmFuc3BvcnQp
CisgICAgOiBtX2JhY2tlbmQodHJhbnNwb3J0KQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOwor
CisgICAgaWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZChtX2JhY2tlbmQuZ2V0KCksICJub3RpZnk6OnRyYW5zcG9ydCIsIEdfQ0FMTEJBQ0soK1tdKEdT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+
aWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsKK30KKworR1N0cmVhbWVySWNl
VHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQoKQoreworICAg
IGlmIChHX0lTX09CSkVDVChtX2ljZVRyYW5zcG9ydC5nZXQoKSkpCisgICAgICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2ljZVRyYW5zcG9ydC5nZXQoKSwgdGhpcyk7
CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fYmFja2VuZC5nZXQo
KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJh
bnNwb3J0Q2hhbmdlZCgpCit7CisgICAgaWYgKEdfSVNfT0JKRUNUKG1faWNlVHJhbnNwb3J0Lmdl
dCgpKSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1faWNl
VHJhbnNwb3J0LmdldCgpLCB0aGlzKTsKKworICAgIGdfb2JqZWN0X2dldChtX2JhY2tlbmQuZ2V0
KCksICJ0cmFuc3BvcnQiLCAmbV9pY2VUcmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworCisg
ICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1faWNlVHJhbnNwb3J0LmdldCgpLCAibm90aWZ5
OjpzdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJh
Y2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMp
OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgIm5v
dGlmeTo6Z2F0aGVyaW5nLXN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVySWNlVHJhbnNw
b3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5kLT5nYXRoZXJpbmdTdGF0ZUNo
YW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0
QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFt
X2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBHc3RXZWJSVENJQ0VDb25u
ZWN0aW9uU3RhdGUgdHJhbnNwb3J0U3RhdGU7CisgICAgR3N0V2ViUlRDSUNFR2F0aGVyaW5nU3Rh
dGUgZ2F0aGVyaW5nU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1faWNlVHJhbnNwb3J0LmdldCgp
LCAic3RhdGUiLCAmdHJhbnNwb3J0U3RhdGUsICJnYXRoZXJpbmctc3RhdGUiLCAmZ2F0aGVyaW5n
U3RhdGUsIG51bGxwdHIpOworCisgICAgLy8gV2Ugc3RhcnQgb2JzZXJ2aW5nIGEgYml0IGxhdGUg
YW5kIG1pZ2h0IG1pc3MgdGhlIGNoZWNraW5nIHN0YXRlLiBTeW50aGVzaXplIGl0IGFzIG5lZWRl
ZC4KKyAgICBpZiAodHJhbnNwb3J0U3RhdGUgPiBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NU
QVRFX0NIRUNLSU5HICYmIHRyYW5zcG9ydFN0YXRlICE9IEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJ
T05fU1RBVEVfQ0xPU0VEKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRo
aXMgPSBXZWFrUHRyIHsgKnRoaXMgfV0geworICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMt
Pm1fY2xpZW50KQorICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fY2xpZW50LT5vblN0
YXRlQ2hhbmdlZChSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmcpOworICAgICAgICB9KTsK
KyAgICB9CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFdlYWtQdHIgeyAq
dGhpcyB9LCB0cmFuc3BvcnRTdGF0ZSwgZ2F0aGVyaW5nU3RhdGVdIHsKKyAgICAgICAgaWYgKCFw
cm90ZWN0ZWRUaGlzLT5tX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJv
dGVjdGVkVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDSWNlVHJhbnNwb3J0U3Rh
dGUodHJhbnNwb3J0U3RhdGUpKTsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9jbGllbnQtPm9u
R2F0aGVyaW5nU3RhdGVDaGFuZ2VkKHRvUlRDSWNlR2F0aGVyaW5nU3RhdGUoZ2F0aGVyaW5nU3Rh
dGUpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp1
bnJlZ2lzdGVyQ2xpZW50KCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50
LmNsZWFyKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVD
aGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBH
c3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgdHJhbnNwb3J0U3RhdGU7CisgICAgZ19vYmplY3Rf
Z2V0KG1faWNlVHJhbnNwb3J0LmdldCgpLCAic3RhdGUiLCAmdHJhbnNwb3J0U3RhdGUsIG51bGxw
dHIpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBXZWFrUHRyIHsgKnRo
aXMgfSwgdHJhbnNwb3J0U3RhdGVdIHsKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2Ns
aWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9jbGll
bnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDSWNlVHJhbnNwb3J0U3RhdGUodHJhbnNwb3J0U3RhdGUp
KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpnYXRo
ZXJpbmdTdGF0ZUNoYW5nZWQoKQoreworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdzdFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIGdhdGhlcmluZ1N0YXRlOworICAg
IGdfb2JqZWN0X2dldChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgImdhdGhlcmluZy1zdGF0ZSIsICZn
YXRoZXJpbmdTdGF0ZSwgbnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVk
VGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCBnYXRoZXJpbmdTdGF0ZV0geworICAgICAgICBpZiAo
IXByb3RlY3RlZFRoaXMtPm1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5tX2NsaWVudC0+b25HYXRoZXJpbmdTdGF0ZUNoYW5nZWQodG9SVENJY2VH
YXRoZXJpbmdTdGF0ZShnYXRoZXJpbmdTdGF0ZSkpOworICAgIH0pOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNmZlYTUyMGJiYTkxMGZkMTdmMzAwNzk4NTUyN2E5ODY4OGY0YjA3
ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaApAQCAtMCwwICsxLDU2IEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQ
dHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3Ry
ZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0ljZVRyYW5zcG9ydEJh
Y2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5k
PiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRM
U1RyYW5zcG9ydD4mKTsKKyAgICB+R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCgpOworCisg
ICAgdm9pZCBzdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIGdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgp
OworCitwcml2YXRlOgorICAgIC8vIFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQKKyAgICBjb25zdCB2
b2lkKiBiYWNrZW5kKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisK
KyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAgIHZvaWQgdW5yZWdp
c3RlckNsaWVudCgpIGZpbmFsOworCisgICAgdm9pZCBpY2VUcmFuc3BvcnRDaGFuZ2VkKCk7CisK
KyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IG1fYmFja2VuZDsKKyAgICBHUmVm
UHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gbV9pY2VUcmFuc3BvcnQ7CisgICAgV2Vha1B0cjxD
bGllbnQ+IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVk
aWFFbmRwb2ludC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDcxYzExNDIwY2U5
ZmFhYTZmYWI3NGI4OTY4MWFmNDYwZjJlYmUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dC5jcHAKQEAgLTAsMCArMSwxMjQ3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5o
IgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckRhdGFDaGFu
bmVsSGFuZGxlci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdT
dHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRD
VXRpbHMuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIkpT
UlRDU3RhdHNSZXBvcnQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFF
bmRwb2ludENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIlJUQ0RhdGFDaGFubmVsLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxFdmVudC5o
IgorI2luY2x1ZGUgIlJUQ0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJUQ09mZmVyT3B0aW9u
cy5oIgorI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDU2N0cFRy
YW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIKKyNp
bmNsdWRlICJSVENTdGF0c1JlcG9ydC5oIgorI2luY2x1ZGUgIlJUQ1RyYWNrRXZlbnQuaCIKKyNp
bmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFs
dGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdzdC9zZHAvc2RwLmg+
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNp
bmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWSh3
ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdl
YmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50KEdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZCYgcGVlckNvbm5lY3Rpb24pCisgICAgOiBtX3BlZXJDb25uZWN0aW9u
QmFja2VuZChwZWVyQ29ubmVjdGlvbikKKyAgICAsIG1fc3RhdHNDb2xsZWN0b3IoR1N0cmVhbWVy
U3RhdHNDb2xsZWN0b3I6OmNyZWF0ZSgpKQorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAg
ICwgbV9zdGF0c0xvZ1RpbWVyKCp0aGlzLCAmR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVy
U3RhdHNGb3JMb2dnaW5nKQorICAgICwgbV9sb2dnZXIocGVlckNvbm5lY3Rpb24ubG9nZ2VyKCkp
CisgICAgLCBtX2xvZ0lkZW50aWZpZXIocGVlckNvbm5lY3Rpb24ubG9nSWRlbnRpZmllcigpKQor
I2VuZGlmCit7CisgICAgZW5zdXJlR1N0cmVhbWVySW5pdGlhbGl6ZWQoKTsKKworICAgIHN0YXRp
YyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNl
KGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lO
SVQod2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZywgIndlYmtpdHdlYnJ0Y2VuZHBvaW50Iiwg
MCwgIldlYktpdCBXZWJSVEMgZW5kLXBvaW50Iik7CisgICAgfSk7Cit9CisKK2Jvb2wgR1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6aW5pdGlhbGl6ZVBpcGVsaW5lKCkKK3sKKyAgICBzdGF0aWMgaW50
IG5QaXBlbGluZSA9IDA7CisgICAgYXV0byBwaXBlbGluZU5hbWUgPSBtYWtlU3RyaW5nKCJ3ZWJr
aXQtd2VicnQtcGlwZWxpbmUtIiwgblBpcGVsaW5lKTsKKyAgICBtX3BpcGVsaW5lID0gZ3N0X3Bp
cGVsaW5lX25ldyhwaXBlbGluZU5hbWUuYXNjaWkoKS5kYXRhKCkpOworCisgICAgY29ubmVjdFNp
bXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdldCgpLCBbdGhpc10oR3N0TWVzc2Fn
ZSogbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOworICAgIH0pOwor
CisgICAgYXV0byBiaW5OYW1lID0gbWFrZVN0cmluZygid2Via2l0LXdlYnJ0Y2Jpbi0iLCBuUGlw
ZWxpbmUrKyk7CisgICAgbV93ZWJydGNCaW4gPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgid2VicnRj
YmluIiwgYmluTmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9zdGF0c0NvbGxlY3Rvci0+c2V0RWxlbWVudCht
X3dlYnJ0Y0Jpbi5nZXQoKSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRj
QmluLmdldCgpLCAibm90aWZ5OjppY2UtY29ubmVjdGlvbi1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1td
KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50KSB7CisgICAgICAgIGVuZFBvaW50LT5v
bkljZUNvbm5lY3Rpb25DaGFuZ2UoKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAibm90aWZ5OjppY2UtZ2F0aGVyaW5nLXN0
YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQpIHsK
KyAgICAgICAgZW5kUG9pbnQtPm9uSWNlR2F0aGVyaW5nQ2hhbmdlKCk7CisgICAgfSksIHRoaXMp
OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLW5l
Z290aWF0aW9uLW5lZWRlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQq
IGVuZFBvaW50KSB7CisgICAgICAgIGVuZFBvaW50LT5vbk5lZ290aWF0aW9uTmVlZGVkKCk7Cisg
ICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5n
ZXQoKSwgIm9uLWljZS1jYW5kaWRhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50KiBlbmRQb2ludCwgZ3VpbnQgc2RwTUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5kaWRh
dGUpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uSWNlQ2FuZGlkYXRlKHNkcE1MaW5lSW5kZXgsIGNh
bmRpZGF0ZSk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X3dlYnJ0Y0Jpbi5nZXQoKSwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RQYWQqIHBhZCkgeworICAgICAgICAvLyBJZ25vcmUg
b3V0Z29pbmcgcGFkIG5vdGlmaWNhdGlvbnMuCisgICAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElP
TihwYWQpICE9IEdTVF9QQURfU1JDKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNh
bGxPbk1haW5UaHJlYWRBbmRXYWl0KFtwcm90ZWN0ZWRUaGlzID0gUmVmKCplbmRQb2ludCksIHBh
ZF0geworICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+YWRkUmVtb3Rl
U3RyZWFtKHBhZCk7CisgICAgICAgIH0pOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJwYWQtcmVtb3ZlZCIsIEdfQ0FMTEJB
Q0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RQYWQqIHBhZCkgewor
ICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5vdGlmaWNhdGlvbnMuCisgICAgICAgIGlm
IChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9QQURfU1JDKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGlmIChlbmRQb2ludC0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGVuZFBvaW50LT5yZW1vdmVSZW1vdGVTdHJlYW0ocGFkKTsKKyAgICB9
KSwgdGhpcyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0
KCksICJvbi1kYXRhLWNoYW5uZWwiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBv
aW50KiBlbmRQb2ludCwgR3N0V2ViUlRDRGF0YUNoYW5uZWwqIGNoYW5uZWwpIHsKKyAgICAgICAg
ZW5kUG9pbnQtPm9uRGF0YUNoYW5uZWwoY2hhbm5lbCk7CisgICAgfSksIHRoaXMpOworCisgICAg
Z3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX3dlYnJ0Y0Jpbi5n
ZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dTdHJlYW1lck1lZGlhRW5kcG9pbnQ6On5H
U3RyZWFtZXJNZWRpYUVuZHBvaW50KCkKK3sKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAg
dGVhcmRvd25QaXBlbGluZSgpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRl
YXJkb3duUGlwZWxpbmUoKQoreworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0b3BM
b2dnaW5nU3RhdHMoKTsKKyNlbmRpZgorICAgIG1fc3RhdHNDb2xsZWN0b3ItPnNldEVsZW1lbnQo
bnVsbHB0cik7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9w
aXBlbGluZS5nZXQoKSwgdGhpcyk7CisgICAgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxs
YmFjayhtX3BpcGVsaW5lLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBl
bGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworCisgICAgbV9zb3VyY2VzLmNsZWFyKCk7Cisg
ICAgbV9yZW1vdGVNTGluZUluZm9zLmNsZWFyKCk7CisgICAgbV9yZW1vdGVTdHJlYW1zQnlJZC5j
bGVhcigpOworICAgIG1fd2VicnRjQmluID0gbnVsbHB0cjsKKyAgICBtX3BpcGVsaW5lID0gbnVs
bHB0cjsKK30KKworYm9vbCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpoYW5kbGVNZXNzYWdlKEdz
dE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3Nh
Z2UpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAgIEdTVF9ERUJVR19CSU5f
VE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIEdTVF9E
RUJVR19HUkFQSF9TSE9XX0FMTCwgImVvcyIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdT
VF9NRVNTQUdFX0VMRU1FTlQ6IHsKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGdzdF9tZXNz
YWdlX2dldF9zdHJ1Y3R1cmUobWVzc2FnZSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKGdzdF9z
dHJ1Y3R1cmVfZ2V0X25hbWUoZGF0YSksICJHc3RCaW5Gb3J3YXJkZWQiKSkgeworICAgICAgICAg
ICAgR1JlZlB0cjxHc3RNZXNzYWdlPiBzdWJNZXNzYWdlOworICAgICAgICAgICAgZ3N0X3N0cnVj
dHVyZV9nZXQoZGF0YSwgIm1lc3NhZ2UiLCBHU1RfVFlQRV9NRVNTQUdFLCAmc3ViTWVzc2FnZS5v
dXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShzdWJN
ZXNzYWdlLmdldCgpKSA9PSBHU1RfTUVTU0FHRV9FT1MpCisgICAgICAgICAgICAgICAgZGlzcG9z
ZUVsZW1lbnRDaGFpbihHU1RfRUxFTUVOVF9DQVNUKEdTVF9NRVNTQUdFX1NSQyhzdWJNZXNzYWdl
LmdldCgpKSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0
OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6ZGlzcG9zZUVsZW1lbnRDaGFpbihHc3RFbGVtZW50KiBlbGVt
ZW50KQoreworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkdvdCBlbGVt
ZW50IEVPUyBtZXNzYWdlIGZyb20gJSIgR1NUX1BUUl9GT1JNQVQsIGVsZW1lbnQpOworCisgICAg
YXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZWxlbWVudCwg
InNpbmsiKSk7CisgICAgYXV0byBwZWVyID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIocGFk
LmdldCgpKSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fcGlwZWxpbmUu
Z2V0KCksIHRydWUpOworICAgIGdzdF9wYWRfdW5saW5rKHBlZXIuZ2V0KCksIHBhZC5nZXQoKSk7
CisgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBlbGVt
ZW50KTsKKyAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKG1fd2VicnRjQmluLmdl
dCgpLCBwZWVyLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoZWxlbWVudCwgR1NU
X1NUQVRFX05VTEwpOworICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9waXBlbGlu
ZS5nZXQoKSwgZmFsc2UpOworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldENv
bmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7
CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIHRlYXJkb3duUGlwZWxpbmUoKTsKKworICAg
IGlmICghaW5pdGlhbGl6ZVBpcGVsaW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IGF1dG8gYnVuZGxlUG9saWN5ID0gYnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oY29uZmln
dXJhdGlvbik7CisgICAgYXV0byBpY2VUcmFuc3BvcnRQb2xpY3kgPSBpY2VUcmFuc3BvcnRQb2xp
Y3lGcm9tQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKKyAgICBnX29iamVjdF9zZXQobV93
ZWJydGNCaW4uZ2V0KCksICJidW5kbGUtcG9saWN5IiwgYnVuZGxlUG9saWN5LCAiaWNlLXRyYW5z
cG9ydC1wb2xpY3kiLCBpY2VUcmFuc3BvcnRQb2xpY3ksIG51bGxwdHIpOworCisgICAgZm9yIChh
dXRvJiBzZXJ2ZXIgOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHsKKyAgICAgICAgYm9vbCBz
dHVuU2V0ID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgdXJsIDogc2VydmVyLnVybHMpIHsK
KyAgICAgICAgICAgIGlmICh1cmwucHJvdG9jb2woKS5zdGFydHNXaXRoKCJ0dXJuIikpIHsKKyAg
ICAgICAgICAgICAgICBhdXRvIHZhbGlkID0gdXJsLnN0cmluZygpLmlzb2xhdGVkQ29weSgpLnJl
cGxhY2UoInR1cm46IiwgInR1cm46Ly8iKS5yZXBsYWNlKCJ0dXJuczoiLCAidHVybnM6Ly8iKTsK
KyAgICAgICAgICAgICAgICBVUkwgdmFsaWRVUkwoVVJMKCksIHZhbGlkKTsKKyAgICAgICAgICAg
ICAgICAvLyBGSVhNRTogbGlibmljZSBjdXJyZW50bHkgZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBJ
UHY2IGFkZHJlc3NlcyB2ZXJ5IHdlbGwuCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkVVJMLmhv
c3QoKS5zdGFydHNXaXRoKCdbJykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgICAgIHZhbGlkVVJMLnNldFVzZXIoc2VydmVyLnVzZXJuYW1lKTsKKyAgICAgICAg
ICAgICAgICB2YWxpZFVSTC5zZXRQYXNzd29yZChzZXJ2ZXIuY3JlZGVudGlhbCk7CisgICAgICAg
ICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBnX3NpZ25hbF9l
bWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJhZGQtdHVybi1zZXJ2ZXIiLCB2YWxpZFVS
TC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAmcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAo
IXJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVuYWJsZSB0byB1c2Ug
VFVSTiBzZXJ2ZXI6ICVzIiwgdmFsaWRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXN0dW5TZXQgJiYgdXJsLnByb3RvY29sKCkuc3Rh
cnRzV2l0aCgic3R1biIpKSB7CisgICAgICAgICAgICAgICAgYXV0byB2YWxpZCA9IHVybC5zdHJp
bmcoKS5pc29sYXRlZENvcHkoKS5yZXBsYWNlKCJzdHVuOiIsICJzdHVuOi8vIik7CisgICAgICAg
ICAgICAgICAgVVJMIHZhbGlkVVJMKFVSTCgpLCB2YWxpZCk7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IGxpYm5pY2UgY3VycmVudGx5IGRvZXNuJ3Qgc2VlbSB0byBoYW5kbGUgSVB2NiBhZGRy
ZXNzZXMgdmVyeSB3ZWxsLgorICAgICAgICAgICAgICAgIGlmICh2YWxpZFVSTC5ob3N0KCkuc3Rh
cnRzV2l0aCgnWycpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
ICAgICB2YWxpZFVSTC5zZXRVc2VyKHNlcnZlci51c2VybmFtZSk7CisgICAgICAgICAgICAgICAg
dmFsaWRVUkwuc2V0UGFzc3dvcmQoc2VydmVyLmNyZWRlbnRpYWwpOworICAgICAgICAgICAgICAg
IGdfb2JqZWN0X3NldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInN0dW4tc2VydmVyIiwgdmFsaWRVUkwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgc3R1blNl
dCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXSVA6
IGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFk
Ly0vbWVyZ2VfcmVxdWVzdHMvMzAyCisgICAgR1NUX0ZJWE1FKCIlenUgY3VzdG9tIGNlcnRpZmlj
YXRlcyBub3QgcHJvcGFnYXRlZCB0byB3ZWJydGNiaW4iLCBjb25maWd1cmF0aW9uLmNlcnRpZmlj
YXRlcy5zaXplKCkpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0
KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJFbmQtcG9pbnQgcmVhZHkiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXN0YXJ0SWNlKCkKK3sKKyAgICBHU1RfREVCVUdfT0JK
RUNUKG1fcGlwZWxpbmUuZ2V0KCksICJyZXN0YXJ0aW5nIElDRSIpOworICAgIC8vIFdJUCBpbiBo
dHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8t
L21lcmdlX3JlcXVlc3RzLzE4NzcKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gb3B0aW9u
cyhnc3Rfc3RydWN0dXJlX25ldygid2VicnRjYmluLW9mZmVyLW9wdGlvbnMiLCAiaWNlLXJlc3Rh
cnQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgbnVsbHB0cikpOworICAgIGluaXRpYXRlKHRydWUs
IFdURk1vdmUob3B0aW9ucykpOworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8
UlRDU2RwVHlwZSwgU3RyaW5nPj4gZmV0Y2hEZXNjcmlwdGlvbihHc3RFbGVtZW50KiB3ZWJydGNC
aW4sIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaWYgKCF3ZWJydGNCaW4pCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlv
bj4gZGVzY3JpcHRpb247CisgICAgZ19vYmplY3RfZ2V0KHdlYnJ0Y0JpbiwgbWFrZVN0cmluZyhu
YW1lLCAiLWRlc2NyaXB0aW9uIikudXRmOCgpLmRhdGEoKSwgJmRlc2NyaXB0aW9uLm91dFB0cigp
LCBudWxscHRyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHBTdHJpbmcoZ3N0X3NkcF9tZXNzYWdlX2FzX3RleHQo
ZGVzY3JpcHRpb24tPnNkcCkpOworICAgIEdTVF9UUkFDRV9PQkpFQ1Qod2VicnRjQmluLCAiJXMt
ZGVzY3JpcHRpb24gU0RQOiAlcyIsIG5hbWUsIHNkcFN0cmluZy5nZXQoKSk7CisgICAgcmV0dXJu
IHsgeyBmcm9tU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShkZXNjcmlwdGlvbi5nZXQoKSksIHNkcFN0
cmluZy5nZXQoKSB9IH07Cit9CisKK3N0YXRpYyBHc3RXZWJSVENTaWduYWxpbmdTdGF0ZSBmZXRj
aFNpZ25hbGluZ1N0YXRlKEdzdEVsZW1lbnQqIHdlYnJ0Y0JpbikKK3sKKyAgICBHc3RXZWJSVENT
aWduYWxpbmdTdGF0ZSBzdGF0ZTsKKyAgICBnX29iamVjdF9nZXQod2VicnRjQmluLCAic2lnbmFs
aW5nLXN0YXRlIiwgJnN0YXRlLCBudWxscHRyKTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RF
QlVHCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkZXNjKGdfZW51bV90b19zdHJpbmcoR1NUX1RZUEVf
V0VCUlRDX1NJR05BTElOR19TVEFURSwgc3RhdGUpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHdl
YnJ0Y0JpbiwgIlNpZ25hbGluZyBzdGF0ZSBzZXQgdG8gJXMiLCBkZXNjLmdldCgpKTsKKyNlbmRp
ZgorICAgIHJldHVybiBzdGF0ZTsKK30KKworZW51bSBjbGFzcyBHYXRoZXJTaWduYWxpbmdTdGF0
ZSB7IE5vLCBZZXMgfTsKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6RGVzY3JpcHRpb25TdGF0ZXM+IGRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4oR3N0RWxlbWVu
dCogd2VicnRjQmluLCBHYXRoZXJTaWduYWxpbmdTdGF0ZSBnYXRoZXJTaWduYWxpbmdTdGF0ZSA9
IEdhdGhlclNpZ25hbGluZ1N0YXRlOjpObykKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJUQ1NkcFR5
cGU+IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSwgcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b25TZHBUeXBlLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nUmVtb3Rl
RGVzY3JpcHRpb25TZHBUeXBlOworICAgIFN0cmluZyBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNk
cCwgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHAsIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvblNk
cCwgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwOworICAgIGlmIChhdXRvIGN1cnJlbnRMb2Nh
bERlc2NyaXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3ZWJydGNCaW4sICJjdXJyZW50LWxvY2Fs
IikpIHsKKyAgICAgICAgYXV0byBbc2RwVHlwZSwgZGVzY3JpcHRpb25dID0gKmN1cnJlbnRMb2Nh
bERlc2NyaXB0aW9uOworICAgICAgICBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcFR5cGUgPSBz
ZHBUeXBlOworICAgICAgICBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcCA9IFdURk1vdmUoZGVz
Y3JpcHRpb24pOworICAgIH0KKyAgICBpZiAoYXV0byBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiA9
IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAicGVuZGluZy1sb2NhbCIpKSB7CisgICAgICAg
IGF1dG8gW3NkcFR5cGUsIGRlc2NyaXB0aW9uXSA9ICpwZW5kaW5nTG9jYWxEZXNjcmlwdGlvbjsK
KyAgICAgICAgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAg
ICAgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAg
ICB9CisgICAgaWYgKGF1dG8gY3VycmVudFJlbW90ZURlc2NyaXB0aW9uID0gZmV0Y2hEZXNjcmlw
dGlvbih3ZWJydGNCaW4sICJjdXJyZW50LXJlbW90ZSIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5
cGUsIGRlc2NyaXB0aW9uXSA9ICpjdXJyZW50UmVtb3RlRGVzY3JpcHRpb247CisgICAgICAgIGN1
cnJlbnRSZW1vdGVEZXNjcmlwdGlvblNkcFR5cGUgPSBzZHBUeXBlOworICAgICAgICBjdXJyZW50
UmVtb3RlRGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAg
aWYgKGF1dG8gcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3ZWJy
dGNCaW4sICJwZW5kaW5nLXJlbW90ZSIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5cGUsIGRlc2Ny
aXB0aW9uXSA9ICpwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb247CisgICAgICAgIHBlbmRpbmdSZW1v
dGVEZXNjcmlwdGlvblNkcFR5cGUgPSBzZHBUeXBlOworICAgICAgICBwZW5kaW5nUmVtb3RlRGVz
Y3JpcHRpb25TZHAgPSBkZXNjcmlwdGlvbjsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFJU
Q1NpZ25hbGluZ1N0YXRlPiBzaWduYWxpbmdTdGF0ZTsKKyAgICBpZiAoZ2F0aGVyU2lnbmFsaW5n
U3RhdGUgPT0gR2F0aGVyU2lnbmFsaW5nU3RhdGU6OlllcykKKyAgICAgICAgc2lnbmFsaW5nU3Rh
dGUgPSB0b1NpZ25hbGluZ1N0YXRlKGZldGNoU2lnbmFsaW5nU3RhdGUod2VicnRjQmluKSk7CisK
KyAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpEZXNjcmlwdGlvblN0YXRlcyB7Cisg
ICAgICAgIHNpZ25hbGluZ1N0YXRlLAorICAgICAgICBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNk
cFR5cGUsIGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uU2RwLAorICAgICAgICBwZW5kaW5nTG9jYWxE
ZXNjcmlwdGlvblNkcFR5cGUsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwLAorICAgICAgICBj
dXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25T
ZHAsCisgICAgICAgIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvblNkcFR5cGUsIHBlbmRpbmdSZW1v
dGVEZXNjcmlwdGlvblNkcAorICAgIH07Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6ZG9TZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiogZGVz
Y3JpcHRpb24pCit7CisgICAgc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb24sIHRydWUsIFtwcm90
ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKV0geworICAgICAgICBhdXRvIGRlc2NyaXB0aW9ucyA9IGRl
c2NyaXB0aW9uc0Zyb21XZWJSVENCaW4ocHJvdGVjdGVkVGhpcy0+bV93ZWJydGNCaW4uZ2V0KCks
IEdhdGhlclNpZ25hbGluZ1N0YXRlOjpZZXMpOworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1ND
VFBUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICAgICAgZ19vYmplY3RfZ2V0KHByb3RlY3RlZFRo
aXMtPm1fd2VicnRjQmluLmdldCgpLCAic2N0cC10cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0
cigpLCBudWxscHRyKTsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuc2V0TG9jYWxEZXNjcmlwdGlvblN1Y2NlZWRlZChXVEZNb3ZlKGRlc2NyaXB0aW9ucyks
IHRyYW5zcG9ydCA/IG1ha2VVbmlxdWU8R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ+KFdU
Rk1vdmUodHJhbnNwb3J0KSkgOiBudWxscHRyKTsKKyAgICB9LCBbcHJvdGVjdGVkVGhpcyA9IFJl
ZigqdGhpcyldKGNvbnN0IEdFcnJvciogZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yICYmIGVy
cm9yLT5jb2RlID09IEdTVF9XRUJSVENfRVJST1JfSU5WQUxJRF9TVEFURSkKKyAgICAgICAgICAg
IHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRp
b25GYWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gc2V0IGxv
Y2FsIGFuc3dlciBzZHA6IG5vIHBlbmRpbmcgcmVtb3RlIGRlc2NyaXB0aW9uLiJfcyB9KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuc2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRpb25FcnJv
ciwgIlVuYWJsZSB0byBhcHBseSBzZXNzaW9uIGxvY2FsIGRlc2NyaXB0aW9uIl9zIH0pOworICAg
IH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldFJlbW90ZURlc2NyaXB0
aW9uU3VjY2VlZGVkKCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJBY2tpbmcgcmVtb3RlIGRlc2NyaXB0aW9uIik7CisgICAgYXV0byBkZXNjcmlwdGlvbnMgPSBk
ZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgpLCBHYXRoZXJTaWduYWxp
bmdTdGF0ZTo6WWVzKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ+IHRyYW5z
cG9ydDsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCksICJzY3RwLXRyYW5zcG9y
dCIsICZ0cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworICAgIG1fcGVlckNvbm5lY3Rpb25C
YWNrZW5kLnNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKFdURk1vdmUoZGVzY3JpcHRpb25z
KSwgdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZD4o
V1RGTW92ZSh0cmFuc3BvcnQpKSA6IG51bGxwdHIpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmRvU2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBzZXREZXNjcmlwdGlvbigmZGVzY3JpcHRpb24sIGZh
bHNlLCBbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyldIHsKKyAgICAgICAgcHJvdGVjdGVkVGhp
cy0+c2V0UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQoKTsKKyAgICB9LCBbcHJvdGVjdGVkVGhp
cyA9IFJlZigqdGhpcyldKGNvbnN0IEdFcnJvciogZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9y
ICYmIGVycm9yLT5jb2RlID09IEdTVF9XRUJSVENfRVJST1JfSU5WQUxJRF9TVEFURSkKKyAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldFJlbW90ZURl
c2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRv
IHNldCByZW1vdGUgYW5zd2VyIHNkcCJfcyB9KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAg
cHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuc2V0UmVtb3RlRGVzY3JpcHRp
b25GYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vz
c2lvbiByZW1vdGUgZGVzY3JpcHRpb24iX3MgfSk7CisgICAgfSk7CisjaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECisgICAgc3RhcnRMb2dnaW5nU3RhdHMoKTsKKyNlbmRpZgorfQorCitzdHJ1Y3Qg
U2V0RGVzY3JpcHRpb25DYWxsRGF0YSB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEOworICAgIFNldERlc2NyaXB0aW9uQ2FsbERhdGEoR1N0cmVhbWVyTWVkaWFFbmRwb2ludCYg
ZW5kUG9pbnQsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzdWNjZXNzQ2FsbGJhY2ssIEZ1bmN0aW9uPHZv
aWQoY29uc3QgR0Vycm9yKik+JiYgZmFpbHVyZUNhbGxiYWNrKQorICAgICAgICA6IHN1Y2Nlc3ND
YWxsYmFjayhXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjaykpCisgICAgICAgICwgZmFpbHVyZUNhbGxi
YWNrKFdURk1vdmUoZmFpbHVyZUNhbGxiYWNrKSkKKyAgICAgICAgLCBlbmRQb2ludChlbmRQb2lu
dCkgeyB9CisKKyAgICBGdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjazsKKyAgICBGdW5j
dGlvbjx2b2lkKGNvbnN0IEdFcnJvciopPiBmYWlsdXJlQ2FsbGJhY2s7CisgICAgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludCYgZW5kUG9pbnQ7Cit9OworCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OnNldERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiogZGVzY3JpcHRp
b24sIGJvb2wgaXNMb2NhbCwgRnVuY3Rpb248dm9pZCgpPiYmIHN1Y2Nlc3NDYWxsYmFjaywgRnVu
Y3Rpb248dm9pZChjb25zdCBHRXJyb3IqKT4mJiBmYWlsdXJlQ2FsbGJhY2spCit7CisgICAgR3N0
U0RQTWVzc2FnZSogbWVzc2FnZTsKKyAgICBhdXRvIHNkcFR5cGUgPSBSVENTZHBUeXBlOjpPZmZl
cjsKKworICAgIGlmIChkZXNjcmlwdGlvbikgeworICAgICAgICBpZiAoZ3N0X3NkcF9tZXNzYWdl
X25ld19mcm9tX3RleHQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGVzY3JpcHRpb24t
PnNkcCgpLmNoYXJhY3RlcnM4KCkpLCAmbWVzc2FnZSkgIT0gR1NUX1NEUF9PSykgeworICAgICAg
ICAgICAgZmFpbHVyZUNhbGxiYWNrKG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICB9CisgICAgICAgIHNkcFR5cGUgPSBkZXNjcmlwdGlvbi0+dHlwZSgpOworICAgIH0gZWxz
ZSBpZiAoZ3N0X3NkcF9tZXNzYWdlX25ldygmbWVzc2FnZSkgIT0gR1NUX1NEUF9PSykgeworICAg
ICAgICBmYWlsdXJlQ2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBpZiAoIWlzTG9jYWwpCisgICAgICAgIHN0b3JlUmVtb3RlTUxpbmVJbmZvKG1lc3NhZ2Up
OworCisgICAgYXV0byB0eXBlID0gdG9TZXNzaW9uRGVzY3JpcHRpb25UeXBlKHNkcFR5cGUpOwor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNyZWF0aW5nICVzIHNlc3Np
b24gZm9yIFNEUCAlcyIsIGlzTG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsIGdzdF93ZWJydGNf
c2RwX3R5cGVfdG9fc3RyaW5nKHR5cGUpKTsKKworICAgIEdVbmlxdWVQdHI8R3N0V2ViUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uPiBzZXNzaW9uRGVzY3JpcHRpb24oZ3N0X3dlYnJ0Y19zZXNzaW9uX2Rl
c2NyaXB0aW9uX25ldyh0eXBlLCBtZXNzYWdlKSk7CisgICAgYXV0byBzaWduYWxOYW1lID0gbWFr
ZVN0cmluZygic2V0LSIsIGlzTG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsICItZGVzY3JpcHRp
b24iKTsKKyAgICBhdXRvIGRhdGEgPSBtYWtlVW5pcXVlPFNldERlc2NyaXB0aW9uQ2FsbERhdGE+
KCp0aGlzLCBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURk1vdmUoZmFpbHVyZUNhbGxiYWNr
KSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCBzaWduYWxO
YW1lLmFzY2lpKCkuZGF0YSgpLCBzZXNzaW9uRGVzY3JpcHRpb24uZ2V0KCksIGdzdF9wcm9taXNl
X25ld193aXRoX2NoYW5nZV9mdW5jKFtdKEdzdFByb21pc2UqIHByb21pc2UsIGdwb2ludGVyIHVz
ZXJEYXRhKSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXREZXNjcmlwdGlvbkNhbGxEYXRh
PiBkYXRhKHJlaW50ZXJwcmV0X2Nhc3Q8U2V0RGVzY3JpcHRpb25DYWxsRGF0YSo+KHVzZXJEYXRh
KSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZ3N0X3Byb21pc2Vfd2FpdChwcm9taXNlKTsKKyAg
ICAgICAgYXV0byBjbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICAgICAgZ3N0
X3Byb21pc2VfdW5yZWYocHJvbWlzZSk7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnN0IGF1
dG8qIHJlcGx5ID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UpOworICAgICAgICBpZiAo
cmVzdWx0ICE9IEdTVF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEIHx8IChyZXBseSAmJiBnc3Rfc3Ry
dWN0dXJlX2hhc19maWVsZChyZXBseSwgImVycm9yIikpKSB7CisgICAgICAgICAgICBHVW5pcXVl
T3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAgICBpZiAocmVwbHkpIHsKKyAgICAgICAg
ICAgICAgICBnc3Rfc3RydWN0dXJlX2dldChyZXBseSwgImVycm9yIiwgR19UWVBFX0VSUk9SLCAm
ZXJyb3Iub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1QoZGF0YS0+ZW5kUG9pbnQucGlwZWxpbmUoKSwgIlVuYWJsZSB0byBzZXQgZGVzY3JpcHRpb24s
IGVycm9yOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNhbGxPbk1haW5UaHJlYWQoW2Vycm9yID0gZXJyb3IuZ2V0KCksIHByb3RlY3RlZFRoaXMgPSBS
ZWYoZGF0YS0+ZW5kUG9pbnQpLCBmYWlsdXJlQ2FsbGJhY2sgPSBXVEZNb3ZlKGRhdGEtPmZhaWx1
cmVDYWxsYmFjayldIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9w
cGVkKCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBmYWls
dXJlQ2FsbGJhY2soZXJyb3IpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJl
ZihkYXRhLT5lbmRQb2ludCksIHN1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoZGF0YS0+c3VjY2Vz
c0NhbGxiYWNrKV0geworICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgp
KQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjaygp
OworICAgICAgICB9KTsKKyAgICB9LCBkYXRhLnJlbGVhc2UoKSwgbnVsbHB0cikpOworfQorCit2
b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0b3JlUmVtb3RlTUxpbmVJbmZvKEdzdFNEUE1l
c3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgbV9yZW1vdGVNTGluZUluZm9zLmNsZWFyKCk7CisgICAg
dW5zaWduZWQgdG90YWxNZWRpYXMgPSBnc3Rfc2RwX21lc3NhZ2VfbWVkaWFzX2xlbihtZXNzYWdl
KTsKKyAgICBtX3JlbW90ZU1MaW5lSW5mb3MucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsTWVkaWFzKTsK
KyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTdG9yaW5nICV1IHJlbW90
ZSBwZW5kaW5nIG1saW5lcyIsIHRvdGFsTWVkaWFzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdG90YWxNZWRpYXM7IGkrKykgeworICAgICAgICBjb25zdCBHc3RTRFBNZWRpYSogbWVk
aWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0X21lZGlhKG1lc3NhZ2UsIGkpOworICAgICAgICBjb25z
dCBjaGFyKiB0eXAgPSBnc3Rfc2RwX21lZGlhX2dldF9tZWRpYShtZWRpYSk7CisgICAgICAgIGlm
ICghZ19zdHJfZXF1YWwodHlwLCAiYXVkaW8iKSAmJiAhZ19zdHJfZXF1YWwodHlwLCAidmlkZW8i
KSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJV
RworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IG1lZGlhUmVwcmVzZW50YXRpb24oZ3N0X3NkcF9t
ZWRpYV9hc190ZXh0KG1lZGlhKSk7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJQcm9jZXNzaW5nIG1lZGlhOlxuJXMiLCBtZWRpYVJlcHJlc2VudGF0aW9uLmdldCgp
KTsKKyNlbmRpZgorICAgICAgICBjb25zdCBjaGFyKiBtaWQgPSBnc3Rfc2RwX21lZGlhX2dldF9h
dHRyaWJ1dGVfdmFsKG1lZGlhLCAibWlkIik7CisgICAgICAgIGlmICghbWlkKQorICAgICAgICAg
ICAgY29udGludWU7CisKKyAgICAgICAgYm9vbCBpc0luYWN0aXZlID0gZmFsc2U7CisgICAgICAg
IGZvciAodW5zaWduZWQgaWkgPSAwOyBpaSA8IGdzdF9zZHBfbWVkaWFfYXR0cmlidXRlc19sZW4o
bWVkaWEpOyBpaSsrKSB7CisgICAgICAgICAgICBjb25zdCBHc3RTRFBBdHRyaWJ1dGUqIGF0dHIg
PSBnc3Rfc2RwX21lZGlhX2dldF9hdHRyaWJ1dGUobWVkaWEsIGlpKTsKKyAgICAgICAgICAgIGlm
ICghZ19zdHJjbXAwKGF0dHItPmtleSwgImluYWN0aXZlIikpIHsKKyAgICAgICAgICAgICAgICBp
c0luYWN0aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgICAgICBpZiAoaXNJbmFjdGl2ZSkgeworICAgICAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU2tpcHBpbmcgaW5hY3RpdmUgbWVkaWEiKTsK
KyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbV9tZWRpYUZvck1p
ZC5zZXQoU3RyaW5nKG1pZCksIGdfc3RyX2VxdWFsKHR5cCwgImF1ZGlvIikgPyBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVv
KTsKKworICAgICAgICAvLyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVy
L2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3RzLzE5MDcKKyAgICAgICAgaWYgKHNkcE1l
ZGlhSGFzQXR0cmlidXRlS2V5KG1lZGlhLCAiaWNlLWxpdGUiKSkgeworICAgICAgICAgICAgR1Jl
ZlB0cjxHT2JqZWN0PiBpY2U7CisgICAgICAgICAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4u
Z2V0KCksICJpY2UtYWdlbnQiLCAmaWNlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgICAg
IGdfb2JqZWN0X3NldChpY2UuZ2V0KCksICJpY2UtbGl0ZSIsIFRSVUUsIG51bGxwdHIpOworICAg
ICAgICB9CisKKyAgICAgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0
eSgpKTsKKyAgICAgICAgVmVjdG9yPGludD4gcGF5bG9hZFR5cGVzOworICAgICAgICB1bnNpZ25l
ZCB0b3RhbEZvcm1hdHMgPSBnc3Rfc2RwX21lZGlhX2Zvcm1hdHNfbGVuKG1lZGlhKTsKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTWVkaWEgJXMgaGFzICV1IGZv
cm1hdHMiLCB0eXAsIHRvdGFsRm9ybWF0cyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7
IGogPCB0b3RhbEZvcm1hdHM7IGorKykgeworICAgICAgICAgICAgYXV0byBmb3JtYXQgPSBTdHJp
bmcoZ3N0X3NkcF9tZWRpYV9nZXRfZm9ybWF0KG1lZGlhLCBqKSk7CisgICAgICAgICAgICBhdXRv
IHBheWxvYWRUeXBlID0gcGFyc2VJbnRlZ2VyPGludD4oZm9ybWF0KTsKKyAgICAgICAgICAgIGlm
ICghcGF5bG9hZFR5cGUgfHwgISpwYXlsb2FkVHlwZSkgeworICAgICAgICAgICAgICAgIEdTVF9X
QVJOSU5HX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiSW52YWxpZCBwYXlsb2FkIHR5cGU6ICVz
IiwgZm9ybWF0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgYXV0byBmb3JtYXRDYXBzID0gYWRvcHRHUmVmKGdzdF9z
ZHBfbWVkaWFfZ2V0X2NhcHNfZnJvbV9tZWRpYShtZWRpYSwgKnBheWxvYWRUeXBlKSk7CisgICAg
ICAgICAgICBpZiAoIWZvcm1hdENhcHMpIHsKKyAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19P
QkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIk5vIGNhcHMgZm91bmQgZm9yIHBheWxvYWQgdHlwZSAl
ZCIsICpwYXlsb2FkVHlwZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICB9CisKKyAgICAgICAgICAgIC8vIFJlbGF5IFNEUCBhdHRyaWJ1dGVzIHRvIHRoZSBjYXBzLCB0
aGlzIGlzIHNwZWNpYWxseSB1c2VmdWwgc28gdGhhdCBlbGVtZW50cyBpbgorICAgICAgICAgICAg
Ly8gd2VicnRjYmluIHdpbGwgYmUgYWJsZSB0byBlbmFibGUgUlRQIGhlYWRlciBleHRlbnNpb25z
LgorICAgICAgICAgICAgZ3N0X3NkcF9tZWRpYV9hdHRyaWJ1dGVzX3RvX2NhcHMobWVkaWEsIGZv
cm1hdENhcHMuZ2V0KCkpOworCisgICAgICAgICAgICBnc3RfY2Fwc19hcHBlbmQoY2Fwcy5nZXQo
KSwgZm9ybWF0Q2Fwcy5sZWFrUmVmKCkpOworICAgICAgICAgICAgbV9wdENvdW50ZXIgPSBzdGQ6
Om1heChtX3B0Q291bnRlciwgKnBheWxvYWRUeXBlICsgMSk7CisgICAgICAgICAgICBwYXlsb2Fk
VHlwZXMuYXBwZW5kKCpwYXlsb2FkVHlwZSk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25l
ZCB0b3RhbENhcHMgPSBnc3RfY2Fwc19nZXRfc2l6ZShjYXBzLmdldCgpKTsKKyAgICAgICAgaWYg
KHRvdGFsQ2FwcykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHRvdGFs
Q2FwczsgaisrKSB7CisgICAgICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBn
c3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMuZ2V0KCksIGopOworICAgICAgICAgICAgICAgIGdz
dF9zdHJ1Y3R1cmVfc2V0X25hbWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1ydHAiKTsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIkNhY2hpbmcgcGF5bG9hZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSk7
CisgICAgICAgICAgICBtX3JlbW90ZU1MaW5lSW5mb3MuYXBwZW5kKHsgV1RGTW92ZShjYXBzKSwg
ZmFsc2UsIFdURk1vdmUocGF5bG9hZFR5cGVzKSB9KTsKKyAgICAgICAgfQorICAgIH0KK30KKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb25maWd1cmVBbmRMaW5rU291cmNlKFJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciYgc291cmNlKQoreworICAgIGF1dG8gY2Fw
cyA9IHNvdXJjZS5hbGxvd2VkQ2FwcygpOworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFBl
bmRpbmdNTGluZUluZm8sIEdSZWZQdHI8R3N0Q2Fwcz4+PiBmb3VuZDsKKyAgICBmb3IgKGF1dG8m
IG1MaW5lSW5mbyA6IG1fcmVtb3RlTUxpbmVJbmZvcykgeworICAgICAgICBpZiAobUxpbmVJbmZv
LmlzVXNlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IDA7IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZShtTGluZUluZm8uY2Fwcy5nZXQoKSk7IGkrKykg
eworICAgICAgICAgICAgYXV0byogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZSht
TGluZUluZm8uY2Fwcy5nZXQoKSwgaSk7CisgICAgICAgICAgICBhdXRvIGNhcHMyID0gYWRvcHRH
UmVmKGdzdF9jYXBzX25ld19mdWxsKGdzdF9zdHJ1Y3R1cmVfY29weShzdHJ1Y3R1cmUpLCBudWxs
cHRyKSk7CisgICAgICAgICAgICBhdXRvIGludGVyc2VjdGVkID0gYWRvcHRHUmVmKGdzdF9jYXBz
X2ludGVyc2VjdChjYXBzLmdldCgpLCBjYXBzMi5nZXQoKSkpOworICAgICAgICAgICAgaWYgKCFn
c3RfY2Fwc19pc19lbXB0eShpbnRlcnNlY3RlZC5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBm
b3VuZCA9IHN0ZDo6bWFrZV9wYWlyKG1MaW5lSW5mbywgV1RGTW92ZShpbnRlcnNlY3RlZCkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGlmIChmb3VuZC5oYXNfdmFsdWUoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAg
IGJvb2wgcGF5bG9hZFR5cGVXYXNTZXQgPSBmYWxzZTsKKyAgICBpZiAoZm91bmQpIHsKKyAgICAg
ICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiVW51c2VkIGFuZCBjb21wYXRp
YmxlIGNhcHMgZm91bmQgZm9yICUiIEdTVF9QVFJfRk9STUFUICIuLi4gJSIgR1NUX1BUUl9GT1JN
QVQsIGNhcHMuZ2V0KCksIGZvdW5kLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBwYXlsb2FkVHlw
ZVdhc1NldCA9IHNvdXJjZS5zZXRQYXlsb2FkVHlwZShmb3VuZC0+c2Vjb25kKTsKKyAgICAgICAg
Zm91bmQtPmZpcnN0LmlzVXNlZCA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIHBheWxvYWRU
eXBlV2FzU2V0ID0gc291cmNlLnNldFBheWxvYWRUeXBlKGNhcHMpOworCisgICAgaWYgKCFwYXls
b2FkVHlwZVdhc1NldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzb3VyY2UucGFkKCkp
IHsKKyAgICAgICAgc291cmNlLnNldFNpbmtQYWQocmVxdWVzdFBhZChtX3JlcXVlc3RQYWRDb3Vu
dGVyLCBzb3VyY2UuYWxsb3dlZENhcHMoKSkpOworICAgICAgICBtX3JlcXVlc3RQYWRDb3VudGVy
Kys7CisgICAgfQorCisgICAgYXV0byYgc2lua1BhZCA9IHNvdXJjZS5wYWQoKTsKKyAgICBSRUxF
QVNFX0FTU0VSVCghZ3N0X3BhZF9pc19saW5rZWQoc2lua1BhZC5nZXQoKSkpOworICAgIGF1dG8g
c291cmNlQmluID0gc291cmNlLmJpbigpOworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVCht
X3BpcGVsaW5lLmdldCgpKSwgc291cmNlQmluLmdldCgpKTsKKyAgICBzb3VyY2UubGluaygpOwor
CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBwYWRJZChnc3RfcGFkX2dldF9uYW1lKHNpbmtQYWQuZ2V0
KCkpKTsKKyAgICBhdXRvIGRvdEZpbGVOYW1lID0gbWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUo
bV9waXBlbGluZS5nZXQoKSksICIub3V0Z29pbmctIiwgcGFkSWQuZ2V0KCkpOworICAgIEdTVF9E
RUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBH
U1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworfQor
CitHUmVmUHRyPEdzdFBhZD4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVxdWVzdFBhZCh1bnNp
Z25lZCBtbGluZUluZGV4LCBjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBhbGxvd2VkQ2FwcykKK3sK
KyAgICBhdXRvIHBhZElkID0gbWFrZVN0cmluZygic2lua18iLCBtbGluZUluZGV4KTsKKyAgICBh
dXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfY29weShhbGxvd2VkQ2Fwcy5nZXQoKSkpOwor
CisgICAgZ3N0X2NhcHNfbWFwX2luX3BsYWNlKGNhcHMuZ2V0KCksIFtdKEdzdENhcHNGZWF0dXJl
cyosIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xl
YW4geworICAgICAgICBhdXRvKiBlbmRQb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVy
TWVkaWFFbmRwb2ludCo+KHVzZXJEYXRhKTsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3Ry
dWN0dXJlLCAicGF5bG9hZCIsIEdfVFlQRV9JTlQsIGVuZFBvaW50LT5tX3B0Q291bnRlcisrLCBu
dWxscHRyKTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfSwgdGhpcyk7CisKKyAgICAvLyBG
SVhNRTogUmVzdHJpY3RpbmcgY2FwcyBhbmQgY29kZWMtcHJlZmVyZW5jZXMgYnJlYWtzIGNhcHMg
bmVnb3RpYXRpb24gb2Ygb3V0Z29pbmcgc291cmNlcyBpbgorICAgIC8vIHNvbWUgY2FzZSAoaml0
c2kpLgorICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlJlcXVlc3Rpbmcg
cGFkICVzIHJlc3RyaWN0ZWQgdG8gJSIgR1NUX1BUUl9GT1JNQVQsIHBhZElkLnV0ZjgoKS5kYXRh
KCksIGNhcHMuZ2V0KCkpOworICAgIGF1dG8qIHBhZFRlbXBsYXRlID0gZ3N0X2VsZW1lbnRfZ2V0
X3BhZF90ZW1wbGF0ZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgInNpbmtfJXUiKTsKKyAgICBhdXRvIHNp
bmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQobV93ZWJydGNCaW4uZ2V0
KCksIHBhZFRlbXBsYXRlLCBwYWRJZC51dGY4KCkuZGF0YSgpLCBjYXBzLmdldCgpKSk7CisgICAg
R1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gdHJhbnNjZWl2ZXI7CisgICAgZ19vYmpl
Y3RfZ2V0KHNpbmtQYWQuZ2V0KCksICJ0cmFuc2NlaXZlciIsICZ0cmFuc2NlaXZlci5vdXRQdHIo
KSwgbnVsbHB0cik7CisgICAgZ19vYmplY3Rfc2V0KHRyYW5zY2VpdmVyLmdldCgpLCAiY29kZWMt
cHJlZmVyZW5jZXMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gc2lua1BhZDsK
K30KKworYm9vbCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFjayhHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBjb25zdCBGaXhl
ZFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3Vy
Y2Ugc291cmNlOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBydGNTZW5kZXI7CisK
KyAgICBpZiAodHJhY2sucHJpdmF0ZVRyYWNrKCkuaGFzQXVkaW8oKSkgeworICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBZGRpbmcgb3V0Z29pbmcgYXVkaW8gc291
cmNlIik7CisgICAgICAgIGF1dG8gYXVkaW9Tb3VyY2UgPSBSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFjay5wcml2YXRlVHJhY2soKSk7CisgICAgICAgIGNv
bmZpZ3VyZUFuZExpbmtTb3VyY2UoYXVkaW9Tb3VyY2UpOworCisgICAgICAgIHJ0Y1NlbmRlciA9
IGF1ZGlvU291cmNlLT5zZW5kZXIoKTsKKyAgICAgICAgc291cmNlID0gV1RGTW92ZShhdWRpb1Nv
dXJjZSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJhY2sucHJpdmF0
ZVRyYWNrKCkuaGFzVmlkZW8oKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGlu
ZS5nZXQoKSwgIkFkZGluZyBvdXRnb2luZyB2aWRlbyBzb3VyY2UiKTsKKyAgICAgICAgYXV0byB2
aWRlb1NvdXJjZSA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRl
KHRyYWNrLnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAgY29uZmlndXJlQW5kTGlua1NvdXJjZSh2
aWRlb1NvdXJjZSk7CisKKyAgICAgICAgcnRjU2VuZGVyID0gdmlkZW9Tb3VyY2UtPnNlbmRlcigp
OworICAgICAgICBzb3VyY2UgPSBXVEZNb3ZlKHZpZGVvU291cmNlKTsKKyAgICB9CisKKyAgICBz
ZW5kZXIuc2V0U291cmNlKFdURk1vdmUoc291cmNlKSk7CisKKyAgICBpZiAoYXV0byBydHBTZW5k
ZXIgPSBzZW5kZXIucnRjU2VuZGVyKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiQWxyZWFkeSBoYXMgYSBzZW5kZXIuIik7CisgICAgICAgIHJldHVybiB0
cnVlOworICAgIH0KKworICAgIHNlbmRlci5zZXRSVENTZW5kZXIoV1RGTW92ZShydGNTZW5kZXIp
KTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlNlbmRlciBjb25m
aWd1cmVkIik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6cmVtb3ZlVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgc2VuZGVyKQorewor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlJlbW92aW5nIHRyYWNrIik7
CisgICAgYXV0byBiaW4gPSBzZW5kZXIuc3RvcFNvdXJjZSgpOworICAgIGlmIChiaW4pCisgICAg
ICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgYmluLmdl
dCgpKTsKKyAgICBzZW5kZXIuY2xlYXJTb3VyY2UoKTsKKyAgICBvbk5lZ290aWF0aW9uTmVlZGVk
KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVPZmZlcihjb25z
dCBSVENPZmZlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgLy8gZmx1c2hQZW5kaW5nU291cmNl
cyh0cnVlKTsKKworICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFt
ZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTg3NworICAgIEdVbmlxdWVQdHI8
R3N0U3RydWN0dXJlPiBvZmZlck9wdGlvbnMoZ3N0X3N0cnVjdHVyZV9uZXcoIndlYnJ0Y2Jpbi1v
ZmZlci1vcHRpb25zIiwgImljZS1yZXN0YXJ0IiwgR19UWVBFX0JPT0xFQU4sIG9wdGlvbnMuaWNl
UmVzdGFydCwgbnVsbHB0cikpOworICAgIC8vIEZJWE1FOiBQbHVtYiBvcHRpb25zLnZvaWNlQWN0
aXZpdHlEZXRlY3Rpb24uCisgICAgaW5pdGlhdGUodHJ1ZSwgV1RGTW92ZShvZmZlck9wdGlvbnMp
KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0ZUFuc3dlcigpCit7
CisgICAgaW5pdGlhdGUoZmFsc2UsIG51bGxwdHIpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmluaXRpYXRlKGJvb2wgaXNJbml0aWF0b3IsIEdVbmlxdWVQdHI8R3N0U3RydWN0
dXJlPiYmIG9wdGlvbnMpCit7CisgICAgbV9pc0luaXRpYXRvciA9IGlzSW5pdGlhdG9yOworICAg
IGNvbnN0IGNoYXIqIHR5cGUgPSBpc0luaXRpYXRvciA/ICJvZmZlciIgOiAiYW5zd2VyIjsKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDcmVhdGluZyAlcyIsIHR5cGUp
OworICAgIGF1dG8gc2lnbmFsTmFtZSA9IG1ha2VTdHJpbmcoImNyZWF0ZS0iLCB0eXBlKTsKKyAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksIHNpZ25hbE5hbWUuYXNj
aWkoKS5kYXRhKCksIG9wdGlvbnMucmVsZWFzZSgpLCBnc3RfcHJvbWlzZV9uZXdfd2l0aF9jaGFu
Z2VfZnVuYyhbXShHc3RQcm9taXNlKiBwcm9taXNlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAg
ICAgICBhdXRvKiBlbmRwb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVyTWVkaWFFbmRw
b2ludCo+KHVzZXJEYXRhKTsKKyAgICAgICAgYXV0byBjbGVhbnVwID0gbWFrZVNjb3BlRXhpdChb
Jl0geworICAgICAgICAgICAgZ3N0X3Byb21pc2VfdW5yZWYocHJvbWlzZSk7CisgICAgICAgIH0p
OworICAgICAgICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZSk7CisgICAg
ICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpIHsKKyAgICAgICAg
ICAgIGVuZHBvaW50LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoeyB9KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGF1dG8qIHJlcGx5ID0g
Z3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChy
ZXBseSk7CisgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZChyZXBseSwgImVycm9y
IikpIHsKKyAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJlcGx5LCAiZXJyb3IiLCBHX1RZUEVfRVJST1IsICZlcnJv
ci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBlbmRwb2ludC0+Y3JlYXRlU2Vzc2lv
bkRlc2NyaXB0aW9uRmFpbGVkKFdURk1vdmUoZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIqIHR5cGUgPSBlbmRwb2ludC0+bV9pc0lu
aXRpYXRvciA/ICJvZmZlciIgOiAiYW5zd2VyIjsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHc3RX
ZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IGRlc2NyaXB0aW9uOworICAgICAgICBnc3Rfc3RydWN0
dXJlX2dldChyZXBseSwgdHlwZSwgR1NUX1RZUEVfV0VCUlRDX1NFU1NJT05fREVTQ1JJUFRJT04s
ICZkZXNjcmlwdGlvbi5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVf
R1NUX0RFQlVHCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gc2RwKGdzdF9zZHBfbWVzc2FnZV9h
c190ZXh0KGRlc2NyaXB0aW9uLT5zZHApKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChlbmRw
b2ludC0+cGlwZWxpbmUoKSwgIkNyZWF0ZWQgJXM6ICVzIiwgdHlwZSwgc2RwLmdldCgpKTsKKyNl
bmRpZgorICAgICAgICBlbmRwb2ludC0+Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVk
KFdURk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICB9LCB0aGlzLCBudWxscHRyKSk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2V0U3RhdHMoR3N0UGFkKiBwYWQsIFJlZjxEZWZl
cnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBtX3N0YXRzQ29sbGVjdG9yLT5nZXRTdGF0
cyhbcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSksIHByb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMp
XShhdXRvJiYgcmVwb3J0KSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpIHx8ICFyZXBvcnQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZTxJRExJbnRlcmZh
Y2U8UlRDU3RhdHNSZXBvcnQ+PihyZXBvcnQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfSwgcGFk
KTsKK30KKworTWVkaWFTdHJlYW0mIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om1lZGlhU3RyZWFt
RnJvbVJUQ1N0cmVhbShTdHJpbmcgbGFiZWwpCit7CisgICAgYXV0byBtZWRpYVN0cmVhbSA9IG1f
cmVtb3RlU3RyZWFtc0J5SWQuZW5zdXJlKGxhYmVsLCBbbGFiZWwsIHRoaXNdKCkgbXV0YWJsZSB7
CisgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jb25uZWN0aW9uKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAg
ICAgICAgcmV0dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUoZG9jdW1lbnQsIE1lZGlhU3RyZWFtUHJp
dmF0ZTo6Y3JlYXRlKGRvY3VtZW50LmxvZ2dlcigpLCB7IH0sIFdURk1vdmUobGFiZWwpKSk7Cisg
ICAgfSk7CisgICAgcmV0dXJuICptZWRpYVN0cmVhbS5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkUmVtb3RlU3RyZWFtKEdzdFBhZCogcGFkKQor
eworICAgIG1fcGVuZGluZ0luY29taW5nU3RyZWFtcysrOworCisgICAgYXV0byBjYXBzID0gYWRv
cHRHUmVmKGdzdF9wYWRfcXVlcnlfY2FwcyhwYWQsIG51bGxwdHIpKTsKKyAgICBjb25zdCBjaGFy
KiBtZWRpYVR5cGUgPSBjYXBzTWVkaWFUeXBlKGNhcHMuZ2V0KCkpOworICAgIEdTVF9ERUJVR19P
QkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyByZW1vdGUgJXMgc3RyZWFtIHRvICUiIEdT
VF9QVFJfRk9STUFUICIgJXUgcGVuZGluZyBpbmNvbWluZyBzdHJlYW1zLCBjYXBzOiAlIiBHU1Rf
UFRSX0ZPUk1BVCwgbWVkaWFUeXBlLCBwYWQsIG1fcGVuZGluZ0luY29taW5nU3RyZWFtcywgY2Fw
cy5nZXQoKSk7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBydGNUcmFu
c2NlaXZlcjsKKyAgICBnX29iamVjdF9nZXQocGFkLCAidHJhbnNjZWl2ZXIiLCAmcnRjVHJhbnNj
ZWl2ZXIub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBtX3Bl
ZXJDb25uZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0cmFuc2Nl
aXZlckJhY2tlbmQpIHsKKyAgICAgICAgcmV0dXJuIHJ0Y1RyYW5zY2VpdmVyLmdldCgpID09IHRy
YW5zY2VpdmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgIH0pOworICAgIGlmICghdHJh
bnNjZWl2ZXIpIHsKKyAgICAgICAgYXV0byB0eXBlID0gZG9DYXBzSGF2ZVR5cGUoY2Fwcy5nZXQo
KSwgImF1ZGlvIikgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1l
TWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOworICAgICAgICB0cmFuc2NlaXZlciA9ICZtX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5uZXdSZW1vdGVUcmFuc2NlaXZlcihtYWtlVW5pcXVlPEdTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZD4oV1RGTW92ZShydGNUcmFuc2NlaXZlcikpLCB0eXBlKTsK
KyAgICB9CisKKyAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4g
ZGVzY3JpcHRpb247CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAicmVtb3Rl
LWRlc2NyaXB0aW9uIiwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKworICAgIHVu
c2lnbmVkIG1MaW5lSW5kZXg7CisgICAgZ19vYmplY3RfZ2V0KHJ0Y1RyYW5zY2VpdmVyLmdldCgp
LCAibWxpbmVpbmRleCIsICZtTGluZUluZGV4LCBudWxscHRyKTsKKyAgICBjb25zdCBhdXRvKiBt
ZWRpYSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEoZGVzY3JpcHRpb24tPnNkcCwgbUxpbmVJ
bmRleCk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHAoZ3N0X3NkcF9tZWRpYV9hc190ZXh0KG1l
ZGlhKSk7CisgICAgYXV0byBzZHBTdHJpbmcgPSBtYWtlU3RyaW5nKHNkcC5nZXQoKSk7CisKKyAg
ICBHVW5pcXVlUHRyPGdjaGFyPiBuYW1lKGdzdF9wYWRfZ2V0X25hbWUocGFkKSk7CisgICAgU3Ry
aW5nIGxhYmVsKG5hbWUuZ2V0KCkpOworICAgIGF1dG8ga2V5ID0gbWFrZVN0cmluZygibXNpZDoi
KTsKKyAgICBhdXRvIGxpbmVzID0gc2RwU3RyaW5nLnNwbGl0KCdcbicpOworICAgIGZvciAoYXV0
byYgbGluZSA6IGxpbmVzKSB7CisgICAgICAgIGF1dG8gaSA9IGxpbmUuZmluZChrZXkpOworICAg
ICAgICBpZiAoaSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgYXV0byB0bXAgPSBsaW5lLnN1
YnN0cmluZyhpICsga2V5LmFzY2lpKCkubGVuZ3RoKCkpOworICAgICAgICAgICAgbGFiZWwgPSB0
bXAuc3Vic3RyaW5nKDAsIHRtcC5maW5kKCcgJykpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJt
c2lkOiAlcyIsIGxhYmVsLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIEdzdEVsZW1lbnQqIGJpbiA9
IG51bGxwdHI7CisgICAgYXV0byYgdHJhY2sgPSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKS50cmFj
aygpOworICAgIGF1dG8mIHNvdXJjZSA9IHRyYWNrLnByaXZhdGVUcmFjaygpLnNvdXJjZSgpOwor
ICAgIGlmIChzb3VyY2UuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0
YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSku
YmluKCk7CisgICAgZWxzZSBpZiAoc291cmNlLmlzSW5jb21pbmdWaWRlb1NvdXJjZSgpKQorICAg
ICAgICBiaW4gPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXImPihzb3VyY2UpLmJpbigpOworICAgIGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdl
dCgpKSwgYmluKTsKKyAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQoYmluLCAic2luayIpKTsKKyAgICBnc3RfcGFkX2xpbmsocGFkLCBzaW5rUGFk
LmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGJpbik7CisK
KyAgICB0cmFjay5zZXRFbmFibGVkKHRydWUpOworICAgIHNvdXJjZS5zZXRNdXRlZChmYWxzZSk7
CisKKyAgICBhdXRvJiBtZWRpYVN0cmVhbSA9IG1lZGlhU3RyZWFtRnJvbVJUQ1N0cmVhbShsYWJl
bCk7CisgICAgbWVkaWFTdHJlYW0uYWRkVHJhY2tGcm9tUGxhdGZvcm0odHJhY2spOworICAgIG1f
cGVuZGluZ1N0cmVhbXMuYXBwZW5kKCZtZWRpYVN0cmVhbSk7CisKKyAgICBhdXRvIGRvdEZpbGVO
YW1lID0gbWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUobV9waXBlbGluZS5nZXQoKSksICIuaW5j
b21pbmctIiwgbWVkaWFUeXBlLCAnLScsIEdTVF9PQkpFQ1RfTkFNRShwYWQpKTsKKyAgICBHU1Rf
REVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwg
R1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkb3RGaWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVSZW1vdGVTdHJlYW0oR3N0UGFk
KikKK3sKKyAgICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJyZW1vdmVSZW1v
dGVTdHJlYW0iKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6Om9wdGlvbmFsPEdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OkJhY2tlbmRzPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpj
cmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgUlRDUnRw
VHJhbnNjZWl2ZXJJbml0JiBpbml0LCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2Um
JiBzb3VyY2UpCit7CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIiV6dSBz
dHJlYW1zIGluIGluaXQgZGF0YSIsIGluaXQuc3RyZWFtcy5zaXplKCkpOworCisgICAgLy8gRklY
TUU6IFNob3VsZCB3ZSBidWlsZCB0aGUgY2FwcyBmcm9tIHRoZSBpbml0LnNlbmRFbmNvZGluZ3M/
IFByb2JsZW0gaXMgdGhlcmUgaXMgbm8KKyAgICAvLyBlbmNvZGluZ05hbWUgb3IgY2xvY2tSYXRl
IGluIFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycy4KKyAgICBWZWN0b3I8c3RkOjpwYWlyPGNvbnN0
IGNoYXIqLCBpbnQ+PiBlbmNvZGluZ3M7CisgICAgY29uc3QgY2hhciogbWVkaWEgPSBraW5kLnV0
ZjgoKS5kYXRhKCk7CisgICAgaWYgKGtpbmQgPT0gInZpZGVvIl9zKSB7CisgICAgICAgIGVuY29k
aW5ncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMpOworICAgICAgICBlbmNvZGluZ3MuYXBwZW5k
KHsgIlZQOCIsIDkwMDAwIH0pOworICAgICAgICBlbmNvZGluZ3MuYXBwZW5kKHsgIlZQOSIsIDkw
MDAwIH0pOworICAgICAgICBlbmNvZGluZ3MuYXBwZW5kKHsgIkgyNjQiLCA5MDAwMCB9KTsKKyAg
ICB9IGVsc2UgeworICAgICAgICBlbmNvZGluZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgxKTsK
KyAgICAgICAgZW5jb2RpbmdzLmFwcGVuZCh7ICJPUFVTIiwgNDgwMDAgfSk7CisgICAgfQorCisg
ICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICBmb3Ig
KGF1dG8mIFtlbmNvZGluZ05hbWUsIGNsb2NrUmF0ZV0gOiBlbmNvZGluZ3MpIHsKKyAgICAgICAg
Z3N0X2NhcHNfYXBwZW5kKGNhcHMuZ2V0KCksIGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0
aW9uL3gtcnRwIiwgIm1lZGlhIiwgR19UWVBFX1NUUklORywgbWVkaWEsICJlbmNvZGluZy1uYW1l
IiwgR19UWVBFX1NUUklORywgZW5jb2RpbmdOYW1lLAorICAgICAgICAgICAgInBheWxvYWQiLCBH
X1RZUEVfSU5ULCBtX3B0Q291bnRlcisrLCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIGNsb2Nr
UmF0ZSwgbnVsbHB0cikpOworICAgIH0KKworICAgIGF1dG8gZGlyZWN0aW9uID0gZnJvbVJUQ1J0
cFRyYW5zY2VpdmVyRGlyZWN0aW9uKGluaXQuZGlyZWN0aW9uKTsKKyNpZm5kZWYgR1NUX0RJU0FC
TEVfR1NUX0RFQlVHCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkZXNjKGdfZW51bV90b19zdHJpbmco
R1NUX1RZUEVfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT04sIGRpcmVjdGlvbikpOwor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyAlcyB0cmFuc2Nl
aXZlciBmb3IgcGF5bG9hZCAlIiBHU1RfUFRSX0ZPUk1BVCwgZGVzYy5nZXQoKSwgY2Fwcy5nZXQo
KSk7CisjZW5kaWYKKworICAgIC8vIEZJWE1FOiBOb25lIG9mIHRoaXMgKGV4Y2VwdGVkIGRpcmVj
dGlvbikgaXMgcGFzc2VkIHRvIHdlYnJ0Y2JpbiB5ZXQuCisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1
Y3R1cmU+IGluaXREYXRhKGdzdF9zdHJ1Y3R1cmVfbmV3KCJ0cmFuc2NlaXZlci1pbml0LWRhdGEi
LCAiZGlyZWN0aW9uIiwgR1NUX1RZUEVfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT04s
IGRpcmVjdGlvbiwgbnVsbHB0cikpOworCisgICAgR1ZhbHVlIHN0cmVhbUlkc1ZhbHVlID0gR19W
QUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgmc3RyZWFtSWRzVmFsdWUsIEdTVF9UWVBFX0xJ
U1QpOworICAgIGZvciAoYXV0byYgc3RyZWFtIDogaW5pdC5zdHJlYW1zKSB7CisgICAgICAgIEdW
YWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICAgICAgZ192YWx1ZV9pbml0KCZ2YWx1ZSwg
R19UWVBFX1NUUklORyk7CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZygmdmFsdWUsIHN0cmVh
bS0+aWQoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3Zh
bHVlKCZzdHJlYW1JZHNWYWx1ZSwgJnZhbHVlKTsKKyAgICAgICAgZ192YWx1ZV91bnNldCgmdmFs
dWUpOworICAgIH0KKyAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUoaW5pdERhdGEuZ2V0KCks
ICJzdHJlYW0taWRzIiwgJnN0cmVhbUlkc1ZhbHVlKTsKKworICAgIEdWYWx1ZSBlbmNvZGluZ3NW
YWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICBnX3ZhbHVlX2luaXQoJmVuY29kaW5nc1ZhbHVlLCBH
U1RfVFlQRV9MSVNUKTsKKyAgICBpZiAoa2luZCA9PSAiYXVkaW8iKSB7CisgICAgICAgIGlmICgh
aW5pdC5zZW5kRW5jb2RpbmdzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBlbmNvZGlu
Z0RhdGEgPSBmcm9tUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGluaXQuc2VuZEVuY29kaW5nc1swXSk7
CisgICAgICAgICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgICAgICAgICBn
X3ZhbHVlX2luaXQoJnZhbHVlLCBHU1RfVFlQRV9TVFJVQ1RVUkUpOworICAgICAgICAgICAgZ3N0
X3ZhbHVlX3NldF9zdHJ1Y3R1cmUoJnZhbHVlLCBlbmNvZGluZ0RhdGEuZ2V0KCkpOworICAgICAg
ICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlKCZlbmNvZGluZ3NWYWx1ZSwgJnZhbHVl
KTsKKyAgICAgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIGZvciAoYXV0byYgZW5jb2RpbmcgOiBpbml0LnNlbmRFbmNvZGluZ3Mp
IHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RpbmdEYXRhID0gZnJvbVJUQ0VuY29kaW5nUGFyYW1l
dGVycyhlbmNvZGluZyk7CisgICAgICAgICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7
CisgICAgICAgICAgICBnX3ZhbHVlX2luaXQoJnZhbHVlLCBHU1RfVFlQRV9TVFJVQ1RVUkUpOwor
ICAgICAgICAgICAgZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmUoJnZhbHVlLCBlbmNvZGluZ0RhdGEu
Z2V0KCkpOworICAgICAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlKCZlbmNvZGlu
Z3NWYWx1ZSwgJnZhbHVlKTsKKyAgICAgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKKyAg
ICAgICAgfQorICAgIH0KKyAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUoaW5pdERhdGEuZ2V0
KCksICJlbmNvZGluZ3MiLCAmZW5jb2RpbmdzVmFsdWUpOworCisgICAgR1JlZlB0cjxHc3RXZWJS
VENSVFBUcmFuc2NlaXZlcj4gcnRjVHJhbnNjZWl2ZXI7CisgICAgZ19zaWduYWxfZW1pdF9ieV9u
YW1lKG1fd2VicnRjQmluLmdldCgpLCAiYWRkLXRyYW5zY2VpdmVyIiwgZGlyZWN0aW9uLCBjYXBz
LmdldCgpLCAmcnRjVHJhbnNjZWl2ZXIub3V0UHRyKCkpOworICAgIGlmICghcnRjVHJhbnNjZWl2
ZXIpCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIHRyYW5zY2VpdmVy
ID0gbWFrZVVuaXF1ZTxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KFdURk1vdmUocnRj
VHJhbnNjZWl2ZXIpKTsKKyAgICByZXR1cm4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6QmFja2Vu
ZHMgeyB0cmFuc2NlaXZlci0+Y3JlYXRlU2VuZGVyQmFja2VuZChtX3BlZXJDb25uZWN0aW9uQmFj
a2VuZCwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKGluaXREYXRhKSksIHRyYW5zY2VpdmVyLT5j
cmVhdGVSZWNlaXZlckJhY2tlbmQoKSwgV1RGTW92ZSh0cmFuc2NlaXZlcikgfTsKK30KKworc3Rk
OjpvcHRpb25hbDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6YWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0
IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlVHJhbnNj
ZWl2ZXJCYWNrZW5kcyh0cmFja0tpbmQsIGluaXQsIG51bGxwdHIpOworfQorCitHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlU291
cmNlRm9yVHJhY2soTWVkaWFTdHJlYW1UcmFjayYgdHJhY2spCit7CisgICAgaWYgKHRyYWNrLnBy
aXZhdGVUcmFjaygpLmhhc0F1ZGlvKCkpCisgICAgICAgIHJldHVybiBSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFjay5wcml2YXRlVHJhY2soKSk7CisKKyAg
ICBSRUxFQVNFX0FTU0VSVCh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNWaWRlbygpKTsKKyAgICBy
ZXR1cm4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJhY2su
cHJpdmF0ZVRyYWNrKCkpOworfQorCitzdGQ6Om9wdGlvbmFsPEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OkJhY2tlbmRzPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFuc2NlaXZlcihNZWRp
YVN0cmVhbVRyYWNrJiB0cmFjaywgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiBpbml0KQor
eworICAgIHJldHVybiBjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKHRyYWNrLmtpbmQoKSwgaW5p
dCwgY3JlYXRlU291cmNlRm9yVHJhY2sodHJhY2spKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFj
a2VuZCYsIE1lZGlhU3RyZWFtVHJhY2smKQoreworICAgIEdTVF9GSVhNRV9PQkpFQ1QobV9waXBl
bGluZS5nZXQoKSwgInNldFNlbmRlclNvdXJjZUZyb21UcmFjayIpOworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRyYW5zY2VpdmVyQmFja2VuZEZyb21TZW5kZXIo
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgYmFja2VuZCkKK3sKKyAgICBHUmVmUHRyPEdBcnJh
eT4gdHJhbnNjZWl2ZXJzOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5n
ZXQoKSwgImdldC10cmFuc2NlaXZlcnMiLCAmdHJhbnNjZWl2ZXJzLm91dFB0cigpKTsKKworICAg
IEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkxvb2tpbmcgZm9yIHNlbmRlciAl
cCBpbiAldSBleGlzdGluZyB0cmFuc2NlaXZlcnMiLCBiYWNrZW5kLnJ0Y1NlbmRlcigpLCB0cmFu
c2NlaXZlcnMtPmxlbik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRyYW5zY2VpdmVy
cy0+bGVuOyBpKyspIHsKKyAgICAgICAgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIGN1cnJlbnQg
PSBnX2FycmF5X2luZGV4KHRyYW5zY2VpdmVycy5nZXQoKSwgR3N0V2ViUlRDUlRQVHJhbnNjZWl2
ZXIqLCBpKTsKKyAgICAgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IHNlbmRlcjsKKyAg
ICAgICAgZ19vYmplY3RfZ2V0KGN1cnJlbnQsICJzZW5kZXIiLCAmc2VuZGVyLm91dFB0cigpLCBu
dWxscHRyKTsKKworICAgICAgICBpZiAoIXNlbmRlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICBpZiAoc2VuZGVyLmdldCgpID09IGJhY2tlbmQucnRjU2VuZGVyKCkpCisgICAgICAg
ICAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZD4oY3VycmVudCk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkSWNlQ2FuZGlkYXRlKEdTdHJlYW1lckljZUNhbmRpZGF0
ZSYgY2FuZGlkYXRlLCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxi
YWNrJiYgY2FsbGJhY2spCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgp
LCAiQWRkaW5nIElDRSBjYW5kaWRhdGUgJXMiLCBjYW5kaWRhdGUuY2FuZGlkYXRlLnV0ZjgoKS5k
YXRhKCkpOworCisgICAgaWYgKCFjYW5kaWRhdGUuY2FuZGlkYXRlLnN0YXJ0c1dpdGgoImNhbmRp
ZGF0ZToiKSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gY3JlYXRlU2hhcmVk
VGFzazxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrRnVuY3Rp
b24+KFdURk1vdmUoY2FsbGJhY2spKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHRhc2stPnJ1
bihFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgIkV4cGVjdCBsaW5lOiBjYW5kaWRhdGU6PGNh
bmRpZGF0ZS1zdHI+IiB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBhdXRvIHBhcnNlZENhbmRpZGF0ZSA9IHBhcnNlSWNlQ2FuZGlkYXRlU0RQKGNhbmRpZGF0
ZS5jYW5kaWRhdGUpOworICAgIGlmICghcGFyc2VkQ2FuZGlkYXRlKSB7CisgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoW3Rhc2sgPSBjcmVhdGVTaGFyZWRUYXNrPFBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6QWRkSWNlQ2FuZGlkYXRlQ2FsbGJhY2tGdW5jdGlvbj4oV1RGTW92ZShjYWxsYmFjaykpXSgp
IG11dGFibGUgeworICAgICAgICAgICAgdGFzay0+cnVuKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVy
cm9yLCAiRXJyb3IgcHJvY2Vzc2luZyBJQ0UgY2FuZGlkYXRlIiB9KTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogaW52YWxpZCBzZHBNTGluZUlu
ZGV4IGV4Y2VwdGlvbiBub3QgcmVsYXllZCBmcm9tIHdlYnJ0Y2Jpbi4KKyAgICAvLyBGSVhNRTog
SWRlYWxseSB0aGlzIHNob3VsZCBwYXNzIHRoZSByZXN1bHQvZXJyb3IgdG8gYSBHc3RQcm9taXNl
IG9iamVjdC4KKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJh
ZGQtaWNlLWNhbmRpZGF0ZSIsIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4LCBjYW5kaWRhdGUuY2Fu
ZGlkYXRlLnV0ZjgoKS5kYXRhKCkpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Rhc2sgPSBjcmVh
dGVTaGFyZWRUYXNrPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRlQ2FsbGJh
Y2tGdW5jdGlvbj4oV1RGTW92ZShjYWxsYmFjaykpLCBkZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlv
bnNGcm9tV2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgpKV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
dGFzay0+cnVuKFdURk1vdmUoZGVzY3JpcHRpb25zKSk7CisgICAgfSk7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNy
ZWF0ZURhdGFDaGFubmVsKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVs
SW5pdCYgb3B0aW9ucykKK3sKKyAgICBpZiAoIW1fd2VicnRjQmluKQorICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKworICAgIGF1dG8gaW5pdCA9IEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6
ZnJvbVJUQ0RhdGFDaGFubmVsSW5pdChvcHRpb25zKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJDcmVhdGluZyBkYXRhIGNoYW5uZWwgZm9yIGluaXQgb3B0aW9ucyAl
IiBHU1RfUFRSX0ZPUk1BVCwgaW5pdC5nZXQoKSk7CisgICAgR1JlZlB0cjxHc3RXZWJSVENEYXRh
Q2hhbm5lbD4gY2hhbm5lbDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4u
Z2V0KCksICJjcmVhdGUtZGF0YS1jaGFubmVsIiwgbGFiZWwudXRmOCgpLmRhdGEoKSwgaW5pdC5n
ZXQoKSwgJmNoYW5uZWwub3V0UHRyKCkpOworICAgIGlmICghY2hhbm5lbCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcj4oV1RGTW92ZShjaGFubmVsKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6b25EYXRhQ2hhbm5lbChHc3RXZWJSVENEYXRhQ2hhbm5lbCogZGF0YUNoYW5u
ZWwpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiSW5jb21pbmcg
ZGF0YSBjaGFubmVsIik7CisgICAgR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4gY2hhbm5l
bCA9IGRhdGFDaGFubmVsOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBS
ZWYoKnRoaXMpLCBkYXRhQ2hhbm5lbCA9IFdURk1vdmUoY2hhbm5lbCldKCkgbXV0YWJsZSB7Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdGVkVGhpcy0+bV9waXBlbGluZS5nZXQoKSwg
IkluY29taW5nIGRhdGEgY2hhbm5lbCAxIik7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5p
c1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChwcm90ZWN0ZWRUaGlzLT5tX3BpcGVsaW5lLmdldCgpLCAiSW5jb21pbmcgZGF0YSBjaGFubmVs
IDIiKTsKKyAgICAgICAgYXV0byYgY29ubmVjdGlvbiA9IHByb3RlY3RlZFRoaXMtPm1fcGVlckNv
bm5lY3Rpb25CYWNrZW5kLmNvbm5lY3Rpb24oKTsKKyAgICAgICAgY29ubmVjdGlvbi5kaXNwYXRj
aEV2ZW50KEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2hhbm5lbEV2ZW50KCpjb25uZWN0
aW9uLmRvY3VtZW50KCksIFdURk1vdmUoZGF0YUNoYW5uZWwpKSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y2xvc2UoKQoreworICAgIC8vIGh0dHBzOi8vZ2l0
bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vaXNzdWVzLzEx
ODEKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDbG9zaW5nIik7Cisg
ICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCBHU1RfU1RBVEVfUkVBRFkpOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CisgICAgc3RvcExvZ2dpbmdTdGF0cygpOworI2VuZGlmCit9CisKK3ZvaWQgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6c3RvcCgpCit7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3Rv
cExvZ2dpbmdTdGF0cygpOworI2VuZGlmCisKKyAgICBpZiAoIW1fcGlwZWxpbmUpCisgICAgICAg
IHJldHVybjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlN0b3Bw
aW5nIik7CisgICAgdGVhcmRvd25QaXBlbGluZSgpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OnN1c3BlbmQoKQoreworICAgIGlmICghbV9waXBlbGluZSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU3VzcGVuZGlu
ZyIpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RB
VEVfUEFVU0VEKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXN1bWUoKQor
eworICAgIGlmICghbV9waXBlbGluZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVH
X09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVzdW1pbmciKTsKKyAgICBnc3RfZWxlbWVudF9z
ZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworfQorCit2b2lk
IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uTmVnb3RpYXRpb25OZWVkZWQoKQoreworICAgIG1f
aXNOZWdvdGlhdGlvbk5lZWRlZCA9IHRydWU7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJDaGVja2luZyBuZWdvdGlhdGlvbiBzdGF0dXMiKTsKKworICAgIGNhbGxP
bk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXSB7CisgICAgICAgIGlmIChw
cm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChwcm90ZWN0ZWRUaGlzLT5tX3BpcGVsaW5lLmdldCgpLCAiTmVnb3Rp
YXRpb24gbmVlZGVkISIpOworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9u
QmFja2VuZC5tYXJrQXNOZWVkaW5nTmVnb3RpYXRpb24oMCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDb25uZWN0aW9uQ2hhbmdlKCkKK3sKKyAgICBH
c3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgc3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1fd2Vi
cnRjQmluLmdldCgpLCAiaWNlLWNvbm5lY3Rpb24tc3RhdGUiLCAmc3RhdGUsIG51bGxwdHIpOwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCBjb25uZWN0
aW9uU3RhdGUgPSB0b1JUQ0ljZUNvbm5lY3Rpb25TdGF0ZShzdGF0ZSldIHsKKyAgICAgICAgaWYg
KHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBhdXRvJiBjb25uZWN0aW9uID0gcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tl
bmQuY29ubmVjdGlvbigpOworICAgICAgICBpZiAoY29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3Rh
dGUoKSAhPSBjb25uZWN0aW9uU3RhdGUpCisgICAgICAgICAgICBjb25uZWN0aW9uLnVwZGF0ZUlj
ZUNvbm5lY3Rpb25TdGF0ZShjb25uZWN0aW9uU3RhdGUpOworICAgIH0pOworfQorCit2b2lkIEdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlR2F0aGVyaW5nQ2hhbmdlKCkKK3sKKyAgICBHc3RX
ZWJSVENJQ0VHYXRoZXJpbmdTdGF0ZSBzdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNC
aW4uZ2V0KCksICJpY2UtZ2F0aGVyaW5nLXN0YXRlIiwgJnN0YXRlLCBudWxscHRyKTsKKyAgICBj
YWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgc3RhdGVdIHsKKyAg
ICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBhdXRvJiBjb25uZWN0aW9uID0gcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVj
dGlvbkJhY2tlbmQuY29ubmVjdGlvbigpOworICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1dFQlJU
Q19JQ0VfR0FUSEVSSU5HX1NUQVRFX0NPTVBMRVRFKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhp
cy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXMoKTsKKyAg
ICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX0dB
VEhFUklORykKKyAgICAgICAgICAgIGNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUo
UlRDSWNlR2F0aGVyaW5nU3RhdGU6OkdhdGhlcmluZyk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRl
ID09IEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9ORVcpCisgICAgICAgICAgICBjb25u
ZWN0aW9uLnVwZGF0ZUljZUdhdGhlcmluZ1N0YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpOZXcp
OworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlQ2FuZGlk
YXRlKGd1aW50IHNkcE1MaW5lSW5kZXgsIGdjaGFyYXJyYXkgY2FuZGlkYXRlKQoreworICAgIC8v
IEZJWE1FOiBHZXQgbWlkIGZyb20gY2FuZGlkYXRlPworICAgIEdVbmlxdWVPdXRQdHI8R3N0V2Vi
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV93
ZWJydGNCaW4uZ2V0KCksICJsb2NhbC1kZXNjcmlwdGlvbiIsICZkZXNjcmlwdGlvbi5vdXRQdHIo
KSwgbnVsbHB0cik7CisgICAgaWYgKCFkZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgY29uc3QgR3N0U0RQTWVkaWEqIG1lZGlhID0gZ3N0X3NkcF9tZXNzYWdlX2dldF9tZWRpYShk
ZXNjcmlwdGlvbi0+c2RwLCBzZHBNTGluZUluZGV4KTsKKyAgICBTdHJpbmcgY2FuZGlkYXRlTWlk
KGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZV92YWwobWVkaWEsICJtaWQiKSk7CisgICAgU3Ry
aW5nIGNhbmRpZGF0ZVNEUChjYW5kaWRhdGUpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3Rl
Y3RlZFRoaXMgPSBSZWYoKnRoaXMpLCBtaWQgPSBXVEZNb3ZlKGNhbmRpZGF0ZU1pZCksIHNkcCA9
IFdURk1vdmUoY2FuZGlkYXRlU0RQKSwgc2RwTUxpbmVJbmRleCwgZGVzY3JpcHRpb25zID0gZGVz
Y3JpcHRpb25zRnJvbVdlYlJUQ0JpbihtX3dlYnJ0Y0Jpbi5nZXQoKSldKCkgbXV0YWJsZSB7Cisg
ICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQubmV3SUNF
Q2FuZGlkYXRlKFdURk1vdmUoc2RwKSwgV1RGTW92ZShtaWQpLCBzZHBNTGluZUluZGV4LCB7IH0s
IFdURk1vdmUoZGVzY3JpcHRpb25zKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVkKEdVbmlxdWVPdXRQ
dHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmIGRlc2NyaXB0aW9uKQoreworICAgIGNh
bGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCBkZXNjcmlwdGlvbiA9
IGRlc2NyaXB0aW9uLnJlbGVhc2UoKV0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNT
dG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFy
PiBzZHAoZ3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoZGVzY3JpcHRpb24tPnNkcCkpOworICAgICAg
ICBpZiAocHJvdGVjdGVkVGhpcy0+bV9pc0luaXRpYXRvcikKKyAgICAgICAgICAgIHByb3RlY3Rl
ZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNyZWF0ZU9mZmVyU3VjY2VlZGVkKHNkcC5n
ZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNv
bm5lY3Rpb25CYWNrZW5kLmNyZWF0ZUFuc3dlclN1Y2NlZWRlZChzZHAuZ2V0KCkpOworICAgIH0p
OworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25EZXNjcmlw
dGlvbkZhaWxlZChHVW5pcXVlT3V0UHRyPEdFcnJvcj4mJiBlcnJvcikKK3sKKyAgICBjYWxsT25N
YWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgZXJyb3IgPSBlcnJvci5yZWxl
YXNlKCldIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gZXhjID0gRXhjZXB0aW9uIHsgT3BlcmF0aW9u
RXJyb3IsIGVycm9yID8gZXJyb3ItPm1lc3NhZ2UgOiAiVW5rbm93biBFcnJvciIgfTsKKyAgICAg
ICAgaWYgKHByb3RlY3RlZFRoaXMtPm1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlckZhaWxlZChXVEZNb3Zl
KGV4YykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJGYWlsZWQoV1RGTW92ZShleGMpKTsKKyAgICB9
KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb2xsZWN0VHJhbnNjZWl2ZXJz
KCkKK3sKKyAgICBHUmVmUHRyPEdBcnJheT4gdHJhbnNjZWl2ZXJzOworICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC10cmFuc2NlaXZlcnMiLCAmdHJhbnNj
ZWl2ZXJzLm91dFB0cigpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhbnNjZWl2
ZXJzLT5sZW47IGkrKykgeworICAgICAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogY3VycmVu
dCA9IGdfYXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdldCgpLCBHc3RXZWJSVENSVFBUcmFuc2Nl
aXZlciosIGkpOworCisgICAgICAgIGF1dG8qIGV4aXN0aW5nVHJhbnNjZWl2ZXIgPSBtX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0cmFuc2NlaXZl
ckJhY2tlbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50ID09IHRyYW5zY2VpdmVyQmFj
a2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGV4aXN0aW5n
VHJhbnNjZWl2ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHUmVmUHRyPEdz
dFdlYlJUQ1JUUFJlY2VpdmVyPiByZWNlaXZlcjsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFy
PiBtaWQ7CisgICAgICAgIGdfb2JqZWN0X2dldChjdXJyZW50LCAicmVjZWl2ZXIiLCAmcmVjZWl2
ZXIub3V0UHRyKCksICJtaWQiLCAmbWlkLm91dFB0cigpLCBudWxscHRyKTsKKworICAgICAgICBp
ZiAoIXJlY2VpdmVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFtaWQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2Vu
ZC5uZXdSZW1vdGVUcmFuc2NlaXZlcihXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKGN1cnJlbnQpKSwgbV9tZWRpYUZvck1pZC5nZXQobWlkLmdl
dCgpKSk7CisgICAgfQorfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZygpCit7CisgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiZ2V0LXN0YXRzIiwgbnVsbHB0ciwg
Z3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcHJvbWlzZSwg
Z3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBnc3RfcHJvbWlzZV93
YWl0KHByb21pc2UpOworICAgICAgICBhdXRvIGNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFsmXSB7
CisgICAgICAgICAgICBnc3RfcHJvbWlzZV91bnJlZihwcm9taXNlKTsKKyAgICAgICAgfSk7Cisg
ICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3QgYXV0byogcmVwbHkgPSBnc3RfcHJvbWlzZV9n
ZXRfcmVwbHkocHJvbWlzZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGx5KTsKKyAgICAg
ICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlcGx5LCAiZXJyb3IiKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiBlbmRQb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R1N0cmVhbWVyTWVkaWFFbmRwb2ludCo+KHVzZXJEYXRhKTsKKyAgICAgICAgZW5kUG9pbnQtPm9u
U3RhdHNEZWxpdmVyZWQocmVwbHkpOworICAgIH0sIHRoaXMsIG51bGxwdHIpKTsKK30KKworY2xh
c3MgUlRDU3RhdHNMb2dnZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJUQ1N0YXRzTG9nZ2Vy
KGNvbnN0IEdzdFN0cnVjdHVyZSogc3RhdHMpCisgICAgICAgIDogbV9zdGF0cyhzdGF0cykKKyAg
ICB7IH0KKworICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdCB7IHJldHVybiBnc3RTdHJ1
Y3R1cmVUb0pTT05TdHJpbmcobV9zdGF0cyk7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBHc3RT
dHJ1Y3R1cmUqIG1fc3RhdHM7Cit9OworCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnBy
b2Nlc3NTdGF0cyhjb25zdCBHVmFsdWUqIHZhbHVlKQoreworICAgIGlmICghR1NUX1ZBTFVFX0hP
TERTX1NUUlVDVFVSRSh2YWx1ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUodmFsdWUpOworICAg
IEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dl
dChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VCUlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5
cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBKdXN0IGNoZWNrIGEgc2lu
Z2xlIHRpbWVzdGFtcCwgaW5ib3VuZCBSVFAgZm9yIGluc3RhbmNlLgorICAgIGlmICghbV9zdGF0
c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wICYmIHN0YXRzVHlwZSA9PSBHU1RfV0VCUlRDX1NUQVRT
X0lOQk9VTkRfUlRQKSB7CisgICAgICAgIGRvdWJsZSB0aW1lc3RhbXA7CisgICAgICAgIGlmIChn
c3Rfc3RydWN0dXJlX2dldF9kb3VibGUoc3RydWN0dXJlLCAidGltZXN0YW1wIiwgJnRpbWVzdGFt
cCkpIHsKKyAgICAgICAgICAgIGF1dG8gdHMgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKHRp
bWVzdGFtcCk7CisgICAgICAgICAgICBtX3N0YXRzRmlyc3REZWxpdmVyZWRUaW1lc3RhbXAgPSB0
czsKKworICAgICAgICAgICAgaWYgKCFpc1N0b3BwZWQoKSAmJiBtX3N0YXRzTG9nVGltZXIucmVw
ZWF0SW50ZXJ2YWwoKSAhPSBzdGF0c0xvZ0ludGVydmFsKHRzKSkgeworICAgICAgICAgICAgICAg
IG1fc3RhdHNMb2dUaW1lci5zdG9wKCk7CisgICAgICAgICAgICAgICAgbV9zdGF0c0xvZ1RpbWVy
LnN0YXJ0UmVwZWF0aW5nKHN0YXRzTG9nSW50ZXJ2YWwodHMpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChsb2dnZXIoKS53aWxsTG9nKGxvZ0NoYW5uZWwoKSwg
V1RGTG9nTGV2ZWw6OkRlYnVnKSkgeworICAgICAgICAvLyBTdGF0cyBhcmUgdmVyeSB2ZXJib3Nl
LCBsZXQncyBvbmx5IGRpc3BsYXkgdGhlbSBpbiBpbnNwZWN0b3IgY29uc29sZSBpbiB2ZXJib3Nl
IG1vZGUuCisgICAgICAgIGxvZ2dlcigpLmRlYnVnKExvZ1dlYlJUQywKKyAgICAgICAgICAgIExv
Z2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIoIkdTdHJlYW1lck1lZGlhRW5kcG9pbnQiLCAib25TdGF0
c0RlbGl2ZXJlZCIsIGxvZ0lkZW50aWZpZXIoKSksCisgICAgICAgICAgICBSVENTdGF0c0xvZ2dl
ciB7IHN0cnVjdHVyZSB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2dnZXIoKS5sb2dBbHdh
eXMoTG9nV2ViUlRDU3RhdHMsCisgICAgICAgICAgICBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVy
KCJHU3RyZWFtZXJNZWRpYUVuZHBvaW50IiwgIm9uU3RhdHNEZWxpdmVyZWQiLCBsb2dJZGVudGlm
aWVyKCkpLAorICAgICAgICAgICAgUlRDU3RhdHNMb2dnZXIgeyBzdHJ1Y3R1cmUgfSk7CisgICAg
fQorfQorCisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25TdGF0c0RlbGl2ZXJlZChj
b25zdCBHc3RTdHJ1Y3R1cmUqIHN0YXRzKQoreworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJl
PiBzdGF0c0NvcHkoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0YXRzKSk7CisgICAgY2FsbE9uTWFpblRo
cmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRoaXMsIHN0YXRzID0gc3RhdHNDb3B5
LnJlbGVhc2UoKV0geworICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2goc3RhdHMsIHN0YXRp
Y19jYXN0PEdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jPihbXShHUXVhcmssIGNvbnN0IEdWYWx1ZSog
dmFsdWUsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgICAgICBhdXRv
KiBlbmRQb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVyTWVkaWFFbmRwb2ludCo+KHVz
ZXJEYXRhKTsKKyAgICAgICAgICAgIGVuZFBvaW50LT5wcm9jZXNzU3RhdHModmFsdWUpOworICAg
ICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0pLCB0aGlzKTsKKyAgICB9KTsKK30KKyNl
bmRpZgorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OnN0YXJ0TG9nZ2luZ1N0YXRzKCkKK3sKKyAgICBpZiAobV9zdGF0c0xvZ1RpbWVyLmlz
QWN0aXZlKCkpCisgICAgICAgIG1fc3RhdHNMb2dUaW1lci5zdG9wKCk7CisgICAgbV9zdGF0c0xv
Z1RpbWVyLnN0YXJ0UmVwZWF0aW5nKHN0YXRzTG9nSW50ZXJ2YWwoU2Vjb25kczo6bmFuKCkpKTsK
K30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wTG9nZ2luZ1N0YXRzKCkKK3sK
KyAgICBtX3N0YXRzTG9nVGltZXIuc3RvcCgpOworfQorCitXVEZMb2dDaGFubmVsJiBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Ojpsb2dDaGFubmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTG9nV2Vi
UlRDOworfQorCitTZWNvbmRzIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0YXRzTG9nSW50ZXJ2
YWwoU2Vjb25kcyByZXBvcnRUaW1lc3RhbXApIGNvbnN0Cit7CisgICAgaWYgKGxvZ2dlcigpLndp
bGxMb2cobG9nQ2hhbm5lbCgpLCBXVEZMb2dMZXZlbDo6SW5mbykpCisgICAgICAgIHJldHVybiAy
X3M7CisKKyAgICBpZiAocmVwb3J0VGltZXN0YW1wIC0gbV9zdGF0c0ZpcnN0RGVsaXZlcmVkVGlt
ZXN0YW1wID4gMTVfcykKKyAgICAgICAgcmV0dXJuIDEwX3M7CisKKyAgICByZXR1cm4gNF9zOwor
fQorI2VuZGlmCisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyRGVjb2Rlcklt
cGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJiBjYWxsYmFjaykKK3sK
KyAgICAvLyBUT0RPOiBjb2xsZWN0IHN0YXRzIGFuZCBsb29rdXAgSW5ib3VuZFJ0cCAiZGVjb2Rl
cl9pbXBsZW1lbnRhdGlvbiIgZmllbGQuCisgICAgY2FsbGJhY2soeyB9KTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECituYW1lc3BhY2Ug
V1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3N0cnVjdCBMb2dBcmd1bWVudDsKKwor
dGVtcGxhdGUgPD4KK3N0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3JlOjpSVENTdGF0c0xvZ2dlcj4g
eworICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgV2ViQ29yZTo6UlRDU3RhdHNMb2dn
ZXImIGxvZ2dlcikKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcobG9nZ2VyLnRvSlNPTlN0
cmluZygpKTsKKyAgICB9Cit9OworCit9OyAvLyBuYW1lc3BhY2UgV1RGCisjZW5kaWYgLy8gIVJF
TEVBU0VfTE9HX0RJU0FCTEVECisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lck1lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzAzMmI0
YzllMDhhZDk0NzE5OGY3MzcwNGEwMmU2MWQ0NDA1OWM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFF
bmRwb2ludC5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVk
ZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJSVENSdHBSZWNlaXZlci5oIgorCisjaW5jbHVkZSA8d3RmL0xv
Z2dlckhlbHBlci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ7CitjbGFzcyBHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQ7CitjbGFzcyBNZWRpYVN0cmVhbVRyYWNrOworY2xhc3MgUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uOworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
OworCitjbGFzcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50IDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPEdTdHJlYW1lck1lZGlhRW5kcG9pbnQsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1h
aW4+CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBwcml2YXRlIExvZ2dlckhlbHBl
cgorI2VuZGlmCit7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxHU3RyZWFtZXJNZWRpYUVuZHBv
aW50PiBjcmVhdGUoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBwZWVyQ29ubmVjdGlv
bikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50KHBlZXJDb25u
ZWN0aW9uKSk7IH0KKyAgICB2aXJ0dWFsIH5HU3RyZWFtZXJNZWRpYUVuZHBvaW50KCk7CisKKyAg
ICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mKTsKKyAg
ICB2b2lkIHJlc3RhcnRJY2UoKTsKKworICAgIHZvaWQgZG9TZXRMb2NhbERlc2NyaXB0aW9uKGNv
bnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiopOworICAgIHZvaWQgZG9TZXRSZW1vdGVEZXNjcmlw
dGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24mKTsKKyAgICB2b2lkIGRvQ3JlYXRlT2Zm
ZXIoY29uc3QgUlRDT2ZmZXJPcHRpb25zJik7CisgICAgdm9pZCBkb0NyZWF0ZUFuc3dlcigpOwor
CisgICAgdm9pZCBnZXRTdGF0cyhHc3RQYWQqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKKwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFDaGFu
bmVsKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpOworICAgIHZvaWQg
b25EYXRhQ2hhbm5lbChHc3RXZWJSVENEYXRhQ2hhbm5lbCopOworCisgICAgdm9pZCBhZGRJY2VD
YW5kaWRhdGUoR1N0cmVhbWVySWNlQ2FuZGlkYXRlJiwgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpB
ZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmKTsKKworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lk
IHN0b3AoKTsKKyAgICBib29sIGlzU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BpcGVsaW5l
OyB9CisKKyAgICB2b2lkIHN1c3BlbmQoKTsKKyAgICB2b2lkIHJlc3VtZSgpOworCisgICAgdm9p
ZCBnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0aW9uPHZvaWQoU3RyaW5nJiYp
PiYmKTsKKyAgICBib29sIGlzTmVnb3RpYXRpb25OZWVkZWQoKSBjb25zdCB7IHJldHVybiBtX2lz
TmVnb3RpYXRpb25OZWVkZWQ7IH0KKworICAgIHZvaWQgY29uZmlndXJlQW5kTGlua1NvdXJjZShS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXImKTsKKworICAgIGJvb2wgYWRkVHJh
Y2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYsIE1lZGlhU3RyZWFtVHJhY2smLCBjb25zdCBG
aXhlZFZlY3RvcjxTdHJpbmc+Jik7CisgICAgdm9pZCByZW1vdmVUcmFjayhHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kJik7CisKKyAgICBzdHJ1Y3QgQmFja2VuZHMgeworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZD4gc2VuZGVyQmFja2VuZDsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4gcmVjZWl2ZXJC
YWNrZW5kOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kPiB0cmFuc2NlaXZlckJhY2tlbmQ7CisgICAgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPEJh
Y2tlbmRzPiBhZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgUlRD
UnRwVHJhbnNjZWl2ZXJJbml0Jik7CisgICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gYWRkVHJh
bnNjZWl2ZXIoTWVkaWFTdHJlYW1UcmFjayYsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYp
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+IHRy
YW5zY2VpdmVyQmFja2VuZEZyb21TZW5kZXIoR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYpOwor
CisgICAgdm9pZCBzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFj
a2VuZCYsIE1lZGlhU3RyZWFtVHJhY2smKTsKKworICAgIHZvaWQgY29sbGVjdFRyYW5zY2VpdmVy
cygpOworCisgICAgdm9pZCBjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNjZWVkZWQoR1VuaXF1
ZU91dFB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYpOworICAgIHZvaWQgY3JlYXRl
U2Vzc2lvbkRlc2NyaXB0aW9uRmFpbGVkKEdVbmlxdWVPdXRQdHI8R0Vycm9yPiYmKTsKKworICAg
IEdzdEVsZW1lbnQqIHBpcGVsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9waXBlbGluZS5nZXQoKTsg
fQorICAgIGJvb2wgaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKik7CisKKyNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKKyAgICB2b2lkIHByb2Nlc3NTdGF0cyhjb25zdCBHVmFsdWUqKTsKKyNlbmRp
ZgorCitwcm90ZWN0ZWQ6CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9pZCBvblN0
YXRzRGVsaXZlcmVkKGNvbnN0IEdzdFN0cnVjdHVyZSopOworI2VuZGlmCisKK3ByaXZhdGU6Cisg
ICAgR1N0cmVhbWVyTWVkaWFFbmRwb2ludChHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQm
KTsKKworICAgIGJvb2wgaW5pdGlhbGl6ZVBpcGVsaW5lKCk7CisgICAgdm9pZCB0ZWFyZG93blBp
cGVsaW5lKCk7CisgICAgdm9pZCBkaXNwb3NlRWxlbWVudENoYWluKEdzdEVsZW1lbnQqKTsKKwor
ICAgIHZvaWQgc2V0RGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKiwgYm9v
bCBpc0xvY2FsLCBGdW5jdGlvbjx2b2lkKCk+JiYgc3VjY2Vzc0NhbGxiYWNrLCBGdW5jdGlvbjx2
b2lkKGNvbnN0IEdFcnJvciopPiYmIGZhaWx1cmVDYWxsYmFjayk7CisgICAgdm9pZCBpbml0aWF0
ZShib29sIGlzSW5pdGlhdG9yLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJik7CisKKyAgICB2
b2lkIG9uTmVnb3RpYXRpb25OZWVkZWQoKTsKKyAgICB2b2lkIG9uSWNlQ29ubmVjdGlvbkNoYW5n
ZSgpOworICAgIHZvaWQgb25JY2VHYXRoZXJpbmdDaGFuZ2UoKTsKKyAgICB2b2lkIG9uSWNlQ2Fu
ZGlkYXRlKGd1aW50IHNkcE1MaW5lSW5kZXgsIGdjaGFyYXJyYXkgY2FuZGlkYXRlKTsKKworICAg
IE1lZGlhU3RyZWFtJiBtZWRpYVN0cmVhbUZyb21SVENTdHJlYW0oU3RyaW5nIGxhYmVsKTsKKwor
ICAgIHZvaWQgYWRkUmVtb3RlU3RyZWFtKEdzdFBhZCopOworICAgIHZvaWQgcmVtb3ZlUmVtb3Rl
U3RyZWFtKEdzdFBhZCopOworCisgICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gY3JlYXRlVHJh
bnNjZWl2ZXJCYWNrZW5kcyhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2Vp
dmVySW5pdCYsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYmKTsKKyAgICBHU3Ry
ZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UgY3JlYXRlU291cmNlRm9yVHJhY2soTWVkaWFT
dHJlYW1UcmFjayYpOworCisgICAgdm9pZCBzdG9yZVJlbW90ZU1MaW5lSW5mbyhHc3RTRFBNZXNz
YWdlKik7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gcmVxdWVzdFBhZCh1bnNpZ25lZCBtbGluZUlu
ZGV4LCBjb25zdCBHUmVmUHRyPEdzdENhcHM+Jik7CisKKyAgICB2b2lkIHNldFJlbW90ZURlc2Ny
aXB0aW9uU3VjY2VlZGVkKCk7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICB2b2lk
IGdhdGhlclN0YXRzRm9yTG9nZ2luZygpOworICAgIHZvaWQgc3RhcnRMb2dnaW5nU3RhdHMoKTsK
KyAgICB2b2lkIHN0b3BMb2dnaW5nU3RhdHMoKTsKKworICAgIGNvbnN0IExvZ2dlciYgbG9nZ2Vy
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCB2b2lk
KiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9
CisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQiOyB9CisgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgp
IGNvbnN0IGZpbmFsOworCisgICAgU2Vjb25kcyBzdGF0c0xvZ0ludGVydmFsKFNlY29uZHMpIGNv
bnN0OworI2VuZGlmCisKKyAgICBIYXNoTWFwPFN0cmluZywgUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZT4gbV9tZWRpYUZvck1pZDsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIG1lZGlh
VHlwZUZvck1pZChjb25zdCBjaGFyKiBtaWQpOworCisgICAgR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kJiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdEVsZW1l
bnQ+IG1fd2VicnRjQmluOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiBtX3JlbW90ZVN0cmVhbXNC
eUlkOworCisgICAgc3RydWN0IFBlbmRpbmdNTGluZUluZm8geworICAgICAgICBHUmVmUHRyPEdz
dENhcHM+IGNhcHM7CisgICAgICAgIGJvb2wgaXNVc2VkOworICAgICAgICBWZWN0b3I8aW50PiBw
YXlsb2FkVHlwZXM7CisgICAgfTsKKyAgICBWZWN0b3I8UGVuZGluZ01MaW5lSW5mbz4gbV9yZW1v
dGVNTGluZUluZm9zOworCisgICAgUmVmPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yPiBtX3N0YXRz
Q29sbGVjdG9yOworCisgICAgdW5zaWduZWQgbV9yZXF1ZXN0UGFkQ291bnRlciB7IDAgfTsKKyAg
ICBpbnQgbV9wdENvdW50ZXIgeyA5NiB9OworCisgICAgdW5zaWduZWQgbV9tbGluZUluZGV4IHsg
MCB9OworCisgICAgVmVjdG9yPFJlZjxSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXI+PiBtX3NvdXJjZXM7CisKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPj4gbV9wZW5k
aW5nU3RyZWFtczsKKyAgICB1bnNpZ25lZCBtX3BlbmRpbmdJbmNvbWluZ1N0cmVhbXMgeyAwIH07
CisKKyAgICBib29sIG1faXNJbml0aWF0b3IgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc05lZ290
aWF0aW9uTmVlZGVkIHsgZmFsc2UgfTsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAg
IFRpbWVyIG1fc3RhdHNMb2dUaW1lcjsKKyAgICBTZWNvbmRzIG1fc3RhdHNGaXJzdERlbGl2ZXJl
ZFRpbWVzdGFtcDsKKyAgICBSZWY8Y29uc3QgTG9nZ2VyPiBtX2xvZ2dlcjsKKyAgICBjb25zdCB2
b2lkKiBtX2xvZ0lkZW50aWZpZXI7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM4
NGVjZGRhZjY2MmY0MDYxOTZhY2VlZmI3YTRkNTM0YTY3MmJhNgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzNzMgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
CisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJNZWRpYUVuZHBvaW50LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRw
UmVjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUg
IkljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIkpTUlRDU3RhdHNSZXBvcnQuaCIKKyNpbmNsdWRl
ICJNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiUlRDSWNlQ2FuZGlkYXRlLmgiCisjaW5jbHVkZSAiUlRDUGVlckNvbm5l
Y3Rpb24uaCIKKyNpbmNsdWRlICJSVENSdHBDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJSVENS
dHBSZWNlaXZlci5oIgorI2luY2x1ZGUgIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgorI2luY2x1
ZGUgIlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1l
T3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRp
YyBzdGQ6OnVuaXF1ZV9wdHI8UGVlckNvbm5lY3Rpb25CYWNrZW5kPiBjcmVhdGVHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mIHBlZXJDb25uZWN0aW9uKQor
eworICAgIGVuc3VyZUdTdHJlYW1lckluaXRpYWxpemVkKCk7CisgICAgaWYgKCFpc0dTdHJlYW1l
clBsdWdpbkF2YWlsYWJsZSgid2VicnRjIikpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJHc3RX
ZWJSVEMgcGx1Z2luIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHRvIGluc3RhbGwgZ3N0LXBsdWdpbnMt
YmFkID49IDEuMjAgd2l0aCB0aGUgd2VicnRjIHBsdWdpbiBlbmFibGVkLiIpOworICAgICAgICBy
ZXR1cm4gbnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+KHBlZXJDb25uZWN0aW9uKTsKK30KKworQ3JlYXRlUGVl
ckNvbm5lY3Rpb25CYWNrZW5kIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlID0gY3JlYXRl
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOworCitzdGQ6Om9wdGlvbmFsPFJUQ1J0cENh
cGFiaWxpdGllcz4gUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZWNlaXZlckNhcGFiaWxpdGllcyhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBraW5kKQoreworICAgIFJUQ1J0
cENhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7CisgICAgY2FwYWJpbGl0aWVzLmhlYWRlckV4dGVu
c2lvbnMuYXBwZW5kKHsgImh0dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQtaG9sbWVyLXJtY2F0
LXRyYW5zcG9ydC13aWRlLWNjLWV4dGVuc2lvbnMtMDEiIH0pOworICAgIGlmIChraW5kID09ICJh
dWRpbyJfcykgeworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlw
ZSA9ICJhdWRpby9PUFVTIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA0ODAwMCwKKyAgICAg
ICAgICAgIC5jaGFubmVscyA9IDIsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIgorICAg
ICAgICB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjYXBhYmlsaXRpZXMuaGVhZGVyRXh0ZW5z
aW9ucy5hcHBlbmQoeyAidXJuOjNncHA6dmlkZW8tb3JpZW50YXRpb24iIH0pOworICAgICAgICBj
YXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDgiLAorICAg
ICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0g
IiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0g
InZpZGVvL1ZQOSIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAg
ICAuc2RwRm10cExpbmUgPSAicHJvZmlsZS1pZD0wIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVz
LmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5j
bG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlk
PTEiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9
ICJ2aWRlby9IMjY0IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAg
ICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgIH0KKyAgICByZXR1cm4gY2FwYWJpbGl0aWVz
OworfQorCitzdGQ6Om9wdGlvbmFsPFJUQ1J0cENhcGFiaWxpdGllcz4gUGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpzZW5kZXJDYXBhYmlsaXRpZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0
IFN0cmluZyYga2luZCkKK3sKKyAgICBSVENSdHBDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOwor
ICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJodHRwOi8vd3d3Lmll
dGYub3JnL2lkL2RyYWZ0LWhvbG1lci1ybWNhdC10cmFuc3BvcnQtd2lkZS1jYy1leHRlbnNpb25z
LTAxIiB9KTsKKyAgICBpZiAoa2luZCA9PSAiYXVkaW8iX3MpIHsKKyAgICAgICAgY2FwYWJpbGl0
aWVzLmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUgPSAiYXVkaW8vT1BVUyIsCisgICAgICAgICAg
ICAuY2xvY2tSYXRlID0gNDgwMDAsCisgICAgICAgICAgICAuY2hhbm5lbHMgPSAyLAorICAgICAg
ICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FwYWJp
bGl0aWVzLmhlYWRlckV4dGVuc2lvbnMuYXBwZW5kKHsgInVybjozZ3BwOnZpZGVvLW9yaWVudGF0
aW9uIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUg
PSAidmlkZW8vVlA4IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAg
ICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFw
cGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDkiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9
IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gInByb2ZpbGUtaWQ9MCIgfSk7Cisg
ICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL1ZQ
OSIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10
cExpbmUgPSAicHJvZmlsZS1pZD0xIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5h
cHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vSDI2NCIsCisgICAgICAgICAgICAuY2xvY2tSYXRl
ID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIiB9KTsKKyAgICB9CisgICAg
cmV0dXJuIGNhcGFiaWxpdGllczsKK30KKworR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mIHBlZXJD
b25uZWN0aW9uKQorICAgIDogUGVlckNvbm5lY3Rpb25CYWNrZW5kKHBlZXJDb25uZWN0aW9uKQor
ICAgICwgbV9lbmRwb2ludChHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGUoKnRoaXMpKQor
eworICAgIGRpc2FibGVJQ0VDYW5kaWRhdGVGaWx0ZXJpbmcoKTsKK30KKworR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjp+R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKCkgPSBk
ZWZhdWx0OworCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c3VzcGVuZCgp
Cit7CisgICAgbV9lbmRwb2ludC0+c3VzcGVuZCgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZDo6cmVzdW1lKCkKK3sKKyAgICBtX2VuZHBvaW50LT5yZXN1bWUoKTsK
K30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlc3RhcnRJY2UoKQor
eworICAgIG1fZW5kcG9pbnQtPnJlc3RhcnRJY2UoKTsKK30KKworYm9vbCBHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OnNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3Vy
YXRpb24mJiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBtX2VuZHBvaW50LT5zZXRDb25m
aWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6Z2V0U3RhdHMoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQorewor
ICAgIG1fZW5kcG9pbnQtPmdldFN0YXRzKG51bGxwdHIsIFdURk1vdmUocHJvbWlzZSkpOworfQor
CitzdGF0aWMgaW5saW5lIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIGJhY2tlbmRGcm9tUlRQ
U2VuZGVyKFJUQ1J0cFNlbmRlciYgc2VuZGVyKQoreworICAgIEFTU0VSVCghc2VuZGVyLmlzU3Rv
cHBlZCgpKTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZCY+KCpzZW5kZXIuYmFja2VuZCgpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmdldFN0YXRzKFJUQ1J0cFNlbmRlciYgc2VuZGVyLCBSZWY8RGVmZXJyZWRQcm9t
aXNlPiYmIHByb21pc2UpCit7CisgICAgaWYgKCFzZW5kZXIuYmFja2VuZCgpKSB7CisgICAgICAg
IG1fZW5kcG9pbnQtPmdldFN0YXRzKG51bGxwdHIsIFdURk1vdmUocHJvbWlzZSkpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYXV0byYgYmFja2VuZCA9IGJhY2tlbmRGcm9tUlRQU2Vu
ZGVyKHNlbmRlcik7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZDsKKyAgICBpZiAoUmVhbHRpbWVP
dXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKiBzb3VyY2UgPSBiYWNrZW5kLmF1ZGlvU291cmNl
KCkpCisgICAgICAgIHBhZCA9IHNvdXJjZS0+cGFkKCk7CisgICAgZWxzZSBpZiAoUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKiBzb3VyY2UgPSBiYWNrZW5kLnZpZGVvU291cmNl
KCkpCisgICAgICAgIHBhZCA9IHNvdXJjZS0+cGFkKCk7CisgICAgbV9lbmRwb2ludC0+Z2V0U3Rh
dHMocGFkLmdldCgpLCBXVEZNb3ZlKHByb21pc2UpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmdldFN0YXRzKFJUQ1J0cFJlY2VpdmVyJiByZWNlaXZlciwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQoreworICAgIGlmICghcmVjZWl2ZXIuYmFja2Vu
ZCgpKSB7CisgICAgICAgIG1fZW5kcG9pbnQtPmdldFN0YXRzKG51bGxwdHIsIFdURk1vdmUocHJv
bWlzZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR3N0RWxlbWVudCogYmluID0g
bnVsbHB0cjsKKyAgICBhdXRvJiBzb3VyY2UgPSByZWNlaXZlci50cmFjaygpLnByaXZhdGVUcmFj
aygpLnNvdXJjZSgpOworICAgIGlmIChzb3VyY2UuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpCisg
ICAgICAgIGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lciY+KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZSBpZiAoc291cmNlLmlzSW5jb21pbmdWaWRl
b1NvdXJjZSgpKQorICAgICAgICBiaW4gPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXImPihzb3VyY2UpLmJpbigpOworICAgIGVsc2UKKyAgICAgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1Jl
Zihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChiaW4sICJzaW5rIikpOworICAgIGF1dG8gc3Jj
UGFkID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIoc2lua1BhZC5nZXQoKSkpOworICAgIG1f
ZW5kcG9pbnQtPmdldFN0YXRzKHNyY1BhZC5nZXQoKSwgV1RGTW92ZShwcm9taXNlKSk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb1NldExvY2FsRGVzY3JpcHRp
b24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbikKK3sKKyAgICBtX2Vu
ZHBvaW50LT5kb1NldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOworICAgIG1faXNMb2Nh
bERlc2NyaXB0aW9uU2V0ID0gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmRvU2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBtX2VuZHBvaW50LT5kb1NldFJlbW90ZURlc2NyaXB0
aW9uKGRlc2NyaXB0aW9uKTsKKyAgICBtX2lzUmVtb3RlRGVzY3JpcHRpb25TZXQgPSB0cnVlOwor
fQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9DcmVhdGVPZmZlcihS
VENPZmZlck9wdGlvbnMmJiBvcHRpb25zKQoreworICAgIG1fZW5kcG9pbnQtPmRvQ3JlYXRlT2Zm
ZXIob3B0aW9ucyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpk
b0NyZWF0ZUFuc3dlcihSVENBbnN3ZXJPcHRpb25zJiYpCit7CisgICAgaWYgKCFtX2lzUmVtb3Rl
RGVzY3JpcHRpb25TZXQpIHsKKyAgICAgICAgY3JlYXRlQW5zd2VyRmFpbGVkKEV4Y2VwdGlvbiB7
IEludmFsaWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRlc2NyaXB0aW9uIHNldCIgfSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisgICAgbV9lbmRwb2ludC0+ZG9DcmVhdGVBbnN3ZXIoKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNsb3NlKCkKK3sKKyAgICBt
X2VuZHBvaW50LT5jbG9zZSgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6ZG9TdG9wKCkKK3sKKyAgICBtX2VuZHBvaW50LT5zdG9wKCk7CisgICAgbV9wZW5kaW5n
UmVjZWl2ZXJzLmNsZWFyKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjpkb0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgQWRkSWNl
Q2FuZGlkYXRlQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICB1bnNpZ25lZCBzZHBNTGluZUlu
ZGV4ID0gY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgoKSA/IGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4
KCkudmFsdWUoKSA6IDA7CisgICAgYXV0byBydGNDYW5kaWRhdGUgPSBXVEY6Om1ha2VVbmlxdWU8
R1N0cmVhbWVySWNlQ2FuZGlkYXRlPigqbmV3IEdTdHJlYW1lckljZUNhbmRpZGF0ZSB7IHNkcE1M
aW5lSW5kZXgsIGNhbmRpZGF0ZS5jYW5kaWRhdGUoKSB9KTsKKyAgICBtX2VuZHBvaW50LT5hZGRJ
Y2VDYW5kaWRhdGUoKnJ0Y0NhbmRpZGF0ZSwgV1RGTW92ZShjYWxsYmFjaykpOworfQorCitSZWY8
UlRDUnRwUmVjZWl2ZXI+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlUmVj
ZWl2ZXIoc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4mJiBiYWNr
ZW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKQorewor
ICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3BlZXJDb25uZWN0aW9u
LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisKKyAgICBhdXRvIHNvdXJjZSA9IGJhY2tlbmQt
PmNyZWF0ZVNvdXJjZSh0cmFja0tpbmQsIHRyYWNrSWQpOworICAgIC8vIFJlbW90ZSBzb3VyY2Ug
aXMgaW5pdGlhbGx5IG11dGVkIGFuZCB3aWxsIGJlIHVubXV0ZWQgd2hlbiByZWNlaXZpbmcgdGhl
IGZpcnN0IHBhY2tldC4KKyAgICBzb3VyY2UtPnNldE11dGVkKHRydWUpOworICAgIGF1dG8gdHJh
Y2tJRCA9IHNvdXJjZS0+cGVyc2lzdGVudElEKCk7CisgICAgYXV0byByZW1vdGVUcmFja1ByaXZh
dGUgPSBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKGRvY3VtZW50LmxvZ2dlcigpLCBX
VEZNb3ZlKHNvdXJjZSksIFdURk1vdmUodHJhY2tJRCkpOworICAgIGF1dG8gcmVtb3RlVHJhY2sg
PSBNZWRpYVN0cmVhbVRyYWNrOjpjcmVhdGUoZG9jdW1lbnQsIFdURk1vdmUocmVtb3RlVHJhY2tQ
cml2YXRlKSk7CisKKyAgICByZXR1cm4gUlRDUnRwUmVjZWl2ZXI6OmNyZWF0ZSgqdGhpcywgV1RG
TW92ZShyZW1vdGVUcmFjayksIFdURk1vdmUoYmFja2VuZCkpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OmNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcihjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBSVENE
YXRhQ2hhbm5lbEluaXQmIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG1fZW5kcG9pbnQtPmNyZWF0
ZURhdGFDaGFubmVsKGxhYmVsLCBvcHRpb25zKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8
UlRDUnRwU2VuZGVyPiBmaW5kRXhpc3RpbmdTZW5kZXIoY29uc3QgVmVjdG9yPFJlZlB0cjxSVENS
dHBUcmFuc2NlaXZlcj4+JiB0cmFuc2NlaXZlcnMsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQm
IHNlbmRlckJhY2tlbmQpCit7CisgICAgQVNTRVJUKHNlbmRlckJhY2tlbmQucnRjU2VuZGVyKCkp
OworICAgIGZvciAoYXV0byYgdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnMpIHsKKyAgICAgICAg
YXV0byYgc2VuZGVyID0gdHJhbnNjZWl2ZXItPnNlbmRlcigpOworICAgICAgICBpZiAoIXNlbmRl
ci5pc1N0b3BwZWQoKSAmJiBzZW5kZXJCYWNrZW5kLnJ0Y1NlbmRlcigpID09IGJhY2tlbmRGcm9t
UlRQU2VuZGVyKHNlbmRlcikucnRjU2VuZGVyKCkpCisgICAgICAgICAgICByZXR1cm4gUmVmKHNl
bmRlcik7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitFeGNlcHRpb25PcjxSZWY8
UlRDUnRwU2VuZGVyPj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFjayhN
ZWRpYVN0cmVhbVRyYWNrJiB0cmFjaywgRml4ZWRWZWN0b3I8U3RyaW5nPiYmIG1lZGlhU3RyZWFt
SWRzKQoreworICAgIGF1dG8gc2VuZGVyQmFja2VuZCA9IFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kPigqdGhpcywgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgaWYgKCFt
X2VuZHBvaW50LT5hZGRUcmFjaygqc2VuZGVyQmFja2VuZCwgdHJhY2ssIG1lZGlhU3RyZWFtSWRz
KSkKKyAgICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciwgIlVuYWJsZSB0byBhZGQg
dHJhY2siX3MgfTsKKworICAgIGlmIChhdXRvIHNlbmRlciA9IGZpbmRFeGlzdGluZ1NlbmRlciht
X3BlZXJDb25uZWN0aW9uLmN1cnJlbnRUcmFuc2NlaXZlcnMoKSwgKnNlbmRlckJhY2tlbmQpKSB7
CisgICAgICAgIGJhY2tlbmRGcm9tUlRQU2VuZGVyKCpzZW5kZXIpLnRha2VTb3VyY2UoKnNlbmRl
ckJhY2tlbmQpOworICAgICAgICBzZW5kZXItPnNldFRyYWNrKFJlZih0cmFjaykpOworICAgICAg
ICBzZW5kZXItPnNldE1lZGlhU3RyZWFtSWRzKFdURk1vdmUobWVkaWFTdHJlYW1JZHMpKTsKKyAg
ICAgICAgcmV0dXJuIHNlbmRlci5yZWxlYXNlTm9uTnVsbCgpOworICAgIH0KKworICAgIGF1dG8g
dHJhbnNjZWl2ZXJCYWNrZW5kID0gbV9lbmRwb2ludC0+dHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNl
bmRlcigqc2VuZGVyQmFja2VuZCk7CisKKyAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6
Y3JlYXRlKG1fcGVlckNvbm5lY3Rpb24sIFJlZih0cmFjayksIFdURk1vdmUoc2VuZGVyQmFja2Vu
ZCkpOworICAgIHNlbmRlci0+c2V0TWVkaWFTdHJlYW1JZHMoV1RGTW92ZShtZWRpYVN0cmVhbUlk
cykpOworICAgIGF1dG8gcmVjZWl2ZXIgPSBjcmVhdGVSZWNlaXZlcih0cmFuc2NlaXZlckJhY2tl
bmQtPmNyZWF0ZVJlY2VpdmVyQmFja2VuZCgpLCB0cmFjay5raW5kKCksIHRyYWNrLmlkKCkpOwor
ICAgIGF1dG8gdHJhbnNjZWl2ZXIgPSBSVENSdHBUcmFuc2NlaXZlcjo6Y3JlYXRlKHNlbmRlci5j
b3B5UmVmKCksIFdURk1vdmUocmVjZWl2ZXIpLCBXVEZNb3ZlKHRyYW5zY2VpdmVyQmFja2VuZCkp
OworICAgIG1fcGVlckNvbm5lY3Rpb24uYWRkSW50ZXJuYWxUcmFuc2NlaXZlcihXVEZNb3ZlKHRy
YW5zY2VpdmVyKSk7CisgICAgcmV0dXJuIHNlbmRlcjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUg
VD4KK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IEdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6YWRkVHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQoVCYmIHRyYWNrT3JL
aW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQpCit7CisgICAgYXV0byBiYWNr
ZW5kcyA9IG1fZW5kcG9pbnQtPmFkZFRyYW5zY2VpdmVyKHRyYWNrT3JLaW5kLCBpbml0KTsKKyAg
ICBpZiAoIWJhY2tlbmRzKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vz
c0Vycm9yLCAiVW5hYmxlIHRvIGFkZCB0cmFuc2NlaXZlciJfcyB9OworCisgICAgYXV0byBzZW5k
ZXIgPSBSVENSdHBTZW5kZXI6OmNyZWF0ZShtX3BlZXJDb25uZWN0aW9uLCBXVEZNb3ZlKHRyYWNr
T3JLaW5kKSwgV1RGTW92ZShiYWNrZW5kcy0+c2VuZGVyQmFja2VuZCkpOworICAgIGF1dG8gcmVj
ZWl2ZXIgPSBjcmVhdGVSZWNlaXZlcihXVEZNb3ZlKGJhY2tlbmRzLT5yZWNlaXZlckJhY2tlbmQp
LCBzZW5kZXItPnRyYWNrS2luZCgpLCBzZW5kZXItPnRyYWNrSWQoKSk7CisgICAgYXV0byB0cmFu
c2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoV1RGTW92ZShzZW5kZXIpLCBXVEZN
b3ZlKHJlY2VpdmVyKSwgV1RGTW92ZShiYWNrZW5kcy0+dHJhbnNjZWl2ZXJCYWNrZW5kKSk7Cisg
ICAgbV9wZWVyQ29ubmVjdGlvbi5hZGRJbnRlcm5hbFRyYW5zY2VpdmVyKHRyYW5zY2VpdmVyLmNv
cHlSZWYoKSk7CisgICAgcmV0dXJuIHRyYW5zY2VpdmVyOworfQorCitFeGNlcHRpb25PcjxSZWY8
UlRDUnRwVHJhbnNjZWl2ZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRy
YW5zY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZl
ckluaXQmIGluaXQpCit7CisgICAgcmV0dXJuIGFkZFRyYW5zY2VpdmVyRnJvbVRyYWNrT3JLaW5k
KFN0cmluZyB7IHRyYWNrS2luZCB9LCBpbml0KTsKK30KKworRXhjZXB0aW9uT3I8UmVmPFJUQ1J0
cFRyYW5zY2VpdmVyPj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2Nl
aXZlcihSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB0cmFjaywgY29uc3QgUlRDUnRwVHJhbnNjZWl2
ZXJJbml0JiBpbml0KQoreworICAgIHJldHVybiBhZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2lu
ZChXVEZNb3ZlKHRyYWNrKSwgaW5pdCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFj
a2VuZCYgc2VuZGVyLCBNZWRpYVN0cmVhbVRyYWNrJiB0cmFjaykKK3sKKyAgICBtX2VuZHBvaW50
LT5zZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soc2VuZGVyLCB0cmFjayk7Cit9CisKK3N0YXRpYyBp
bmxpbmUgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJiBiYWNrZW5kRnJvbVJUUFRyYW5z
Y2VpdmVyKFJUQ1J0cFRyYW5zY2VpdmVyJiB0cmFuc2NlaXZlcikKK3sKKyAgICByZXR1cm4gc3Rh
dGljX2Nhc3Q8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJj4oKnRyYW5zY2VpdmVyLmJh
Y2tlbmQoKSk7Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVyKiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmV4aXN0aW5nVHJhbnNjZWl2ZXIoV1RGOjpGdW5jdGlvbjxib29sKEdTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZCYpPiYmIG1hdGNoaW5nRnVuY3Rpb24pCit7CisgICAgZm9y
IChhdXRvJiB0cmFuc2NlaXZlciA6IG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5zY2VpdmVy
cygpKSB7CisgICAgICAgIGlmIChtYXRjaGluZ0Z1bmN0aW9uKGJhY2tlbmRGcm9tUlRQVHJhbnNj
ZWl2ZXIoKnRyYW5zY2VpdmVyKSkpCisgICAgICAgICAgICByZXR1cm4gdHJhbnNjZWl2ZXIuZ2V0
KCk7CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitSVENSdHBUcmFuc2NlaXZlciYg
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpuZXdSZW1vdGVUcmFuc2NlaXZlcihzdGQ6
OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiYmIHRyYW5zY2VpdmVy
QmFja2VuZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlKQoreworICAgIGF1dG8gdHJh
Y2tLaW5kID0gdHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA/ICJhdWRp
byJfcyA6ICJ2aWRlbyJfczsKKyAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRl
KG1fcGVlckNvbm5lY3Rpb24sIHRyYWNrS2luZCwgdHJhbnNjZWl2ZXJCYWNrZW5kLT5jcmVhdGVT
ZW5kZXJCYWNrZW5kKCp0aGlzLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgYXV0byByZWNlaXZl
ciA9IGNyZWF0ZVJlY2VpdmVyKHRyYW5zY2VpdmVyQmFja2VuZC0+Y3JlYXRlUmVjZWl2ZXJCYWNr
ZW5kKCksIHRyYWNrS2luZCwgc2VuZGVyLT50cmFja0lkKCkpOworICAgIGF1dG8gdHJhbnNjZWl2
ZXIgPSBSVENSdHBUcmFuc2NlaXZlcjo6Y3JlYXRlKFdURk1vdmUoc2VuZGVyKSwgV1RGTW92ZShy
ZWNlaXZlciksIFdURk1vdmUodHJhbnNjZWl2ZXJCYWNrZW5kKSk7CisgICAgbV9wZWVyQ29ubmVj
dGlvbi5hZGRJbnRlcm5hbFRyYW5zY2VpdmVyKHRyYW5zY2VpdmVyLmNvcHlSZWYoKSk7CisgICAg
cmV0dXJuIHRyYW5zY2VpdmVyLmdldCgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6Y29sbGVjdFRyYW5zY2VpdmVycygpCit7CisgICAgbV9lbmRwb2ludC0+Y29s
bGVjdFRyYW5zY2VpdmVycygpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6cmVtb3ZlVHJhY2soUlRDUnRwU2VuZGVyJiBzZW5kZXIpCit7CisgICAgbV9lbmRwb2lu
dC0+cmVtb3ZlVHJhY2soYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKSk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdW
aWRlb1NvdXJjZXMoKQoreworICAgIGZvciAoYXV0byYgdHJhbnNjZWl2ZXIgOiBtX3BlZXJDb25u
ZWN0aW9uLmN1cnJlbnRUcmFuc2NlaXZlcnMoKSkgeworICAgICAgICBpZiAoIXRyYW5zY2VpdmVy
LT5zZW5kZXIoKS5pc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHZpZGVvU291
cmNlID0gYmFja2VuZEZyb21SVFBTZW5kZXIodHJhbnNjZWl2ZXItPnNlbmRlcigpKS52aWRlb1Nv
dXJjZSgpKQorICAgICAgICAgICAgICAgIHZpZGVvU291cmNlLT5zZXRBcHBseVJvdGF0aW9uKHRy
dWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZDo6Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0
cmluZyYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBtX2VuZHBvaW50LT5nYXRoZXJEZWNvZGVySW1w
bGVtZW50YXRpb25OYW1lKFdURk1vdmUoY2FsbGJhY2spKTsKK30KKworYm9vbCBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmlzTmVnb3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZW5kcG9pbnQtPmlzTmVnb3RpYXRpb25OZWVkZWQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjhhZWExYTI2MDE2ZDc1ZjBiZTNmZDk4MDY4Mjk2MDg4YjllMmFlNTkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaApAQCAtMCwwICsxLDEyMCBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgor
I2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5k
OworY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDsKK2NsYXNzIEdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZDsKK2NsYXNzIFJUQ1J0cFJlY2VpdmVyOworY2xhc3MgUlRDUnRwUmVj
ZWl2ZXJCYWNrZW5kOworY2xhc3MgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uOworY2xhc3MgUlRDU3Rh
dHNSZXBvcnQ7CitjbGFzcyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI7Citj
bGFzcyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGlt
ZU1lZGlhU291cmNlR1N0cmVhbWVyOworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNl
R1N0cmVhbWVyOworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOwor
CitzdHJ1Y3QgR1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFT
VF9BTExPQ0FURUQ7CisgICAgdW5zaWduZWQgc2RwTUxpbmVJbmRleDsKKyAgICBTdHJpbmcgY2Fu
ZGlkYXRlOworfTsKKworY2xhc3MgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kIGZpbmFs
IDogcHVibGljIFBlZXJDb25uZWN0aW9uQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kKFJUQ1BlZXJDb25uZWN0aW9uJik7CisgICAgfkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIGRv
Q3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYpIGZpbmFsOworICAgIHZvaWQgZG9DcmVhdGVB
bnN3ZXIoUlRDQW5zd2VyT3B0aW9ucyYmKSBmaW5hbDsKKyAgICB2b2lkIGRvU2V0TG9jYWxEZXNj
cmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qKSBmaW5hbDsKKyAgICB2b2lkIGRv
U2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikgZmluYWw7
CisgICAgdm9pZCBkb0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmLCBBZGRJY2VDYW5k
aWRhdGVDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIGRvU3RvcCgpIGZpbmFsOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFDaGFubmVsSGFu
ZGxlcihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKSBmaW5hbDsKKyAg
ICB2b2lkIHJlc3RhcnRJY2UoKSBmaW5hbDsKKyAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVk
aWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikgZmluYWw7CisgICAgdm9pZCBnZXRTdGF0cyhSZWY8
RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKKyAgICB2b2lkIGdldFN0YXRzKFJUQ1J0cFNlbmRl
ciYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFsOworICAgIHZvaWQgZ2V0U3RhdHMoUlRD
UnRwUmVjZWl2ZXImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKKworICAgIHZvaWQg
ZW11bGF0ZVBsYXRmb3JtRXZlbnQoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9CisgICAgdm9pZCBh
cHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKSBmaW5hbDsKKworICAgIHZvaWQg
Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4m
JikgZmluYWw7CisKKyAgICBib29sIGlzTmVnb3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0
IGZpbmFsOworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBjYW5Ucmlja2xlSWNlQ2FuZGlkYXRl
cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH07CisKKyAgICBmcmllbmQgY2xhc3MgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDsKKyAgICBmcmllbmQgY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZDsKKyAgICBSVENQZWVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fcGVlckNv
bm5lY3Rpb247IH0KKworICAgIHZvaWQgZ2V0U3RhdHNTdWNjZWVkZWQoY29uc3QgRGVmZXJyZWRQ
cm9taXNlJiwgUmVmPFJUQ1N0YXRzUmVwb3J0PiYmKTsKKworICAgIEV4Y2VwdGlvbk9yPFJlZjxS
VENSdHBTZW5kZXI+PiBhZGRUcmFjayhNZWRpYVN0cmVhbVRyYWNrJiwgRml4ZWRWZWN0b3I8U3Ry
aW5nPiYmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZVRyYWNrKFJUQ1J0cFNlbmRlciYpIGZpbmFs
OworCisgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2
ZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JikgZmluYWw7Cisg
ICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIoUmVm
PE1lZGlhU3RyZWFtVHJhY2s+JiYsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpIGZpbmFs
OworICAgIHZvaWQgc2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJh
Y2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICBSVENSdHBUcmFuc2NlaXZlciogZXhp
c3RpbmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kJik+JiYpOworICAgIFJUQ1J0cFRyYW5zY2VpdmVyJiBuZXdSZW1vdGVUcmFuc2Nl
aXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiYmLCBS
ZWFsdGltZU1lZGlhU291cmNlOjpUeXBlKTsKKworICAgIHZvaWQgY29sbGVjdFRyYW5zY2VpdmVy
cygpIGZpbmFsOworCitwcml2YXRlOgorICAgIGJvb2wgaXNMb2NhbERlc2NyaXB0aW9uU2V0KCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9pc0xvY2FsRGVzY3JpcHRpb25TZXQ7IH0KKworICAgIHRl
bXBsYXRlPHR5cGVuYW1lIFQ+CisgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVy
Pj4gYWRkVHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQoVCYmIHRyYWNrT3JLaW5kLCBjb25zdCBS
VENSdHBUcmFuc2NlaXZlckluaXQmKTsKKworICAgIFJlZjxSVENSdHBSZWNlaXZlcj4gY3JlYXRl
UmVjZWl2ZXIoc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4mJiwg
Y29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCk7CisKKyAgICB2
b2lkIHN1c3BlbmQoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZSgpIGZpbmFsOworCisgICAgUmVm
PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ+IG1fZW5kcG9pbnQ7CisgICAgYm9vbCBtX2lzTG9jYWxE
ZXNjcmlwdGlvblNldCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzUmVtb3RlRGVzY3JpcHRpb25T
ZXQgeyBmYWxzZSB9OworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJJY2VD
YW5kaWRhdGU+PiBtX3BlbmRpbmdDYW5kaWRhdGVzOworICAgIFZlY3RvcjxSZWY8UlRDUnRwUmVj
ZWl2ZXI+PiBtX3BlbmRpbmdSZWNlaXZlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVy
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljMTM0M2IxMzlm
NWJhOTJmNDE1NWYzZDA1MDUwNWQyY2ZhZmNkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZl
ckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNlaXZl
ckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgPHd0Zi9nbGli
L0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSVENSdHBQYXJhbWV0ZXJz
IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0UGFyYW1ldGVycygpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8UlRDUnRwQ29udHJp
YnV0aW5nU291cmNlPiBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldENvbnRyaWJ1dGlu
Z1NvdXJjZXMoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKworVmVjdG9yPFJUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZT4gR1N0cmVhbWVyUnRw
UmVjZWl2ZXJCYWNrZW5kOjpnZXRTeW5jaHJvbml6YXRpb25Tb3VyY2VzKCkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1JlZjxSZWFsdGltZU1l
ZGlhU291cmNlPiBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmNyZWF0ZVNvdXJjZShjb25z
dCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKQoreworICAgIGlmICh0
cmFja0tpbmQgPT0gInZpZGVvIl9zKQorICAgICAgICByZXR1cm4gUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJhY2tJZC5pc29sYXRlZENvcHkoKSk7CisKKyAg
ICBSRUxFQVNFX0FTU0VSVCh0cmFja0tpbmQgPT0gImF1ZGlvIl9zKTsKKyAgICByZXR1cm4gUmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJhY2tJZC5pc29sYXRl
ZENvcHkoKSk7Cit9CisKK1JlZjxSVENSdHBUcmFuc2Zvcm1CYWNrZW5kPiBHU3RyZWFtZXJSdHBS
ZWNlaXZlckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQoKQoreworICAgIHJldHVybiBH
U3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OmNyZWF0ZShtX3J0Y1JlY2VpdmVy
KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBHU3RyZWFt
ZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICBHUmVm
UHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICBnX29iamVjdF9nZXQo
bV9ydGNSZWNlaXZlci5nZXQoKSwgInRyYW5zcG9ydCIsICZ0cmFuc3BvcnQub3V0UHRyKCksIG51
bGxwdHIpOworICAgIHJldHVybiB0cmFuc3BvcnQgPyBtYWtlVW5pcXVlPEdTdHJlYW1lckR0bHNU
cmFuc3BvcnRCYWNrZW5kPih0cmFuc3BvcnQpIDogbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mNjNhNzU5N2I5ODI3Njc2ZGUwMzNhMTliYzQzZmNkYTJmODEzMzA2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgKQEAgLTAsMCArMSw1MyBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0
cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRDUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAi
UmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdT
dHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENSdHBSZWNlaXZlckJh
Y2tlbmQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxp
Y2l0IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZChHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2Vp
dmVyPiYmIHJ0Y1JlY2VpdmVyKQorICAgICAgICA6IG1fcnRjUmVjZWl2ZXIoV1RGTW92ZShydGNS
ZWNlaXZlcikpCisgICAgeworICAgIH0KKworICAgIEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBydGNS
ZWNlaXZlcigpIHsgcmV0dXJuIG1fcnRjUmVjZWl2ZXIuZ2V0KCk7IH0KKyAgICBSZWY8UmVhbHRp
bWVNZWRpYVNvdXJjZT4gY3JlYXRlU291cmNlKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25z
dCBTdHJpbmcmIHRyYWNrSWQpOworCitwcml2YXRlOgorICAgIFJUQ1J0cFBhcmFtZXRlcnMgZ2V0
UGFyYW1ldGVycygpIGZpbmFsOworICAgIFZlY3RvcjxSVENSdHBDb250cmlidXRpbmdTb3VyY2U+
IGdldENvbnRyaWJ1dGluZ1NvdXJjZXMoKSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8UlRDUnRw
U3luY2hyb25pemF0aW9uU291cmNlPiBnZXRTeW5jaHJvbml6YXRpb25Tb3VyY2VzKCkgY29uc3Qg
ZmluYWw7CisgICAgUmVmPFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ+IHJ0Y1J0cFRyYW5zZm9ybUJh
Y2tlbmQoKSBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UlRDRHRsc1RyYW5zcG9ydEJhY2tl
bmQ+IGR0bHNUcmFuc3BvcnRCYWNrZW5kKCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJU
Q1JUUFJlY2VpdmVyPiBtX3J0Y1JlY2VpdmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNm
b3JtQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTI5MDgyZmVjYTRkNDhhODM3MDM2OTc5MTc2N2Ri
YWRhZTMzZjkwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5j
cHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2Fs
aWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3Jt
QmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgaW5saW5lIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6TWVk
aWFUeXBlIG1lZGlhVHlwZUZyb21SZWNlaXZlcihjb25zdCBHc3RXZWJSVENSVFBSZWNlaXZlciYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNmb3JtQmFj
a2VuZDo6TWVkaWFUeXBlOjpWaWRlbzsKK30KKworR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zv
cm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQoY29uc3QgR1Jl
ZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4mIHJ0Y1JlY2VpdmVyKQorICAgIDogR1N0cmVhbWVy
UnRwVHJhbnNmb3JtQmFja2VuZChtZWRpYVR5cGVGcm9tUmVjZWl2ZXIoKnJ0Y1JlY2VpdmVyKSwg
U2lkZTo6UmVjZWl2ZXIpCisgICAgLCBtX3J0Y1JlY2VpdmVyKHJ0Y1JlY2VpdmVyKQoreworfQor
CitHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6On5HU3RyZWFtZXJSdHBSZWNl
aXZlclRyYW5zZm9ybUJhY2tlbmQoKQoreworfQorCit2b2lkIEdTdHJlYW1lclJ0cFJlY2VpdmVy
VHJhbnNmb3JtQmFja2VuZDo6c2V0VHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soQ2FsbGJhY2sm
JiBjYWxsYmFjaykKK3sKKyAgICBzZXRJbnB1dENhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJh
bnNmb3JtQmFja2VuZDo6cmVxdWVzdEtleUZyYW1lKCkKK3sKKyAgICBBU1NFUlQobWVkaWFUeXBl
KCkgPT0gTWVkaWFUeXBlOjpWaWRlbyk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTg2Njc2YTA2YjdhYjll
YjBiMzJlN2RmN2M2MzQ4MTVhOGM5NzlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFu
c2Zvcm1CYWNrZW5kLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJU
Q1V0aWxzLmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQgZmluYWwgOiBw
dWJsaWMgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGlj
IFJlZjxHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBH
UmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiYgcmVjZWl2ZXIpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKHJlY2VpdmVyKSk7IH0K
KyAgICB+R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKCk7CisKK3ByaXZhdGU6
CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKGNvbnN0
IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+Jik7CisKKyAgICAvLyBSVENSdHBUcmFuc2Zv
cm1CYWNrZW5kCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayhDYWxsYmFj
ayYmKSBmaW5hbDsKKyAgICB2b2lkIHJlcXVlc3RLZXlGcmFtZSgpIGZpbmFsOworCisgICAgR1Jl
ZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gbV9ydGNSZWNlaXZlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZTY3MGE3NTJiMzc3ZTNmYjg3YTNmYzNmOTQzZmI3OTIzNDI3YzYw
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTQxIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyRFRNRlNl
bmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFt
ZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbi5oIgor
I2luY2x1ZGUgIlJUQ1J0cFNlbmRlci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNs
dWRlICJTY3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dGVtcGxhdGU8dHlwZW5hbWUgU291cmNlPgorc3RhdGljIGlubGluZSBib29sIHVwZGF0ZVRyYWNr
U291cmNlKFNvdXJjZSYgc291cmNlLCBNZWRpYVN0cmVhbVRyYWNrKiB0cmFjaykKK3sKKyAgICBp
ZiAoIXRyYWNrKSB7CisgICAgICAgIHNvdXJjZS5zdG9wKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIH0KKyAgICByZXR1cm4gc291cmNlLnNldFRyYWNrKHRyYWNrLT5wcml2YXRlVHJhY2so
KSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c3RhcnRTb3VyY2UoKQor
eworICAgIHN3aXRjaE9uKG1fc291cmNlLCBbXShSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291
cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7CisgICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICB9
LCBbXShSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7
CisgICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICB9LCBbXShzdGQ6Om51bGxwdHJfdCYpIHsK
KyAgICB9KTsKK30KKworR1JlZlB0cjxHc3RFbGVtZW50PiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNr
ZW5kOjpzdG9wU291cmNlKCkKK3sKKyAgICBzd2l0Y2hPbihtX3NvdXJjZSwgW10oUmVmPFJlYWx0
aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3Vy
Y2UtPnN0b3AoKTsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8R3N0RWxlbWVudD4oc291cmNlLT5i
aW4oKSk7CisgICAgfSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0b3AoKTsKKyAgICAgICAgcmV0dXJuIEdS
ZWZQdHI8R3N0RWxlbWVudD4oc291cmNlLT5iaW4oKSk7CisgICAgfSwgW10oc3RkOjpudWxscHRy
X3QmKSB7CisgICAgICAgIHJldHVybiBHUmVmUHRyPEdzdEVsZW1lbnQ+KG51bGxwdHIpOworICAg
IH0pOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIEdTdHJlYW1lclJ0cFNlbmRlckJh
Y2tlbmQ6OnJlcGxhY2VUcmFjayhSVENSdHBTZW5kZXImIHNlbmRlciwgTWVkaWFTdHJlYW1UcmFj
ayogdHJhY2spCit7CisgICAgaWYgKCF0cmFjaykgeworICAgICAgICBzdG9wU291cmNlKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzZW5kZXIudHJhY2soKSkgewor
ICAgICAgICBzd2l0Y2hPbihtX3NvdXJjZSwgWyZdKFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFjay0+c291
cmNlKCkudHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvKTsKKyAgICAg
ICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAgICAgICAgc291cmNlLT5zZXRTb3VyY2UodHJh
Y2stPnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICAg
ICAgfSwgWyZdKFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3Vy
Y2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFjay0+c291cmNlKCkudHlwZSgpID09IFJlYWx0
aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RvcCgp
OworICAgICAgICAgICAgc291cmNlLT5zZXRTb3VyY2UodHJhY2stPnByaXZhdGVUcmFjaygpKTsK
KyAgICAgICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICAgICAgfSwgW10oc3RkOjpudWxscHRy
X3QmKSB7CisgICAgICAgIH0pOworICAgIH0KKworICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5k
LT5zZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soKnRoaXMsICp0cmFjayk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1JUQ1J0cFNlbmRQYXJhbWV0ZXJzIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6
OmdldFBhcmFtZXRlcnMoKSBjb25zdAoreworICAgIHJldHVybiB0b1JUQ1J0cFNlbmRQYXJhbWV0
ZXJzKG1faW5pdERhdGEuZ2V0KCkpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQ6OnNldFBhcmFtZXRlcnMoY29uc3QgUlRDUnRwU2VuZFBhcmFtZXRlcnMmLCBET01Qcm9taXNl
RGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQoreworICAgIGlmICghbV9ydGNTZW5kZXIpIHsKKyAg
ICAgICAgcHJvbWlzZS5yZWplY3QoTm90U3VwcG9ydGVkRXJyb3IpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBwcm9taXNlLnJlc29sdmUoKTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPFJUQ0RUTUZTZW5kZXJCYWNrZW5kPiBHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kOjpjcmVhdGVEVE1GQmFja2VuZCgpCit7CisgICAgcmV0dXJuIG1ha2VVbmlx
dWU8R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ+KCk7Cit9CisKK1JlZjxSVENSdHBUcmFuc2Zv
cm1CYWNrZW5kPiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNr
ZW5kKCkKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6
Y3JlYXRlKG1fcnRjU2VuZGVyKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5k
OjpzZXRNZWRpYVN0cmVhbUlkcyhjb25zdCBGaXhlZFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRHRsc1RyYW5zcG9ydEJh
Y2tlbmQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKCkK
K3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICBn
X29iamVjdF9nZXQobV9ydGNTZW5kZXIuZ2V0KCksICJ0cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91
dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KSA6IG51bGxwdHI7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xYjk5N2E2ODY3M2VkYTMwODBlOWRiZDRiNGJhMjYxNTUyYTRm
ZjY0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oCkBAIC0wLDAgKzEsMTIxIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlICJSVENSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRD
UnRwU2VuZGVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZChHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQmIGJhY2tlbmQsIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiYmIHJ0Y1NlbmRlciwg
R1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEpCisgICAgICAgIDogbV9wZWVyQ29u
bmVjdGlvbkJhY2tlbmQoV2Vha1B0ciB7ICZiYWNrZW5kIH0pCisgICAgICAgICwgbV9ydGNTZW5k
ZXIoV1RGTW92ZShydGNTZW5kZXIpKQorICAgICAgICAsIG1faW5pdERhdGEoV1RGTW92ZShpbml0
RGF0YSkpCisgICAgeworICAgIH0KKworICAgIHVzaW5nIFNvdXJjZSA9IHN0ZDo6dmFyaWFudDxz
dGQ6Om51bGxwdHJfdCwgUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4s
IFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+PjsKKyAgICBHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgYmFja2Vu
ZCwgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYgcnRjU2VuZGVyLCBTb3VyY2UmJiBzb3Vy
Y2UsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmIGluaXREYXRhKQorICAgICAgICA6IG1fcGVl
ckNvbm5lY3Rpb25CYWNrZW5kKFdlYWtQdHIgeyAmYmFja2VuZCB9KQorICAgICAgICAsIG1fcnRj
U2VuZGVyKFdURk1vdmUocnRjU2VuZGVyKSkKKyAgICAgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNv
dXJjZSkpCisgICAgICAgICwgbV9pbml0RGF0YShXVEZNb3ZlKGluaXREYXRhKSkKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRSVENTZW5kZXIoR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+
JiYgcnRjU2VuZGVyKSB7IG1fcnRjU2VuZGVyID0gV1RGTW92ZShydGNTZW5kZXIpOyB9CisgICAg
R3N0V2ViUlRDUlRQU2VuZGVyKiBydGNTZW5kZXIoKSB7IHJldHVybiBtX3J0Y1NlbmRlci5nZXQo
KTsgfQorCisgICAgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKiBhdWRpb1Nv
dXJjZSgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZSwKKyAg
ICAgICAgICAgIFtdIChSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiYg
c291cmNlKSB7IHJldHVybiBzb3VyY2UucHRyKCk7IH0sCisgICAgICAgICAgICBbXSAoY29uc3Qg
YXV0byYpIC0+IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciogeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgICAgICApOworICAgIH0KKworICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lciogdmlkZW9Tb3VyY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9zb3VyY2UsCisgICAgICAgICAgICBbXSAoUmVmPFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLnB0cigpOyB9
LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSAtPiBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXIqIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICAgICAgKTsKKyAgICB9CisK
KyAgICBib29sIGhhc1NvdXJjZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChjb25zdCBzdGQ6Om51bGxwdHJfdCYp
IHsgcmV0dXJuIGZhbHNlOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSB7IHJldHVy
biB0cnVlOyB9CisgICAgICAgICk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclNvdXJjZSgpCisg
ICAgeworICAgICAgICBBU1NFUlQoaGFzU291cmNlKCkpOworICAgICAgICBtX3NvdXJjZSA9IG51
bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBzZXRTb3VyY2UoU291cmNlJiYgc291cmNlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFoYXNTb3VyY2UoKSk7CisgICAgICAgIG1fc291cmNlID0gV1RG
TW92ZShzb3VyY2UpOworICAgICAgICBBU1NFUlQoaGFzU291cmNlKCkpOworICAgIH0KKworICAg
IHZvaWQgdGFrZVNvdXJjZShHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBiYWNrZW5kKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGJhY2tlbmQuaGFzU291cmNlKCkpOworICAgICAgICBzZXRTb3Vy
Y2UoV1RGTW92ZShiYWNrZW5kLm1fc291cmNlKSk7CisgICAgfQorCisgICAgR1JlZlB0cjxHc3RF
bGVtZW50PiBzdG9wU291cmNlKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCByZXBsYWNlVHJhY2so
UlRDUnRwU2VuZGVyJiwgTWVkaWFTdHJlYW1UcmFjayopIGZpbmFsOworICAgIFJUQ1J0cFNlbmRQ
YXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFBhcmFt
ZXRlcnMoY29uc3QgUlRDUnRwU2VuZFBhcmFtZXRlcnMmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9p
ZD4mJikgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RUTUZTZW5kZXJCYWNrZW5kPiBj
cmVhdGVEVE1GQmFja2VuZCgpIGZpbmFsOworICAgIFJlZjxSVENSdHBUcmFuc2Zvcm1CYWNrZW5k
PiBydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkgZmluYWw7CisgICAgdm9pZCBzZXRNZWRpYVN0cmVh
bUlkcyhjb25zdCBGaXhlZFZlY3RvcjxTdHJpbmc+JikgZmluYWw7CisgICAgc3RkOjp1bmlxdWVf
cHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBkdGxzVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFs
OworCisgICAgdm9pZCBzdGFydFNvdXJjZSgpOworCisgICAgV2Vha1B0cjxHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ+IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kOworICAgIEdSZWZQdHI8
R3N0V2ViUlRDUlRQU2VuZGVyPiBtX3J0Y1NlbmRlcjsKKyAgICBTb3VyY2UgbV9zb3VyY2U7Cisg
ICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IG1faW5pdERhdGE7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRl
clRyYW5zZm9ybUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2NmM0ZGVjMWJiMDNhMzI3N2Q5MmIw
NjU0MjljNjQwNzJiZTE0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNm
b3JtQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgaW5saW5lIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6Ok1l
ZGlhVHlwZSBtZWRpYVR5cGVGcm9tU2VuZGVyKGNvbnN0IEdzdFdlYlJUQ1JUUFNlbmRlciYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNmb3JtQmFja2Vu
ZDo6TWVkaWFUeXBlOjpWaWRlbzsKK30KKworR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFj
a2VuZDo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdz
dFdlYlJUQ1JUUFNlbmRlcj4mIHJ0Y1NlbmRlcikKKyAgICA6IEdTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQobWVkaWFUeXBlRnJvbVNlbmRlcigqcnRjU2VuZGVyKSwgU2lkZTo6U2VuZGVyKQor
ICAgICwgbV9ydGNTZW5kZXIocnRjU2VuZGVyKQoreworfQorCitHU3RyZWFtZXJSdHBTZW5kZXJU
cmFuc2Zvcm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCgpCit7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6c2V0VHJhbnNm
b3JtYWJsZUZyYW1lQ2FsbGJhY2soQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBzZXRJbnB1
dENhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Cit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFt
ZSgpCit7CisgICAgQVNTRVJUKG1lZGlhVHlwZSgpID09IE1lZGlhVHlwZTo6VmlkZW8pOworICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0
cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42YjBhNTc2ZGIxMjY4M2U3NTg5Nzg0MmQxNGE3OTU4YTQ5MGU5MjZmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdT
dHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyU2VuZGVyVHJhbnNmb3Jt
ZXI7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQgZmluYWwgOiBw
dWJsaWMgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxHU3RyZWFtZXJSdHBTZW5kZXJUcmFu
c2Zvcm1CYWNrZW5kPiBjcmVhdGUoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiBz
ZW5kZXIpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3Jt
QmFja2VuZChzZW5kZXIpKTsgfQorICAgIH5HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNr
ZW5kKCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNm
b3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mKTsKKworICAgIC8v
IFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lkIHNldFRyYW5zZm9ybWFibGVGcmFtZUNh
bGxiYWNrKENhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVxdWVzdEtleUZyYW1lKCkgZmlu
YWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9ydGNTZW5kZXI7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNWQxMGEyYzRhYWVkYTk4YmFi
MmUwNmRhNDk0NDFlNWNiYjRkMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQorCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0
aWxzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENSdHBDb2Rl
Y0NhcGFiaWxpdHkuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK0dTVF9E
RUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVm
aW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpHU3RyZWFt
ZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4m
JiBydGNUcmFuc2NlaXZlcikKKyAgICA6IG1fcnRjVHJhbnNjZWl2ZXIoV1RGTW92ZShydGNUcmFu
c2NlaXZlcikpCit7CisgICAgZ19vYmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJk
by1uYWNrIiwgdHJ1ZSwgImZlYy10eXBlIiwgR1NUX1dFQlJUQ19GRUNfVFlQRV9VTFBfUkVELCBu
dWxscHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2Vu
ZD4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVSZWNlaXZlckJhY2tlbmQo
KQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IHJlY2VpdmVyOworICAgIGdf
b2JqZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAicmVjZWl2ZXIiLCAmcmVjZWl2ZXIu
b3V0UHRyKCksIG51bGxwdHIpOworICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVy
UnRwUmVjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJlY2VpdmVyKSk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJh
Y2tlbmQ6OmNyZWF0ZVNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
JiBiYWNrZW5kLCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmJiBzb3VyY2UsIEdV
bmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmIGluaXREYXRhKQoreworICAgIEdSZWZQdHI8R3N0V2Vi
UlRDUlRQU2VuZGVyPiBzZW5kZXI7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIu
Z2V0KCksICJzZW5kZXIiLCAmc2VuZGVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4g
V1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+KGJhY2tlbmQsIFdURk1v
dmUoc2VuZGVyKSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKGluaXREYXRhKSk7Cit9CisKK1JU
Q1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6
ZGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlv
biBnc3REaXJlY3Rpb247CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCks
ICJkaXJlY3Rpb24iLCAmZ3N0RGlyZWN0aW9uLCBudWxscHRyKTsKKyAgICByZXR1cm4gdG9SVENS
dHBUcmFuc2NlaXZlckRpcmVjdGlvbihnc3REaXJlY3Rpb24pOworfQorCitzdGQ6Om9wdGlvbmFs
PFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ6OmN1cnJlbnREaXJlY3Rpb24oKSBjb25zdAoreworICAgIEdzdFdlYlJUQ1JUUFRyYW5zY2Vp
dmVyRGlyZWN0aW9uIGdzdERpcmVjdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV9ydGNUcmFuc2Nl
aXZlci5nZXQoKSwgImN1cnJlbnQtZGlyZWN0aW9uIiwgJmdzdERpcmVjdGlvbiwgbnVsbHB0cik7
CisgICAgaWYgKCFnc3REaXJlY3Rpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cisg
ICAgcmV0dXJuIHRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZ3N0RGlyZWN0aW9uKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNldERpcmVjdGlvbihSVENS
dHBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgZ19vYmplY3Rfc2V0KG1f
cnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJkaXJlY3Rpb24iLCBmcm9tUlRDUnRwVHJhbnNjZWl2ZXJE
aXJlY3Rpb24oZGlyZWN0aW9uKSwgbnVsbHB0cik7Cit9CisKK1N0cmluZyBHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQ6Om1pZCgpCit7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBtaWQ7
CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJtaWQiLCAmbWlkLm91
dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gbWlkLmdldCgpOworfQorCit2b2lkIEdTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c3RvcCgpCit7CisgICAgLy8gRklYTUU6IHdlYnJ0
Y2JpbiB0cmFuc2NlaXZlcnMgY2FuJ3QgYmUgc3RvcHBlZCB5ZXQuCisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworYm9vbCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnN0b3BwZWQo
KSBjb25zdAoreworICAgIC8vIEZJWE1FOiB3ZWJydGNiaW4gdHJhbnNjZWl2ZXJzIGNhbid0IGJl
IHN0b3BwZWQgeWV0LgorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBFeGNl
cHRpb25PcjxHc3RDYXBzKj4gdG9SdHBDb2RlY0NhcGFiaWxpdHkoY29uc3QgUlRDUnRwQ29kZWND
YXBhYmlsaXR5JiBjb2RlYykKK3sKKyAgICBpZiAoIWNvZGVjLm1pbWVUeXBlLnN0YXJ0c1dpdGgo
InZpZGVvLyIpICYmICFjb2RlYy5taW1lVHlwZS5zdGFydHNXaXRoKCJhdWRpby8iKSkKKyAgICAg
ICAgcmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRNb2RpZmljYXRpb25FcnJvciwgIlJUQ1J0cENv
ZGVjQ2FwYWJpbGl0eSBiYWQgbWltZVR5cGUiIH07CisKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBj
b2RlYy5taW1lVHlwZS5zcGxpdCgnLycpOworICAgIGF1dG8qIGNhcHMgPSBnc3RfY2Fwc19uZXdf
c2ltcGxlKCJhcHBsaWNhdGlvbi94LXJ0cCIsICJtZWRpYSIsIEdfVFlQRV9TVFJJTkcsIGNvbXBv
bmVudHNbMF0uYXNjaWkoKS5kYXRhKCksICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklORywg
Y29tcG9uZW50c1sxXS5hc2NpaSgpLmRhdGEoKSwgbnVsbHB0cik7CisgICAgZ3N0X2NhcHNfc2V0
X3NpbXBsZShjYXBzLCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIGNvZGVjLmNsb2NrUmF0ZSwg
bnVsbHB0cik7CisgICAgaWYgKGNvZGVjLmNoYW5uZWxzKQorICAgICAgICBnc3RfY2Fwc19zZXRf
c2ltcGxlKGNhcHMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsICpjb2RlYy5jaGFubmVscywgbnVs
bHB0cik7CisKKyAgICBpZiAoIWNvZGVjLnNkcEZtdHBMaW5lLmlzRW1wdHkoKSkKKyAgICAgICAg
R1NUX0ZJWE1FKCJVbnByb2Nlc3NlZCBTRFAgRm10cExpbmU6ICVzIiwgY29kZWMuc2RwRm10cExp
bmUudXRmOCgpLmRhdGEoKSk7CisgICAgR1NUX0RFQlVHKCJDb2RlYyBjYXBhYmlsaXR5OiAlIiBH
U1RfUFRSX0ZPUk1BVCwgY2Fwcyk7CisgICAgcmV0dXJuIGNhcHM7Cit9CisKK0V4Y2VwdGlvbk9y
PHZvaWQ+IEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c2V0Q29kZWNQcmVmZXJlbmNl
cyhjb25zdCBWZWN0b3I8UlRDUnRwQ29kZWNDYXBhYmlsaXR5PiYgY29kZWNzKQoreworICAgIGF1
dG8gZ3N0Q29kZWNzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICBmb3Ig
KGF1dG8mIGNvZGVjIDogY29kZWNzKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gdG9SdHBDb2Rl
Y0NhcGFiaWxpdHkoY29kZWMpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQor
ICAgICAgICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgICAgIGdz
dF9jYXBzX2FwcGVuZChnc3RDb2RlY3MuZ2V0KCksIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUo
KSk7CisgICAgfQorICAgIGdfb2JqZWN0X3NldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiY29k
ZWMtcHJlZmVyZW5jZXMiLCBnc3RDb2RlY3MuZ2V0KCksIG51bGxwdHIpOworICAgIHJldHVybiB7
IH07Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVhNzczMDRiMDZlNDE4
MGZjNzA3MTQ3ZjU0ODg2OTg1ODgxNmE2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiUlRDUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOworCitjbGFzcyBHU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBH
U3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2Nl
aXZlcj4mJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNr
ZW5kPiBjcmVhdGVSZWNlaXZlckJhY2tlbmQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVh
bWVyUnRwU2VuZGVyQmFja2VuZD4gY3JlYXRlU2VuZGVyQmFja2VuZChHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQmLCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmJiwgR1Vu
aXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYpOworCisgICAgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIq
IHJ0Y1RyYW5zY2VpdmVyKCkgeyByZXR1cm4gbV9ydGNUcmFuc2NlaXZlci5nZXQoKTsgfQorCitw
cml2YXRlOgorICAgIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0
IGZpbmFsOworICAgIHN0ZDo6b3B0aW9uYWw8UlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24+IGN1
cnJlbnREaXJlY3Rpb24oKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldERpcmVjdGlvbihSVENS
dHBUcmFuc2NlaXZlckRpcmVjdGlvbikgZmluYWw7CisgICAgU3RyaW5nIG1pZCgpIGZpbmFsOwor
ICAgIHZvaWQgc3RvcCgpIGZpbmFsOworICAgIGJvb2wgc3RvcHBlZCgpIGNvbnN0IGZpbmFsOwor
ICAgIEV4Y2VwdGlvbk9yPHZvaWQ+IHNldENvZGVjUHJlZmVyZW5jZXMoY29uc3QgVmVjdG9yPFJU
Q1J0cENvZGVjQ2FwYWJpbGl0eT4mKSBmaW5hbDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQ
VHJhbnNjZWl2ZXI+IG1fcnRjVHJhbnNjZWl2ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjk5YjRhNmEzN2U1ZmIwM2NlOTgzNjMwNmNiZWZjZGZkOWE1YTBmNTMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcApAQCAtMCwwICsxLDQ3IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJh
Y2tlbmQ6OnNldElucHV0Q2FsbGJhY2soQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBMb2Nr
ZXIgaG9sZExvY2sgeyBtX2lucHV0Q2FsbGJhY2tMb2NrIH07CisgICAgbV9pbnB1dENhbGxiYWNr
ID0gV1RGTW92ZShjYWxsYmFjayk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFj
a2VuZDo6Y2xlYXJUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjaygpCit7CisgICAgc2V0SW5wdXRD
YWxsYmFjayh7IH0pOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OnBy
b2Nlc3NUcmFuc2Zvcm1lZEZyYW1lKFJUQ1J0cFRyYW5zZm9ybWFibGVGcmFtZSYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRw
VHJhbnNmb3JtQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5NTQ0
OGZjN2QzMjYxOGY3OGU3ZTgxNWZjMTVlMTQ5NjExYjJiM2IKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBU
cmFuc2Zvcm1CYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJSVENSdHBUcmFuc2Zvcm1CYWNrZW5kLmgiCisj
aW5jbHVkZSA8d3RmL0xvY2suaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3Ry
ZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kIDogcHVibGljIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQg
eworcHJvdGVjdGVkOgorICAgIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQoTWVkaWFUeXBl
LCBTaWRlKTsKKyAgICB2b2lkIHNldElucHV0Q2FsbGJhY2soQ2FsbGJhY2smJik7CisKK3Byb3Rl
Y3RlZDoKKyAgICBNZWRpYVR5cGUgbWVkaWFUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9t
ZWRpYVR5cGU7IH0KKworcHJpdmF0ZToKKyAgICAvLyBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kCisg
ICAgdm9pZCBwcm9jZXNzVHJhbnNmb3JtZWRGcmFtZShSVENSdHBUcmFuc2Zvcm1hYmxlRnJhbWUm
KSBmaW5hbDsKKyAgICB2b2lkIGNsZWFyVHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soKSBmaW5h
bDsKKyAgICBTaWRlIHNpZGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NpZGU7IH0KKworICAg
IE1lZGlhVHlwZSBtX21lZGlhVHlwZTsKKyAgICBTaWRlIG1fc2lkZTsKKworICAgIExvY2sgbV9p
bnB1dENhbGxiYWNrTG9jazsKKyAgICBDYWxsYmFjayBtX2lucHV0Q2FsbGJhY2s7CisKKyAgICBM
b2NrIG1fb3V0cHV0Q2FsbGJhY2tMb2NrOworfTsKKworaW5saW5lIEdTdHJlYW1lclJ0cFRyYW5z
Zm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQoTWVkaWFUeXBlIG1lZGlh
VHlwZSwgU2lkZSBzaWRlKQorICAgIDogbV9tZWRpYVR5cGUobWVkaWFUeXBlKQorICAgICwgbV9z
aWRlKHNpZGUpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFu
c3BvcnRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGNm
ZWQ3M2I3NjNjMjBhZjkwNzkyZjI2NGM5NWQzMmI4NDY4ZTliCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJT
Y3RwVHJhbnNwb3J0QmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3N0YXRpYyBpbmxpbmUgUlRDU2N0cFRyYW5zcG9ydFN0YXRlIHRvUlRDU2N0cFRyYW5z
cG9ydFN0YXRlKEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnRTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0
Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NDVFBfVFJBTlNQT1JUX1NUQVRFX05F
VzoKKyAgICBjYXNlIEdTVF9XRUJSVENfU0NUUF9UUkFOU1BPUlRfU1RBVEVfQ09OTkVDVElORzoK
KyAgICAgICAgcmV0dXJuIFJUQ1NjdHBUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGluZzsKKyAgICBj
YXNlIEdTVF9XRUJSVENfU0NUUF9UUkFOU1BPUlRfU1RBVEVfQ09OTkVDVEVEOgorICAgICAgICBy
ZXR1cm4gUlRDU2N0cFRyYW5zcG9ydFN0YXRlOjpDb25uZWN0ZWQ7CisgICAgY2FzZSBHU1RfV0VC
UlRDX1NDVFBfVFJBTlNQT1JUX1NUQVRFX0NMT1NFRDoKKyAgICAgICAgcmV0dXJuIFJUQ1NjdHBU
cmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJT
Y3RwVHJhbnNwb3J0QmFja2VuZChHUmVmUHRyPEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ+JiYgdHJh
bnNwb3J0KQorICAgIDogbV9iYWNrZW5kKFdURk1vdmUodHJhbnNwb3J0KSkKK3sKKyAgICBBU1NF
UlQobV9iYWNrZW5kKTsKK30KKworR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6On5HU3Ry
ZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgdW5yZWdpc3RlckNsaWVudCgpOwor
fQorCitVbmlxdWVSZWY8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+IEdTdHJlYW1lclNjdHBUcmFu
c3BvcnRCYWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgR1JlZlB0cjxHc3RX
ZWJSVENEVExTVHJhbnNwb3J0PiB0cmFuc3BvcnQ7CisgICAgZ19vYmplY3RfZ2V0KG1fYmFja2Vu
ZC5nZXQoKSwgInRyYW5zcG9ydCIsICZ0cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworICAg
IHJldHVybiBtYWtlVW5pcXVlUmVmPEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kPih0cmFu
c3BvcnQpOworfQorCit2b2lkIEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3Rl
ckNsaWVudChDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICBt
X2NsaWVudCA9IGNsaWVudDsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9iYWNrZW5k
LmdldCgpLCAibm90aWZ5OjpzdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lclNjdHBUcmFu
c3BvcnRCYWNrZW5kKiBiYWNrZW5kKSB7CisgICAgICAgIGJhY2tlbmQtPnN0YXRlQ2hhbmdlZCgp
OworICAgIH0pLCB0aGlzKTsKK30KKwordm9pZCBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2Vu
ZDo6dW5yZWdpc3RlckNsaWVudCgpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9kYXRhKG1fYmFja2VuZC5nZXQoKSwgdGhpcyk7CisgICAgbV9jbGllbnQuY2xlYXIoKTsK
K30KKwordm9pZCBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKCkK
K3sKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBHc3RXZWJSVENT
Q1RQVHJhbnNwb3J0U3RhdGUgdHJhbnNwb3J0U3RhdGU7CisgICAgZ3VpbnQxNiBtYXhDaGFubmVs
czsKKyAgICB1aW50NjRfdCBtYXhNZXNzYWdlU2l6ZTsKKyAgICBnX29iamVjdF9nZXQobV9iYWNr
ZW5kLmdldCgpLCAic3RhdGUiLCAmdHJhbnNwb3J0U3RhdGUsICJtYXgtbWVzc2FnZS1zaXplIiwg
Jm1heE1lc3NhZ2VTaXplLCAibWF4LWNoYW5uZWxzIiwgJm1heENoYW5uZWxzLCBudWxscHRyKTsK
KyAgICBjYWxsT25NYWluVGhyZWFkKFt0aGlzLCB0cmFuc3BvcnRTdGF0ZSwgbWF4Q2hhbm5lbHMs
IG1heE1lc3NhZ2VTaXplXSB7CisgICAgICAgIGlmICghbV9jbGllbnQpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgbV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDU2N0cFRyYW5z
cG9ydFN0YXRlKHRyYW5zcG9ydFN0YXRlKSwgbWF4TWVzc2FnZVNpemUsIG1heENoYW5uZWxzKTsK
KyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9y
dEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk4MGZjODQ5OGMw
NWMzOTdkY2IwNmM3MGM0MzMwOGIwMjkwZjAyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3Bv
cnRCYWNrZW5kLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEt
MjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRD
U2N0cFRyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCit0eXBl
ZGVmIHN0cnVjdCBfR3N0V2ViUlRDU0NUUFRyYW5zcG9ydCBHc3RXZWJSVENTQ1RQVHJhbnNwb3J0
OworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclNjdHBUcmFuc3BvcnRC
YWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kLCBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ+IHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJTY3RwVHJh
bnNwb3J0QmFja2VuZChHUmVmUHRyPEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ+JiYpOworICAgIH5H
U3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBz
dGF0ZUNoYW5nZWQoKTsKKworcHJpdmF0ZSA6CisgICAgLy8gUlRDU2N0cFRyYW5zcG9ydEJhY2tl
bmQKKyAgICBjb25zdCB2b2lkKiBiYWNrZW5kKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNr
ZW5kLmdldCgpOyB9CisgICAgVW5pcXVlUmVmPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBkdGxz
VHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoQ2xpZW50
JikgZmluYWw7CisgICAgdm9pZCB1bnJlZ2lzdGVyQ2xpZW50KCkgZmluYWw7CisKKyAgICBHUmVm
UHRyPEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ+IG1fYmFja2VuZDsKKyAgICBXZWFrUHRyPENsaWVu
dD4gbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0Nv
bGxlY3Rvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYxOTNhZjU2OTBhMTc4
OTBhZmUxZWNmOTc0ZmJjYzYyODc5NDFiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9y
LmNwcApAQCAtMCwwICsxLDI3MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJ
Z2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgi
CisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNs
dWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiSlNET01NYXBMaWtlLmgiCisj
aW5jbHVkZSAiSlNSVENTdGF0c1JlcG9ydC5oIgorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVf
QVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RB
QkxFX0FQSQorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworR1NUX0RFQlVHX0NBVEVH
T1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NB
VF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1N0YXRzKFJUQ1N0YXRzUmVwb3J0OjpT
dGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGRvdWJs
ZSB0aW1lc3RhbXA7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShzdHJ1Y3R1cmUs
ICJ0aW1lc3RhbXAiLCAmdGltZXN0YW1wKSkKKyAgICAgICAgc3RhdHMudGltZXN0YW1wID0gdGlt
ZXN0YW1wOworICAgIHN0YXRzLmlkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVy
ZSwgImlkIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDUlRQU3RyZWFtU3RhdHMo
UlRDU3RhdHNSZXBvcnQ6OlJ0cFN0cmVhbVN0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgZmlsbFJUQ1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworCisg
ICAgc3RhdHMudHJhbnNwb3J0SWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJl
LCAidHJhbnNwb3J0LWlkIik7CisgICAgc3RhdHMuY29kZWNJZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0
X3N0cmluZyhzdHJ1Y3R1cmUsICJjb2RlYy1pZCIpOworCisgICAgdW5zaWduZWQgdmFsdWU7Cisg
ICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAic3NyYyIsICZ2YWx1ZSkp
CisgICAgICAgIHN0YXRzLnNzcmMgPSB2YWx1ZTsKKworICAgIC8vIEZJWE1FOgorICAgIC8vIHN0
YXRzLnRyYW5zcG9ydElkCisgICAgLy8gc3RhdHMuY29kZWNJZAorICAgIC8vIHN0YXRzLm1lZGlh
VHlwZQorICAgIC8vIHN0YXRzLmtpbmQKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVEND
b2RlY1N0YXRzKFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzJiBzdGF0cywgY29uc3QgR3N0U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZmlsbFJUQ1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUp
OworCisgICAgdW5zaWduZWQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQo
c3RydWN0dXJlLCAicGF5bG9hZC10eXBlIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMucGF5bG9h
ZFR5cGUgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUs
ICJjbG9jay1yYXRlIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuY2xvY2tSYXRlID0gdmFsdWU7
CisKKyAgICAvLyBGSVhNRToKKyAgICAvLyBzdGF0cy5taW1lVHlwZSA9CisgICAgLy8gc3RhdHMu
Y2hhbm5lbHMgPQorICAgIC8vIHN0YXRzLnNkcEZtdHBMaW5lID0KKyAgICAvLyBzdGF0cy5pbXBs
ZW1lbnRhdGlvbiA9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsSW5ib3VuZFJUUFN0cmVh
bVN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMmIHN0YXRzLCBjb25z
dCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDUlRQU3RyZWFtU3RhdHMo
c3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0
cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgInBhY2tldHMtcmVjZWl2ZWQiLCAmdmFsdWUp
KQorICAgICAgICBzdGF0cy5wYWNrZXRzUmVjZWl2ZWQgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0
cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgImJ5dGVzLXJlY2VpdmVkIiwgJnZhbHVlKSkK
KyAgICAgICAgc3RhdHMuYnl0ZXNSZWNlaXZlZCA9IHZhbHVlOworCisgICAgdW5zaWduZWQgcGFj
a2V0c0xvc3Q7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAicGFj
a2V0cy1sb3N0IiwgJnBhY2tldHNMb3N0KSkKKyAgICAgICAgc3RhdHMucGFja2V0c0xvc3QgPSBw
YWNrZXRzTG9zdDsKKworICAgIGRvdWJsZSBqaXR0ZXI7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVf
Z2V0X2RvdWJsZShzdHJ1Y3R1cmUsICJqaXR0ZXIiLCAmaml0dGVyKSkKKyAgICAgICAgc3RhdHMu
aml0dGVyID0gaml0dGVyOworCisgICAgLy8gRklYTUU6CisgICAgLy8gc3RhdHMuZnJhY3Rpb25M
b3N0ID0KKyAgICAvLyBzdGF0cy5wYWNrZXRzRGlzY2FyZGVkID0KKyAgICAvLyBzdGF0cy5wYWNr
ZXRzUmVwYWlyZWQgPQorICAgIC8vIHN0YXRzLmJ1cnN0UGFja2V0c0xvc3QgPQorICAgIC8vIHN0
YXRzLmJ1cnN0UGFja2V0c0Rpc2NhcmRlZCA9CisgICAgLy8gc3RhdHMuYnVyc3RMb3NzQ291bnQg
PQorICAgIC8vIHN0YXRzLmJ1cnN0RGlzY2FyZENvdW50ID0KKyAgICAvLyBzdGF0cy5idXJzdExv
c3NSYXRlID0KKyAgICAvLyBzdGF0cy5idXJzdERpc2NhcmRSYXRlID0KKyAgICAvLyBzdGF0cy5n
YXBMb3NzUmF0ZSA9CisgICAgLy8gc3RhdHMuZ2FwRGlzY2FyZFJhdGUgPQorICAgIC8vIHN0YXRz
LmZyYW1lc0RlY29kZWQgPQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbE91dGJvdW5kUlRQ
U3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMmIHN0YXRz
LCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDUlRQU3RyZWFt
U3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICBpZiAo
Z3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgInBhY2tldHMtc2VudCIsICZ2YWx1
ZSkpCisgICAgICAgIHN0YXRzLnBhY2tldHNTZW50ID0gdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1
Y3R1cmVfZ2V0X3VpbnQ2NChzdHJ1Y3R1cmUsICJieXRlcy1zZW50IiwgJnZhbHVlKSkKKyAgICAg
ICAgc3RhdHMuYnl0ZXNTZW50ID0gdmFsdWU7CisKKyAgICAvLyBGSVhNRQorICAgIC8vIHN0YXRz
LnRhcmdldEJpdHJhdGUgPQorICAgIC8vIHN0YXRzLmZyYW1lc0VuY29kZWQgPQorfQorCitzdGF0
aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1BlZXJDb25uZWN0aW9uU3RhdHMoUlRDU3RhdHNSZXBvcnQ6
OlBlZXJDb25uZWN0aW9uU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICBpbnQgdmFs
dWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJkYXRhLWNoYW5u
ZWxzLW9wZW5lZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLmRhdGFDaGFubmVsc09wZW5lZCA9
IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAiZGF0YS1j
aGFubmVscy1jbG9zZWQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5kYXRhQ2hhbm5lbHNDbG9z
ZWQgPSB2YWx1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENUcmFuc3BvcnRTdGF0
cyhSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisK
KyAgICAvLyBGSVhNRQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gZmlsbFJlcG9ydENhbGxiYWNrKEdR
dWFyaywgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgaWYg
KCFHU1RfVkFMVUVfSE9MRFNfU1RSVUNUVVJFKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFRSVUU7
CisKKyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF92YWx1ZV9nZXRfc3Ry
dWN0dXJlKHZhbHVlKTsKKyAgICBHc3RXZWJSVENTdGF0c1R5cGUgc3RhdHNUeXBlOworICAgIGlm
ICghZ3N0X3N0cnVjdHVyZV9nZXQoc3RydWN0dXJlLCAidHlwZSIsIEdTVF9UWVBFX1dFQlJUQ19T
VEFUU19UWVBFLCAmc3RhdHNUeXBlLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisK
KyAgICBET01NYXBBZGFwdGVyJiByZXBvcnQgPSAqcmVpbnRlcnByZXRfY2FzdDxET01NYXBBZGFw
dGVyKj4odXNlckRhdGEpOworCisgICAgc3dpdGNoIChzdGF0c1R5cGUpIHsKKyAgICBjYXNlIEdT
VF9XRUJSVENfU1RBVFNfQ09ERUM6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3Rh
dHMgc3RhdHM7CisgICAgICAgIGZpbGxSVENDb2RlY1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOwor
ICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1Jl
cG9ydDo6Q29kZWNTdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfSU5CT1VORF9SVFA6IHsKKyAg
ICAgICAgUlRDU3RhdHNSZXBvcnQ6OkluYm91bmRSdHBTdHJlYW1TdGF0cyBzdGF0czsKKyAgICAg
ICAgZmlsbEluYm91bmRSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKyAgICAgICAg
cmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6Oklu
Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfT1VUQk9VTkRfUlRQOiB7
CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpPdXRib3VuZFJ0cFN0cmVhbVN0YXRzIHN0YXRzOwor
ICAgICAgICBmaWxsT3V0Ym91bmRSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKyAg
ICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBv
cnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1JFTU9URV9J
TkJPVU5EX1JUUDogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0
YXRzIHN0YXRzOworICAgICAgICBmaWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1
Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxS
VENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUo
c3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFU
U19SRU1PVEVfT1VUQk9VTkRfUlRQOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpPdXRib3Vu
ZFJ0cFN0cmVhbVN0YXRzIHN0YXRzOworICAgICAgICBmaWxsT3V0Ym91bmRSVFBTdHJlYW1TdGF0
cyhzdGF0cywgc3RydWN0dXJlKTsKKyAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElE
TERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0
cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBH
U1RfV0VCUlRDX1NUQVRTX0NTUkM6CisgICAgICAgIEdTVF9GSVhNRSgiRGVwcmVjYXRlZCBzdGF0
czogY3NyYyIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUEVF
Ul9DT05ORUNUSU9OOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVjdGlvblN0
YXRzIHN0YXRzOworICAgICAgICBmaWxsUlRDUGVlckNvbm5lY3Rpb25TdGF0cyhzdGF0cywgc3Ry
dWN0dXJlKTsKKyAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8
UlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShz
dGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRT
X1RSQU5TUE9SVDogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHMgc3Rh
dHM7CisgICAgICAgIGZpbGxSVENUcmFuc3BvcnRTdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKyAg
ICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBv
cnQ6OlRyYW5zcG9ydFN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19TVFJFQU06CisgICAgICAg
IEdTVF9GSVhNRSgiRGVwcmVjYXRlZCBzdGF0czogc3RyZWFtIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19EQVRBX0NIQU5ORUw6CisgICAgICAgIEdTVF9GSVhN
RSgiTWlzc2luZyBkYXRhLWNoYW5uZWwgc3RhdHMgc3VwcG9ydCIpOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfQ0FORElEQVRFX1BBSVI6CisgICAgY2FzZSBHU1Rf
V0VCUlRDX1NUQVRTX0xPQ0FMX0NBTkRJREFURToKKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNf
UkVNT1RFX0NBTkRJREFURToKKyAgICAgICAgR1NUX0ZJWE1FKCJNaXNzaW5nIGNhbmRpZGF0ZSBz
dGF0cyBzdXBwb3J0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFU
U19DRVJUSUZJQ0FURToKKyAgICAgICAgR1NUX0ZJWE1FKCJNaXNzaW5nIGNlcnRpZmljYXRlIHN0
YXRzIHN1cHBvcnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7
Cit9CisKK3N0cnVjdCBDYWxsYmFja0hvbGRlciB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1Rf
QUxMT0NBVEVEOworICAgIENhbGxiYWNrSG9sZGVyKEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpD
b2xsZWN0b3JDYWxsYmFjayYmIGNvbGxlY3RvckNhbGxiYWNrKQorICAgICAgICA6IGNhbGxiYWNr
KFdURk1vdmUoY29sbGVjdG9yQ2FsbGJhY2spKQorICAgIHsKKyAgICB9CisgICAgR1N0cmVhbWVy
U3RhdHNDb2xsZWN0b3I6OkNvbGxlY3RvckNhbGxiYWNrIGNhbGxiYWNrOworfTsKKwordm9pZCBH
U3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Z2V0U3RhdHMoQ29sbGVjdG9yQ2FsbGJhY2smJiBjYWxs
YmFjaywgR3N0UGFkKiBwYWQpCit7CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikgeworICAgICAgICBj
YWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gaG9s
ZGVyID0gV1RGOjptYWtlVW5pcXVlPENhbGxiYWNrSG9sZGVyPihXVEZNb3ZlKGNhbGxiYWNrKSk7
CisgICAgYXV0byogcHJvbWlzZSA9IGdzdF9wcm9taXNlX25ld193aXRoX2NoYW5nZV9mdW5jKFtd
KEdzdFByb21pc2UqIHByb21pc2UsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxDYWxsYmFja0hvbGRlcj4gaG9sZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbGJh
Y2tIb2xkZXIqPih1c2VyRGF0YSkpOworICAgICAgICBpZiAoZ3N0X3Byb21pc2Vfd2FpdChwcm9t
aXNlKSAhPSBHU1RfUFJPTUlTRV9SRVNVTFRfUkVQTElFRCkgeworICAgICAgICAgICAgaG9sZGVy
LT5jYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgICAgIGdzdF9wcm9taXNlX3VucmVmKHByb21p
c2UpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgYXV0
byogc3RhdHMgPSBnc3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZSk7CisgICAgICAgIGlmICgh
c3RhdHMpIHsKKyAgICAgICAgICAgIGhvbGRlci0+Y2FsbGJhY2sobnVsbHB0cik7CisgICAgICAg
ICAgICBnc3RfcHJvbWlzZV91bnJlZihwcm9taXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFtzdGF0cywgcHJvbWlz
ZSwgaG9sZGVyID0gaG9sZGVyLmdldCgpXSB7CisgICAgICAgICAgICBob2xkZXItPmNhbGxiYWNr
KFJUQ1N0YXRzUmVwb3J0OjpjcmVhdGUoW3N0YXRzLCBwcm9taXNlXShhdXRvJiBtYXBBZGFwdGVy
KSB7CisgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoKHN0YXRzLCBmaWxsUmVw
b3J0Q2FsbGJhY2ssICZtYXBBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICBnc3RfcHJvbWlzZV91
bnJlZihwcm9taXNlKTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfSk7CisgICAgfSwgaG9s
ZGVyLnJlbGVhc2UoKSwgbnVsbHB0cik7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2Vi
cnRjQmluLmdldCgpLCAiZ2V0LXN0YXRzIiwgcGFkLCBwcm9taXNlKTsKK30KKworfTsgLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjU0MjczNTUzZjgyNTEzNzI2MWZhOTQ3NmJmZTBhZTE3MmJkMDgxYjYKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMp
ICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5o
IgorCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL1Jl
ZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIFJUQ1N0YXRzUmVwb3J0OworCitjbGFzcyBHU3RyZWFtZXJT
dGF0c0NvbGxlY3RvciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHU3RyZWFtZXJTdGF0
c0NvbGxlY3RvciwgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4geworcHVibGljOgorICAg
IHVzaW5nIENvbGxlY3RvckNhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8
UlRDU3RhdHNSZXBvcnQ+JiYpPjsKKyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lclN0YXRzQ29sbGVj
dG9yPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lclN0YXRzQ29sbGVj
dG9yKCkpOyB9CisKKyAgICB2b2lkIHNldEVsZW1lbnQoR3N0RWxlbWVudCogZWxlbWVudCkgeyBt
X3dlYnJ0Y0JpbiA9IGVsZW1lbnQ7IH0KKyAgICB2b2lkIGdldFN0YXRzKENvbGxlY3RvckNhbGxi
YWNrJiYsIEdzdFBhZCopOworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV93
ZWJydGNCaW47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGls
cy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJXZWJSVENVdGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzczMTM4ZjIwYjUxZTViZTEwYmE4Mzcx
YzMzOTQ3MjYwZjg4YzEwNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcApAQCAtMCww
ICsxLDQ0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
I2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisKKyNpbmNsdWRlICJSVENJY2VDYW5k
aWRhdGUuaCIKKyNpbmNsdWRlICJSVENJY2VQcm90b2NvbC5oIgorCisjaW5jbHVkZSA8b3BlbnNz
bC9ibi5oPgorI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zc2wu
aD4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KKyNpbmNs
dWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252
ZXJzaW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X3dlYnJ0Y191dGls
c19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX3V0aWxzX2Rl
YnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBSVENJY2VDb21wb25l
bnQgdG9SVENJY2VDb21wb25lbnQoaW50IGNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gY29tcG9u
ZW50ID09IDEgPyBSVENJY2VDb21wb25lbnQ6OlJ0cCA6IFJUQ0ljZUNvbXBvbmVudDo6UnRjcDsK
K30KKworc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0ljZVByb3RvY29sPiB0b1JUQ0lj
ZVByb3RvY29sKGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCit7CisgICAgaWYgKCFwcm90b2NvbCB8
fCBwcm90b2NvbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKHByb3Rv
Y29sID09ICJ1ZHAiKQorICAgICAgICByZXR1cm4gUlRDSWNlUHJvdG9jb2w6OlVkcDsKKyAgICBB
U1NFUlQocHJvdG9jb2wgPT0gInRjcCIpOworICAgIHJldHVybiBSVENJY2VQcm90b2NvbDo6VGNw
OworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDSWNlVGNwQ2FuZGlkYXRlVHlw
ZT4gdG9SVENJY2VUY3BDYW5kaWRhdGVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBp
ZiAoIXR5cGUgfHwgdHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYg
KHR5cGUgPT0gImFjdGl2ZSIpCisgICAgICAgIHJldHVybiBSVENJY2VUY3BDYW5kaWRhdGVUeXBl
OjpBY3RpdmU7CisgICAgaWYgKHR5cGUgPT0gInBhc3NpdmUiKQorICAgICAgICByZXR1cm4gUlRD
SWNlVGNwQ2FuZGlkYXRlVHlwZTo6UGFzc2l2ZTsKKyAgICBBU1NFUlQodHlwZSA9PSAic28iKTsK
KyAgICByZXR1cm4gUlRDSWNlVGNwQ2FuZGlkYXRlVHlwZTo6U287Cit9CisKK3N0YXRpYyBpbmxp
bmUgc3RkOjpvcHRpb25hbDxSVENJY2VDYW5kaWRhdGVUeXBlPiB0b1JUQ0ljZUNhbmRpZGF0ZVR5
cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGlmICghdHlwZSB8fCB0eXBlLmlzRW1wdHko
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAodHlwZSA9PSAiaG9zdCIpCisgICAgICAg
IHJldHVybiBSVENJY2VDYW5kaWRhdGVUeXBlOjpIb3N0OworICAgIGlmICh0eXBlID09ICJzcmZs
eCIpCisgICAgICAgIHJldHVybiBSVENJY2VDYW5kaWRhdGVUeXBlOjpTcmZseDsKKyAgICBpZiAo
dHlwZSA9PSAicHJmbHgiKQorICAgICAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6UHJm
bHg7CisgICAgQVNTRVJUKHR5cGUgPT0gInJlbGF5Iik7CisgICAgcmV0dXJuIFJUQ0ljZUNhbmRp
ZGF0ZVR5cGU6OlJlbGF5OworfQorCitSZWZQdHI8UlRDRXJyb3I+IHRvUlRDRXJyb3IoR0Vycm9y
KiBydGNFcnJvcikKK3sKKyAgICBhdXRvIGRldGFpbCA9IHRvUlRDRXJyb3JEZXRhaWxUeXBlKHN0
YXRpY19jYXN0PEdzdFdlYlJUQ0Vycm9yPihydGNFcnJvci0+Y29kZSkpOworICAgIGlmICghZGV0
YWlsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gUlRDRXJyb3I6OmNyZWF0
ZSgqZGV0YWlsLCBydGNFcnJvci0+bWVzc2FnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91Ymxl
IHRvV2ViUlRDQml0UmF0ZVByaW9yaXR5KFJUQ1ByaW9yaXR5VHlwZSBwcmlvcml0eSkKK3sKKyAg
ICBzd2l0Y2ggKHByaW9yaXR5KSB7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OlZlcnlMb3c6
CisgICAgICAgIHJldHVybiAwLjU7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OkxvdzoKKyAg
ICAgICAgcmV0dXJuIDE7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6Ok1lZGl1bToKKyAgICAg
ICAgcmV0dXJuIDI7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OkhpZ2g6CisgICAgICAgIHJl
dHVybiA0OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisK
K0dVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBmcm9tUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0
IFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICBHVW5pcXVlUHRy
PEdzdFN0cnVjdHVyZT4gcnRjUGFyYW1ldGVycyhnc3Rfc3RydWN0dXJlX25ldygiZW5jb2Rpbmct
cGFyYW1ldGVycyIsICJhY3RpdmUiLCBHX1RZUEVfQk9PTEVBTiwgcGFyYW1ldGVycy5hY3RpdmUs
CisgICAgICAgICJyaWQiLCBHX1RZUEVfU1RSSU5HLCBwYXJhbWV0ZXJzLnJpZC51dGY4KCkuZGF0
YSgpLCAiYml0cmF0ZS1wcmlvcml0eSIsIEdfVFlQRV9ET1VCTEUsIHRvV2ViUlRDQml0UmF0ZVBy
aW9yaXR5KHBhcmFtZXRlcnMucHJpb3JpdHkpLCBudWxscHRyKSk7CisKKyAgICBpZiAocGFyYW1l
dGVycy5zc3JjKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgp
LCAic3NyYyIsIEdfVFlQRV9VTE9ORywgcGFyYW1ldGVycy5zc3JjLCBudWxscHRyKTsKKworICAg
IGlmIChwYXJhbWV0ZXJzLm1heEJpdHJhdGUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0
Y1BhcmFtZXRlcnMuZ2V0KCksICJtYXgtYml0cmF0ZSIsIEdfVFlQRV9VTE9ORywgcGFyYW1ldGVy
cy5tYXhCaXRyYXRlLCBudWxscHRyKTsKKworICAgIGlmIChwYXJhbWV0ZXJzLm1heEZyYW1lcmF0
ZSkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgIm1heC1m
cmFtZXJhdGUiLCBHX1RZUEVfVUxPTkcsIHBhcmFtZXRlcnMubWF4RnJhbWVyYXRlLCBudWxscHRy
KTsKKworICAgIGlmIChwYXJhbWV0ZXJzLnNjYWxlUmVzb2x1dGlvbkRvd25CeSkKKyAgICAgICAg
Z3N0X3N0cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgInNjYWxlLXJlc29sdXRpb24t
ZG93bi1ieSIsIEdfVFlQRV9ET1VCTEUsIHBhcmFtZXRlcnMuc2NhbGVSZXNvbHV0aW9uRG93bkJ5
LCBudWxscHRyKTsKKworICAgIGlmIChwYXJhbWV0ZXJzLm5ldHdvcmtQcmlvcml0eSkKKyAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgIm5ldHdvcmstcHJpb3Jp
dHkiLCBHX1RZUEVfSU5ULCAqcGFyYW1ldGVycy5uZXR3b3JrUHJpb3JpdHksIG51bGxwdHIpOwor
CisgICAgcmV0dXJuIHJ0Y1BhcmFtZXRlcnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDUHJpb3Jp
dHlUeXBlIGZyb21XZWJSVENCaXRSYXRlUHJpb3JpdHkoZG91YmxlIHByaW9yaXR5KQoreworICAg
IGlmIChwcmlvcml0eSA8IDAuNykKKyAgICAgICAgcmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6VmVy
eUxvdzsKKyAgICBpZiAocHJpb3JpdHkgPCAxLjUpCisgICAgICAgIHJldHVybiBSVENQcmlvcml0
eVR5cGU6OkxvdzsKKyAgICBpZiAocHJpb3JpdHkgPCAyLjUpCisgICAgICAgIHJldHVybiBSVENQ
cmlvcml0eVR5cGU6Ok1lZGl1bTsKKyAgICByZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpIaWdoOwor
fQorCitzdGF0aWMgaW5saW5lIFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycyB0b1JUQ0VuY29kaW5n
UGFyYW1ldGVycyhjb25zdCBHc3RTdHJ1Y3R1cmUqIHJ0Y1BhcmFtZXRlcnMpCit7CisgICAgUlRD
UnRwRW5jb2RpbmdQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisKKyAgICB1bnNpZ25lZCBzc3JjOwor
ICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50KHJ0Y1BhcmFtZXRlcnMsICJzc3JjIiwgJnNz
cmMpKQorICAgICAgICBwYXJhbWV0ZXJzLnNzcmMgPSBzc3JjOworCisgICAgZ3N0X3N0cnVjdHVy
ZV9nZXQocnRjUGFyYW1ldGVycywgImFjdGl2ZSIsIEdfVFlQRV9CT09MRUFOLCAmKHBhcmFtZXRl
cnMuYWN0aXZlKSwgbnVsbHB0cik7CisKKyAgICB1aW50NjRfdCBtYXhCaXRyYXRlOworICAgIGlm
IChnc3Rfc3RydWN0dXJlX2dldF91aW50NjQocnRjUGFyYW1ldGVycywgIm1heC1iaXRyYXRlIiwg
Jm1heEJpdHJhdGUpKQorICAgICAgICBwYXJhbWV0ZXJzLm1heEJpdHJhdGUgPSBtYXhCaXRyYXRl
OworCisgICAgdWludDY0X3QgbWF4RnJhbWVyYXRlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dl
dF91aW50NjQocnRjUGFyYW1ldGVycywgIm1heC1mcmFtZXJhdGUiLCAmbWF4RnJhbWVyYXRlKSkK
KyAgICAgICAgcGFyYW1ldGVycy5tYXhGcmFtZXJhdGUgPSBtYXhGcmFtZXJhdGU7CisKKyAgICBw
YXJhbWV0ZXJzLnJpZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhydGNQYXJhbWV0ZXJzLCAi
cmlkIik7CisKKyAgICBkb3VibGUgc2NhbGVSZXNvbHV0aW9uRG93bkJ5OworICAgIGlmIChnc3Rf
c3RydWN0dXJlX2dldF9kb3VibGUocnRjUGFyYW1ldGVycywgInNjYWxlLXJlc29sdXRpb24tZG93
bi1ieSIsICZzY2FsZVJlc29sdXRpb25Eb3duQnkpKQorICAgICAgICBwYXJhbWV0ZXJzLnNjYWxl
UmVzb2x1dGlvbkRvd25CeSA9IHNjYWxlUmVzb2x1dGlvbkRvd25CeTsKKworICAgIGRvdWJsZSBi
aXRyYXRlUHJpb3JpdHk7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShydGNQYXJh
bWV0ZXJzLCAiYml0cmF0ZS1wcmlvcml0eSIsICZiaXRyYXRlUHJpb3JpdHkpKQorICAgICAgICBw
YXJhbWV0ZXJzLnByaW9yaXR5ID0gZnJvbVdlYlJUQ0JpdFJhdGVQcmlvcml0eShiaXRyYXRlUHJp
b3JpdHkpOworCisgICAgaW50IG5ldHdvcmtQcmlvcml0eTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVy
ZV9nZXRfaW50KHJ0Y1BhcmFtZXRlcnMsICJuZXR3b3JrLXByaW9yaXR5IiwgJm5ldHdvcmtQcmlv
cml0eSkpCisgICAgICAgIHBhcmFtZXRlcnMubmV0d29ya1ByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8
UlRDUHJpb3JpdHlUeXBlPihuZXR3b3JrUHJpb3JpdHkpOworCisgICAgcmV0dXJuIHBhcmFtZXRl
cnM7Cit9CisKK1JUQ1J0cFNlbmRQYXJhbWV0ZXJzIHRvUlRDUnRwU2VuZFBhcmFtZXRlcnMoY29u
c3QgR3N0U3RydWN0dXJlKiBydGNQYXJhbWV0ZXJzKQoreworICAgIGlmICghcnRjUGFyYW1ldGVy
cykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFJUQ1J0cFNlbmRQYXJhbWV0ZXJzIHBhcmFt
ZXRlcnM7CisgICAgYXV0byogZW5jb2RpbmdzID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocnRj
UGFyYW1ldGVycywgImVuY29kaW5ncyIpOworICAgIHVuc2lnbmVkIHNpemUgPSBnc3RfdmFsdWVf
bGlzdF9nZXRfc2l6ZShlbmNvZGluZ3MpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBz
aXplOyBpKyspIHsKKyAgICAgICAgY29uc3QgYXV0byogdmFsdWUgPSBnc3RfdmFsdWVfbGlzdF9n
ZXRfdmFsdWUoZW5jb2RpbmdzLCBpKTsKKyAgICAgICAgcGFyYW1ldGVycy5lbmNvZGluZ3MuYXBw
ZW5kKHRvUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKEdTVF9TVFJVQ1RVUkVfQ0FTVCh2YWx1ZSkpKTsK
KyAgICB9CisKKyAgICAvLyBGSVhNRTogSGFuZGxlIHJ0Y1BhcmFtZXRlcnMuZGVncmFkYXRpb25f
cHJlZmVyZW5jZS4KKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30KKworCitzdGF0aWMgdm9pZCBl
bnN1cmVEZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2Vf
ZmxhZyBvbmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAg
ICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfd2VicnRjX3V0aWxzX2RlYnVnLCAid2Vi
a2l0d2VicnRjdXRpbHMiLCAwLCAiV2ViS2l0IFdlYlJUQyB1dGlsaXRpZXMiKTsKKyAgICB9KTsK
K30KKworc3RkOjpvcHRpb25hbDxSVENJY2VDYW5kaWRhdGU6OkZpZWxkcz4gcGFyc2VJY2VDYW5k
aWRhdGVTRFAoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgZW5zdXJlRGVidWdDYXRlZ29yeUlu
aXRpYWxpemVkKCk7CisgICAgR1NUX0RFQlVHKCJQYXJzaW5nIElDRSBDYW5kaWRhdGU6ICVzIiwg
c2RwLnV0ZjgoKS5kYXRhKCkpOworICAgIGlmICghc2RwLnN0YXJ0c1dpdGgoImNhbmRpZGF0ZToi
KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFN0cmluZyBmb3VuZGF0aW9uOworICAgIHVu
c2lnbmVkIGNvbXBvbmVudElkID0gMDsKKyAgICBTdHJpbmcgdHJhbnNwb3J0OworICAgIHVuc2ln
bmVkIHByaW9yaXR5ID0gMDsKKyAgICBTdHJpbmcgYWRkcmVzczsKKyAgICB1aW50MzJfdCBwb3J0
ID0gMDsKKyAgICBTdHJpbmcgdHlwZTsKKyAgICBTdHJpbmcgdGNwdHlwZTsKKyAgICBTdHJpbmcg
cmVsYXRlZEFkZHJlc3M7CisgICAgZ3VpbnQxNiByZWxhdGVkUG9ydCA9IDA7CisgICAgU3RyaW5n
IHVzZXJuYW1lRnJhZ21lbnQ7CisgICAgYXV0byB0b2tlbnMgPSBzZHAuY29udmVydFRvQVNDSUlM
b3dlcmNhc2UoKS5zdWJzdHJpbmcoMTApLnNwbGl0KCcgJyk7CisKKyAgICBmb3IgKGF1dG8gaXQg
PSB0b2tlbnMuYmVnaW4oKTsgaXQgIT0gdG9rZW5zLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGF1
dG8gaSA9IHN0ZDo6ZGlzdGFuY2UodG9rZW5zLmJlZ2luKCksIGl0KTsKKyAgICAgICAgYXV0byB0
b2tlbiA9ICppdDsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAg
ICAgICAgIGZvdW5kYXRpb24gPSB0b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBj
YXNlIDE6CisgICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlcjx1bnNpZ25l
ZD4odG9rZW4pKQorICAgICAgICAgICAgICAgIGNvbXBvbmVudElkID0gKnZhbHVlOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSAyOgorICAgICAgICAgICAgdHJhbnNwb3J0ID0gdG9rZW47CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgaWYgKGF1dG8gdmFs
dWUgPSBwYXJzZUludGVnZXI8dW5zaWduZWQ+KHRva2VuKSkKKyAgICAgICAgICAgICAgICBwcmlv
cml0eSA9ICp2YWx1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4g
eyB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGFk
ZHJlc3MgPSB0b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDU6CisgICAg
ICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlcjx1bnNpZ25lZD4odG9rZW4pKQor
ICAgICAgICAgICAgICAgIHBvcnQgPSAqdmFsdWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0
OgorICAgICAgICAgICAgaWYgKGl0ICsgMSA9PSB0b2tlbnMuZW5kKCkpCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgICAgIGlmICh0b2tl
biA9PSAidHlwIikKKyAgICAgICAgICAgICAgICB0eXBlID0gKml0OworICAgICAgICAgICAgZWxz
ZSBpZiAodG9rZW4gPT0gInJhZGRyIikKKyAgICAgICAgICAgICAgICByZWxhdGVkQWRkcmVzcyA9
ICppdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJycG9ydCIpCisgICAgICAgICAg
ICAgICAgcmVsYXRlZFBvcnQgPSBwYXJzZUludGVnZXI8dW5zaWduZWQ+KCppdCkudmFsdWVfb3Io
MCk7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAidGNwdHlwZSIpCisgICAgICAgICAg
ICAgICAgdGNwdHlwZSA9ICppdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJ1ZnJh
ZyIpCisgICAgICAgICAgICAgICAgdXNlcm5hbWVGcmFnbWVudCA9ICppdDsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgUlRDSWNlQ2FuZGlkYXRlOjpGaWVsZHMgZmllbGRzOwor
ICAgIGZpZWxkcy5mb3VuZGF0aW9uID0gZm91bmRhdGlvbjsKKyAgICBmaWVsZHMuY29tcG9uZW50
ID0gdG9SVENJY2VDb21wb25lbnQoY29tcG9uZW50SWQpOworICAgIGZpZWxkcy5wcmlvcml0eSA9
IHByaW9yaXR5OworICAgIGZpZWxkcy5wcm90b2NvbCA9IHRvUlRDSWNlUHJvdG9jb2wodHJhbnNw
b3J0KTsKKyAgICBpZiAoIWFkZHJlc3MuaXNFbXB0eSgpKSB7CisgICAgICAgIGZpZWxkcy5hZGRy
ZXNzID0gYWRkcmVzczsKKyAgICAgICAgZmllbGRzLnBvcnQgPSBwb3J0OworICAgIH0KKyAgICBm
aWVsZHMudHlwZSA9IHRvUlRDSWNlQ2FuZGlkYXRlVHlwZSh0eXBlKTsKKyAgICBmaWVsZHMudGNw
VHlwZSA9IHRvUlRDSWNlVGNwQ2FuZGlkYXRlVHlwZSh0Y3B0eXBlKTsKKyAgICBpZiAoIXJlbGF0
ZWRBZGRyZXNzLmlzRW1wdHkoKSkgeworICAgICAgICBmaWVsZHMucmVsYXRlZEFkZHJlc3MgPSBy
ZWxhdGVkQWRkcmVzczsKKyAgICAgICAgZmllbGRzLnJlbGF0ZWRQb3J0ID0gcmVsYXRlZFBvcnQ7
CisgICAgfQorICAgIGZpZWxkcy51c2VybmFtZUZyYWdtZW50ID0gdXNlcm5hbWVGcmFnbWVudDsK
KyAgICByZXR1cm4gZmllbGRzOworfQorCitzdGF0aWMgU3RyaW5nIHg1MDlTZXJpYWxpemUoWDUw
OSogeDUwOSkKK3sKKyAgICBCSU8qIGJpbyA9IEJJT19uZXcoQklPX3NfbWVtKCkpOworICAgIGlm
ICghYmlvKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBzY29wZUV4aXQgPSBXVEY6
Om1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgQklPX2ZyZWUoYmlvKTsKKyAgICB9KTsKKwor
ICAgIGlmICghUEVNX3dyaXRlX2Jpb19YNTA5KGJpbywgeDUwOSkpCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNp
dHkoNDA5Nik7CisgICAgaW50IGxlbmd0aCA9IEJJT19yZWFkKGJpbywgYnVmZmVyLmRhdGEoKSwg
NDA5Nik7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1
cm4gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgcHJp
dmF0ZUtleVNlcmlhbGl6ZShFVlBfUEtFWSogcHJpdmF0ZUtleSkKK3sKKyAgICBCSU8qIGJpbyA9
IEJJT19uZXcoQklPX3NfbWVtKCkpOworICAgIGlmICghYmlvKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgYXV0byBzY29wZUV4aXQgPSBXVEY6Om1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAg
ICAgQklPX2ZyZWUoYmlvKTsKKyAgICB9KTsKKworICAgIGlmICghUEVNX3dyaXRlX2Jpb19Qcml2
YXRlS2V5KGJpbywgcHJpdmF0ZUtleSwgbnVsbHB0ciwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVs
bHB0cikpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOwor
ICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoNDA5Nik7CisgICAgaW50IGxlbmd0aCA9IEJJT19y
ZWFkKGJpbywgYnVmZmVyLmRhdGEoKSwgNDA5Nik7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7
Cit9CisKK3N0ZDo6b3B0aW9uYWw8UmVmPFJUQ0NlcnRpZmljYXRlPj4gZ2VuZXJhdGVDZXJ0aWZp
Y2F0ZShSZWY8U2VjdXJpdHlPcmlnaW4+JiYgb3JpZ2luLCBjb25zdCBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb24mIGluZm8pCit7CisgICAgZW5zdXJlRGVidWdD
YXRlZ29yeUluaXRpYWxpemVkKCk7CisgICAgRVZQX1BLRVkqIHByaXZhdGVLZXkgPSBFVlBfUEtF
WV9uZXcoKTsKKyAgICBpZiAoIXByaXZhdGVLZXkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZh
aWxlZCB0byBjcmVhdGUgcHJpdmF0ZSBrZXkiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBhdXRvIHNjb3BlRXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0geworICAgICAg
ICBFVlBfUEtFWV9mcmVlKHByaXZhdGVLZXkpOworICAgIH0pOworCisgICAgc3dpdGNoIChpbmZv
LnR5cGUpIHsKKyAgICBjYXNlIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJbmZv
cm1hdGlvbjo6VHlwZTo6RUNEU0FQMjU2OiB7CisgICAgICAgIEVDX0tFWSogZWNLZXkgPSBFQ19L
RVlfbmV3X2J5X2N1cnZlX25hbWUoTklEX1g5XzYyX3ByaW1lMjU2djEpOworICAgICAgICAvLyBF
bnN1cmUgY3VydmUgbmFtZSBpcyBpbmNsdWRlZCB3aGVuIEVDIGtleSBpcyBzZXJpYWxpemVkLgor
ICAgICAgICAvLyBXaXRob3V0IHRoaXMgY2FsbCwgT3BlblNTTCB2ZXJzaW9ucyBiZWZvcmUgMS4x
LjAgd2lsbCBjcmVhdGUKKyAgICAgICAgLy8gY2VydGlmaWNhdGVzIHRoYXQgZG9uJ3Qgd29yayBm
b3IgVExTLgorICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AgZm9yIEJvcmluZ1NTTCBhbmQgT3Bl
blNTTCAxLjEuMCsKKyAgICAgICAgRUNfS0VZX3NldF9hc24xX2ZsYWcoZWNLZXksIE9QRU5TU0xf
RUNfTkFNRURfQ1VSVkUpOworICAgICAgICBpZiAoIXByaXZhdGVLZXkgfHwgIWVjS2V5IHx8ICFF
Q19LRVlfZ2VuZXJhdGVfa2V5KGVjS2V5KSB8fCAhRVZQX1BLRVlfYXNzaWduX0VDX0tFWShwcml2
YXRlS2V5LCBlY0tleSkpIHsKKyAgICAgICAgICAgIEVDX0tFWV9mcmVlKGVjS2V5KTsKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uOjpUeXBl
OjpSU0FTU0FQS0NTMXYxNTogeworICAgICAgICBSU0EqIHJzYSA9IFJTQV9uZXcoKTsKKyAgICAg
ICAgaWYgKCFyc2EpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIEJJR05VTSog
ZXhwb25lbnQgPSBCTl9uZXcoKTsKKyAgICAgICAgaWYgKCFCTl9zZXRfd29yZChleHBvbmVudCwg
aW5mby5yc2FQYXJhbWV0ZXJzLT5wdWJsaWNFeHBvbmVudCkKKyAgICAgICAgICAgIHx8ICFSU0Ff
Z2VuZXJhdGVfa2V5X2V4KHJzYSwgaW5mby5yc2FQYXJhbWV0ZXJzLT5tb2R1bHVzTGVuZ3RoLCBl
eHBvbmVudCwgbnVsbHB0cikKKyAgICAgICAgICAgIHx8ICFFVlBfUEtFWV9hc3NpZ25fUlNBKHBy
aXZhdGVLZXksIHJzYSkpIHsKKyAgICAgICAgICAgIEJOX2ZyZWUoZXhwb25lbnQpOworICAgICAg
ICAgICAgUlNBX2ZyZWUocnNhKTsKKyAgICAgICAgfQorICAgICAgICBCTl9mcmVlKGV4cG9uZW50
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIFg1MDkqIHg1MDkgPSBYNTA5
X25ldygpOworICAgIGlmICgheDUwOSkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRv
IGNyZWF0ZSBjZXJ0aWZpY2F0ZSIpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAg
IGF1dG8gY2VydFNjb3BlRXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBY
NTA5X2ZyZWUoeDUwOSk7CisgICAgfSk7CisKKyAgICBYNTA5X3NldF92ZXJzaW9uKHg1MDksIDIp
OworCisgICAgLy8gU2V0IGEgcmFuZG9tIDY0IGJpdCBpbnRlZ2VyIGFzIHNlcmlhbCBudW1iZXIu
CisgICAgQklHTlVNKiBzZXJpYWxOdW1iZXIgPSBCTl9uZXcoKTsKKyAgICBCTl9wc2V1ZG9fcmFu
ZChzZXJpYWxOdW1iZXIsIDY0LCAwLCAwKTsKKyAgICBBU04xX0lOVEVHRVIqIGFzbjFTZXJpYWxO
dW1iZXIgPSBYNTA5X2dldF9zZXJpYWxOdW1iZXIoeDUwOSk7CisgICAgQk5fdG9fQVNOMV9JTlRF
R0VSKHNlcmlhbE51bWJlciwgYXNuMVNlcmlhbE51bWJlcik7CisgICAgQk5fZnJlZShzZXJpYWxO
dW1iZXIpOworCisgICAgLy8gU2V0IGEgcmFuZG9tIDggYnl0ZSBiYXNlNjQgc3RyaW5nIGFzIGlz
c3Vlci9zdWJqZWN0LgorICAgIFg1MDlfTkFNRSogbmFtZSA9IFg1MDlfTkFNRV9uZXcoKTsKKyAg
ICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAgIGJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KDgpOworICAgIFdURjo6Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoYnVmZmVyLmRh
dGEoKSwgOCk7CisgICAgYXV0byBjb21tb25OYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVm
ZmVyKTsKKyAgICBYNTA5X05BTUVfYWRkX2VudHJ5X2J5X05JRChuYW1lLCBOSURfY29tbW9uTmFt
ZSwgTUJTVFJJTkdfQVNDLCAoY29uc3QgZ3VjaGFyKiljb21tb25OYW1lLmFzY2lpKCkuZGF0YSgp
LCAtMSwgLTEsIDApOworICAgIFg1MDlfc2V0X3N1YmplY3RfbmFtZSh4NTA5LCBuYW1lKTsKKyAg
ICBYNTA5X3NldF9pc3N1ZXJfbmFtZSh4NTA5LCBuYW1lKTsKKyAgICBYNTA5X05BTUVfZnJlZShu
YW1lKTsKKworICAgIC8vIEZhbGxiYWNrIHRvIDMwIGRheXMsIG1heCBvdXQgYXQgb25lIHllYXIu
CisgICAgdWludDY0X3QgZXhwaXJlcyA9IGluZm8uZXhwaXJlcy52YWx1ZV9vcigyNTkyMDAwKTsK
KyAgICBleHBpcmVzID0gc3RkOjptaW48dWludDY0X3Q+KGV4cGlyZXMsIDMxNTM2MDAwMDAwKTsK
KyAgICBYNTA5X2dtdGltZV9hZGooWDUwOV9nZXRtX25vdEJlZm9yZSh4NTA5KSwgMCk7CisgICAg
WDUwOV9nbXRpbWVfYWRqKFg1MDlfZ2V0bV9ub3RBZnRlcih4NTA5KSwgZXhwaXJlcyk7CisgICAg
WDUwOV9zZXRfcHVia2V5KHg1MDksIHByaXZhdGVLZXkpOworCisgICAgaWYgKCFYNTA5X3NpZ24o
eDUwOSwgcHJpdmF0ZUtleSwgRVZQX3NoYTI1NigpKSkgeworICAgICAgICBHU1RfV0FSTklORygi
RmFpbGVkIHRvIHNpZ24gY2VydGlmaWNhdGUiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
CisKKyAgICBhdXRvIHBlbSA9IHg1MDlTZXJpYWxpemUoeDUwOSk7CisgICAgR1NUX0RFQlVHKCJH
ZW5lcmF0ZWQgY2VydGlmaWNhdGUgUEVNOiAlcyIsIHBlbS5hc2NpaSgpLmRhdGEoKSk7CisgICAg
YXV0byBzZXJpYWxpemVkUHJpdmF0ZUtleSA9IHByaXZhdGVLZXlTZXJpYWxpemUocHJpdmF0ZUtl
eSk7CisgICAgVmVjdG9yPFJUQ0NlcnRpZmljYXRlOjpEdGxzRmluZ2VycHJpbnQ+IGZpbmdlcnBy
aW50czsKKyAgICAvLyBGSVhNRTogRmlsbCBmaW5nZXJwcmludHMuCisgICAgYXV0byBleHBpcmF0
aW9uVGltZSA9IFdURjo6V2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkgKyBXVEY6
OlNlY29uZHMoZXhwaXJlcyk7CisgICAgcmV0dXJuIFJUQ0NlcnRpZmljYXRlOjpjcmVhdGUoV1RG
TW92ZShvcmlnaW4pLCBleHBpcmF0aW9uVGltZS5taWxsaXNlY29uZHMoKSwgV1RGTW92ZShmaW5n
ZXJwcmludHMpLCBXVEZNb3ZlKHBlbSksIFdURk1vdmUoc2VyaWFsaXplZFByaXZhdGVLZXkpKTsK
K30KKworYm9vbCBzZHBNZWRpYUhhc0F0dHJpYnV0ZUtleShjb25zdCBHc3RTRFBNZWRpYSogbWVk
aWEsIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSBnc3Rfc2RwX21lZGlh
X2F0dHJpYnV0ZXNfbGVuKG1lZGlhKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVu
OyBpKyspIHsKKyAgICAgICAgY29uc3QgYXV0byogYXR0cmlidXRlID0gZ3N0X3NkcF9tZWRpYV9n
ZXRfYXR0cmlidXRlKG1lZGlhLCBpKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXR0cmlidXRl
LT5rZXksIGtleSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJXZWJSVENVdGlscy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NThkNzExZTZhYTY2ZGVh
ODNlYTdhMjk0NzRhYjBmNTllNDg3MmYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaApA
QCAtMCwwICsxLDI2NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEg
Uy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisK
KyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNp
bmNsdWRlICJSVENCdW5kbGVQb2xpY3kuaCIKKyNpbmNsdWRlICJSVENDZXJ0aWZpY2F0ZS5oIgor
I2luY2x1ZGUgIlJUQ0R0bHNUcmFuc3BvcnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgorI2lu
Y2x1ZGUgIlJUQ0ljZUNvbm5lY3Rpb25TdGF0ZS5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9y
dFBvbGljeS5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFN0YXRlLmgiCisjaW5jbHVkZSAi
UlRDUnRwU2VuZFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJSVENSdHBUcmFuc2NlaXZlckRpcmVj
dGlvbi5oIgorI2luY2x1ZGUgIlJUQ1NkcFR5cGUuaCIKKyNpbmNsdWRlICJSVENTaWduYWxpbmdT
dGF0ZS5oIgorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dl
YnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2lubGluZSBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB0b1JUQ1J0cFRy
YW5zY2VpdmVyRGlyZWN0aW9uKEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVj
dGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgR1NUX1dFQlJUQ19S
VFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX05PTkU6CisgICAgICAgIC8vIMKvXF8o44OEKV8vwq8K
KyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAg
ICBjYXNlIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9JTkFDVElWRToKKyAg
ICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBj
YXNlIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5ET05MWToKKyAgICAg
ICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kb25seTsKKyAgICBjYXNl
IEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9SRUNWT05MWToKKyAgICAgICAg
cmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpSZWN2b25seTsKKyAgICBjYXNlIEdT
VF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5EUkVDVjoKKyAgICAgICAgcmV0
dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kcmVjdjsKKyAgICB9CisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJE
aXJlY3Rpb246OkluYWN0aXZlOworfQorCitpbmxpbmUgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXJE
aXJlY3Rpb24gZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKFJUQ1J0cFRyYW5zY2VpdmVy
RGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNh
c2UgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OkluYWN0aXZlOgorICAgICAgICByZXR1cm4g
R1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX0lOQUNUSVZFOworICAgIGNhc2Ug
UlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OlNlbmRvbmx5OgorICAgICAgICByZXR1cm4gR1NU
X1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1NFTkRPTkxZOworICAgIGNhc2UgUlRD
UnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OlJlY3Zvbmx5OgorICAgICAgICByZXR1cm4gR1NUX1dF
QlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1JFQ1ZPTkxZOworICAgIGNhc2UgUlRDUnRw
VHJhbnNjZWl2ZXJEaXJlY3Rpb246OlNlbmRyZWN2OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJU
Q19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1NFTkRSRUNWOworICAgIH0KKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX1JUUF9UUkFOU0NF
SVZFUl9ESVJFQ1RJT05fTk9ORTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENTRFBUeXBl
IHRvU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShSVENTZHBUeXBlIHNkcFR5cGUpCit7CisgICAgc3dp
dGNoIChzZHBUeXBlKSB7CisgICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoKKyAgICAgICAgcmV0
dXJuIEdTVF9XRUJSVENfU0RQX1RZUEVfT0ZGRVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpQcmFu
c3dlcjoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfU0RQX1RZUEVfUFJBTlNXRVI7CisgICAg
Y2FzZSBSVENTZHBUeXBlOjpBbnN3ZXI6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9U
WVBFX0FOU1dFUjsKKyAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgorICAgICAgICByZXR1
cm4gR1NUX1dFQlJUQ19TRFBfVFlQRV9ST0xMQkFDSzsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX09GRkVS
OworfQorCitzdGF0aWMgaW5saW5lIFJUQ1NkcFR5cGUgZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5
cGUoR3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbikKK3sKKyAgICBhdXRv
IHR5cGUgPSBkZXNjcmlwdGlvbi0+dHlwZTsKKyAgICBpZiAodHlwZSA9PSBHU1RfV0VCUlRDX1NE
UF9UWVBFX09GRkVSKQorICAgICAgICByZXR1cm4gUlRDU2RwVHlwZTo6T2ZmZXI7CisgICAgaWYg
KHR5cGUgPT0gR1NUX1dFQlJUQ19TRFBfVFlQRV9BTlNXRVIpCisgICAgICAgIHJldHVybiBSVENT
ZHBUeXBlOjpBbnN3ZXI7CisgICAgQVNTRVJUKHR5cGUgPT0gR1NUX1dFQlJUQ19TRFBfVFlQRV9Q
UkFOU1dFUik7CisgICAgcmV0dXJuIFJUQ1NkcFR5cGU6OlByYW5zd2VyOworfQorCitzdGF0aWMg
aW5saW5lIFJUQ1NpZ25hbGluZ1N0YXRlIHRvU2lnbmFsaW5nU3RhdGUoR3N0V2ViUlRDU2lnbmFs
aW5nU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dF
QlJUQ19TSUdOQUxJTkdfU1RBVEVfU1RBQkxFOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5n
U3RhdGU6OlN0YWJsZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NUQVRFX0hBVkVf
TE9DQUxfT0ZGRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2Fs
T2ZmZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX0xPQ0FMX1BS
QU5TV0VSOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5nU3RhdGU6OkhhdmVMb2NhbFByYW5z
d2VyOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9SRU1PVEVfT0ZG
RVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90ZU9mZmVyOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9SRU1PVEVfUFJBTlNXRVI6
CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90ZVByYW5zd2VyOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1
cm4gUlRDU2lnbmFsaW5nU3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwor
fQorCitzdGF0aWMgaW5saW5lIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB0b1JUQ0ljZUNvbm5lY3Rp
b25TdGF0ZShHc3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNo
IChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ORVc6
CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsKKyAgICBjYXNlIEdT
VF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkc6CisgICAgICAgIHJldHVybiBS
VENJY2VDb25uZWN0aW9uU3RhdGU6OkNoZWNraW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0Vf
Q09OTkVDVElPTl9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0
aW9uU3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05f
U1RBVEVfQ09NUExFVEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpD
b21wbGV0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0ZBSUxF
RDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6RmFpbGVkOworICAgIGNh
c2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNURUQ6CisgICAgICAg
IHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkRpc2Nvbm5lY3RlZDsKKyAgICBjYXNlIEdT
VF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRD
SWNlQ29ubmVjdGlvblN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7Cit9
CisKK3N0YXRpYyBpbmxpbmUgUlRDRHRsc1RyYW5zcG9ydFN0YXRlIHRvUlRDRHRsc1RyYW5zcG9y
dFN0YXRlKEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnRTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2gg
KHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX05FVzoK
KyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6TmV3OworICAgIGNhc2UgR1NU
X1dFQlJUQ19EVExTX1RSQU5TUE9SVF9TVEFURV9DT05ORUNUSU5HOgorICAgICAgICByZXR1cm4g
UlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpDb25uZWN0aW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19E
VExTX1RSQU5TUE9SVF9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJh
bnNwb3J0U3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BP
UlRfU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpD
bG9zZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0ZBSUxFRDoK
KyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6RmFpbGVkOworICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRD
SWNlVHJhbnNwb3J0U3RhdGUgdG9SVENJY2VUcmFuc3BvcnRTdGF0ZShHc3RXZWJSVENJQ0VDb25u
ZWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgLy8gRklYTUU6IE5vIEdzdFdlYlJUQ0lDRVRyYW5z
cG9ydFN0YXRlID8KKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lD
RV9DT05ORUNUSU9OX1NUQVRFX05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0
YXRlOjpOZXc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NIRUNL
SU5HOgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5nOworICAg
IGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT05ORUNURUQ6CisgICAgICAg
IHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dF
QlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT01QTEVURUQ6CisgICAgICAgIHJldHVybiBSVENJ
Y2VUcmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09O
TkVDVElPTl9TVEFURV9GQUlMRUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0
ZTo6RmFpbGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ESVND
T05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RGlzY29ubmVj
dGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DTE9TRUQ6Cisg
ICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9y
dFN0YXRlOjpOZXc7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlR2F0aGVyaW5nU3RhdGUgdG9S
VENJY2VHYXRoZXJpbmdTdGF0ZShHc3RXZWJSVENJQ0VHYXRoZXJpbmdTdGF0ZSBzdGF0ZSkKK3sK
KyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdf
U1RBVEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5ldzsKKyAg
ICBjYXNlIEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9HQVRIRVJJTkc6CisgICAgICAg
IHJldHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5nOworICAgIGNhc2UgR1NUX1dF
QlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX0NPTVBMRVRFOgorICAgICAgICByZXR1cm4gUlRDSWNl
R2F0aGVyaW5nU3RhdGU6OkNvbXBsZXRlOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR3N0V2ViUlRDQnVuZGxlUG9saWN5IGJ1
bmRsZVBvbGljeUZyb21Db25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJiBj
b25maWd1cmF0aW9uKQoreworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kp
IHsKKyAgICBjYXNlIFJUQ0J1bmRsZVBvbGljeTo6QmFsYW5jZWQ6CisgICAgICAgIHJldHVybiBH
U1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfQkFMQU5DRUQ7CisgICAgY2FzZSBSVENCdW5kbGVQb2xp
Y3k6Ok1heENvbXBhdDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElDWV9N
QVhfQ09NUEFUOworICAgIGNhc2UgUlRDQnVuZGxlUG9saWN5OjpNYXhCdW5kbGU6CisgICAgICAg
IHJldHVybiBHU1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfTUFYX0JVTkRMRTsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX0JV
TkRMRV9QT0xJQ1lfTk9ORTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENJQ0VUcmFuc3Bv
cnRQb2xpY3kgaWNlVHJhbnNwb3J0UG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgc3dpdGNoIChjb25maWd1cmF0
aW9uLmljZVRyYW5zcG9ydFBvbGljeSkgeworICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0UG9saWN5
OjpBbGw6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0lDRV9UUkFOU1BPUlRfUE9MSUNZX0FM
TDsKKyAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFBvbGljeTo6UmVsYXk6CisgICAgICAgIHJldHVy
biBHU1RfV0VCUlRDX0lDRV9UUkFOU1BPUlRfUE9MSUNZX1JFTEFZOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9XRUJSVENfSUNFX1RS
QU5TUE9SVF9QT0xJQ1lfQUxMOworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRD
RXJyb3JEZXRhaWxUeXBlPiB0b1JUQ0Vycm9yRGV0YWlsVHlwZShHc3RXZWJSVENFcnJvciBjb2Rl
KQoreworICAgIHN3aXRjaCAoY29kZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9EQVRB
X0NIQU5ORUxfRkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6RGF0
YUNoYW5uZWxGYWlsdXJlOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9EVExTX0ZBSUxVUkU6
CisgICAgICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OkR0bHNGYWlsdXJlOworICAgIGNh
c2UgR1NUX1dFQlJUQ19FUlJPUl9GSU5HRVJQUklOVF9GQUlMVVJFOgorICAgICAgICByZXR1cm4g
UlRDRXJyb3JEZXRhaWxUeXBlOjpGaW5nZXJwcmludEZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0VSUk9SX1NDVFBfRkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlw
ZTo6U2N0cEZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX1NEUF9TWU5UQVhfRVJS
T1I6CisgICAgICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OlNkcFN5bnRheEVycm9yOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9IQVJEV0FSRV9FTkNPREVSX05PVF9BVkFJTEFCTEU6
CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0VOQ09ERVJfRVJST1I6CisgICAgICAgIC8vIEZJ
WE1FCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9OworfQorCitSZWZQ
dHI8UlRDRXJyb3I+IHRvUlRDRXJyb3IoR0Vycm9yKik7CisKK0dVbmlxdWVQdHI8R3N0U3RydWN0
dXJlPiBmcm9tUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0IFJUQ1J0cEVuY29kaW5nUGFyYW1l
dGVycyYpOworUlRDUnRwU2VuZFBhcmFtZXRlcnMgdG9SVENSdHBTZW5kUGFyYW1ldGVycyhjb25z
dCBHc3RTdHJ1Y3R1cmUqKTsKKworc3RkOjpvcHRpb25hbDxSZWY8UlRDQ2VydGlmaWNhdGU+PiBn
ZW5lcmF0ZUNlcnRpZmljYXRlKFJlZjxTZWN1cml0eU9yaWdpbj4mJiwgY29uc3QgUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uJik7CisKK2Jvb2wgc2RwTWVkaWFI
YXNBdHRyaWJ1dGVLZXkoY29uc3QgR3N0U0RQTWVkaWEqLCBjb25zdCBjaGFyKiBrZXkpOworCit9
CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5j
bWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCBhYjlj
NzA5MmU2NWY1MTE1MjAxM2MxMmJhNDgwMjdmZDcwYjgyNGI0Li44NTI1ZjQ5NTI0YjU5MTZiZDVh
Y2NjNTQ1NDVhMDY5NDEwNDIxNTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVy
LmNtYWtlCkBAIC0xLDEyICsxLDI5IEBACiBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJf
QVVESU8pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJ
RVMKKyAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
IgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIgog
ICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZSIK
ICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUi
CiAgICAgKQogCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5jcHAK
KyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5z
cG9ydEJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuY3BwCisgICAgICAgIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAK
KyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwCisgICAgICAg
IE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9y
bUJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQu
Y3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRz
Q29sbGVjdG9yLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJXZWJSVENVdGlscy5jcHAKKwogICAgICAgICBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3Ry
ZWFtQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0F1ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcApAQCAtNjAsNiAr
NzcsNyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURl
dmljZU1hbmFnZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJDYXB0dXJlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNw
cAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFT
dHJlYW1Tb3VyY2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC02Nyw3ICs4NSwxMyBAQCBpZiAoRU5B
QkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrUmVhbHRpbWVBdWRpb1NvdXJjZUdTdHJlYW1lci5j
cHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZVZp
ZGVvU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAgICBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJl
YW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJHU3RyZWFtZXIuY3BwCisg
ICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXIuY3BwCiAgICAgKQogCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZS
QU1FV09SS19IRUFERVJTCkBAIC0xNDYsNyArMTcwLDcgQEAgaWYgKEVOQUJMRV9WSURFTykKICAg
ICAgICAgKQogICAgIGVuZGlmICgpCiAKLSAgICBpZiAoRU5BQkxFX01FRElBX1NUUkVBTSBPUiBF
TkFCTEVfV0VCX1JUQykKKyAgICBpZiAoVVNFX0xJQldFQlJUQykKICAgICAgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICAgICAgICAgJHtHU1RS
RUFNRVJfQ09ERUNQQVJTRVJTX0lOQ0xVREVfRElSU30KICAgICAgICAgKQpAQCAtMTU1LDYgKzE3
OSwyMSBAQCBpZiAoRU5BQkxFX1ZJREVPKQogICAgICAgICAgICAgICAgICR7R1NUUkVBTUVSX0NP
REVDUEFSU0VSU19MSUJSQVJJRVN9CiAgICAgICAgICAgICApCiAgICAgICAgIGVuZGlmICgpCisg
ICAgZWxzZWlmIChVU0VfR1NUUkVBTUVSX1dFQlJUQykKKyAgICAgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAgICAgJHtHU1RSRUFNRVJf
UlRQX0lOQ0xVREVfRElSU30KKyAgICAgICAgICAgICR7R1NUUkVBTUVSX1NEUF9JTkNMVURFX0RJ
UlN9CisgICAgICAgICAgICAke0dTVFJFQU1FUl9XRUJSVENfSU5DTFVERV9ESVJTfQorICAgICAg
ICApCisgICAgICAgIGlmIChOT1QgVVNFX0dTVFJFQU1FUl9GVUxMKQorICAgICAgICAgICAgbGlz
dChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAgICAgICAgICAke0dTVFJFQU1FUl9S
VFBfTElCUkFSSUVTfQorICAgICAgICAgICAgICAgICR7R1NUUkVBTUVSX1NEUF9MSUJSQVJJRVN9
CisgICAgICAgICAgICAgICAgJHtHU1RSRUFNRVJfV0VCUlRDX0xJQlJBUklFU30KKyAgICAgICAg
ICAgICkKKyAgICAgICAgZW5kaWYgKCkKKworICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJ
QlJBUklFUyBPcGVuU1NMOjpDcnlwdG8pCiAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb1NvdXJj
ZVByb3ZpZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcAppbmRleCBiNGQ1ZjY3MDNl
OTI5ZWRmMTdmMTA5ZWY2NDgxMzBhY2UwMzhjYWM0Li5hMWFjZTk3NjFkYTJjZTJhYWQ0NjQyMWI5
YmU2ZGY4ZDNhOWU1NDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJHU3Ry
ZWFtZXIuY3BwCkBAIC0xMDAsMTAgKzEwMCw1OCBAQCBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVh
bWVyOjpBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKE1lZGlhU3RyZWFtVHJhY2tQcml2YQog
CiAgICAgbV9hdWRpb1NpbmtCaW4gPSBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24oInRl
ZSBuYW1lPWF1ZGlvVGVlIiwgdHJ1ZSwgbnVsbHB0cik7CiAKLSAgICBnc3RfYmluX2FkZF9tYW55
KEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgc3JjLCBtX2F1ZGlvU2lua0Jpbi5nZXQo
KSwgbnVsbHB0cik7Ci0gICAgZ3N0X2VsZW1lbnRfbGluayhzcmMsIG1fYXVkaW9TaW5rQmluLmdl
dCgpKTsKKyAgICBhdXRvKiBkZWNvZGViaW4gPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgiZGVjb2Rl
YmluMyIsIG51bGxwdHIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChkZWNvZGViaW4s
ICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLKCtbXShBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVy
KiBwcm92aWRlciwgR3N0UGFkKiBwYWQpIHsKKyAgICAgICAgYXV0byBwYWRDYXBzID0gYWRvcHRH
UmVmKGdzdF9wYWRfcXVlcnlfY2FwcyhwYWQsIG51bGxwdHIpKTsKKyAgICAgICAgYm9vbCBpc0F1
ZGlvID0gZG9DYXBzSGF2ZVR5cGUocGFkQ2Fwcy5nZXQoKSwgImF1ZGlvIik7CisgICAgICAgIGlm
ICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTgsIDApKQorICAgICAgICAgICAgUkVMRUFTRV9B
U1NFUlQoaXNBdWRpbyk7CisgICAgICAgIGVsc2UgaWYgKCFpc0F1ZGlvKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfc3RhdGljX3BhZChwcm92aWRlci0+bV9hdWRpb1NpbmtCaW4uZ2V0KCksICJzaW5rIikpOwor
ICAgICAgICBnc3RfcGFkX2xpbmsocGFkLCBzaW5rUGFkLmdldCgpKTsKKyAgICAgICAgZ3N0X2Vs
ZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChwcm92aWRlci0+bV9hdWRpb1NpbmtCaW4uZ2V0
KCkpOworICAgIH0pLCB0aGlzKTsKKworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNU
KG1fcGlwZWxpbmUuZ2V0KCkpLCBzcmMsIGRlY29kZWJpbiwgbV9hdWRpb1NpbmtCaW4uZ2V0KCks
IG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmsoc3JjLCBkZWNvZGViaW4pOworCisgICAg
YXV0byBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1f
cGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgQVNTRVJUKGJ1cyk7CisKKyAgICBnc3RfYnVzX3NldF9z
eW5jX2hhbmRsZXIoYnVzLmdldCgpLCBbXShHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBn
cG9pbnRlciB1c2VyRGF0YSkgLT4gR3N0QnVzU3luY1JlcGx5IHsKKyAgICAgICAgYXV0byogZGVj
b2RlYmluID0gR1NUX0VMRU1FTlRfQ0FTVCh1c2VyRGF0YSk7CisgICAgICAgIGlmIChHU1RfTUVT
U0FHRV9UWVBFKG1lc3NhZ2UpICE9IEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OIHx8IEdT
VF9NRVNTQUdFX1NSQyhtZXNzYWdlKSAhPSBHU1RfT0JKRUNUX0NBU1QoZGVjb2RlYmluKSkgewor
ICAgICAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgICAgICAgICByZXR1
cm4gR1NUX0JVU19EUk9QOworICAgICAgICB9CisKKyAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW1D
b2xsZWN0aW9uPiBjb2xsZWN0aW9uOworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1f
Y29sbGVjdGlvbihtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7CisgICAgICAgIGlmICgh
Y29sbGVjdGlvbikgeworICAgICAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7Cisg
ICAgICAgICAgICByZXR1cm4gR1NUX0JVU19EUk9QOworICAgICAgICB9CisKKyAgICAgICAgdW5z
aWduZWQgc2l6ZSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZShjb2xsZWN0aW9uLmdl
dCgpKTsKKyAgICAgICAgR0xpc3QqIHN0cmVhbXMgPSBudWxscHRyOworICAgICAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBhdXRvKiBzdHJlYW0g
PSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbShjb2xsZWN0aW9uLmdldCgpLCBpKTsK
KyAgICAgICAgICAgIGF1dG8gc3RyZWFtVHlwZSA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBl
KHN0cmVhbSk7CisgICAgICAgICAgICBpZiAoc3RyZWFtVHlwZSA9PSBHU1RfU1RSRUFNX1RZUEVf
QVVESU8pIHsKKyAgICAgICAgICAgICAgICBzdHJlYW1zID0gZ19saXN0X2FwcGVuZChzdHJlYW1z
LCBjb25zdF9jYXN0PGNoYXIqPihnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtKSkpOwor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAg
IGlmIChzdHJlYW1zKSB7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KGRlY29k
ZWJpbiwgZ3N0X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtcyhzdHJlYW1zKSk7CisgICAgICAgICAg
ICBnX2xpc3RfZnJlZShzdHJlYW1zKTsKKyAgICAgICAgfQogCi0gICAgY29ubmVjdFNpbXBsZUJ1
c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdldCgpKTsKKyAgICAgICAgZ3N0X21lc3NhZ2Vf
dW5yZWYobWVzc2FnZSk7CisgICAgICAgIHJldHVybiBHU1RfQlVTX0RST1A7CisgICAgfSwgZ3N0
X29iamVjdF9yZWYoZGVjb2RlYmluKSwgZ3N0X29iamVjdF91bnJlZik7CiB9CiAjZW5kaWYKIApA
QCAtMTIwLDEwICsxNjgsOCBAQCBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjp+QXVkaW9T
b3VyY2VQcm92aWRlckdTdHJlYW1lcigpCiAKICAgICBzZXRDbGllbnQobnVsbHB0cik7CiAjaWYg
RU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBpZiAobV9waXBlbGluZSkgewotICAgICAgICBkaXNj
b25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCkpOworICAgIGlm
IChtX3BpcGVsaW5lKQogICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5n
ZXQoKSwgR1NUX1NUQVRFX05VTEwpOwotICAgIH0KICNlbmRpZgogfQogCkBAIC0zNDUsNyArMzkx
LDYgQEAgdm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpoYW5kbGVOZXdEZWludGVy
bGVhdmVQYWQoR3N0UGFkKiBwYWQpCiAKICAgICBHUXVhcmsgcXVhcmsgPSBnX3F1YXJrX2Zyb21f
c3RhdGljX3N0cmluZygicGVlciIpOwogICAgIGdfb2JqZWN0X3NldF9xZGF0YShHX09CSkVDVChw
YWQpLCBxdWFyaywgc2lua1BhZC5nZXQoKSk7Ci0KICAgICBtX2RlaW50ZXJsZWF2ZVNvdXJjZVBh
ZHMrKzsKICAgICBHUXVhcmsgY2hhbm5lbElkUXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0
cmluZygiY2hhbm5lbC1pZCIpOwogICAgIGdfb2JqZWN0X3NldF9xZGF0YShHX09CSkVDVChzaW5r
KSwgY2hhbm5lbElkUXVhcmssIEdJTlRfVE9fUE9JTlRFUihtX2RlaW50ZXJsZWF2ZVNvdXJjZVBh
ZHMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCmlu
ZGV4IDZmMjg4NzJhZmIxMTc2ZTUxM2QyYmRmNTVhNjIyMWQ0ZjZmYjBhZTcuLmRkMzEzYjMxNDI0
MDZjYWY1Nzk0ZWFjN2NjMmFmOGQ2NGU1NDVhYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9u
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1l
ckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaApAQCAtMzIsMTkgKzMyLDE2IEBAIGNsYXNzIEdTdHJl
YW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gZmluYWw6IHB1YmxpYyBBdWRpb1N0cmVhbURlc2Ny
aXB0aW9uIHsKIHB1YmxpYzoKICAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKEdz
dEF1ZGlvSW5mbyYmIGluZm8pCiAgICAgICAgIDogbV9pbmZvKFdURk1vdmUoaW5mbykpCi0gICAg
ICAgICwgbV9jYXBzKGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZtX2luZm8pKSkK
ICAgICB7CiAgICAgfQogCiAgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihjb25z
dCBHc3RBdWRpb0luZm8mIGluZm8pCiAgICAgICAgIDogbV9pbmZvKGluZm8pCi0gICAgICAgICwg
bV9jYXBzKGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZtX2luZm8pKSkKICAgICB7
CiAgICAgfQogCiAgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihHc3RBdWRpb0lu
Zm8qIGluZm8pCiAgICAgICAgIDogbV9pbmZvKCppbmZvKQotICAgICAgICAsIG1fY2FwcyhhZG9w
dEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcygmbV9pbmZvKSkpCiAgICAgewogICAgIH0KIApA
QCAtOTksNyArOTYsMTIgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHU3Ry
ZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1cm4gZ3N0X2F1ZGlvX2lu
Zm9faXNfZXF1YWwoJm1faW5mbywgJm90aGVyLm1faW5mbyk7IH0KICAgICBib29sIG9wZXJhdG9y
IT0oY29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIHsgcmV0dXJu
ICFvcGVyYXRvciA9PSAob3RoZXIpOyB9CiAKLSAgICBjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBj
YXBzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBzOyB9CisgICAgY29uc3QgR1JlZlB0cjxHc3RDYXBz
PiYgY2FwcygpCisgICAgeworICAgICAgICBpZiAoIW1fY2FwcykKKyAgICAgICAgICAgIG1fY2Fw
cyA9IGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZtX2luZm8pKTsKKyAgICAgICAg
cmV0dXJuIG1fY2FwczsKKyAgICB9CiAgICAgY29uc3QgR3N0QXVkaW9JbmZvJiBnZXRJbmZvKCkg
Y29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJl
YW1lci5jcHAKaW5kZXggMjNhYzEyNTc2NjIxOTdmYTRlYWM5N2E5OTdjYjVkMGZlZWU3NDM5MC4u
OWY2Zjc2MTVhNzYxODE4Y2E0YmQ5ZmNlOGM4N2YyMjIzNDM5NDQ5YyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVm
UHRyR1N0cmVhbWVyLmNwcApAQCAtMjcsNiArMjcsMTIgQEAKICNpbmNsdWRlIDxnc3QvZ2wvZWds
L2dzdGVnbGltYWdlLmg+CiAjZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2Rl
ZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJydGMvd2VicnRjLmg+
CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsK
IAogdGVtcGxhdGU8PiBHUmVmUHRyPEdzdE1pbmlPYmplY3Q+IGFkb3B0R1JlZihHc3RNaW5pT2Jq
ZWN0KiBwdHIpCkBAIC01NjksNiArNTc1LDEyNCBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0
cjxHc3RFR0xJbWFnZT4oR3N0RUdMSW1hZ2UqIHB0cikKIAogI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVJfR0wpCiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwordGVtcGxhdGUgPD4gR1JlZlB0
cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBw
dHIpCit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KHB0ciwgR1Jl
ZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHJlZkdQ
dHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIpCit7Cisg
ICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKwor
ICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJU
Q1JUUFJlY2VpdmVyPihHc3RXZWJSVENSVFBSZWNlaXZlciogcHRyKQoreworICAgIGlmIChwdHIp
CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KKwordGVtcGxhdGUgPD4gR1JlZlB0
cjxHc3RXZWJSVENSVFBTZW5kZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikK
K3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+KHB0ciwgR1JlZlB0ckFk
b3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQU2VuZGVyKiByZWZHUHRyPEdzdFdl
YlJUQ1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7CisgICAgaWYgKHB0cikK
KyAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBw
dHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4o
R3N0V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29i
amVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRy
YW5zY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sKKyAg
ICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4ocHRyLCBHUmVmUHRyQWRv
cHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcmVmR1B0cjxH
c3RXZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOwor
CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2Vi
UlRDUlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBwdHIpCit7CisgICAg
aWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8
PiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBhZG9wdEdSZWYoR3N0V2ViUlRDRGF0YUNo
YW5uZWwqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4o
cHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEYXRhQ2hhbm5l
bCogcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHB0
cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX29iamVjdF9yZWYoR19PQkpFQ1QocHRyKSk7
CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RX
ZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHB0cikKK3sKKyAgICBpZiAo
cHRyKQorICAgICAgICBnX29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVm
UHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJSVENEVExTVHJhbnNw
b3J0KiBwdHIpCit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4o
cHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEVExTVHJhbnNw
b3J0KiByZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JK
RUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcHRy
KQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KKwor
dGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RX
ZWJSVENJQ0VUcmFuc3BvcnQqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENJ
Q0VUcmFuc3BvcnQ+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2Vi
UlRDSUNFVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRD
SUNFVHJhbnNwb3J0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9y
ZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+
IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRDSUNFVHJhbnNw
b3J0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIp
OworfQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKIH0gLy8gbmFtZXNwYWNl
IFdURgogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5o
CmluZGV4IDA3OGQzYzU2Mzk3NGY2YTJiM2FmMWViODM5ODY0OTg3OTQ1ZmE3ZDguLjg3ZmYwNmY0
ZTUwM2Q0NTUxZmI0MGNiN2Y0NTkyODA3MWFjY2I4ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFt
ZXIuaApAQCAtMzMsNiArMzMsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RH
TENvbnRleHQ7CiB0eXBlZGVmIHN0cnVjdCBfR3N0RUdMSW1hZ2UgR3N0RUdMSW1hZ2U7CiAjZW5k
aWYKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJU
Q0RhdGFDaGFubmVsIEdzdFdlYlJUQ0RhdGFDaGFubmVsOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdl
YlJUQ1JUUFJlY2VpdmVyIEdzdFdlYlJUQ1JUUFJlY2VpdmVyOwordHlwZWRlZiBzdHJ1Y3QgX0dz
dFdlYlJUQ1JUUFNlbmRlciBHc3RXZWJSVENSVFBTZW5kZXI7Cit0eXBlZGVmIHN0cnVjdCBfR3N0
V2ViUlRDUlRQVHJhbnNjZWl2ZXIgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI7Cit0eXBlZGVmIHN0
cnVjdCBfR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCBHc3RXZWJSVENEVExTVHJhbnNwb3J0OwordHlw
ZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ0lDRVRyYW5zcG9ydCBHc3RXZWJSVENJQ0VUcmFuc3BvcnQ7
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RQbHVn
aW4+IGFkb3B0R1JlZihHc3RQbHVnaW4qIHB0cik7CkBAIC0xNDYsNiArMTU1LDMzIEBAIHRlbXBs
YXRlPD4gR3N0RUdMSW1hZ2UqIHJlZkdQdHI8R3N0RUdMSW1hZ2U+KEdzdEVHTEltYWdlKiBwdHIp
OwogdGVtcGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RFR0xJbWFnZT4oR3N0RUdMSW1hZ2UqIHB0
cik7CiAjZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQordGVtcGxhdGUgPD4gR1Jl
ZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFJlY2VpdmVy
Kik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBSZWNlaXZlciogcmVmR1B0cjxHc3RXZWJSVENS
VFBSZWNlaXZlcj4oR3N0V2ViUlRDUlRQUmVjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVy
ZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPihHc3RXZWJSVENSVFBSZWNlaXZlciopOworCit0
ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gYWRvcHRHUmVmKEdzdFdlYlJU
Q1JUUFNlbmRlciopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQU2VuZGVyKiByZWZHUHRyPEdz
dFdlYlJUQ1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKik7Cit0ZW1wbGF0ZSA8PiB2b2lk
IGRlcmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KEdzdFdlYlJUQ1JUUFNlbmRlciopOworCit0
ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBhZG9wdEdSZWYoR3N0
V2ViUlRDUlRQVHJhbnNjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFRyYW5zY2Vp
dmVyKiByZWZHUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2Nl
aXZlciopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2
ZXI+KEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0
V2ViUlRDRGF0YUNoYW5uZWw+IGFkb3B0R1JlZihHc3RXZWJSVENEYXRhQ2hhbm5lbCopOwordGVt
cGxhdGUgPD4gR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5u
ZWw+KEdzdFdlYlJUQ0RhdGFDaGFubmVsKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxH
c3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsKKwordGVtcGxhdGUg
PD4gR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiBhZG9wdEdSZWYoR3N0V2ViUlRDRFRM
U1RyYW5zcG9ydCopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcmVmR1B0
cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0Kik7Cit0ZW1w
bGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PihHc3RXZWJSVENE
VExTVHJhbnNwb3J0Kik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDSUNFVHJhbnNw
b3J0PiBhZG9wdEdSZWYoR3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7Cit0ZW1wbGF0ZSA8PiBHc3RX
ZWJSVENJQ0VUcmFuc3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJS
VENJQ0VUcmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0lD
RVRyYW5zcG9ydD4oR3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7CisKKyNlbmRpZgorCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJD
b21tb24uY3BwCmluZGV4IDlmNDk1ZGRmOTAyZGY0ZmZkZjUzYWZlOGMwZjY3NGY1NmNiZjVmZTEu
LmE4Y2JlNWM3MmUyMzAyMWNmZTQ3YzgyYWExZGVjYzM4ZTM2NDI2MWMgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDb21tb24uY3BwCkBAIC0xODksNiArMTg5LDkgQEAgY29uc3QgY2hhciogY2Fwc01lZGlh
VHlwZShjb25zdCBHc3RDYXBzKiBjYXBzKQogICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1l
KHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtY2VuYyIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25h
bWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1jYmNzIikgfHwgZ3N0X3N0cnVjdHVyZV9oYXNf
bmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXdlYm0tZW5jIikpCiAgICAgICAgIHJldHVy
biBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAib3JpZ2luYWwtbWVkaWEtdHlw
ZSIpOwogI2VuZGlmCisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAi
YXBwbGljYXRpb24veC1ydHAiKSkKKyAgICAgICAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0
cmluZyhzdHJ1Y3R1cmUsICJtZWRpYSIpOworCiAgICAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0
X25hbWUoc3RydWN0dXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmgKaW5k
ZXggYmY3NGVjZjAyY2MyMmY2MDZlYmNiOWZlODVjMDM0YjI2YzQwNjQ0MS4uZTUyNDcxY2E3ZWE2
MmEzMTU4YzUyMzMzNjA2MzUyZWM2MzE1MmEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJl
YW1lci5oCkBAIC0zMCw2ICszMCwxMiBAQAogI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgog
I2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KIAorI2lmIGRlZmluZWQoQlVJTERJTkdf
V2ViQ29yZSkgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFC
TEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VO
U1RBQkxFX0FQSQorI2VuZGlmCisKICNpZiBVU0UoV1BFX1ZJREVPX1BMQU5FX0RJU1BMQVlfRE1B
QlVGKQogI2luY2x1ZGUgPHdwZS9leHRlbnNpb25zL3ZpZGVvLXBsYW5lLWRpc3BsYXktZG1hYnVm
Lmg+CiAjZW5kaWYKQEAgLTQ5LDYgKzU1LDEwIEBAIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdz
dEJ5dGVSZWFkZXIsIGdzdF9ieXRlX3JlYWRlcl9mcmVlKQogV1RGX0RFRklORV9HUFRSX0RFTEVU
RVIoR3N0VmlkZW9Db252ZXJ0ZXIsIGdzdF92aWRlb19jb252ZXJ0ZXJfZnJlZSkKIFdURl9ERUZJ
TkVfR1BUUl9ERUxFVEVSKEdzdEF1ZGlvQ29udmVydGVyLCBnc3RfYXVkaW9fY29udmVydGVyX2Zy
ZWUpCiAKKyNpZiBkZWZpbmVkKEJVSUxESU5HX1dlYkNvcmUpICYmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorV1RGX0RFRklORV9HUFRSX0RFTEVURVIoR3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LCBnc3Rfd2VicnRjX3Nlc3Npb25fZGVzY3JpcHRpb25fZnJlZSkKKyNlbmRpZgorCiAjaWYgVVNF
KFdQRV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRikKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVS
KHN0cnVjdCB3cGVfdmlkZW9fcGxhbmVfZGlzcGxheV9kbWFidWZfc291cmNlLCB3cGVfdmlkZW9f
cGxhbmVfZGlzcGxheV9kbWFidWZfc291cmNlX2Rlc3Ryb3kpCiAjZW5kaWYKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2
YXRlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
VHJhY2tQcml2YXRlLmNwcAppbmRleCBlYzMyYmE4NWNjZjg0NzI1MzgzNTI2ODE4NTljNDA3N2Vi
ZDQ5OTJkLi4xODI2NmYxMjJjNGIxODY3NGExZjc5YmFiOTFmMDU0OTY3ZmNiNzAwIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAKICNpZiBQTEFURk9S
TShDT0NPQSkKICNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VQcm92aWRlckNv
Y29hLmgiCi0jZWxpZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAm
JiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2VsaWYgRU5BQkxFKFdFQl9BVURJ
TykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKICNpbmNsdWRlICJB
dWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmgiCiAjZWxzZQogI2luY2x1ZGUgIldlYkF1ZGlv
U291cmNlUHJvdmlkZXIuaCIKQEAgLTE5OSw3ICsxOTksNyBAQCBSZWZQdHI8V2ViQXVkaW9Tb3Vy
Y2VQcm92aWRlcj4gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZUF1ZGlvU291cmNlUHJv
dmlkZQogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgcmV0dXJuIE1lZGlhU3RyZWFtVHJhY2tB
dWRpb1NvdXJjZVByb3ZpZGVyQ29jb2E6OmNyZWF0ZSgqdGhpcyk7Ci0jZWxpZiBVU0UoTElCV0VC
UlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2VsaWYgVVNFKEdTVFJFQU1FUikKICAgICByZXR1cm4g
QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6Y3JlYXRlKCp0aGlzKTsKICNlbHNlCiAgICAg
cmV0dXJuIG51bGxwdHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJl
ci5jcHAKaW5kZXggMjZlZTQyNjNiOWRiODc4MWRiYWU2MWUxYTMwMTJlZjdkYzcwOTcyNS4uMzVl
NjVjMGViMGJkNDgxZDNmODVhOWRkMDViNjZiZjk1NjkwZTdlMSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcApAQCAtMjksMjkgKzI5LDQ2IEBACiAjaW5j
bHVkZSAiTGliV2ViUlRDQXVkaW9Gb3JtYXQuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8Z3N0L2Fw
cC9nc3RhcHBzaW5rLmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShMSUJXRUJS
VEMpCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gTGli
V2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBz
X2F1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUgPSBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlUmF0
ZTsKICNlbHNlCi1zdGF0aWMgY29uc3RleHByIHNpemVfdCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRl
ID0gNDgwMDA7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBzX2F1ZGlvQ2FwdHVyZVNhbXBsZVJh
dGUgPSA0ODAwMDsKICNlbmRpZgogCiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpHU3RyZWFtZXJB
dWRpb0NhcHR1cmVyKEdTdHJlYW1lckNhcHR1cmVEZXZpY2UgZGV2aWNlKQotICAgIDogR1N0cmVh
bWVyQ2FwdHVyZXIoZGV2aWNlLCBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8v
eC1yYXciLCAicmF0ZSIsIEdfVFlQRV9JTlQsIEF1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51bGxw
dHIpKSkKKyAgICA6IEdTdHJlYW1lckNhcHR1cmVyKGRldmljZSwgYWRvcHRHUmVmKGdzdF9jYXBz
X25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBzX2F1ZGlvQ2Fw
dHVyZVNhbXBsZVJhdGUsIG51bGxwdHIpKSkKIHsKIH0KIAogR1N0cmVhbWVyQXVkaW9DYXB0dXJl
cjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcigpCi0gICAgOiBHU3RyZWFtZXJDYXB0dXJlcigiYXBw
c3JjIiwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUi
LCBHX1RZUEVfSU5ULCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSksIENhcHR1cmVE
ZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmUpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcigi
YXBwc3JjIiwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJh
dGUiLCBHX1RZUEVfSU5ULCBzX2F1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51bGxwdHIpKSwgQ2Fw
dHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSkKIHsKIH0KIAogR3N0RWxlbWVudCog
R1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6Y3JlYXRlQ29udmVydGVyKCkKIHsKLSAgICByZXR1cm4g
bWFrZUdTdHJlYW1lckJpbigiYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSIsIHRydWUpOwor
ICAgIGF1dG8qIGJpbiA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOworICAgIGF1dG8qIGF1ZGlvY29u
dmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgbnVsbHB0cik7
CisgICAgYXV0byogYXVkaW9yZXNhbXBsZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVk
aW9yZXNhbXBsZSIsIG51bGxwdHIpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNU
KGJpbiksIGF1ZGlvY29udmVydCwgYXVkaW9yZXNhbXBsZSwgbnVsbHB0cik7CisgICAgZ3N0X2Vs
ZW1lbnRfbGluayhhdWRpb2NvbnZlcnQsIGF1ZGlvcmVzYW1wbGUpOworCisjaWYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisgICAgaWYgKGF1dG8qIHdlYnJ0Y2RzcCA9IG1ha2VHU3RyZWFtZXJFbGVt
ZW50KCJ3ZWJydGNkc3AiLCBudWxscHRyKSkgeworICAgICAgICBnX29iamVjdF9zZXQod2VicnRj
ZHNwLCAiZWNoby1jYW5jZWwiLCBmYWxzZSwgInZvaWNlLWRldGVjdGlvbiIsIHRydWUsIG51bGxw
dHIpOworICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QoYmluKSwgd2VicnRjZHNwKTsK
KyAgICAgICAgZ3N0X2VsZW1lbnRfbGluayh3ZWJydGNkc3AsIGF1ZGlvY29udmVydCk7CisgICAg
fQorI2VuZGlmCisKKyAgICBpZiAoYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2Jpbl9maW5kX3Vu
bGlua2VkX3BhZChHU1RfQklOX0NBU1QoYmluKSwgR1NUX1BBRF9TUkMpKSkKKyAgICAgICAgZ3N0
X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVF9DQVNUKGJpbiksIGdzdF9naG9zdF9wYWRfbmV3
KCJzcmMiLCBwYWQuZ2V0KCkpKTsKKyAgICBpZiAoYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2Jp
bl9maW5kX3VubGlua2VkX3BhZChHU1RfQklOX0NBU1QoYmluKSwgR1NUX1BBRF9TSU5LKSkpCisg
ICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlRfQ0FTVChiaW4pLCBnc3RfZ2hv
c3RfcGFkX25ldygic2luayIsIHBhZC5nZXQoKSkpOworCisgICAgcmV0dXJuIGJpbjsKIH0KIAog
Ym9vbCBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpzZXRTYW1wbGVSYXRlKGludCBzYW1wbGVSYXRl
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKaW5kZXggYzllMGQ1ZWI2MGUy
YmMzOGVmM2E5YTVkNTMyYzQzODgwMTA5NmY0ZS4uMDk4MzRhNjU4YzEyNDAzMjA0NDU1ODRlMjE5
NDE1YTg1ZTEzNzBiOCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCkBA
IC0xMDAsNyArMTAwLDcgQEAgR3N0RWxlbWVudCogR1N0cmVhbWVyQ2FwdHVyZXI6OmNyZWF0ZVNv
dXJjZSgpCiAgICAgICAgIG1fc3JjID0gbWFrZUVsZW1lbnQobV9zb3VyY2VGYWN0b3J5KTsKICAg
ICAgICAgQVNTRVJUKG1fc3JjKTsKICAgICAgICAgaWYgKEdTVF9JU19BUFBfU1JDKG1fc3JjLmdl
dCgpKSkKLSAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3NyYy5nZXQoKSwgImlzLWxpdmUiLCB0
cnVlLCAiZm9ybWF0IiwgR1NUX0ZPUk1BVF9USU1FLCBudWxscHRyKTsKKyAgICAgICAgICAgIGdf
b2JqZWN0X3NldChtX3NyYy5nZXQoKSwgImlzLWxpdmUiLCB0cnVlLCAiZm9ybWF0IiwgR1NUX0ZP
Uk1BVF9USU1FLCAiZG8tdGltZXN0YW1wIiwgdHJ1ZSwgbnVsbHB0cik7CiAKICAgICAgICAgYXV0
byBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9zcmMuZ2V0
KCksICJzcmMiKSk7CiAgICAgICAgIGlmIChtX2RldmljZVR5cGUgPT0gQ2FwdHVyZURldmljZTo6
RGV2aWNlVHlwZTo6Q2FtZXJhKSB7CkBAIC0xMzgsNiArMTM4LDcgQEAgR3N0RWxlbWVudCogR1N0
cmVhbWVyQ2FwdHVyZXI6OmNyZWF0ZVNvdXJjZSgpCiAgICAgbV9zcmMgPSBnc3RfZGV2aWNlX2Ny
ZWF0ZV9lbGVtZW50KG1fZGV2aWNlLmdldCgpLCBzb3VyY2VOYW1lLmdldCgpKTsKICAgICBBU1NF
UlQobV9zcmMpOwogCisgICAgLy8gZ19vYmplY3Rfc2V0KG1fc3JjLmdldCgpLCAiaW8tbW9kZSIs
IDIsIG51bGxwdHIpOwogICAgIHJldHVybiBtX3NyYy5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRU
TUZTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmEx
ZGU1MmJkNTgxOTRjNzM3NmE2YTFhNGYzZmZlNGRlZGMxYTcyYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJE
VE1GU2VuZGVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckRU
TUZTZW5kZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyRFRNRlNlbmRl
ckJhY2tlbmQ6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6fkdTdHJlYW1lckRUTUZT
ZW5kZXJCYWNrZW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEdTdHJl
YW1lckRUTUZTZW5kZXJCYWNrZW5kOjpjYW5JbnNlcnREVE1GKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHU3RyZWFtZXJEVE1GU2VuZGVy
QmFja2VuZDo6cGxheVRvbmUoY29uc3QgU3RyaW5nJiwgc2l6ZV90LCBzaXplX3QpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5k
Ojp0b25lcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9
OworfQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmR1cmF0aW9uKCkgY29u
c3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitzaXplX3Qg
R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmludGVyVG9uZUdhcCgpIGNvbnN0Cit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHU3RyZWFtZXJEVE1G
U2VuZGVyQmFja2VuZDo6b25Ub25lUGxheWVkKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+
JiYgb25Ub25lUGxheWVkKQoreworICAgIG1fb25Ub25lUGxheWVkID0gV1RGTW92ZShvblRvbmVQ
bGF5ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1Nzk3MDUwY2VjOWI0YjBh
YTZkOWVmZTk4MDhhZTVjOTA4OGZiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tl
bmQuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEln
YWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIlJUQ0RUTUZTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2UgZWFnZXIgaW5pdGlhbGl6
YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBzaW5jZSB3ZSBjYWxsIG1ha2VXZWFrUHRyKCkg
ZnJvbSBhbm90aGVyIHRocmVhZC4KK2NsYXNzIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kIGZp
bmFsIDogcHVibGljIFJUQ0RUTUZTZW5kZXJCYWNrZW5kLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQsIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246
OkVhZ2VyPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhw
bGljaXQgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKTsKKyAgICB+R1N0cmVhbWVyRFRNRlNl
bmRlckJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENEVE1GU2VuZGVyQmFja2VuZAor
ICAgIGJvb2wgY2FuSW5zZXJ0RFRNRigpIGZpbmFsOworICAgIHZvaWQgcGxheVRvbmUoY29uc3Qg
U3RyaW5nJiB0b25lLCBzaXplX3QgZHVyYXRpb24sIHNpemVfdCBpbnRlclRvbmVHYXApIGZpbmFs
OworICAgIHZvaWQgb25Ub25lUGxheWVkKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYp
IGZpbmFsOworICAgIFN0cmluZyB0b25lcygpIGNvbnN0IGZpbmFsOworICAgIHNpemVfdCBkdXJh
dGlvbigpIGNvbnN0IGZpbmFsOworICAgIHNpemVfdCBpbnRlclRvbmVHYXAoKSBjb25zdCBmaW5h
bDsKKworICAgIEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1fb25Ub25lUGxheWVkOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMp
ICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKaW5kZXggOTk1NGZhNjU4MzEzYTlhNDVhNTJlM2NmNzYx
ZjEwMWYzNGQ5YWFkNS4uMDViYTIwZjcwNGZlN2I2YzIyNmFmNzcwYWFhYTExMDE5M2M1MjhlYiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3Bw
CkBAIC0zNCwxNyArMzQsMjMgQEAKICNpbmNsdWRlICJWaWRlb0ZyYW1lTWV0YWRhdGFHU3RyZWFt
ZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgiCiAKKyNpZiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KKyNpbmNs
dWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaD4KICNpbmNsdWRlIDx3dGYvVVVJRC5oPgog
I2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3Jl
OwogCiBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdmlkZW9TcmNUZW1wbGF0ZSA9IEdTVF9T
VEFUSUNfUEFEX1RFTVBMQVRFKCJ2aWRlb19zcmMldSIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX1NP
TUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gtcmF3O3ZpZGVvL3gtaDI2NDt2
aWRlby94LXZwOCIpKTsKKyAgICBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gtcmF3O3ZpZGVvL3gt
aDI2NDt2aWRlby94LXZwODt2aWRlby94LXZwOTthcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0
cmluZyl2aWRlbyIpKTsKIAogc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGF1ZGlvU3JjVGVt
cGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgiYXVkaW9fc3JjJXUiLCBHU1RfUEFEX1NS
QywgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTKCJhdWRpby94LXJhdyhB
TlkpOyIpKTsKKyAgICBHU1RfU1RBVElDX0NBUFMoImF1ZGlvL3gtcmF3KEFOWSk7YXBwbGljYXRp
b24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8iKSk7CiAKIEdTVF9ERUJVR19DQVRFR09SWV9T
VEFUSUMod2Via2l0TWVkaWFTdHJlYW1TcmNEZWJ1Zyk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVM
VCB3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnCkBAIC0yMjEsNyArMjI3LDcgQEAgcHVibGljOgog
CiAgICAgICAgIGlmIChkcm9wKSB7CiAgICAgICAgICAgICBtX25lZWRzRGlzY29udCA9IHRydWU7
Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QobV9zcmMuZ2V0KCksICIlcyBxdWV1ZSBmdWxs
IGFscmVhZHkuLi4gbm90IHB1c2hpbmciLCBtX3RyYWNrLmhhc1ZpZGVvKCkgPyAiVmlkZW8iIDog
IkF1ZGlvIik7CisgICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKG1fc3JjLmdldCgpLCAiJXMg
cXVldWUgZnVsbCBhbHJlYWR5Li4uIG5vdCBwdXNoaW5nIiwgbV90cmFjay5oYXNWaWRlbygpID8g
IlZpZGVvIiA6ICJBdWRpbyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAg
LTY1Miw2ICs2NTgsNyBAQCB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkVHJhY2soV2ViS2l0
TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcgogICAgIGNvbnN0IGNoYXIq
IHNvdXJjZVR5cGU7CiAgICAgdW5zaWduZWQgY291bnRlcjsKICAgICBHc3RTdGF0aWNQYWRUZW1w
bGF0ZSogcGFkVGVtcGxhdGU7CisKICAgICBpZiAodHJhY2stPmhhc0F1ZGlvKCkpIHsKICAgICAg
ICAgcGFkVGVtcGxhdGUgPSAmYXVkaW9TcmNUZW1wbGF0ZTsKICAgICAgICAgc291cmNlVHlwZSA9
ICJhdWRpbyI7CkBAIC02NjMsOSArNjcwLDE5IEBAIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNB
ZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1UcmFja1ByCiAg
ICAgICAgIGNvdW50ZXIgPSBzZWxmLT5wcml2LT52aWRlb1BhZENvdW50ZXIuZXhjaGFuZ2VBZGQo
MSk7CiAgICAgfQogCi0gICAgYXV0byBwYWROYW1lID0gbWFrZVN0cmluZyhzb3VyY2VUeXBlLCAi
X3NyYyIsIGNvdW50ZXIpOworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorICAgIGlmICh0cmFj
ay0+c291cmNlKCkuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpIHsKKyAgICAgICAgYXV0byYgc291
cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4o
dHJhY2stPnNvdXJjZSgpKTsKKyAgICAgICAgc291cmNlLnJlZ2lzdGVyQ2xpZW50KCk7CisgICAg
fSBlbHNlIGlmICh0cmFjay0+c291cmNlKCkuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkpIHsKKyAg
ICAgICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgpKTsKKyAgICAgICAgc291cmNlLnJlZ2lzdGVy
Q2xpZW50KCk7CisgICAgfQorI2VuZGlmCisKICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJT
ZXR1cCAlcyBzb3VyY2UgZm9yIHRyYWNrICVzLCBvbmx5IHRyYWNrOiAlcyIsIHNvdXJjZVR5cGUs
IHRyYWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCksIGJvb2xGb3JQcmludGluZyhvbmx5VHJhY2spKTsK
IAorICAgIGF1dG8gcGFkTmFtZSA9IG1ha2VTdHJpbmcoc291cmNlVHlwZSwgIl9zcmMiLCBjb3Vu
dGVyKTsKICAgICBhdXRvIHNvdXJjZSA9IG1ha2VVbmlxdWU8SW50ZXJuYWxTb3VyY2U+KEdTVF9F
TEVNRU5UX0NBU1Qoc2VsZiksICp0cmFjaywgcGFkTmFtZSk7CiAgICAgYXV0byogZWxlbWVudCA9
IHNvdXJjZS0+Z2V0KCk7CiAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKHNlbGYpLCBlbGVt
ZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKaW5kZXgg
ZmFjNDcwNWZiOGE3Y2YyZGMyM2VhNTExYjE1ZmNmNDg1NTJjZjMzYS4uYTc2ZWYxZWZmZDE2ZmEy
NmI2ZGUzNTc0ZjQ2NGY1ZDIzM2M5NWVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clZpZGVvRW5jb2Rlci5jcHAKQEAgLTI5Nyw5ICsyOTcsMTEgQEAgc3RhdGljIHZvaWQgd2Via2l0
X3dlYnJ0Y192aWRlb19lbmNvZGVyX2NsYXNzX2luaXQoV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVy
Q2xhc3MKICAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZWxmLT5wcml2LT5wYXJzZXIuZ2V0KCks
ICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRyKTsKICAgICAgICAgfSwgInRhcmdldC1iaXRy
YXRlIiwgc2V0Qml0cmF0ZUJpdFBlclNlYywgImludGVydmFsLWludHJhZnJhbWVzIik7CiAgICAg
RW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihYMjY0LCAieDI2NGVuYyIsICJoMjY0cGFyc2UiLCAi
dmlkZW8veC1oMjY0IiwKLSAgICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFt
LWZvcm1hdD1ieXRlLXN0cmVhbSxwcm9maWxlPWJhc2VsaW5lIiwKKyAgICAgICAgInZpZGVvL3gt
aDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVhbSxwcm9maWxlPWNvbnN0
cmFpbmVkLWJhc2VsaW5lIiwKICAgICAgICAgW10oV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyKiBz
ZWxmKSB7CiAgICAgICAgICAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVChzZWxm
LT5wcml2LT5lbmNvZGVyLmdldCgpKSwgInR1bmUiLCAiemVyb2xhdGVuY3kiKTsKKyAgICAgICAg
ICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdfT0JKRUNUKHNlbGYtPnByaXYtPmVuY29kZXIu
Z2V0KCkpLCAic3BlZWQtcHJlc2V0IiwgInVsdHJhZmFzdCIpOworICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KEdfT0JKRUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAia2V5LWludC1tYXgi
LCAxNSwgTlVMTCk7CiAgICAgICAgICAgICBnX29iamVjdF9zZXQoc2VsZi0+cHJpdi0+cGFyc2Vy
LmdldCgpLCAiY29uZmlnLWludGVydmFsIiwgMSwgbnVsbHB0cik7CiAgICAgICAgIH0sICJiaXRy
YXRlIiwgc2V0Qml0cmF0ZUtiaXRQZXJTZWMsICJrZXktaW50LW1heCIpOwogICAgIEVuY29kZXJz
OjpyZWdpc3RlckVuY29kZXIoT3BlbkgyNjQsICJvcGVuaDI2NGVuYyIsICJoMjY0cGFyc2UiLCAi
dmlkZW8veC1oMjY0IiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODY4MDU2YTg1ODhl
NWZkYTc1OTc3ZDE4MTIwMDM4YWVhZWJjN2JjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5o
IgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9EYXRhLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlR1N0cmVhbWVyKFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lTWVkaWFT
b3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8sIFdURk1vdmUoYXVkaW9UcmFj
a0lkKSkKKyAgICAsIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIHN0
YXJ0KCk7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6flJlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcigpCit7CisgICAgc3RvcCgpOworfQorCit2
b2lkIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdE
YXRhKCkKK3sKKyAgICByZWxlYXNlVmFsdmUoKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBsb2NrVmFs
dmUoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgUmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpjYXBhYmlsaXRpZXMoKQoreworICAgIHJl
dHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygp
OworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIFJlYWx0aW1lSW5jb21p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MoKQoreworICAgIHJldHVybiBtX2N1cnJl
bnRTZXR0aW5nczsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXI6OmRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmIGdzdFNhbXBsZSkKK3sKKyAg
ICBhdXRvKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoZ3N0U2FtcGxlLmdldCgpKTsK
KyAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOworICAgIEdT
dHJlYW1lckF1ZGlvRGF0YSBmcmFtZXMoV1RGTW92ZShnc3RTYW1wbGUpLCBkZXNjcmlwdGlvbi5n
ZXRJbmZvKCkpOworCisgICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhVGltZShHU1RfVElN
RV9BU19VU0VDT05EUyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSwgR19VU0VDX1BFUl9TRUMpLCBm
cmFtZXMsIGRlc2NyaXB0aW9uLCAwKTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWlu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmRmNmRhM2I3MWY1ZmVlNTk2ZjI1
NmYyMTVkZGNkZjc2OTg4NGVhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVk
ZSAiUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1l
TWVkaWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSwg
cHVibGljIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiBjcmVhdGUoU3Ry
aW5nJiYgYXVkaW9UcmFja0lkKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lSW5jb21p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKGF1ZGlvVHJhY2tJZCkpKTsgfQorCitwcm90
ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFN0cmluZyYm
KTsKKyAgICB+UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKCk7CisKK3ByaXZh
dGU6CisgICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZSBBUEkKKyAgICB2b2lkIHN0YXJ0UHJvZHVj
aW5nRGF0YSgpIGZpbmFsOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSAgZmluYWw7Cisg
ICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkg
ZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygp
IGZpbmFsOworICAgIGJvb2wgaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciBB
UEkKKyAgICB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmKSBmaW5hbDsK
KworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJ
TihXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIpCisgICAgc3Rh
dGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2UmIHNvdXJj
ZSkgeyByZXR1cm4gc291cmNlLmlzSW5jb21pbmdBdWRpb1NvdXJjZSgpOyB9CitTUEVDSUFMSVpF
X1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hMTk2ZjI1ZDlkMmQwNWJjMmJiMmIxZDJjMWVlNmQ2MTJiNjk5NDc4
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEs
OTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21p
bmdTb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RG
U3RyaW5nLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRw
b2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBv
aW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVJbmNvbWluZ1NvdXJj
ZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcigpCit7CisgICAgbV9i
aW4gPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBtX3ZhbHZlID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAgIG1fdGVlID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJ0ZWUiLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9zZXQobV90ZWUuZ2V0KCks
ICJhbGxvdy1ub3QtbGlua2VkIiwgdHJ1ZSwgbnVsbHB0cik7CisKKyAgICBhdXRvKiBxdWV1ZSA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxscHRyKTsKKyAgICBnc3RfYmlu
X2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fdmFsdmUuZ2V0KCksIHF1ZXVl
LCBtX3RlZS5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBnc3RfZWxlbWVudF9saW5rX21hbnkobV92
YWx2ZS5nZXQoKSwgcXVldWUsIG1fdGVlLmdldCgpLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVu
dF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fdmFsdmUuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50
X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3Rh
dGVfd2l0aF9wYXJlbnQobV90ZWUuZ2V0KCkpOworCisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fdmFsdmUuZ2V0KCksICJzaW5rIikpOwor
ICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4uZ2V0KCksIGdzdF9naG9zdF9wYWRfbmV3KCJz
aW5rIiwgc2lua1BhZC5nZXQoKSkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXI6OmxvY2tWYWx2ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fdmFsdmUpCisgICAgICAg
IGdfb2JqZWN0X3NldChtX3ZhbHZlLmdldCgpLCAiZHJvcCIsIHRydWUsIG51bGxwdHIpOworfQor
Cit2b2lkIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OnJlbGVhc2VWYWx2ZSgpIGNv
bnN0Cit7CisgICAgaWYgKG1fdmFsdmUpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3ZhbHZlLmdl
dCgpLCAiZHJvcCIsIGZhbHNlLCBudWxscHRyKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5n
U291cmNlR1N0cmVhbWVyOjpyZWdpc3RlckNsaWVudCgpCit7CisgICAgR1NUX0RFQlVHKCJSZWdp
c3RlcmluZyBuZXcgY2xpZW50Iik7CisgICAgYXV0byogcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoInF1ZXVlIiwgbnVsbHB0cik7CisgICAgYXV0byogc2luayA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgiYXBwc2luayIsIG51bGxwdHIpOworICAgIGdfb2JqZWN0X3NldChzaW5r
LCAiZW5hYmxlLWxhc3Qtc2FtcGxlIiwgRkFMU0UsICJlbWl0LXNpZ25hbHMiLCBUUlVFLCAibWF4
LWJ1ZmZlcnMiLCAxLCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoc2lu
aywgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKCtbXShSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyKiBzZWxmLCBHc3RFbGVtZW50KiBzaW5rKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAg
ICAgYXV0byBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9B
UFBfU0lOSyhzaW5rKSkpOworICAgICAgICBzZWxmLT5kaXNwYXRjaFNhbXBsZShXVEZNb3ZlKHNh
bXBsZSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfSksIHRoaXMpOworCisg
ICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKHNpbmssICJuZXctcHJlcm9sbCIsIEdfQ0FMTEJB
Q0soK1tdKFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIqIHNlbGYsIEdzdEVsZW1lbnQq
IHNpbmspIC0+IEdzdEZsb3dSZXR1cm4geworICAgICAgICBhdXRvIHNhbXBsZSA9IGFkb3B0R1Jl
Zihnc3RfYXBwX3NpbmtfcHVsbF9wcmVyb2xsKEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgICAg
ICBzZWxmLT5kaXNwYXRjaFNhbXBsZShXVEZNb3ZlKHNhbXBsZSkpOworICAgICAgICByZXR1cm4g
R1NUX0ZMT1dfT0s7CisgICAgfSksIHRoaXMpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1Rf
QklOX0NBU1QobV9iaW4uZ2V0KCkpLCBxdWV1ZSwgc2luaywgbnVsbHB0cik7CisgICAgZ3N0X2Vs
ZW1lbnRfbGlua19tYW55KG1fdGVlLmdldCgpLCBxdWV1ZSwgc2luaywgbnVsbHB0cik7CisgICAg
Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChxdWV1ZSk7CisgICAgZ3N0X2VsZW1l
bnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChzaW5rKTsKKworICAgIGF1dG8gZG90RmlsZU5hbWUg
PSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX2Jpbi5nZXQoKSksICIuaW5jb21pbmciKTsK
KyAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTl9DQVNUKG1fYmlu
LmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkb3RGaWxlTmFtZS51dGY4KCkuZGF0
YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdT
b3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41Njc0YzRiOTAyOTQyNmNiNWQyYzE5YWE1Njdh
OWM1YWVkYTI3MWVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaApA
QCAtMCwwICsxLDUwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdT
dHJlYW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lSW5jb21p
bmdTb3VyY2VHU3RyZWFtZXIgeworcHVibGljOgorICAgIEdzdEVsZW1lbnQqIGJpbigpIHsgcmV0
dXJuIG1fYmluLmdldCgpOyB9CisgICAgdm9pZCByZWdpc3RlckNsaWVudCgpOworCitwcm90ZWN0
ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcigpOworCisgICAgdm9pZCBs
b2NrVmFsdmUoKSBjb25zdDsKKyAgICB2b2lkIHJlbGVhc2VWYWx2ZSgpIGNvbnN0OworCisgICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBtX3ZhbHZlOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaFNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJikgeyB9CisKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fYmluOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV90ZWU7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTVmMDgwNzYyYmMyNTZlZDdlYzlmMWY4
ZTk5NTRiYzEyYjQxODBmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTA3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNp
bmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1
ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9GcmFtZU1ldGFkYXRh
R1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Z3N0L3J0cC9ydHAuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCisgICAgOiBS
ZWFsdGltZU1lZGlhU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBXVEZN
b3ZlKHZpZGVvVHJhY2tJZCkpCisgICAgLCBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
KCkKK3sKKyAgICBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgY29uc3Ry
YWludHM7CisgICAgY29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsKKyAgICBjb25z
dHJhaW50cy5zZXRTdXBwb3J0c0hlaWdodCh0cnVlKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9
IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyB7IH07CisgICAgbV9jdXJyZW50U2V0dGluZ3Mt
PnNldFN1cHBvcnRlZENvbnN0cmFpbnRzKFdURk1vdmUoY29uc3RyYWludHMpKTsKKworICAgIGF1
dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3ZhbHZl
LmdldCgpLCAic2luayIpKTsKKyAgICBnc3RfcGFkX2FkZF9wcm9iZShzaW5rUGFkLmdldCgpLCBz
dGF0aWNfY2FzdDxHc3RQYWRQcm9iZVR5cGU+KEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIpLCBb
XShHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8sIGdwb2ludGVyKSAtPiBHc3RQYWRQcm9i
ZVJldHVybiB7CisgICAgICAgIGF1dG8gdmlkZW9TYW1wbGVNZXRhZGF0YSA9IHN0ZDo6bWFrZV9v
cHRpb25hbDxWaWRlb1NhbXBsZU1ldGFkYXRhPih7IH0pOworICAgICAgICB2aWRlb1NhbXBsZU1l
dGFkYXRhLT5yZWNlaXZlVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVw
b2NoKCk7CisKKyAgICAgICAgYXV0byogYnVmZmVyID0gR1NUX0JVRkZFUl9DQVNUKEdTVF9QQURf
UFJPQkVfSU5GT19EQVRBKGluZm8pKTsKKyAgICAgICAgR3N0UlRQQnVmZmVyIHJ0cEJ1ZmZlciBH
U1RfUlRQX0JVRkZFUl9JTklUOworICAgICAgICBpZiAoZ3N0X3J0cF9idWZmZXJfbWFwKGJ1ZmZl
ciwgR1NUX01BUF9SRUFELCAmcnRwQnVmZmVyKSkgeworICAgICAgICAgICAgdmlkZW9TYW1wbGVN
ZXRhZGF0YS0+cnRwVGltZXN0YW1wID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCgmcnRw
QnVmZmVyKTsKKyAgICAgICAgICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwKCZydHBCdWZmZXIpOwor
ICAgICAgICB9CisgICAgICAgIGJ1ZmZlciA9IHdlYmtpdEdzdEJ1ZmZlclNldFZpZGVvU2FtcGxl
TWV0YWRhdGEoYnVmZmVyLCBXVEZNb3ZlKHZpZGVvU2FtcGxlTWV0YWRhdGEpKTsKKyAgICAgICAg
R1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEoaW5mbykgPSBidWZmZXI7CisgICAgICAgIHJldHVybiBH
U1RfUEFEX1BST0JFX09LOworICAgIH0sIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgc3RhcnQo
KTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0YXJ0
UHJvZHVjaW5nRGF0YSgpCit7CisgICAgcmVsZWFzZVZhbHZlKCk7Cit9CisKK3ZvaWQgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7Cisg
ICAgbG9ja1ZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVzKCkK
K3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlDYXBh
YmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKCkKK3sKKyAgICBpZiAo
bV9jdXJyZW50U2V0dGluZ3MpCisgICAgICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5ncy52YWx1
ZSgpOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIGNvbnN0
cmFpbnRzOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzV2lkdGgodHJ1ZSk7CisgICAgY29u
c3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7CisKKyAgICBSZWFsdGltZU1lZGlhU291
cmNlU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgYXV0byYgc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAg
ICBzZXR0aW5ncy5zZXRXaWR0aChzaXplLndpZHRoKCkpOworICAgIHNldHRpbmdzLnNldEhlaWdo
dChzaXplLmhlaWdodCgpKTsKKyAgICBzZXR0aW5ncy5zZXRTdXBwb3J0ZWRDb25zdHJhaW50cyhj
b25zdHJhaW50cyk7CisKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IFdURk1vdmUoc2V0dGluZ3Mp
OworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5ncy52YWx1ZSgpOworfQorCit2b2lkIFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9u
U2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gc2V0dGluZ3MpCit7CisgICAg
aWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpG
bGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWlnaHQgfSkp
CisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0gc3RkOjpudWxsb3B0OworfQorCit2b2lkIFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUoR1JlZlB0
cjxHc3RTYW1wbGU+JiYgZ3N0U2FtcGxlKQoreworICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1l
ZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVXcmFwcGVkU2FtcGxlKGdzdFNhbXBsZSksIHsgfSk7
Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5YmMzMDA2OWNkMzMyMDkyMzE4YmJm
Nzc4YWI5M2Q5MTg0ODMxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0
cmVhbWVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUg
IlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1l
ZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UsIHB1
YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0
aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4gY3JlYXRlKFN0cmlu
ZyYmIHZpZGVvVHJhY2tJZCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZSh2aWRlb1RyYWNrSWQpKSk7IH0KKyAgICB+UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKCkgPSBkZWZhdWx0OworCitwcm90ZWN0
ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmKTsK
KworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAgIHZvaWQgc3Rh
cnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBm
aW5hbDsKKyAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3M6OkZsYWc+KSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291
cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgZmluYWw7CisgICAgYm9vbCBpc0luY29t
aW5nVmlkZW9Tb3VyY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBS
ZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIEFQSQorICAgIHZvaWQgZGlzcGF0Y2hTYW1w
bGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYpIGZpbmFsOworCisgICAgc3RkOjpvcHRpb25hbDxSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdzOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6
OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcikKKyAgICBzdGF0aWMgYm9vbCBp
c1R5cGUoY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZSYgc291cmNlKSB7IHJldHVy
biBzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJ
VFNfRU5EKCkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVy
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iODA1MzkxOTMzNjEzYWJjOGE3NzVjZWY3OTc0NGQyNzIyYjBkYTg2
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAs
MCArMSw5NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5o
IgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRp
b0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252
ZXJzaW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRw
b2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBv
aW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoUmVm
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHNvdXJjZSkKKyAgICA6IFJlYWx0aW1lT3V0Z29p
bmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpCit7CisgICAgbV9hbGxvd2VkQ2FwcyA9IGFkb3B0R1Jl
Zihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LXJ0cCIsICJtZWRpYSIsIEdfVFlQ
RV9TVFJJTkcsICJhdWRpbyIsCisgICAgICAgICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklO
RywgIk9QVVMiLCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIDQ4MDAwLCBudWxscHRyKSk7CisK
KyAgICBtX2F1ZGlvY29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252
ZXJ0IiwgbnVsbHB0cik7CisgICAgbV9hdWRpb3Jlc2FtcGxlID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJhdWRpb3Jlc2FtcGxlIiwgbnVsbHB0cik7CisKKyAgICBtX2VuY29kZXIgPSBtYWtl
R1N0cmVhbWVyRWxlbWVudCgib3B1c2VuYyIsIG51bGxwdHIpOworICAgIGlmICghbV9lbmNvZGVy
KQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogRW5hYmxlIGR0eCB0b28/CisgICAg
Z3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1QobV9lbmNvZGVyLmdldCgpKSwgImF1ZGlv
LXR5cGUiLCAidm9pY2UiKTsKKworICAgIG1fcGF5bG9hZGVyID0gbWFrZUdTdHJlYW1lckVsZW1l
bnQoInJ0cG9wdXNwYXkiLCBudWxscHRyKTsKKyAgICBpZiAoIW1fcGF5bG9hZGVyKQorICAgICAg
ICByZXR1cm47CisKKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJhdXRvLWhl
YWRlci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBnc3RfYmluX2FkZF9tYW55
KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fYXVkaW9jb252ZXJ0LmdldCgpLCBtX2F1ZGlv
cmVzYW1wbGUuZ2V0KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9wYXlsb2FkZXIuZ2V0KCksIG51bGxw
dHIpOworICAgIHNldFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkpOworfQorCitib29sIFJlYWx0aW1l
T3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUoR1JlZlB0cjxHc3RD
YXBzPiYgY2FwcykKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fYmluLmdldCgpLCAiT3V0Z29p
bmcgYXVkaW8gc291cmNlIHBheWxvYWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0
KCkpOworICAgIGF1dG8qIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5n
ZXQoKSwgMCk7CisgICAgaWYgKGNvbnN0IGNoYXIqIGVuY29kaW5nTmFtZSA9IGdzdF9zdHJ1Y3R1
cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJlbmNvZGluZy1uYW1lIikpIHsKKyAgICAgICAgaWYg
KCFlcXVhbChlbmNvZGluZ05hbWUsICJPUFVTIikpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1QobV9iaW4uZ2V0KCksICJVbnN1cHBvcnRlZCBvdXRnb2luZyBhdWRpbyBlbmNvZGluZzog
JXMiLCBlbmNvZGluZ05hbWUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX2Jpbi5nZXQoKSwgImVu
Y29kaW5nLW5hbWUgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoY29uc3QgY2hhciogdXNlSW5iYW5kRmVjID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3Ry
aW5nKHN0cnVjdHVyZSwgInVzZWluYmFuZGZlYyIpKSB7CisgICAgICAgIGlmICghc3RyY21wKHVz
ZUluYmFuZEZlYywgIjEiKSkKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2VuY29kZXIuZ2V0
KCksICJpbmJhbmQtZmVjIiwgdHJ1ZSwgbnVsbHB0cik7CisgICAgfQorCisgICAgaWYgKGNvbnN0
IGNoYXIqIG1pblBUaW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm1p
bnB0aW1lIikpIHsKKyAgICAgICAgU3RyaW5nIHRpbWUobWluUFRpbWUpOworICAgICAgICBpZiAo
YXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlckFsbG93aW5nVHJhaWxpbmdKdW5rPGludDY0X3Q+KHRp
bWUpKQorICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGF5bG9hZGVyLmdldCgpLCAibWluLXB0
aW1lIiwgKnZhbHVlICogR1NUX01TRUNPTkQsIG51bGxwdHIpOworICAgIH0KKworICAgIGludCBw
YXlsb2FkVHlwZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgInBh
eWxvYWQiLCAmcGF5bG9hZFR5cGUpKQorICAgICAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIu
Z2V0KCksICJwdCIsIHBheWxvYWRUeXBlLCBudWxscHRyKTsKKworICAgIGdfb2JqZWN0X3NldCht
X2NhcHNGaWx0ZXIuZ2V0KCksICJjYXBzIiwgY2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBn
c3RfZWxlbWVudF9saW5rX21hbnkobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSwgbV92YWx2ZS5nZXQo
KSwgbV9hdWRpb2NvbnZlcnQuZ2V0KCksIG1fYXVkaW9yZXNhbXBsZS5nZXQoKSwgbV9wcmVFbmNv
ZGVyUXVldWUuZ2V0KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9wYXlsb2FkZXIuZ2V0KCksIG1fcG9z
dEVuY29kZXJRdWV1ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5ZTgxZTViYzdlYzMwMDRmNDIwMGIzZWE0MGE4NmQy
OGJiNmZiMjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgK
QEAgLTAsMCArMSw0NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEg
Uy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciBmaW5hbCA6IHB1Ymxp
YyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIgeworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiBjcmVhdGUoUmVm
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIGF1ZGlvU291cmNlKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKGF1ZGlv
U291cmNlKSkpOyB9CisKKyAgICBib29sIHNldFBheWxvYWRUeXBlKEdSZWZQdHI8R3N0Q2Fwcz4m
KSBmaW5hbDsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCitwcml2
YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hdWRpb2NvbnZlcnQ7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX2F1ZGlvcmVzYW1wbGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uMjI2NzIwYjJiNGJjMDg4MjcyNTgzYzA1ZTgzMjIyMjQyMjVmNmFjYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEs
MTQ5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisK
KyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmgiCisKKyNkZWZpbmUgR1NU
X1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRlIDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVm
IEdTVF9VU0VfVU5TVEFCTEVfQVBJCisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0
X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRf
d2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXIoKQoreworICAgIG1fYmluID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7CisKKyAgICBt
X3ZhbHZlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAg
IG1fcHJlRW5jb2RlclF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51
bGxwdHIpOworICAgIG1fcG9zdEVuY29kZXJRdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFr
ZSgicXVldWUiLCBudWxscHRyKTsKKyAgICBtX2NhcHNGaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRyKTsKKworICAgIGdzdF9iaW5fYWRkX21hbnko
R1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV92YWx2ZS5nZXQoKSwgbV9wcmVFbmNvZGVyUXVl
dWUuZ2V0KCksCisgICAgICAgIG1fcG9zdEVuY29kZXJRdWV1ZS5nZXQoKSwgbV9jYXBzRmlsdGVy
LmdldCgpLCBudWxscHRyKTsKKworICAgIGF1dG8gc3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKG1fY2Fwc0ZpbHRlci5nZXQoKSwgInNyYyIpKTsKKyAgICBnc3Rf
ZWxlbWVudF9hZGRfcGFkKG1fYmluLmdldCgpLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgc3Jj
UGFkLmdldCgpKSk7Cit9CisKK1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6
flJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpCit7CisgICAgc3RvcCgpOwor
CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fYmluLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7
CisgICAgaWYgKGF1dG8gcGlwZWxpbmUgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3BhcmVu
dChtX2Jpbi5nZXQoKSkpKQorICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NBU1QocGlw
ZWxpbmUuZ2V0KCkpLCBtX2Jpbi5nZXQoKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
PiYmIG5ld1NvdXJjZSkKK3sKKyAgICBpZiAobV9zb3VyY2UgJiYgIW1faW5pdGlhbFNldHRpbmdz
KQorICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fc291cmNlLnZhbHVlKCktPnNldHRpbmdz
KCk7CisKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIG1fc291cmNlLnZhbHVlKCktPnJlbW92
ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBtX3NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKKyAg
ICBpbml0aWFsaXplRnJvbVRyYWNrKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlh
U291cmNlR1N0cmVhbWVyOjpzdGFydCgpCit7CisgICAgbV9zb3VyY2UudmFsdWUoKS0+YWRkT2Jz
ZXJ2ZXIoKnRoaXMpOworICAgIG1faXNTdG9wcGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzdG9wKCkKK3sKKyAgICBpZiAobV9zb3Vy
Y2UpIHsKKyAgICAgICAgbV9zb3VyY2UudmFsdWUoKS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOwor
ICAgICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIGdz
dF9ldmVudF9uZXdfZW9zKCkpOworCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3Rh
dGUobV9iaW4uZ2V0KCksIHRydWUpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9v
dXRnb2luZ1NvdXJjZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworCisgICAgICAgIGlmIChtX3dl
YnJ0Y1NpbmtQYWQpIHsKKyAgICAgICAgICAgIGF1dG8gc3JjUGFkID0gYWRvcHRHUmVmKGdzdF9l
bGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYmluLmdldCgpLCAic3JjIikpOworICAgICAgICAgICAg
Z3N0X3BhZF91bmxpbmsoc3JjUGFkLmdldCgpLCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworCisg
ICAgICAgICAgICBhdXRvIHBhcmVudCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxl
bWVudChtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpKTsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpF
Q1QocGFyZW50LmdldCgpLCAiUmVtb3ZpbmcgcGFkICUiIEdTVF9QVFJfRk9STUFULCBtX3dlYnJ0
Y1NpbmtQYWQuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0
X3BhZChwYXJlbnQuZ2V0KCksIG1fd2VicnRjU2lua1BhZC5nZXQoKSk7CisgICAgICAgIH0KKwor
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fYmluLmdldCgpLCBmYWxzZSk7
CisgICAgICAgIG1fc291cmNlLnJlc2V0KCk7CisgICAgfQorICAgIG1faXNTdG9wcGVkID0gdHJ1
ZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJj
ZU11dGVkQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIEFTU0VSVChtX211dGVkICE9IG1fc291cmNlLnZhbHVlKCktPm11dGVkKCkpOworICAgIG1f
bXV0ZWQgPSBtX3NvdXJjZS52YWx1ZSgpLT5tdXRlZCgpOworfQorCit2b2lkIFJlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c291cmNlRW5hYmxlZENoYW5nZWQoKQoreworICAg
IGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZW5hYmxlZCA9IG1fc291
cmNlLnZhbHVlKCktPmVuYWJsZWQoKTsKKyAgICBpZiAobV92YWx2ZSkKKyAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fdmFsdmUuZ2V0KCksICJkcm9wIiwgIW1fZW5hYmxlZCwgbnVsbHB0cik7Cit9CisK
K3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjppbml0aWFsaXplRnJv
bVRyYWNrKCkKK3sKKyAgICBtX211dGVkID0gbV9zb3VyY2UudmFsdWUoKS0+bXV0ZWQoKTsKKyAg
ICBtX2VuYWJsZWQgPSBtX3NvdXJjZS52YWx1ZSgpLT5lbmFibGVkKCk7CisgICAgbV9vdXRnb2lu
Z1NvdXJjZSA9IHdlYmtpdE1lZGlhU3RyZWFtU3JjTmV3KCk7CisgICAgZ3N0X2Jpbl9hZGQoR1NU
X0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV9vdXRnb2luZ1NvdXJjZS5nZXQoKSk7CisgICAgd2Vi
a2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhtX291dGdv
aW5nU291cmNlLmdldCgpKSwgbV9zb3VyY2UtPnB0cigpLCB0cnVlKTsKK30KKwordm9pZCBSZWFs
dGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmxpbmsoKQoreworICAgIGdzdF9lbGVt
ZW50X2xpbmsobV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBtX2NhcHNGaWx0ZXIuZ2V0KCkpOwor
CisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQo
bV9iaW4uZ2V0KCksICJzcmMiKSk7CisgICAgZ3N0X3BhZF9saW5rKHNyY1BhZC5nZXQoKSwgbV93
ZWJydGNTaW5rUGFkLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFy
ZW50KG1fYmluLmdldCgpKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXI6OnNldFNpbmtQYWQoY29uc3QgR1JlZlB0cjxHc3RQYWQ+JiBwYWQpCit7CisgICAg
bV93ZWJydGNTaW5rUGFkID0gcGFkOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2
ZXI+IHRyYW5zY2VpdmVyOworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCks
ICJ0cmFuc2NlaXZlciIsICZ0cmFuc2NlaXZlci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgZ19v
YmplY3RfZ2V0KHRyYW5zY2VpdmVyLmdldCgpLCAic2VuZGVyIiwgJm1fc2VuZGVyLm91dFB0cigp
LCBudWxscHRyKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjVlMGJjNWE5NWY1
Yjc0YTU5M2EyYmRmYTEzNTcyMzE5YWI4NGI1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXIuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
CisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcj4sIHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2
ZXIgeworcHVibGljOgorICAgIH5SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIo
KTsKKworICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2b2lkIHN0b3AoKTsKKyAgICB2b2lkIHNldFNv
dXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworICAgIE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlJiBzb3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+Z2V0KCk7IH0KKwor
ICAgIEdSZWZQdHI8R3N0Q2Fwcz4gYWxsb3dlZENhcHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93
ZWRDYXBzOyB9CisKKyAgICB2b2lkIGxpbmsoKTsKKyAgICBjb25zdCBHUmVmUHRyPEdzdFBhZD4m
IHBhZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2VicnRjU2lua1BhZDsgfQorICAgIHZvaWQgc2V0U2lu
a1BhZChjb25zdCBHUmVmUHRyPEdzdFBhZD4mKTsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQ
U2VuZGVyPiBzZW5kZXIoKSBjb25zdCB7IHJldHVybiBtX3NlbmRlcjsgfQorICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gYmluKCkgY29uc3QgeyByZXR1cm4gbV9iaW47IH0KKworICAgIHZpcnR1YWwg
Ym9vbCBzZXRQYXlsb2FkVHlwZShHUmVmUHRyPEdzdENhcHM+JikgeyByZXR1cm4gZmFsc2U7IH0K
KworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdT
dHJlYW1lcigpOworCisgICAgdm9pZCBpbml0aWFsaXplRnJvbVRyYWNrKCk7CisKKyAgICBib29s
IG1fZW5hYmxlZCB7IHRydWUgfTsKKyAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OworICAgIGJv
b2wgbV9pc1N0b3BwZWQgeyBmYWxzZSB9OworICAgIHN0ZDo6b3B0aW9uYWw8UmVmPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPj4gbV9zb3VyY2U7CisgICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3M+IG1faW5pdGlhbFNldHRpbmdzOworICAgIEdSZWZQdHI8R3N0RWxl
bWVudD4gbV9iaW47CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX291dGdvaW5nU291cmNlOwor
ICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92YWx2ZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fcHJlRW5jb2RlclF1ZXVlOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9lbmNvZGVyOwor
ICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9wYXlsb2FkZXI7CisgICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiBtX3Bvc3RFbmNvZGVyUXVldWU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2NhcHNG
aWx0ZXI7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBtX2FsbG93ZWRDYXBzOworICAgIEdSZWZQdHI8
R3N0V2ViUlRDUlRQU2VuZGVyPiBtX3NlbmRlcjsKKyAgICBHUmVmUHRyPEdzdFBhZD4gbV93ZWJy
dGNTaW5rUGFkOworCitwcml2YXRlOgorICAgIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCk7Cisg
ICAgdm9pZCBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOworCisgICAgLy8gTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU6Ok9ic2VydmVyIEFQSQorICAgIHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUmKSBvdmVycmlkZSB7IHNvdXJjZU11dGVkQ2hhbmdlZCgpOyB9Cisg
ICAgdm9pZCB0cmFja0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgb3Zl
cnJpZGUgeyBzb3VyY2VFbmFibGVkQ2hhbmdlZCgpOyB9CisgICAgdm9pZCB0cmFja1NldHRpbmdz
Q2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgaW5pdGlhbGl6ZUZy
b21UcmFjaygpOyB9CisgICAgdm9pZCB0cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
Jikgb3ZlcnJpZGUgeyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNj
MzMwMTAwM2Q4OWY5MjdjYmU3OTM0MDM4ZjA2OTc1ZTc4MDczYwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oIgor
CitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcp
OworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zwor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcjo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFJlZjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4mJiBzb3VyY2UpCisgICAgOiBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3Vy
Y2VHU3RyZWFtZXIoKQoreworICAgIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKTsK
KworICAgIG1fdmlkZW9Db252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2aWRlb2Nv
bnZlcnQiLCBudWxscHRyKTsKKyAgICBtX2VuY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoIndlYnJ0Y3ZpZGVvZW5jb2RlciIsIG51bGxwdHIpOworICAgIGdzdF9iaW5fYWRkX21hbnko
R1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV92aWRlb0NvbnZlcnQuZ2V0KCksIG1fZW5jb2Rl
ci5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBhdXRvKiBwYWRUZW1wbGF0ZSA9IGdzdF9lbGVtZW50
X2dldF9wYWRfdGVtcGxhdGUobV9lbmNvZGVyLmdldCgpLCAic3JjIik7CisgICAgYXV0byBjYXBz
ID0gYWRvcHRHUmVmKGdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMocGFkVGVtcGxhdGUpKTsKKyAg
ICBtX2FsbG93ZWRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICBn
c3RfY2Fwc19mb3JlYWNoKGNhcHMuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0Q2Fwc0ZvcmVh
Y2hGdW5jPigrW10oR3N0Q2Fwc0ZlYXR1cmVzKiwgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGdw
b2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nh
c3Q8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKj4odXNlckRhdGEpOworICAg
ICAgICBjb25zdCBjaGFyKiBuYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUp
OworICAgICAgICBjb25zdCBjaGFyKiBlbmNvZGluZ05hbWUgPSBudWxscHRyOworICAgICAgICBp
ZiAoZXF1YWwobmFtZSwgInZpZGVvL3gtdnA4IikpCisgICAgICAgICAgICBlbmNvZGluZ05hbWUg
PSAiVlA4IjsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWwobmFtZSwgInZpZGVvL3gtdnA5IikpCisg
ICAgICAgICAgICBlbmNvZGluZ05hbWUgPSAiVlA5IjsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWwo
bmFtZSwgInZpZGVvL3gtaDI2NCIpKQorICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIkgyNjQi
OworICAgICAgICBpZiAoZW5jb2RpbmdOYW1lKQorICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5k
X3N0cnVjdHVyZShzb3VyY2UtPm1fYWxsb3dlZENhcHMuZ2V0KCksIGdzdF9zdHJ1Y3R1cmVfbmV3
KCJhcHBsaWNhdGlvbi94LXJ0cCIsICJtZWRpYSIsIEdfVFlQRV9TVFJJTkcsICJ2aWRlbyIsICJl
bmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklORywgZW5jb2RpbmdOYW1lLCAiY2xvY2stcmF0ZSIs
IEdfVFlQRV9JTlQsIDkwMDAwLCBudWxscHRyKSk7CisgICAgfSksIHRoaXMpOworCisgICAgc2V0
U291cmNlKFdURk1vdmUoc291cmNlKSk7Cit9CisKK2Jvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlR1N0cmVhbWVyOjpzZXRQYXlsb2FkVHlwZShHUmVmUHRyPEdzdENhcHM+JiBjYXBzKQor
eworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9iaW4uZ2V0KCksICJPdXRnb2luZyB2aWRlbyBzb3Vy
Y2UgcGF5bG9hZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSk7CisgICAgYXV0
byogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLmdldCgpLCAwKTsKKyAg
ICBHUmVmUHRyPEdzdENhcHM+IGVuY29kZXJDYXBzOworICAgIGlmIChjb25zdCBjaGFyKiBlbmNv
ZGluZ05hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiZW5jb2Rpbmct
bmFtZSIpKSB7CisgICAgICAgIGlmIChlcXVhbChlbmNvZGluZ05hbWUsICJWUDgiKSkgeworICAg
ICAgICAgICAgZW5jb2RlckNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBs
ZSgidmlkZW8veC12cDgiKSk7CisgICAgICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFt
ZXJFbGVtZW50KCJydHB2cDhwYXkiLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlIGlmIChlcXVh
bChlbmNvZGluZ05hbWUsICJWUDkiKSkgeworICAgICAgICAgICAgZW5jb2RlckNhcHMgPSBhZG9w
dEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidmlkZW8veC12cDkiKSk7CisgICAgICAg
ICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJydHB2cDlwYXkiLCBudWxs
cHRyKTsKKyAgICAgICAgfSBlbHNlIGlmIChlcXVhbChlbmNvZGluZ05hbWUsICJIMjY0IikpIHsK
KyAgICAgICAgICAgIGVuY29kZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9z
aW1wbGUoInZpZGVvL3gtaDI2NCIpKTsKKyAgICAgICAgICAgIG1fcGF5bG9hZGVyID0gbWFrZUdT
dHJlYW1lckVsZW1lbnQoInJ0cGgyNjRwYXkiLCBudWxscHRyKTsKKyAgICAgICAgICAgIC8vIEZJ
WE1FOiBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5z
LWdvb2QvLS9pc3N1ZXMvODkzCisgICAgICAgICAgICAvLyBnc3RfdXRpbF9zZXRfb2JqZWN0X2Fy
ZyhHX09CSkVDVChtX3BheWxvYWRlci5nZXQoKSksICJhZ2dyZWdhdGUtbW9kZSIsICJ6ZXJvLWxh
dGVuY3kiKTsKKyAgICAgICAgICAgIC8vIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwg
ImNvbmZpZy1pbnRlcnZhbCIsIC0xLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJVbnN1cHBvcnRlZCBvdXRnb2lu
ZyB2aWRlbyBlbmNvZGluZzogJXMiLCBlbmNvZGluZ05hbWUpOworICAgICAgICAgICAgcmV0dXJu
IGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVD
VChtX2Jpbi5nZXQoKSwgImVuY29kaW5nLW5hbWUgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoIW1fcGF5bG9hZGVyKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICAvLyBGSVhNRTogUmUtZW5hYmxlIHRoaXMuIEN1cnJlbnRseSB0cmlnZ2Vy
cyBjYXBzIG5lZ290aWF0aW9uIGVycm9yLgorICAgIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5n
ZXQoKSwgImF1dG8taGVhZGVyLWV4dGVuc2lvbiIsIEZBTFNFLCBudWxscHRyKTsKKworICAgIGdf
b2JqZWN0X3NldChtX2VuY29kZXIuZ2V0KCksICJmb3JtYXQiLCBlbmNvZGVyQ2Fwcy5nZXQoKSwg
bnVsbHB0cik7CisKKyAgICBpbnQgcGF5bG9hZFR5cGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVf
Z2V0X2ludChzdHJ1Y3R1cmUsICJwYXlsb2FkIiwgJnBheWxvYWRUeXBlKSkKKyAgICAgICAgZ19v
YmplY3Rfc2V0KG1fcGF5bG9hZGVyLmdldCgpLCAicHQiLCBwYXlsb2FkVHlwZSwgbnVsbHB0cik7
CisKKyAgICBhdXRvIGZpbHRlcmVkQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZnVsbChn
c3Rfc3RydWN0dXJlX2NvcHkoc3RydWN0dXJlKSwgbnVsbHB0cikpOworICAgIGdfb2JqZWN0X3Nl
dChtX2NhcHNGaWx0ZXIuZ2V0KCksICJjYXBzIiwgZmlsdGVyZWRDYXBzLmdldCgpLCBudWxscHRy
KTsKKworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fcGF5bG9h
ZGVyLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9saW5rX21hbnkobV9vdXRnb2luZ1NvdXJjZS5n
ZXQoKSwgbV92YWx2ZS5nZXQoKSwgbV92aWRlb0NvbnZlcnQuZ2V0KCksIG1fcHJlRW5jb2RlclF1
ZXVlLmdldCgpLAorICAgICAgICBtX2VuY29kZXIuZ2V0KCksIG1fcGF5bG9hZGVyLmdldCgpLCBt
X3Bvc3RFbmNvZGVyUXVldWUuZ2V0KCksIG51bGxwdHIpOworICAgIHJldHVybiB0cnVlOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNmQ0Y2JlNjk1NDM5MDZiNzk0MDEzYWM2Yzgz
YzlmMWM2ZmNkOWY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
ci5oCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdh
bGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJSZWFs
dGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIgZmluYWwgOiBw
dWJsaWMgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4gY3JlYXRl
KFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBzb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFdURk1vdmUoc291cmNl
KSkpOyB9CisKKyAgICB2b2lkIHNldEFwcGx5Um90YXRpb24oYm9vbCBzaG91bGRBcHBseVJvdGF0
aW9uKSB7IG1fc2hvdWxkQXBwbHlSb3RhdGlvbiA9IHNob3VsZEFwcGx5Um90YXRpb247IH0KKwor
ICAgIGJvb2wgc2V0UGF5bG9hZFR5cGUoR1JlZlB0cjxHc3RDYXBzPiYpIGZpbmFsOworCitwcm90
ZWN0ZWQ6CisgICAgZXhwbGljaXQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVy
KFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisKKyAgICBib29sIG1fc2hvdWxkQXBw
bHlSb3RhdGlvbiB7IGZhbHNlIH07CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBtX3ZpZGVvQ29udmVydDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3Bw
CmluZGV4IGE3ZjBjMWExZGNiZmZhZDQ5OWJiOGQ0NWViYzE0MjJlZjhiYTMyZDAuLjQzNGJlYjhj
ZjVlZTVkNTUyNmFiNWNjNzkyNWQ0Nzk5YzdkMDA4YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0lu
dGVybmFscy5jcHAKQEAgLTU5Niw2ICs1OTYsOSBAQCB2b2lkIEludGVybmFsczo6cmVzZXRUb0Nv
bnNpc3RlbnRTdGF0ZShQYWdlJiBwYWdlKQogICAgIHJ0Y1Byb3ZpZGVyLnNldEgyNjVTdXBwb3J0
KHRydWUpOwogICAgIHJ0Y1Byb3ZpZGVyLnNldFZQOVN1cHBvcnQodHJ1ZSwgdHJ1ZSk7CiAgICAg
cnRjUHJvdmlkZXIuY2xlYXJGYWN0b3J5KCk7CisjZWxpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KyAgICBwYWdlLnNldHRpbmdzKCkuc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQodHJ1ZSk7Cisg
ICAgcGFnZS5zZXR0aW5ncygpLnNldFBlZXJDb25uZWN0aW9uRW5hYmxlZCh0cnVlKTsKICNlbmRp
ZgogCiAgICAgcGFnZS5zZXRGdWxsc2NyZWVuQXV0b0hpZGVEdXJhdGlvbigwX3MpOwpAQCAtMTYw
OSw2ICsxNjEyLDcgQEAgdm9pZCBJbnRlcm5hbHM6OmFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1Zp
ZGVvU291cmNlcyhSVENQZWVyQ29ubmVjdGlvbiYgY29ubmVjdGkKIHsKICAgICBjb25uZWN0aW9u
LmFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcygpOwogfQorCiB2b2lkIEludGVy
bmFsczo6c2V0V2ViUlRDSDI2NVN1cHBvcnQoYm9vbCB2YWx1ZSkKIHsKICNpZiBVU0UoTElCV0VC
UlRDKQpAQCAtMTYxNiw2ICsxNjIwLDggQEAgdm9pZCBJbnRlcm5hbHM6OnNldFdlYlJUQ0gyNjVT
dXBwb3J0KGJvb2wgdmFsdWUpCiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0
SDI2NVN1cHBvcnQodmFsdWUpOwogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLmNs
ZWFyRmFjdG9yeSgpOwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNl
bmRpZgogfQogCkBAIC0xNjI2LDYgKzE2MzIsOSBAQCB2b2lkIEludGVybmFsczo6c2V0V2ViUlRD
VlA5U3VwcG9ydChib29sIHN1cHBvcnRWUDlQcm9maWxlMCwgYm9vbCBzdXBwb3J0VlA5UHJvZgog
ICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLnNldFZQOVN1cHBvcnQoc3VwcG9ydFZQ
OVByb2ZpbGUwLCBzdXBwb3J0VlA5UHJvZmlsZTIpOwogICAgICAgICBwYWdlLT5saWJXZWJSVENQ
cm92aWRlcigpLmNsZWFyRmFjdG9yeSgpOwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFN
KHN1cHBvcnRWUDlQcm9maWxlMCk7CisgICAgVU5VU0VEX1BBUkFNKHN1cHBvcnRWUDlQcm9maWxl
Mik7CiAjZW5kaWYKIH0KIApAQCAtMTYzNiw2ICsxNjQ1LDggQEAgdm9pZCBJbnRlcm5hbHM6OnNl
dFdlYlJUQ1ZQOVZUQlN1cHBvcnQoYm9vbCB2YWx1ZSkKICAgICAgICAgcGFnZS0+bGliV2ViUlRD
UHJvdmlkZXIoKS5zZXRWUDlWVEJTdXBwb3J0KHZhbHVlKTsKICAgICAgICAgcGFnZS0+bGliV2Vi
UlRDUHJvdmlkZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KIApAQCAtMTY3Niw2ICsxNjg3LDggQEAgdm9pZCBJbnRl
cm5hbHM6OnNldEVuYWJsZVdlYlJUQ0VuY3J5cHRpb24oYm9vbCB2YWx1ZSkKICNpZiBVU0UoTElC
V0VCUlRDKQogICAgIGlmIChhdXRvKiBwYWdlID0gY29udGV4dERvY3VtZW50KCktPnBhZ2UoKSkK
ICAgICAgICAgcGFnZS0+c2V0dGluZ3MoKS5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZCh2YWx1
ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KIApAQCAtMTY4
Niw2ICsxNjk5LDggQEAgdm9pZCBJbnRlcm5hbHM6OnNldFVzZURUTFMxMChib29sIHVzZURUTFMx
MCkKICAgICBpZiAoIWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQogICAgICAgICByZXR1
cm47CiAgICAgZG9jdW1lbnQtPnBhZ2UoKS0+bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRVc2VEVExT
MTAodXNlRFRMUzEwKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHVzZURUTFMxMCk7CiAjZW5k
aWYKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UgYi9T
b3VyY2UvY21ha2UvRmluZEdTdHJlYW1lci5jbWFrZQppbmRleCA5ZDk3YTRiNTBjYjBmOTgwZjVi
ODQwNTdjMmJhZWU4OTk3OTlkZjY2Li40ODYyNTU3YTk5YjM1OTJlMDAxOWU3NmIyOGFlNTUxYWNk
ODk0NWYyIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvRmluZEdTdHJlYW1lci5jbWFrZQorKysg
Yi9Tb3VyY2UvY21ha2UvRmluZEdTdHJlYW1lci5jbWFrZQpAQCAtMjYsNiArMjYsOSBAQAogIyAg
Z3N0cmVhbWVyLXZpZGVvOiAgICAgIEdTVFJFQU1FUl9WSURFT19JTkNMVURFX0RJUlMgYW5kIEdT
VFJFQU1FUl9WSURFT19MSUJSQVJJRVMKICMgIGdzdHJlYW1lci1jb2RlY3BhcnNlcjpHU1RSRUFN
RVJfQ09ERUNQQVJTRVJTX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19M
SUJSQVJJRVMKICMgIGdzdHJlYW1lci1mdWxsOiAgICAgICBHU1RSRUFNRVJfRlVMTF9JTkNMVURF
X0RJUlMgYW5kIEdTVFJFQU1FUl9GVUxMX0xJQlJBUklFUworIyAgZ3N0cmVhbWVyLXJ0cDogICAg
ICAgIEdTVFJFQU1FUl9SVFBfSU5DTFVERV9ESVJTIGFuZCBHU1RSRUFNRVJfUlRQX0xJQlJBUklF
UworIyAgZ3N0cmVhbWVyLXNkcDogICAgICAgIEdTVFJFQU1FUl9TRFBfSU5DTFVERV9ESVJTIGFu
ZCBHU1RSRUFNRVJfU0RQX0xJQlJBUklFUworIyAgZ3N0cmVhbWVyLXdlYnJ0YzogICAgIEdTVFJF
QU1FUl9XRUJSVENfSU5DTFVERV9ESVJTIGFuZCBHU1RSRUFNRVJfV0VCUlRDX0xJQlJBUklFUwog
IwogIyBDb3B5cmlnaHQgKEMpIDIwMTIgUmFwaGFlbCBLdWJvIGRhIENvc3RhIDxyYWt1Y29Ad2Vi
a2l0Lm9yZz4KICMKQEAgLTEwNiw2ICsxMDksOSBAQCBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQo
R1NUUkVBTUVSX1BCVVRJTFMgZ3N0cmVhbWVyLXBidXRpbHMtMS4wIGdzdHBidXRpbHMtMS4wKQog
RklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9UQUcgZ3N0cmVhbWVyLXRhZy0xLjAg
Z3N0dGFnLTEuMCkKIEZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVklERU8gZ3N0
cmVhbWVyLXZpZGVvLTEuMCBnc3R2aWRlby0xLjApCiBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQo
R1NUUkVBTUVSX0NPREVDUEFSU0VSUyBnc3RyZWFtZXItY29kZWNwYXJzZXJzLTEuMCBnc3Rjb2Rl
Y3BhcnNlcnMtMS4wKQorRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9SVFAgZ3N0
cmVhbWVyLXJ0cC0xLjAgZ3N0cnRwLTEuMCkKK0ZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RS
RUFNRVJfU0RQIGdzdHJlYW1lci1zZHAtMS4wIGdzdHNkcC0xLjApCitGSU5EX0dTVFJFQU1FUl9D
T01QT05FTlQoR1NUUkVBTUVSX1dFQlJUQyBnc3RyZWFtZXItd2VicnRjLTEuMCBnc3R3ZWJydGMt
MS4wKQogCiAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LQogIyAzLiBQcm9jZXNzIHRoZSBDT01QT05FTlRTIHBhc3NlZCB0byBGSU5EX1BBQ0tBR0UKQEAg
LTE0OCw0ICsxNTQsNiBAQCBtYXJrX2FzX2FkdmFuY2VkKAogICAgIEdTVFJFQU1FUl9DT0RFQ1BB
UlNFUlNfTElCUkFSSUVTCiAgICAgR1NUUkVBTUVSX0ZVTExfSU5DTFVERV9ESVJTCiAgICAgR1NU
UkVBTUVSX0ZVTExfTElCUkFSSUVTCisgICAgR1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlMK
KyAgICBHU1RSRUFNRVJfV0VCUlRDX0xJQlJBUklFUwogKQpkaWZmIC0tZ2l0IGEvU291cmNlL2Nt
YWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3Mu
Y21ha2UKaW5kZXggNzdlOTU4NDVlOTkxM2E1OTc4ZGFkMTBjZmM0MzAwOTNiNDNjN2FhMy4uYzhk
MGZhZmIyM2ZiMThmYzU5YjkxZTBjZTA0YzE0ZWU0NTliMjQ3NiAxMDA2NDQKLS0tIGEvU291cmNl
L2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVy
Q2hlY2tzLmNtYWtlCkBAIC0yOCw2ICsyOCwxMCBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJM
RV9XRUJfQVVESU8pCiAgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEdTVFJFQU1FUl9DT01QT05F
TlRTIGF1ZGlvIGZmdCkKICAgICAgICAgICBlbmRpZiAoKQogCisgICAgICAgICAgaWYgKFVTRV9H
U1RSRUFNRVJfV0VCX1JUQykKKyAgICAgICAgICAgICAgbGlzdChBUFBFTkQgR1NUUkVBTUVSX0NP
TVBPTkVOVFMgd2VicnRjKQorICAgICAgICAgIGVuZGlmICgpCisKICAgICAgICAgICBmaW5kX3Bh
Y2thZ2UoR1N0cmVhbWVyIDEuMTQuMCBSRVFVSVJFRCBDT01QT05FTlRTICR7R1NUUkVBTUVSX0NP
TVBPTkVOVFN9KQogCiAgICAgICAgICAgaWYgKEVOQUJMRV9XRUJfQVVESU8pCkBAIC00OSwxMSAr
NTMsMjEgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgICAgICAg
IGlmIChVU0VfR1NUUkVBTUVSX0dMIEFORCBOT1QgUENfR1NUUkVBTUVSX0dMX0ZPVU5EKQogICAg
ICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJHU3RyZWFtZXJHTCBpcyBuZWVkZWQgZm9y
IFVTRV9HU1RSRUFNRVJfR0wuIikKICAgICAgICAgICBlbmRpZiAoKQorCisgICAgICAgICAgaWYg
KFVTRV9HU1RSRUFNRVJfV0VCUlRDIEFORCAoUENfR1NUUkVBTUVSX1ZFUlNJT04gVkVSU0lPTl9M
RVNTICIxLjIwIiBPUiBOT1QgUENfR1NUUkVBTUVSX1dFQlJUQ19GT1VORCkpCisgICAgICAgICAg
ICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkdTdHJlYW1lcldlYlJUQyA+PSAxLjIwIGlzIG5lZWRl
ZCBmb3IgVVNFX0dTVFJFQU1FUl9XRUJSVEMuIikKKyAgICAgICAgICBlbmRpZiAoKQogICAgICAg
ZW5kaWYgKCkKIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNIEFORCBFTkFCTEVf
V0VCX1JUQykKLSAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIFRSVUUp
CisgICAgaWYgKFVTRV9HU1RSRUFNRVJfV0VCUlRDKQorICAgICAgICBTRVRfQU5EX0VYUE9TRV9U
T19CVUlMRChVU0VfTElCV0VCUlRDIEZBTFNFKQorCisgICAgICAgIGZpbmRfcGFja2FnZShPcGVu
U1NMIFJFUVVJUkVEKQorICAgIGVsc2UgKCkKKyAgICAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJ
TEQoVVNFX0xJQldFQlJUQyBUUlVFKQorICAgIGVuZGlmICgpCiBlbHNlICgpCiAgICAgU0VUX0FO
RF9FWFBPU0VfVE9fQlVJTEQoVVNFX0xJQldFQlJUQyBGQUxTRSkKIGVuZGlmICgpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UgYi9Tb3VyY2UvY21h
a2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UKaW5kZXggMWYxYTIxM2MyMTAxMGQzMmFjYzE3
ZmI5MWNiNTIwYzFiZDIzOGVhYi4uMmYzMDBhMDcwNjQ4OTFmNjc2ZWNhYzVkMmVhZmQ3Y2M4NTY4
OTI5MyAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtl
CisrKyBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQpAQCAtMTAsMyAr
MTAsNCBAQCBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX0ZVTEwgIldoZXRoZXIg
dG8gZW5hYmxlIHN1cHBvcnQgZm9yIHN0YXRpYyBHUwogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNF
X0dTVFJFQU1FUl9OQVRJVkVfVklERU8gIlRvZ2dsZSBuYXRpdmUgdmlkZW8gc3VwcG9ydCBpbiBH
U3RyZWFtZXIgbWVkaWEgcGxheWVyIiBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGSU5F
KFVTRV9HU1RSRUFNRVJfTkFUSVZFX0FVRElPICJUb2dnbGUgbmF0aXZlIGF1ZGlvIHN1cHBvcnQg
aW4gR1N0cmVhbWVyIG1lZGlhIHBsYXllciIgUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RF
RklORShVU0VfR1NUUkVBTUVSX1RFWFRfU0lOSyAiVG9nZ2xlIHRleHQgc2luayBzdXBwb3J0IGlu
IEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIiIFBSSVZBVEUgT04pCitXRUJLSVRfT1BUSU9OX0RFRklO
RShVU0VfR1NUUkVBTUVSX1dFQlJUQyAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgV2Vi
UlRDIiBQUklWQVRFIE9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVu
ZGVuY2llcy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2UK
aW5kZXggZjQyYzdlNzA2OTc3YmYxNmM5ZjI5YmYzZGUzMDhjNWU5NjgwMjk5Ni4uMDliNmMyNWU4
ZDU5MmQ1ODg0ZTg5NDZiYTZhZjU4ZDJmZGIxNjE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtl
L0dTdHJlYW1lckRlcGVuZGVuY2llcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVy
RGVwZW5kZW5jaWVzLmNtYWtlCkBAIC0xLDMgKzEsNCBAQAogV0VCS0lUX09QVElPTl9ERVBFTkQo
VVNFX0dTVFJFQU1FUl9HTCBFTkFCTEVfVklERU8pCiBXRUJLSVRfT1BUSU9OX0RFUEVORChVU0Vf
R1NUUkVBTUVSX01QRUdUUyBFTkFCTEVfVklERU8pCiBXRUJLSVRfT1BUSU9OX0RFUEVORChVU0Vf
V1BFX1ZJREVPX1BMQU5FX0RJU1BMQVlfRE1BQlVGIFVTRV9HU1RSRUFNRVJfR0wpCitXRUJLSVRf
T1BUSU9OX0RFUEVORChVU0VfR1NUUkVBTUVSX1dFQlJUQyBFTkFCTEVfV0VCX1JUQykKZGlmZiAt
LWdpdCBhL1Rvb2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYmNlNmRmYjFj
ZjJmZGMwMjIxNGNhZmRmM2YyZTk0Njg2YzgyZWJiLi45NjUyMmRmZGE0Y2RiOGNjNzZjMDYyM2Y1
MjFhODkxMTQ5MjNlNDlkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTMgQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1w
b3J0IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgKiBmbGF0cGFrL2ZsYXRwYWt1dGlscy5weToKKyAgICAgICAg
KFdlYmtpdEZsYXRwYWsucnVuX2luX3NhbmRib3gpOiBBbGxvdyBsaWJuaWNlIGRlYnVnIGxvZyBl
bnZpcm9ubWVudCB2YXJpYWJsZSBpbiBydW50aW1lIHNhbmRib3guCisKIDIwMjItMDItMTIgIEtl
dmluIFR1cm5lciAgPGtldmluX3R1cm5lckBhcHBsZS5jb20+CiAKICAgICAgICAgSW52b2tlIG1v
dXNlIGhvdmVyIGRlbGVnYXRlIGNhbGxiYWNrIG9uIGlPUwpkaWZmIC0tZ2l0IGEvVG9vbHMvZmxh
dHBhay9mbGF0cGFrdXRpbHMucHkgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQppbmRl
eCAwNzU2YjA5ZWNlNWVmYmIxY2E3YjU5YTMyYTZiODc3NGNjYTczYTRkLi5hYjU3YjUzOTQzYmQ4
ZTViNmIzMGE5YjU2MDM1NDIwNTE0NzU4ODVkIDEwMDY0NAotLS0gYS9Ub29scy9mbGF0cGFrL2Zs
YXRwYWt1dGlscy5weQorKysgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQpAQCAtODM4
LDYgKzgzOCw3IEBAIGNsYXNzIFdlYmtpdEZsYXRwYWs6CiAgICAgICAgICAgICAiTUVTQSIsCiAg
ICAgICAgICAgICAiTElCR0wiLAogICAgICAgICAgICAgIlBJUEVXSVJFIiwKKyAgICAgICAgICAg
ICJOSUNFIiwKICAgICAgICAgICAgICJSVVNUIiwKICAgICAgICAgICAgICJTQ0NBQ0hFIiwKICAg
ICAgICAgICAgICJTUEEiLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDFmOGNhYWZkODdjMzI1NzhiZjM2MDA0MDQ3NGE4N2Nj
OTdmNmViY2MuLjI0MjJhYTQwOTNiN2QxMzE2NzczY2FjMWZiYTk1MWY5YmRlZGIyYmMgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOCBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhl
IEdzdFdlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIHBsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczogRmxhZyBtb3N0IFdl
YlJUQyBhcyBmYWlsaW5nLiBEdXJpbmcgdGhpcyBmaXJzdCBkZXZlbG9wbWVudAorICAgICAgICBj
eWNsZSBJIGZvY3VzZWQgbW9zdGx5IG9uIGZpeGluZyBjcmFzaGVzIGFuZCBvbmx5IGZpeGVkIGEg
ZmV3IGZhaWx1cmVzLiBUaGUgcmVtYWluaW5nIG9uZXMKKyAgICAgICAgd2lsbCBiZSBhZHJlc3Nl
ZCBpbiBmb2xsb3ctdXAgcGF0Y2hlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2Zhc3QvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRS
ZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBs
YXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAyMi0wMi0xMiAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEu
Y29tPgogCiAgICAgICAgIFN1cHByZXNzIHN0eWxlIGludmFsaWRhdGlvbiB3aGVuIG1hdGNoaW5n
IDpjaGVja2VkCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggNzQ2NTQzY2JiOTMyYmE4ZjRkZThkYTQ4NDc4ZTMwNGVhN2Q3ODZiYS4uNTM5MzU1YmFkOTk1
NWFiYTUwODA5YWUzYjQ4MGE0NTQ1YzhiMjFhYyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2ds
aWIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtODU0LDcgKzg1NCw3IEBAIHdlYmtpdC5vcmcvYi8yMzE4
MTEgbWVkaWEvdmlkZW8tY29uY3VycmVudC1wbGF5YmFjay5odG1sIFsgRmFpbHVyZSBdCiB3ZWJr
aXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLWludGVycnVwdGlvbi13aXRoLXJlc3VtZS1ub3Qt
YWxsb3dpbmctcGxheS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlh
L3ZpZGVvLW11bHRpcGxlLWNvbmN1cnJlbnQtcGxheWJhY2suaHRtbCBbIEZhaWx1cmUgXQogd2Vi
a2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS93ZWJhdWRpby1iYWNrZ3JvdW5kLXBsYXliYWNrLmh0bWwg
WyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMzE4MTEgd2VicnRjL2NvbmN1cnJlbnRWaWRlb1Bs
YXliYWNrMi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxODExIHdlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL2NvbmN1cnJlbnRWaWRlb1BsYXliYWNrMi5odG1sIFsgRmFpbHVyZSBU
aW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvbWVkaWEtc2Vzc2lvbi9jYWxsQWN0
aW9uSGFuZGxlci5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL21l
ZGlhLXNlc3Npb24vcGxheS1hZnRlci1zZWVrLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcv
Yi8yMzE4MTEgbWVkaWEvcmVtb3RlLWNvbnRyb2wtY29tbWFuZC1pcy11c2VyLWdlc3R1cmUuaHRt
bCBbIFRpbWVvdXQgXQpAQCAtODY3LDEwICs4NjcsMTAgQEAgd2Via2l0Lm9yZy9iLzIzMTgxMSBt
ZWRpYS92aWRlby1zeXN0ZW0tc2xlZXAuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzIz
MTgxMSB3ZWJhdWRpby9hdWRpb2NvbnRleHQtc3RhdGUtaW50ZXJydXB0ZWQuaHRtbCBbIFRpbWVv
dXQgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSB3ZWJhdWRpby9zdXNwZW5kLWNvbnRleHQtd2hpbGUt
aW50ZXJydXB0ZWQuaHRtbCBbIFRpbWVvdXQgXQogCisjIHJ2ZmMgcmVsYXRlZCBmYWlsdXJlcwog
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1ydmZjIFsgUGFzcyBdCiBmYXN0
L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS1ydmZjLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogd2Vi
cnRjL3BlZXJDb25uZWN0aW9uLXJ2ZmMuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL2NhbnZhcy10
by1wZWVyLWNvbm5lY3Rpb24uaHRtbCBbIEZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy92aWRlby1ydmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2std2VicnRj
Lmh0dHBzLmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdmlk
ZW8tcnZmYy9yZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWJlZm9yZS14ci1zZXNzaW9uLmh0
dHBzLmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdmlkZW8t
cnZmYy9yZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWR1cmluZy14ci1zZXNzaW9uLmh0dHBz
Lmh0bWwgWyBTa2lwIF0KQEAgLTg4OCw2ICs4ODgsNzggQEAgd2Via2l0Lm9yZy9iLzIzNDA4NCBt
ZWRpYS90cmFjay9hdWRpby10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KICMg
Yml0cmF0ZSBlc3RpbWF0aW9uLgogd2Via2l0Lm9yZy9iLzIzNDA4NCBtZWRpYS90cmFjay92aWRl
by10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIAord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvZGF0YWNoYW5uZWwgWyBTa2lwIF0KKword2Via2l0Lm9yZy9iLzIzNTg4NSBm
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWFkZEljZUNhbmRpZGF0ZS5odG1sIFsg
RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tYWRkVHJhY2stcmV1c2Utc2VuZGVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLXJlbW90
ZS1vZmZlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taWNlY2FuZGlkYXRlLWV2ZW50Lmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1pbnNwZWN0LWFuc3dlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZh
c3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci5odG1sIFsgRmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24tbWVkaWEtc2V0dXAtY2FsbGJhY2tzLXNpbmdsZS1kaWFsb2cuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LW1lZGlhLXNldHVwLXNpbmdsZS1kaWFsb2cuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldExvY2FsRGVzY3Jp
cHRpb24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRzU2VsZWN0b3IuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LWhhdmUtbG9jYWwtb2ZmZXIuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLWxvY2FsLXByYW5zd2VyLmh0bWwg
WyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24taGF2ZS1yZW1vdGUtcHJhbnN3ZXIuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC10
d28tZGlhbG9ncy5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXBhZ2UtY2FjaGUuaHRtbCBbIENyYXNoIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVs
eS1hc3NpZ25lZC10cmFuc2NlaXZlci1taWQuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL2NoYW5nZS10cmFja3MtbWVkaWEtc3RyZWFtLWJlaW5n
LXBsYXllZC5odG1sIFsgVGltZW91dCBdCisKK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2Fk
ZFRyYW5zY2VpdmVyLXRoZW4tYWRkVHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvYXVkaW8tbXV0ZWQtc3RhdHMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0aW9uLWc3MjIuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0aW9u
LXdlYmF1ZGlvLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2F1
ZGlvLXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvY2FuZGlkYXRlLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL2NhcHR1cmVDYW52YXMtd2VicnRjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL2RpcmVjdGlvbi1jaGFuZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGlzYWJsZS1lbmNyeXB0aW9uLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2VwaGVtZXJhbC1jZXJ0aWZpY2F0ZXMtYW5k
LWNuYW1lcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9saWJ3
ZWJydGMvc2V0TG9jYWxEZXNjcmlwdGlvbkNyYXNoLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL211bHRpLXZpZGVvLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL25vLXBvcnQtemVyby1pbi11cGQtY2FuZGlkYXRlcy5odG1sIFsg
RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tY3Jl
YXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tdHJhY2stZW5kLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3JlbGVhc2UtYWZ0ZXItZ2V0dGluZy10cmFjay5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZW1vdGVBdWRpby1u
ZXZlci1wbGF5ZWQuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMv
cmVtb3ZlLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3V0Zjgtc2RwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3Zp
ZGVvLWFkZFRyYW5zY2VpdmVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL3ZpZGVvLWF1dG9wbGF5Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL3ZpZGVvLWdldFBhcmFtZXRlcnMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tbWVkaWFzdHJlYW10cmFjay1zdGF0cy5odG1sIFsgRmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1yZWNlaXZlcnMuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVwbGFjZS10cmFj
ay10by1udWxsLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3Zp
ZGVvLXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvdmlkZW8tc3RhdHMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvdmlkZW8tdnA4LXZpZGVvcmFuZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvdmlkZW8uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSB3ZWJydGMvdnA4LXRoZW4taDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy92cDktc3ZjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL3ZwOS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9h
dWRpby1zYW1wbGVyYXRlLWNoYW5nZS5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4
NSB3ZWJydGMvdmlkZW8tdW5tdXRlLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy9hdWRpby12aWRlby1lbGVtZW50LXBsYXlpbmcuaHRtbCBbIFRpbWVvdXQgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FudmFzLXRvLXBlZXItY29ubmVjdGlvbi5odG1sIFsg
VGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jbG9uZS1hdWRpby10cmFjay5o
dG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jbG9zaW5nLXBlZXJj
b25uZWN0aW9uLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2Zp
bHRlcmluZy1pY2UtY2FuZGlkYXRlLWFmdGVyLXJlbG9hZC5odG1sIFsgVGltZW91dCBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9oMjY0LXBhY2tldGl6YXRpb24tbW9kZS5odG1sIFsgVGlt
ZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tYXVkaW8t
bXV0ZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVyLWNv
bm5lY3Rpb24tYXVkaW8tbXV0ZTIuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLWF1ZGlvLXVubXV0ZS5odG1sIFsgVGltZW91dCBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tcmVtb3RlLWF1ZGlvLW11
dGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25u
ZWN0aW9uLXJlbW90ZS1hdWRpby1tdXRlMi5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IHdlYnJ0Yy9wZWVyY29ubmVjdGlvbi1wYWdlLWNhY2hlLWxvbmcuaHRtbCBbIFRpbWVv
dXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlcmNvbm5lY3Rpb24tcGFnZS1jYWNo
ZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZWNlaXZlci10
cmFjay1zaG91bGQtc3RheS1saXZlLWV2ZW4taWYtcmVjZWl2ZXItaXMtaW5hY3RpdmUuaHRtbCBb
IFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tbXV0ZS12cDguaHRt
bCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tbXV0ZS5odG1s
IFsgVGltZW91dCBdCisKKwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMgRW5k
IG9mIEdTdHJlYW1lci1yZWxhdGVkIGJ1Z3MKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCkBAIC0xNDEzLDE0ICsxNDg1LDE0IEBAIHdlYmtpdC5vcmcvYi83OTIwMyB3ZWJraXQub3Jn
L2IvMTg2Njc4IGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVuCiAKIGZh
c3QvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLWFkZEV2ZW50TGlzdGVuZXIuaHRtbCBbIER1bXBK
U0NvbnNvbGVMb2dJblN0ZEVyciBdCiAKLXdlYmtpdC5vcmcvYi8xOTEwMDYgd2VicnRjL3NpbXVs
Y2FzdC1oMjY0Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xOTEwMDYgd2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvc2ltdWxjYXN0LWgyNjQuaHRtbCBbIEZhaWx1cmUgVGltZW91dCBd
CiAKIHdlYmtpdC5vcmcvYi8xOTM2NDEgd2VicnRjL3ZpZGVvLXNldERpcmVjdGlvbi5odG1sIFsg
RmFpbHVyZSBQYXNzIF0KIAogd2Via2l0Lm9yZy9iLzE5NDYxMSBodHRwL3dwdC93ZWJydGMvZ2V0
VXNlck1lZGlhLXByb2Nlc3NTd2FwcGluZy5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcv
Yi8yMDEyNjcgWyBSZWxlYXNlIF0gd2VicnRjL3ZpZGVvLWgyNjQuaHRtbCBbIFRpbWVvdXQgRmFp
bHVyZSBdCi13ZWJraXQub3JnL2IvMjIyNTg1IFsgRGVidWcgXSB3ZWJydGMvdmlkZW8taDI2NC5o
dG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIyMjU4NSB3ZWJraXQub3JnL2IvMjM1ODg1IFsg
RGVidWcgXSB3ZWJydGMvdmlkZW8taDI2NC5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCiAKIHdlYmtp
dC5vcmcvYi8yMTAyNzIgd2VicnRjL2RhdGFjaGFubmVsL211bHRpcGxlLWNvbm5lY3Rpb25zLmh0
bWwgWyBUaW1lb3V0IFBhc3MgXQogCkBAIC0xNDMxLDcgKzE1MDMsNyBAQCB3ZWJraXQub3JnL2Iv
MjE1MDA3IFsgRGVidWcgXSB3ZWJydGMvaDI2NC1oaWdoLmh0bWwgWyBTbG93IEZhaWx1cmUgXQog
CiB3ZWJraXQub3JnL2IvMjE2NTM4IHdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2Fy
ZS1oMjY0LWJhc2VsaW5lLmh0bWwgWyBTbG93IEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2IvMjE2
NzYzIHdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2FyZS1oMjY0LWhpZ2guaHRtbCBb
IENyYXNoIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIxNjc2MyB3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2FyZS1oMjY0LWhpZ2guaHRtbCBbIENy
YXNoIEZhaWx1cmUgVGltZW91dCBdCiAKIHdlYmtpdC5vcmcvYi8yMTgyMjEgd2VicnRjL3ZwOS1w
cm9maWxlMi5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KIApAQCAtMjIxOSwxMyArMjI5MSwxMyBA
QCB3ZWJraXQub3JnL2IvMTg2MTAwIGNzczMvY29sb3ItZmlsdGVycy9jb2xvci1maWx0ZXItY29s
b3ItcHJvcGVydHktbGlzdC1pdGVtLmh0bQogd2Via2l0Lm9yZy9iLzE4NjEwMCBmYXN0L2hpZHBp
L2ZpbHRlcnMtdHVyYnVsZW5jZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTg3MDQ0IHdlYmFuaW1hdGlvbnMvb3BhY2l0eS1hbmltYXRpb24teWllbGRzLWNvbXBvc2l0
aW5nLXNwYW4uaHRtbCBbIEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy9k
YXRhY2hhbm5lbC9tZG5zLWljZS1jYW5kaWRhdGVzLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5v
cmcvYi8xODcwNjQgd2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGF0YWNoYW5uZWwvbWRucy1p
Y2UtY2FuZGlkYXRlcy5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xODcw
NjQgd2VicnRjL3ZpZGVvLWFkZFRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8x
ODcwNjQgd2VicnRjL3ZpZGVvLWRpc2FibGVkLWJsYWNrLmh0bWwgWyBDcmFzaCBdCi13ZWJraXQu
b3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1yZW1vdGUtbXV0ZS5odG1sIFsgQ3Jhc2ggXQotd2Vi
a2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcmVwbGFjZS1tdXRlZC10cmFjay5odG1sIFsg
VGltZW91dCBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3ZpZGVvLXJlcGxhY2UtbXV0ZWQtdHJhY2suaHRtbCBbIFRpbWVvdXQgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLWRpc2FibGVk
LWJsYWNrLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8xODcwNjQgd2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVtb3RlLW11dGUuaHRtbCBbIENyYXNoIEZhaWx1
cmUgXQogd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcm90YXRpb24uaHRtbCBbIEZh
aWx1cmUgXQotd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcm90YXRpb24tbm8tY3Zv
Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xODcwNjQgd2Via2l0Lm9yZy9iLzIzNTg4
NSB3ZWJydGMvdmlkZW8tcm90YXRpb24tbm8tY3ZvLmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KIHdl
YmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXdpdGgtZGF0YS1jaGFubmVsLmh0bWwgWyBG
YWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xODcwNjQgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tZ2V0U3RhdHMuaHR0cHMuaHRtbCBbIEZhaWx1
cmUgUGFzcyBdCiAKQEAgLTI1MjAsNyArMjU5Miw3IEBAIG1lZGlhL3ZpZGVvLXJlbW90ZS1jb250
cm9sLXBsYXlwYXVzZS5odG1sIFsgU2tpcCBdCiAKIHdlYmtpdC5vcmcvYi8yMDcwNjIgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVwbGF5
Lmh0bWwgWyBGYWlsdXJlIFBhc3MgXQogCi13ZWJraXQub3JnL2IvMjI5MzQ2IHdlYnJ0Yy9tdWx0
aS1hdWRpby5odG1sIFsgVGltZW91dCBQYXNzIF0KK3dlYmtpdC5vcmcvYi8yMjkzNDYgd2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvbXVsdGktYXVkaW8uaHRtbCBbIFRpbWVvdXQgUGFzcyBGYWls
dXJlIF0KIAogd2Via2l0Lm9yZy9iLzIyOTcxNSBbIERlYnVnIF0gZmFzdC9tZWRpYXN0cmVhbS9n
ZXREaXNwbGF5TWVkaWEtbWF4LWNvbnN0cmFpbnRzMy5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQu
b3JnL2IvMjI5NzE1IFsgRGVidWcgXSBmYXN0L21lZGlhc3RyZWFtL3NjcmVlbmNhcHR1cmUtdXNl
ci1nZXN0dXJlLmh0bWwgWyBUaW1lb3V0IF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0
aW9uLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jOTVhOWI2MTkwMDlhNzQzMmExMjkzNmE3YzZhODE4OTA4NGQyYzdmCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLWxvY2FsRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MTkgQEAKK1Rlc3RzIFJUQ1BlZXJDb25uZWN0aW9uIGxvY2FsRGVzY3JpcHRpb24uCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vz
c2lvbkRlc2NyaXB0aW9uKS50aGVuKHJlcXVlc3RTdWNjZWVkZWQxLCByZXF1ZXN0RmFpbGVkMSk7
IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyByZXF1ZXN0U3VjY2VlZGVkIHdhcyBjYWxs
ZWQuCitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVu
KHJlcXVlc3RTdWNjZWVkZWQyLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBub3QgdGhyb3cgZXhjZXB0
aW9uLgorUEFTUyByZXF1ZXN0RmFpbGVkIHdhcyBjYWxsZWQuCitQQVNTIHBjLmxvY2FsRGVzY3Jp
cHRpb24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24uc2RwIHNob3Vs
ZCBiZSBsb2NhbC4gV2FzIHQ9MCAwCisuCitQQVNTIHBjLmxvY2FsRGVzY3JpcHRpb24udHlwZSBp
cyAib2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSBsb2NhbC4g
V2FzIHQ9MCAwCisuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dCBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ1M2VjNWMy
MTYwZDAzMjczYzE5ODFmOGVkOWZhMTgzODRmZDA3NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1y
ZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGVzdHMgUlRD
UGVlckNvbm5lY3Rpb24gcmVtb3RlRGVzY3JpcHRpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxs
IHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBM
RVRFIi4KKworCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlv
bikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgcmVxdWVzdEZhaWxlZDEpOyBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdFN1Y2NlZWRlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5z
ZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2Nl
ZWRlZDIsIHJlcXVlc3RGYWlsZWQyKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHJl
cXVlc3RGYWlsZWQgd2FzIGNhbGxlZC4KK1BBU1MgcGMucmVtb3RlRGVzY3JpcHRpb24udHlwZSBp
cyAib2ZmZXIiCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgcmVtb3Rl
LiBXYXMgdD0wIDAKKy4KK1BBU1MgcGMucmVtb3RlRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIi
CitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgcmVtb3RlLiBXYXMgdD0w
IDAKKy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQor
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0v
UlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXItZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5mY2M0MTgxMGI4ZGUxOTFkZGVlNTlhMGVjNTljMzUxOTkxYmU3ZmJiCi0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDM5IEBACitUZXN0IFJUQ1BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uIGNh
bGxlZCB3aXRoIGFuIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiBvZiB0eXBlICdvZmZlcicKKworT24g
c3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93
ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKyoqKiBDcmVhdGUgKHJlbW90ZSkgb2ZmZXIgd2l0
aCBhdWRpbyAocmVtb3RlT2ZmZXIxKQorKioqIERvbmUsIHN0YXJ0IHRlc3Rpbmcgd2l0aCByZW1v
dGVPZmZlcjEKK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ3N0YWJsZScKK1BBU1MgcGMucmVt
b3RlRGVzY3JpcHRpb24gaXMgbnVsbAorUEFTUyBwYy5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24g
aXMgbnVsbAorUEFTUyBwYy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorCitQQVNT
IHJlbW90ZU9mZmVyMSBzZXQgYXMgcmVtb3RlIGRlc2NyaXB0aW9uCitQQVNTIHBjLnNpZ25hbGlu
Z1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24g
c2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uXS4KK0ZBSUwgcGMucGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uIHNob3VsZCBiZSBbb2JqZWN0
IE9iamVjdF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbl0uCitQQVNTIHBjLmN1
cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK1BBU1MgcmVtb3RlT2ZmZXIxIHNldCBh
cyByZW1vdGUgZGVzY3JpcHRpb24gKGFnYWluKQorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAn
aGF2ZS1yZW1vdGUtb2ZmZXInCisKKyoqKiBUcnkgc2V0dGluZyBsb2NhbCBkZXNjcmlwdGlvbnMg
d2l0aCBiYWQgdHlwZXMgZm9yIHRoZSBjdXJyZW50IHN0YXRlCitQQVNTIHByb21pc2UgcGMuc2V0
UmVtb3RlRGVzY3JpcHRpb24oe3R5cGU6J2Fuc3dlcicsIHNkcDpyZW1vdGVPZmZlcjEuc2RwfSk7
IHJlamVjdGVkIHdpdGggT3BlcmF0aW9uRXJyb3I6IFVuYWJsZSB0byBhcHBseSBzZXNzaW9uIHJl
bW90ZSBkZXNjcmlwdGlvbgorUEFTUyBwcm9taXNlIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHt0
eXBlOidwcmFuc3dlcicsIHNkcDpyZW1vdGVPZmZlcjEuc2RwfSk7IHJlamVjdGVkIHdpdGggT3Bl
cmF0aW9uRXJyb3I6IFVuYWJsZSB0byBhcHBseSBzZXNzaW9uIHJlbW90ZSBkZXNjcmlwdGlvbgor
CisqKiogQ3JlYXRlIChyZW1vdGUpIG9mZmVyIHdpdGggdmlkZW8gKHJlbW90ZU9mZmVyMikKKyoq
KiBEb25lLCBzdGFydCB0ZXN0aW5nIHdpdGggcmVtb3RlT2ZmZXIyCitQQVNTIHBjLnNpZ25hbGlu
Z1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKKworUEFTUyByZW1vdGVPZmZlcjIgc2V0IGFz
IHJlbW90ZSBkZXNjcmlwdGlvbgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1v
dGUtb2ZmZXInCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCBiZSBbb2JqZWN0IE9i
amVjdF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbl0uCitGQUlMIHBjLnBlbmRp
bmdSZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUgW29iamVjdCBPYmplY3RdLiBXYXMgW29iamVj
dCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgorUEFTUyBwYy5jdXJyZW50UmVtb3RlRGVzY3JpcHRp
b24gaXMgbnVsbAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YWJsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc3RhYmxl
LWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDE2NmRjYTU2M2VjZTQ3ZjQ4YzA3MjJjYzA4N2Ez
ZTJmOTY2YzRlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9m
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YWJsZS1leHBlY3RlZC50eHQKQEAg
LTAsMCArMSw1MSBAQAorVGVzdHMgUlRDUGVlckNvbm5lY3Rpb24gaW4gc3RhYmxlIHN0YXRlLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBp
cyAic3RhYmxlIgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlv
bikudGhlbihmaW5pc2hJZlN1Y2NlZWRlZCwgcmVxdWVzdEZhaWxlZDEpOyBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0TG9jYWxEZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9y
UmVhc29uLm5hbWUgc2hvdWxkIGJlIEludmFsaWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2Fz
IE9wZXJhdGlvbkVycm9yLgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBh
biBleGNlcHRpb24uIFdhcyBudWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQg
dGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMg
InN0YWJsZSIKK1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24p
LnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQyKTsgZGlkIG5vdCB0aHJvdyBl
eGNlcHRpb24uCitQQVNTIHNldExvY2FsRGVzY3JpcHRpb24gZmFpbGVkLgorRkFJTCBlcnJvclJl
YXNvbi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9uRXJyb3IuIFdhcyBP
cGVyYXRpb25FcnJvci4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4g
ZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIHRo
cm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJz
dGFibGUiCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbiku
dGhlbihmaW5pc2hJZlN1Y2NlZWRlZCwgcmVxdWVzdEZhaWxlZDMpOyBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4KK1BBU1Mgc2V0UmVtb3RlRGVzY3JpcHRpb24gZmFpbGVkLgorRkFJTCBlcnJvclJl
YXNvbi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9uRXJyb3IuIFdhcyBP
cGVyYXRpb25FcnJvci4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4g
ZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIHRo
cm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJz
dGFibGUiCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbiku
dGhlbihmaW5pc2hJZlN1Y2NlZWRlZCwgcmVxdWVzdEZhaWxlZDQpOyBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4KK1BBU1Mgc2V0UmVtb3RlRGVzY3JpcHRpb24gZmFpbGVkLgorRkFJTCBlcnJvclJl
YXNvbi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9uRXJyb3IuIFdhcyBP
cGVyYXRpb25FcnJvci4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4g
ZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIHRo
cm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJz
dGFibGUiCitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50
aGVuKHJlcXVlc3RTdWNjZWVkZWQxLCBmaW5pc2hJZkZhaWxlZCk7IGRpZCBub3QgdGhyb3cgZXhj
ZXB0aW9uLgorUEFTUyBzZXRMb2NhbERlc2NyaXB0aW9uIHN1Y2NlZWRlZC4KK1BBU1MgcGMubG9j
YWxEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbi5z
ZHAgc2hvdWxkIGJlIGxvY2FsLiBXYXMgdD0wIDAKKy4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRp
b24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGlu
Z1N0YXRlIGlzICJoYXZlLWxvY2FsLW9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNo
b3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlw
dGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFs
aW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lv
bkRlc2NyaXB0aW9uKS50aGVuKHJlcXVlc3RTdWNjZWVkZWQyLCBmaW5pc2hJZkZhaWxlZCk7IGRp
ZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRSZW1vdGVEZXNjcmlwdGlvbiBzdWNjZWVk
ZWQuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4g
V2FzIG51bGwuCitQQVNTIHBjLnJlbW90ZURlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJ
TCBwYy5yZW1vdGVEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIHJlbW90ZS4gV2FzIHQ9MCAwCisu
CitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJoYXZlLXJlbW90ZS1vZmZlciIKK1BBU1Mgc3Vj
Y2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9D
aGFuZ2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggODA0OTM1NWY0Y2I2MWZhYTlkY2JmOWY4ZDY2M2My
MzUzZWFjMWQxYy4uYzMxYTNhODI1ODQxZjFlYjIxNjQxNWIxMTk3NGU3YjBiMTBiOTdlZSAxMDA2
NDQKLS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIy
LTAyLTEyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1N0cmVhbWVyXSBJbml0aWFsIGltcG9ydCBvZiB0aGUgR3N0V2ViUlRDIGJhY2tlbmQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU0MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBHc3RX
ZWJSVEMgYnkgZGVmYXVsdCBpZiBhIHJlY2VudC1lbm91Z2ggKD49IDEuMjApIHZlcnNpb24gaXMg
YXZhaWxhYmxlLgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2U6
CisgICAgICAgICogU291cmNlL2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZToKKyAgICAgICAg
KiBTb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2U6CisgICAgICAgICogU291
cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVuZGVuY2llcy5jbWFrZToKKwogMjAyMi0wMi0xMSAgRG9u
IE9sbXN0ZWFkICA8ZG9uLm9sbXN0ZWFkQHNvbnkuY29tPgogCiAgICAgICAgIFtDTWFrZV0gQ2hl
Y2sgZm9yIE1BUF9BTElHTkVEIHN1cHBvcnQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451811</attachid>
            <date>2022-02-13 03:06:10 -0800</date>
            <delta_ts>2022-02-13 06:35:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220213030607.patch</filename>
            <type>text/plain</type>
            <size>326416</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5Njk2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDViNzM1NDcwMWNmNmE2ZTdiYTI5NzUw
N2Q2OWZjMjMzZTVjODIwYzIuLjMyNWFiNTNkMDkxZjM2MDY4OTRmYzUzZjA5MWJiZDE5NGY0OTA2
YTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAyLTEyICBFcmljIENhcmxzb24gIDxlcmlj
LmNhcmxzb25AYXBwbGUuY29tPgogCiAgICAgICAgIFttYWNPU10gVXNlIHN5c3RlbSB3aW5kb3cg
YW5kIHNjcmVlbiBwaWNrZXIgd2hlbiBhdmFpbGFibGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCAwZDkwMzIyMWY3
ODIwYjFlYjY5YWEwN2U1ZWU5Y2JhOTMxY2Y1MzQ2Li5kNTA5YTgwMTY0MWRiYzRmMDNiMDQ5OTMz
ZDBkMzk2ZjQ1MDA5Y2IzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysr
IGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzc0IEBACisyMDIyLTAyLTEy
ICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0
cmVhbWVyXSBJbml0aWFsIGltcG9ydCBvZiB0aGUgR3N0V2ViUlRDIGJhY2tlbmQKKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU0MAorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEluaXRpYWwgR3N0V2ViUlRD
IGJhY2tlbmQuIEEgbG90IG9mIGZlYXR1cmVzIHVuaW1wbGVtZW50ZWQgc3RpbGwsIGJ1dCB3ZSB3
aWxsIGluY3JlbWVudGFsbHkKKyAgICAgICAgaW1wcm92ZSB0aGUgbGF5b3V0IHRlc3QgY292ZXJh
Z2UgaW4gZm9sbG93LXVwIHBhdGNoZXMuIE1vc3Qgbm90YWJsZSBzaG9ydC1jb21pbmdzIGN1cnJl
bnRseToKKworICAgICAgICAtIERhdGFDaGFubmVsIHN1cHBvcnQgaXMgaW5jb21wbGV0ZSAoYnVn
IDIzNTg3OSkKKyAgICAgICAgLSBOZXR3b3JrIHRyYWZmaWMgbm90IHJvdXRlZCB0aHJvdWdoIE5l
dHdvcmsgcHJvY2VzcyB5ZXQKKyAgICAgICAgLSBTdGF0cyBzdXBwb3J0IGluY29tcGxldGUKKyAg
ICAgICAgLSBEVE1GIHN1cHBvcnQgdW5pbXBsZW1lbnRlZAorICAgICAgICAtIElDRSByZXN0YXJ0
cyBub3Qgc3VwcG9ydGVkIHlldAorICAgICAgICAtIFJlLW5lZ290aWF0aW9uIHVubGlrZWx5IHRv
IHdvcmsKKyAgICAgICAgLSBTaW11bGNhc3Qgbm90IGhhbmRsZWQgeWV0CisgICAgICAgIC0gQmFs
YW5jZWQgYnVuZGxlIG5vdCBzdXBwb3J0ZWQKKyAgICAgICAgLSBSVFggYW5kIEZFQyB1bi10ZXN0
ZWQsIGJ1dCBzaG91bGRuJ3QgYmUgaGFyZCB0byBmaXgKKworICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ6OmdlbmVyYXRlQ2VydGlmaWNhdGUpOgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVl
ckNvbm5lY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmZyb21SVENEYXRhQ2hhbm5lbElu
aXQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGFu
bmVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
OjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyOjp+R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2V0Q2xpZW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFN0cmlu
Z0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpz
ZW5kUmF3RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxl
cjo6Y2hlY2tTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6OnJlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRh
dGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uTWVzc2FnZVN0cmluZyk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uRXJyb3IpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbkJ1ZmZlcmVkQW1vdW50TG93KToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6cG9zdFRhc2sp
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckR0bHNU
cmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kOjp+R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydEJhY2tlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lz
dGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNr
ZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNU
cmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmg6IEFkZGVkLgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRy
YW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZDo6aWNlVHJhbnNwb3J0Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpnYXRoZXJpbmdT
dGF0ZUNoYW5nZWQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0
aWFsaXplUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6fkdTdHJlYW1lck1lZGlhRW5kcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6dGVhcmRvd25QaXBlbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpoYW5kbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRpc3Bvc2VFbGVtZW50Q2hhaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0Q29uZmlndXJhdGlvbik6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXN0YXJ0SWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OmZldGNoRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZmV0Y2hTaWdu
YWxpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmlu
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvU2V0TG9jYWxE
ZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpz
ZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Ojpkb1NldFJlbW90ZURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OlNldERlc2NyaXB0aW9uQ2FsbERhdGE6OlNldERlc2NyaXB0aW9uQ2FsbERhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0RGVzY3JpcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcmVSZW1vdGVNTGlu
ZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y29uZmln
dXJlQW5kTGlua1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpyZXF1ZXN0UGFkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmFkZFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OnJlbW92ZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmRvQ3JlYXRlT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6ZG9DcmVhdGVBbnN3ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6aW5pdGlhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6Z2V0U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
bWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmFkZFJlbW90ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVSZW1vdGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFuc2NlaXZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTb3VyY2VGb3JU
cmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRTZW5k
ZXJTb3VyY2VGcm9tVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6dHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRJY2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlRGF0YUNoYW5uZWwpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25EYXRhQ2hhbm5lbCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjbG9zZSk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6Om9uTmVnb3RpYXRpb25OZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDb25uZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlR2F0aGVyaW5nQ2hhbmdlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlQ2FuZGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25E
ZXNjcmlwdGlvblN1Y2NlZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y29sbGVjdFRyYW5zY2VpdmVycyk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnYXRoZXJTdGF0c0ZvckxvZ2dpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI6OlJUQ1N0YXRzTG9nZ2VyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyOjp0b0pTT05TdHJpbmcgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cHJvY2Vzc1N0YXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uU3RhdHNEZWxpdmVyZWQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RhcnRMb2dnaW5n
U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcExv
Z2dpbmdTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojps
b2dDaGFubmVsIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OnN0YXRzTG9nSW50ZXJ2YWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZSk6CisgICAgICAg
IChXVEY6OkxvZ0FyZ3VtZW50PFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyPjo6dG9TdHJpbmcpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5k
cG9pbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aXNT
dG9wcGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmlzTmVnb3RpYXRpb25OZWVkZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6cGlwZWxpbmUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVjZWl2ZXJDYXBh
YmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzZW5k
ZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzdXNwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVzdW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVzdGFydEljZSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldENv
bmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpnZXRTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpiYWNrZW5kRnJvbVJUUFNlbmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRv
U2V0TG9jYWxEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmRvU2V0UmVtb3RlRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0ZU9mZmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9DcmVhdGVBbnN3
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpj
bG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OmRvU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6ZmluZEV4aXN0aW5nU2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlckZyb21U
cmFja09yS2luZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OmFkZFRyYW5zY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZDo6c2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OmJhY2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpleGlzdGluZ1RyYW5zY2VpdmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6bmV3UmVtb3RlVHJh
bnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjpjb2xsZWN0VHJhbnNjZWl2ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6cmVtb3ZlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRl
b1NvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6aXNOZWdvdGlhdGlvbk5lZWRlZCBjb25z
dCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0Q29u
dHJpYnV0aW5nU291cmNlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBS
ZWNlaXZlckJhY2tlbmQ6OmdldFN5bmNocm9uaXphdGlvblNvdXJjZXMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpjcmVhdGVTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpydGNSdHBUcmFu
c2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFj
a2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRy
YW5zZm9ybUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhVHlwZUZy
b21SZWNlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5z
Zm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6On5HU3Ry
ZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVD
YWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9y
bUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVk
LgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNl
bmRlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVRyYWNrU291
cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0YXJ0
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0
b3BTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6
cmVwbGFjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQ6OmdldFBhcmFtZXRlcnMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRw
U2VuZGVyQmFja2VuZDo6c2V0UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kOjpjcmVhdGVEVE1GQmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnNldE1lZGlhU3RyZWFt
SWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmR0bHNU
cmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhVHlwZUZyb21TZW5kZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVh
bWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3Jt
QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1C
YWNrZW5kOjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJhbWUpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRl
clRyYW5zZm9ybUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OkdTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVJlY2VpdmVyQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVNlbmRlckJhY2tlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpkaXJl
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kOjpjdXJyZW50RGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c2V0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6bWlkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c3RvcCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnN0b3BwZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXRDb2RlY1By
ZWZlcmVuY2VzKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6c2V0
SW5wdXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1C
YWNrZW5kOjpjbGVhclRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OnByb2Nlc3NUcmFuc2Zvcm1lZEZyYW1l
KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBU
cmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRw
VHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJh
Y2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDU2N0cFRyYW5zcG9ydFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpH
U3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpkdGxzVHJh
bnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tl
bmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbGxS
VENTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUlRDUlRQU3RyZWFtU3RhdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6ZmlsbFJUQ0NvZGVjU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6Zmls
bEluYm91bmRSVFBTdHJlYW1TdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsT3V0Ym91bmRS
VFBTdHJlYW1TdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUlRDUGVlckNvbm5lY3Rpb25T
dGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUlRDVHJhbnNwb3J0U3RhdHMpOgorICAgICAg
ICAoV2ViQ29yZTo6ZmlsbFJlcG9ydENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxi
YWNrSG9sZGVyOjpDYWxsYmFja0hvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJT
dGF0c0NvbGxlY3Rvcjo6Z2V0U3RhdHMpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6c2V0RWxlbWVudCk6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OnRvUlRDSWNlUHJvdG9jb2wpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VUY3BDYW5kaWRh
dGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlQ2FuZGlkYXRlVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1JUQ0Vycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRvV2ViUlRDQml0
UmF0ZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OmZyb21SVENFbmNvZGluZ1BhcmFtZXRl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVdlYlJUQ0JpdFJhdGVQcmlvcml0eSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1JUQ0VuY29kaW5nUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmVuc3VyZURlYnVn
Q2F0ZWdvcnlJbml0aWFsaXplZCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUljZUNhbmRpZGF0
ZVNEUCk6CisgICAgICAgIChXZWJDb3JlOjp4NTA5U2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OnByaXZhdGVLZXlTZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVDZXJ0
aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZHBNZWRpYUhhc0F0dHJpYnV0ZUtleSk6Cisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRp
bHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZyb21SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjp0b1Nlc3Npb25EZXNjcmlwdGlvblR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6ZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6
dG9TaWduYWxpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZUNvbm5lY3Rpb25T
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0R0bHNUcmFuc3BvcnRTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1JUQ0ljZVRyYW5zcG9ydFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvUlRDSWNlR2F0aGVyaW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6YnVuZGxlUG9saWN5
RnJvbUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6aWNlVHJhbnNwb3J0UG9saWN5
RnJvbUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENFcnJvckRldGFpbFR5
cGUpOgorICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBwbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpBdWRpb1NvdXJj
ZVByb3ZpZGVyR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlk
ZXJHU3RyZWFtZXI6On5BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OmhhbmRsZU5ld0RlaW50ZXJsZWF2
ZVBhZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1JlZlB0ckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXVEY6OmFkb3B0R1JlZik6CisgICAg
ICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6
ZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8
R3N0V2ViUlRDUlRQU2VuZGVyPik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENS
VFBTZW5kZXI+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZl
cj4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KToK
KyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4pOgorICAgICAgICAo
V1RGOjpkZXJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+KToKKyAgICAgICAgKFdURjo6cmVm
R1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0Pik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxH
c3RXZWJSVENEVExTVHJhbnNwb3J0Pik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRD
SUNFVHJhbnNwb3J0Pik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFu
c3BvcnQ+KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdT
dHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFt
ZXJDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y2Fwc01lZGlhVHlwZSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaDoKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlQXVkaW9T
b3VyY2VQcm92aWRlcik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
QXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpjcmVhdGVDb252ZXJ0ZXIpOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJDYXB0dXJlcjo6Y3JlYXRlU291cmNlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tl
bmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNr
ZW5kOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6fkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpjYW5JbnNlcnREVE1G
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpwbGF5VG9u
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6dG9uZXMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmR1
cmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNr
ZW5kOjppbnRlclRvbmVHYXAgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRN
RlNlbmRlckJhY2tlbmQ6Om9uVG9uZVBsYXllZCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVh
bVNvdXJjZS5jcHA6CisgICAgICAgICh3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFRyYWNrKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNv
ZGVyLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJydGNfdmlkZW9fZW5jb2Rlcl9jbGFzc19pbml0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXI6On5SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
OjpzdGFydFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWlu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNhcGFiaWxpdGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6
OnNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXI6OmNyZWF0ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpS
ZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmxvY2tWYWx2ZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpyZWxlYXNlVmFsdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6
cmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6YmluKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6
Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXR0aW5nc0RpZENoYW5nZSk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNoU2Ft
cGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUpOgorICAgICAgICAo
aXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6UmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXI6OnNldFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c3RvcCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZU11dGVkQ2hh
bmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXI6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6aW5pdGlhbGl6ZUZyb21UcmFjayk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6Omxpbmsp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
OjpzZXRTaW5rUGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2UgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyOjphbGxvd2VkQ2FwcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdv
aW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnBhZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNlbmRlciBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmJpbiBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6
OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJu
YWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6cmVzZXRUb0NvbnNpc3RlbnRT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0
KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0V2ViUlRDVlA5U3VwcG9ydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFdlYlJUQ1ZQOVZUQlN1cHBvcnQpOgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbmFibGVXZWJSVENFbmNyeXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0VXNlRFRMUzEwKToKKwogMjAyMi0wMi0xMiAg
RXJpYyBDYXJsc29uICA8ZXJpYy5jYXJsc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBbbWFjT1Nd
IFVzZSBzeXN0ZW0gd2luZG93IGFuZCBzY3JlZW4gcGlja2VyIHdoZW4gYXZhaWxhYmxlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFt
bCBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlcy55YW1sCmlu
ZGV4IGU3OWM3ZDkyZDEyOGE4NjY4ZjM0YzMyNDE4NTM5MTQ2MzMxZjJlY2UuLjk1NWFmNmE4Zjkw
NGU1Yzk3YjE1MzFlOWVkYWRhNzE1ZjljZTJmODkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvU2Ny
aXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlcy55YW1sCisrKyBiL1NvdXJjZS9XVEYvU2Ny
aXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlcy55YW1sCkBAIC0xNjgyLDcgKzE2ODIsOSBA
QCBQZWVyQ29ubmVjdGlvbkVuYWJsZWQ6CiAgICAgV2ViS2l0TGVnYWN5OgogICAgICAgZGVmYXVs
dDogdHJ1ZQogICAgIFdlYktpdDoKLSAgICAgIGRlZmF1bHQ6IFdlYkNvcmU6OkxpYldlYlJUQ1By
b3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUoKQorICAgICAgIlVTRShMSUJXRUJSVEMpIjogV2ViQ29y
ZTo6TGliV2ViUlRDUHJvdmlkZXI6OndlYlJUQ0F2YWlsYWJsZSgpCisgICAgICAiVVNFKEdTVFJF
QU1FUl9XRUJSVEMpIjogdHJ1ZQorICAgICAgZGVmYXVsdDogZmFsc2UKICAgICBXZWJDb3JlOgog
ICAgICAgZGVmYXVsdDogdHJ1ZQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJl
ZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbCBiL1NvdXJjZS9XVEYvU2Ny
aXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCmluZGV4IDQ3
NzUwZWNmOTBlODc5NTYyMzhhYTBkYjc2YmMwMDQ0ZTNkMzY3NDAuLjI4NjNiYjg4Y2QwNWU0Yzdi
YzgwYmM3N2FiZDQ4OThkZWNjM2E3YWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvU2NyaXB0cy9Q
cmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCisrKyBiL1NvdXJjZS9X
VEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCkBA
IC0xNjczLDkgKzE2NzMsMTEgQEAgV2ViUlRDRW5jb2RlZFRyYW5zZm9ybUVuYWJsZWQ6CiAgICAg
V2ViS2l0TGVnYWN5OgogICAgICAgZGVmYXVsdDogZmFsc2UKICAgICBXZWJLaXQ6Ci0gICAgICBk
ZWZhdWx0OiB0cnVlCisgICAgICAiVVNFKExJQldFQlJUQykiOiB0cnVlCisgICAgICBkZWZhdWx0
OiBmYWxzZQogICAgIFdlYkNvcmU6Ci0gICAgICBkZWZhdWx0OiB0cnVlCisgICAgICAiVVNFKExJ
QldFQlJUQykiOiB0cnVlCisgICAgICBkZWZhdWx0OiBmYWxzZQogCiAjIEZJWE1FOiBJcyB0aGlz
IGltcGxlbWVudGVkIGZvciBXZWJLaXRMZWdhY3k/IElmIG5vdCwgdGhpcyBzaG91bGQgYmUgZXhj
bHVkZWQgZnJvbSBXZWJLaXRMZWdhY3kgZW50aXJlbHkuCiBXZWJSVENIMjY0TG93TGF0ZW5jeUVu
Y29kZXJFbmFibGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNw
cCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAKaW5kZXggMWI5YWRlM2Y5MzZlZTU2
NGQzODJjMDdlZjk2NjU3NmFiNjYxOWI0MS4uOTMxMmEzZTg5NGJkOGEwZDdhMTFhNmE0NWNjYmQz
Njg3M2Y4YzUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNwcAor
KysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuY3BwCkBAIC0yMjMsNiArMjIzLDIyIEBA
IHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdVcmkqIHB0cikKIH0KICNlbmRpZgogCit0ZW1w
bGF0ZSA8PgorR0FycmF5KiByZWZHUHRyKEdBcnJheSogcHRyKQoreworICAgIGlmIChwdHIpCisg
ICAgICAgIGdfYXJyYXlfcmVmKHB0cik7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0
ZSA8Pgordm9pZCBkZXJlZkdQdHIoR0FycmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAg
ICAgZ19hcnJheV91bnJlZihwdHIpOworfQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlm
IC8vIFVTRShHTElCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgg
Yi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuaAppbmRleCBlNzIxZmQ1NWY0MmFjM2Q3NmI0
MDE3NjBlMGExOWI5OWZlM2UwZjhiLi42NjczNjA3ODdhYzVmNjQ5NjBiZTFkNTQ2MmRkZTU5ZDcz
NTVmNmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuaAorKysgYi9T
b3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuaApAQCAtMjUwLDYgKzI1MCw4IEBAIHRlbXBsYXRl
IDw+IFdURl9FWFBPUlRfUFJJVkFURSBHRGF0ZVRpbWUqIHJlZkdQdHIoR0RhdGVUaW1lKiBwdHIp
OwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdEYXRlVGlt
ZSogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHREJ1c05vZGVJbmZvKiBy
ZWZHUHRyKEdEQnVzTm9kZUluZm8qIHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZB
VEUgdm9pZCBkZXJlZkdQdHIoR0RCdXNOb2RlSW5mbyogcHRyKTsKK3RlbXBsYXRlIDw+IFdURl9F
WFBPUlRfUFJJVkFURSBHQXJyYXkqIHJlZkdQdHIoR0FycmF5Kik7Cit0ZW1wbGF0ZSA8PiBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIoR0FycmF5Kik7CiAKICNpZiBIQVZFKEdVUkkp
CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgR1VyaSogcmVmR1B0cihHVXJpKik7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlh
Q2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRp
ZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGRmYjliZGFjNTY2Yjc5NjViYWFjZmUwY2Zl
ZTcwNjE0MzhiMTk1YjIuLjhjNzQ0ZmNkMTM3NzAwNmZiYjkwNzY2ZWJiM2JjNGM4NGU4ZGNjYmUg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVk
aWFDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBh
YmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgc3RhdGlj
IHZvaWQgZ2F0aGVyRGVjb2RpbmdJbmZvKERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFEZWNvZGlu
Z0NvbmZpZ3VyYXRpb24mJgogICAgIGNvbmZpZ3VyYXRpb24uY2FuRXhwb3NlVlA5ID0gZG9jdW1l
bnQuc2V0dGluZ3MoKS52cDlEZWNvZGVyRW5hYmxlZCgpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUo
V0VCX1JUQykKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKExJQldFQlJUQykKICAgICBpZiAo
Y29uZmlndXJhdGlvbi50eXBlID09IE1lZGlhRGVjb2RpbmdUeXBlOjpXZWJSVEMpIHsKICAgICAg
ICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5s
aWJXZWJSVENQcm92aWRlcigpLmNyZWF0ZURlY29kaW5nQ29uZmlndXJhdGlvbihXVEZNb3ZlKGNv
bmZpZ3VyYXRpb24pLCBXVEZNb3ZlKGRlY29kaW5nQ2FsbGJhY2spKTsKQEAgLTIwMCw3ICsyMDAs
NyBAQCBzdGF0aWMgdm9pZCBnYXRoZXJFbmNvZGluZ0luZm8oRG9jdW1lbnQmIGRvY3VtZW50LCBN
ZWRpYUVuY29kaW5nQ29uZmlndXJhdGlvbiYmCiAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVz
dWx0KSk7CiAgICAgfTsKIAotI2lmIEVOQUJMRShXRUJfUlRDKQorI2lmIEVOQUJMRShXRUJfUlRD
KSAmJiBVU0UoTElCV0VCUlRDKQogICAgIGlmIChjb25maWd1cmF0aW9uLnR5cGUgPT0gTWVkaWFF
bmNvZGluZ1R5cGU6OldlYlJUQykgewogICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50
LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuY3JlYXRlRW5j
b2RpbmdDb25maWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlvbiksIFdURk1vdmUoZW5jb2Rp
bmdDYWxsYmFjaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYURldmljZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9NZWRpYURldmljZXMuY3BwCmluZGV4IDUwNmYzMzc0YjdlNmQ3NmQ1OThmNDk1M2Q4NDljMzhl
YWFjNzI3ZTkuLjdiOWI1YjY2ZGE1MTUzMjRlNjY2Y2Y0YjFiYTNmNWNkMmZhZTBiZDAgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5j
cHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkpTRE9N
UHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNNZWRpYURldmljZUluZm8uaCIKKyNpbmNs
dWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRz
LmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzLmgiCiAjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcAppbmRleCA4NmQ3NTczOTkyZjRkNWJk
NGMzNTNkY2I2MDk3MjY0ZTk4NWQ1N2U4Li4wZTcwMWJmZDQ3ZTkyODRiYTE3ODE2NDFkOTIyN2Ez
YWY4NTlkNTc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCkBAIC01Myw5ICs1MywxNCBAQAog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
I2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdl
YkNvcmUgewogCi0jaWYgIVVTRShMSUJXRUJSVEMpCisjaWYgIVVTRShMSUJXRUJSVEMpICYmICFV
U0UoR1NUUkVBTUVSX1dFQlJUQykKKwogc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ+IGNyZWF0ZU5vUGVlckNvbm5lY3Rpb25CYWNrZW5kKFJUQ1BlZXJDb25uZWN0
aW9uJikKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTQzNywxMyArNDQyLDE5IEBAIHZvaWQg
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZW5lcmF0ZUNlcnRpZmljYXRlKERvY3VtZW50JiBkb2N1
bWVudCwgY29uc3QgQ2VydGlmCiAgICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVy
cm9yKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KKwogICAgIExpYldlYlJUQ0NlcnRpZmljYXRl
R2VuZXJhdG9yOjpnZW5lcmF0ZUNlcnRpZmljYXRlKGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCks
IHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCksIGluZm8sIFtwcm9taXNlID0gV1RGTW92ZShwcm9t
aXNlKV0oYXV0byYmIHJlc3VsdCkgbXV0YWJsZSB7CiAgICAgICAgIHByb21pc2Uuc2V0dGxlKFdU
Rk1vdmUocmVzdWx0KSk7CiAgICAgfSk7CisjZWxpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyAg
ICBhdXRvIGNlcnRpZmljYXRlID0gOjpXZWJDb3JlOjpnZW5lcmF0ZUNlcnRpZmljYXRlKGRvY3Vt
ZW50LnNlY3VyaXR5T3JpZ2luKCksIGluZm8pOworICAgIGlmIChjZXJ0aWZpY2F0ZS5oYXNfdmFs
dWUoKSkKKyAgICAgICAgcHJvbWlzZS5yZXNvbHZlKCpjZXJ0aWZpY2F0ZSk7CisgICAgZWxzZQor
ICAgICAgICBwcm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7CiAjZWxzZQogICAgIFVO
VVNFRF9QQVJBTShkb2N1bWVudCk7Ci0gICAgVU5VU0VEX1BBUkFNKGV4cGlyZXMpOwotICAgIFVO
VVNFRF9QQVJBTSh0eXBlKTsKKyAgICBVTlVTRURfUEFSQU0oaW5mbyk7CiAgICAgcHJvbWlzZS5y
ZWplY3QoTm90U3VwcG9ydGVkRXJyb3IpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCmluZGV4
IDViZGRmZWM3ZTRkZmM5ZDljMDI5OWM5ZTI3Y2E5ZGMyMmRmNjQxMDQuLjkwZGU2Mzk5MzRlZDYx
YzVjMGIxMDEyYzBhYTUzOTdkZDBkOGIzMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCkBAIC05NSw3ICs5
NSw3IEBAIEV4Y2VwdGlvbk9yPFJlZjxSVENQZWVyQ29ubmVjdGlvbj4+IFJUQ1BlZXJDb25uZWN0
aW9uOjpjcmVhdGUoRG9jdW1lbnQmIGRvY3VtZW50CiAgICAgaWYgKCFwZWVyQ29ubmVjdGlvbi0+
aXNDbG9zZWQoKSkgewogICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkg
ewogICAgICAgICAgICAgcGVlckNvbm5lY3Rpb24tPnJlZ2lzdGVyVG9Db250cm9sbGVyKHBhZ2Ut
PnJ0Y0NvbnRyb2xsZXIoKSk7Ci0jaWYgIUxPR19ESVNBQkxFRCB8fCAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyNpZiBVU0UoTElCV0VCUlRDKSAmJiAoIUxPR19ESVNBQkxFRCB8fCAhUkVMRUFTRV9M
T0dfRElTQUJMRUQpCiAgICAgICAgICAgICBpZiAoIXBhZ2UtPnNlc3Npb25JRCgpLmlzRXBoZW1l
cmFsKCkpCiAgICAgICAgICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRMb2dn
aW5nTGV2ZWwoTG9nV2ViUlRDLmxldmVsKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxI
YW5kbGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzMzNWNjYWUxYjEz
MzNmODQ2OTBmNWNiOWQyYThmYjdhZDkyMjIzZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlci5jcHAKQEAgLTAsMCArMSwzMDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXIuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiRXZl
bnROYW1lcy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAi
UlRDRGF0YUNoYW5uZWwuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEV2ZW50LmgiCisjaW5j
bHVkZSAiUlRDRXJyb3IuaCIKKyNpbmNsdWRlICJSVENQcmlvcml0eVR5cGUuaCIKKworI2luY2x1
ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0
X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRf
d2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1VuaXF1ZVB0
cjxHc3RTdHJ1Y3R1cmU+IEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6ZnJvbVJUQ0RhdGFD
aGFubmVsSW5pdChjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmIG9wdGlvbnMpCit7CisgICAgR1Vu
aXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGluaXQoZ3N0X3N0cnVjdHVyZV9uZXcoIm9wdGlvbnMiLCAi
cHJvdG9jb2wiLCBHX1RZUEVfU1RSSU5HLCBvcHRpb25zLnByb3RvY29sLnV0ZjgoKS5kYXRhKCks
IG51bGxwdHIpKTsKKworICAgIGlmIChvcHRpb25zLm9yZGVyZWQpCisgICAgICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJvcmRlcmVkIiwgR19UWVBFX0JPT0xFQU4sICpvcHRpb25z
Lm9yZGVyZWQsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25zLm1heFBhY2tldExpZmVUaW1lKQor
ICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAibWF4LXBhY2tldC1saWZldGlt
ZSIsIEdfVFlQRV9JTlQsICpvcHRpb25zLm1heFBhY2tldExpZmVUaW1lLCBudWxscHRyKTsKKyAg
ICBpZiAob3B0aW9ucy5tYXhSZXRyYW5zbWl0cykKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQo
aW5pdC5nZXQoKSwgIm1heC1yZXRyYW5zbWl0cyIsIEdfVFlQRV9JTlQsICpvcHRpb25zLm1heFJl
dHJhbnNtaXRzLCBudWxscHRyKTsKKyAgICBpZiAob3B0aW9ucy5uZWdvdGlhdGVkKQorICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAibmVnb3RpYXRlZCIsIEdfVFlQRV9CT09M
RUFOLCAqb3B0aW9ucy5uZWdvdGlhdGVkLCBudWxscHRyKTsKKyAgICBpZiAob3B0aW9ucy5pZCkK
KyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgImlkIiwgR19UWVBFX0lOVCwg
Km9wdGlvbnMuaWQsIG51bGxwdHIpOworCisgICAgR3N0V2ViUlRDUHJpb3JpdHlUeXBlIHByaW9y
aXR5VHlwZTsKKyAgICBzd2l0Y2ggKG9wdGlvbnMucHJpb3JpdHkpIHsKKyAgICBjYXNlIFJUQ1By
aW9yaXR5VHlwZTo6VmVyeUxvdzoKKyAgICAgICAgcHJpb3JpdHlUeXBlID0gR1NUX1dFQlJUQ19Q
UklPUklUWV9UWVBFX1ZFUllfTE9XOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJUQ1ByaW9y
aXR5VHlwZTo6TG93OgorICAgICAgICBwcmlvcml0eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9SSVRZ
X1RZUEVfTE9XOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6TWVk
aXVtOgorICAgICAgICBwcmlvcml0eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfTUVE
SVVNOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6SGlnaDoKKyAg
ICAgICAgcHJpb3JpdHlUeXBlID0gR1NUX1dFQlJUQ19QUklPUklUWV9UWVBFX0hJR0g7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAicHJp
b3JpdHkiLCBHU1RfVFlQRV9XRUJSVENfUFJJT1JJVFlfVFlQRSwgcHJpb3JpdHlUeXBlLCBudWxs
cHRyKTsKKworICAgIHJldHVybiBpbml0OworfQorCitSZWY8UlRDRGF0YUNoYW5uZWxFdmVudD4g
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGFubmVsRXZlbnQoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmIGRhdGFDaGFubmVsKQoreworICAg
IEdVbmlxdWVPdXRQdHI8Y2hhcj4gbGFiZWw7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBwcm90
b2NvbDsKKyAgICBnYm9vbGVhbiBvcmRlcmVkLCBuZWdvdGlhdGVkOworICAgIGdpbnQgbWF4UGFj
a2V0TGlmZVRpbWUsIG1heFJldHJhbnNtaXRzLCBpZDsKKyAgICBnX29iamVjdF9nZXQoZGF0YUNo
YW5uZWwuZ2V0KCksICJvcmRlcmVkIiwgJm9yZGVyZWQsICJsYWJlbCIsICZsYWJlbC5vdXRQdHIo
KSwKKyAgICAgICAgIm1heC1wYWNrZXQtbGlmZXRpbWUiLCAmbWF4UGFja2V0TGlmZVRpbWUsICJt
YXgtcmV0cmFuc21pdHMiLCAmbWF4UmV0cmFuc21pdHMsCisgICAgICAgICJwcm90b2NvbCIsICZw
cm90b2NvbC5vdXRQdHIoKSwgIm5lZ290aWF0ZWQiLCAmbmVnb3RpYXRlZCwgImlkIiwgJmlkLCBu
dWxscHRyKTsKKworICAgIFJUQ0RhdGFDaGFubmVsSW5pdCBpbml0OworICAgIGluaXQub3JkZXJl
ZCA9IG9yZGVyZWQ7CisgICAgaW5pdC5tYXhQYWNrZXRMaWZlVGltZSA9IG1heFBhY2tldExpZmVU
aW1lOworICAgIGluaXQubWF4UmV0cmFuc21pdHMgPSBtYXhSZXRyYW5zbWl0czsKKyAgICBpbml0
LnByb3RvY29sID0gU3RyaW5nKHByb3RvY29sLmdldCgpKTsKKyAgICBpbml0Lm5lZ290aWF0ZWQg
PSBuZWdvdGlhdGVkOworICAgIGluaXQuaWQgPSBpZDsKKworICAgIGF1dG8gaGFuZGxlciA9IFdU
Rjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI+KFdURk1vdmUoZGF0YUNo
YW5uZWwpKTsKKyAgICBhdXRvIGNoYW5uZWwgPSBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlKGRvY3Vt
ZW50LCBXVEZNb3ZlKGhhbmRsZXIpLCBTdHJpbmcobGFiZWwuZ2V0KCkpLCBXVEZNb3ZlKGluaXQp
KTsKKyAgICByZXR1cm4gUlRDRGF0YUNoYW5uZWxFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5k
YXRhY2hhbm5lbEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJs
ZTo6Tm8sIFdURk1vdmUoY2hhbm5lbCkpOworfQorCitHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcihHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFu
bmVsPiYmIGNoYW5uZWwpCisgICAgOiBtX2NoYW5uZWwoV1RGTW92ZShjaGFubmVsKSkKK3sKKyAg
ICBBU1NFUlQobV9jaGFubmVsKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2No
YW5uZWwuZ2V0KCksICJub3RpZnk6OnJlYWR5LXN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyKSB7CisgICAgICAgIGhhbmRsZXItPnJlYWR5
U3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChtX2NoYW5uZWwuZ2V0KCksICJvbi1tZXNzYWdlLWRhdGEiLCBHX0NBTExCQUNLKCtbXShH
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIsIEdCeXRlcyogYnl0ZXMpIHsKKyAg
ICAgICAgaGFuZGxlci0+b25NZXNzYWdlRGF0YShieXRlcyk7CisgICAgfSksIHRoaXMpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NoYW5uZWwuZ2V0KCksICJvbi1tZXNzYWdlLXN0
cmluZyIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxl
ciwgY2hhciogbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVyLT5vbk1lc3NhZ2VTdHJpbmcobWVz
c2FnZSk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2No
YW5uZWwuZ2V0KCksICJvbi1lcnJvciIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFu
bmVsSGFuZGxlciogaGFuZGxlciwgR0Vycm9yKiBlcnJvcikgeworICAgICAgICBoYW5kbGVyLT5v
bkVycm9yKGVycm9yKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLWJ1ZmZlcmVkLWFtb3VudC1sb3ciLCBHX0NBTExCQUNL
KCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIpIHsKKyAgICAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBwYXNzIHRoZSBhbW91bnQgZGVsdGEgZnJvbSB3ZWJydGNiaW4gdG8g
dGhlIFdlYkNvcmUgaGFuZGxlci4KKyAgICAgICAgaGFuZGxlci0+b25CdWZmZXJlZEFtb3VudExv
dygpOworICAgIH0pLCB0aGlzKTsKK30KKworR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjp+
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2RhdGEobV9jaGFubmVsLmdldCgpLCB0aGlzKTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnNldENsaWVudChSVENEYXRhQ2hhbm5lbEhhbmRsZXJD
bGllbnQmIGNsaWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIgY29udGV4dElk
ZW50aWZpZXIpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9OworICAgIEFT
U0VSVCghbV9oYXNDbGllbnQpOworICAgIG1faGFzQ2xpZW50ID0gdHJ1ZTsKKyAgICBBU1NFUlQo
IW1fY2xpZW50KTsKKyAgICBtX2NsaWVudCA9ICZjbGllbnQ7CisgICAgbV9jb250ZXh0SWRlbnRp
ZmllciA9IGNvbnRleHRJZGVudGlmaWVyOworCisgICAgZm9yIChhdXRvJiBtZXNzYWdlIDogbV9i
dWZmZXJlZE1lc3NhZ2VzKSB7CisgICAgICAgIHN3aXRjaE9uKG1lc3NhZ2UsIFsmXShSZWY8RnJh
Z21lbnRlZFNoYXJlZEJ1ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiTm90
aWZ5aW5nIHF1ZXVlZCByYXcgZGF0YSAoc2l6ZTogJXp1KSIsIGRhdGEtPnNpemUoKSk7CisgICAg
ICAgICAgICBjbGllbnQuZGlkUmVjZWl2ZVJhd0RhdGEoZGF0YS0+bWFrZUNvbnRpZ3VvdXMoKS0+
ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgICAgICB9LCBbJl0oU3RyaW5nJiB0ZXh0KSB7Cisg
ICAgICAgICAgICBHU1RfREVCVUcoIk5vdGlmeWluZyBxdWV1ZWQgc3RyaW5nICVzIiwgdGV4dC5h
c2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBjbGllbnQuZGlkUmVjZWl2ZVN0cmluZ0RhdGEo
dGV4dCk7CisgICAgICAgIH0sIFsmXShTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5nZSkgeworICAgICAg
ICAgICAgaWYgKHN0YXRlQ2hhbmdlLmVycm9yKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8g
cnRjRXJyb3IgPSB0b1JUQ0Vycm9yKCpzdGF0ZUNoYW5nZS5lcnJvcikpCisgICAgICAgICAgICAg
ICAgICAgIGNsaWVudC5kaWREZXRlY3RFcnJvcihydGNFcnJvci5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdTVF9ERUJVRygiRGlzcGF0Y2hpbmcgc3RhdGUg
Y2hhbmdlIHRvICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0ZUNoYW5nZS5zdGF0ZSkpOworICAg
ICAgICAgICAgY2xpZW50LmRpZENoYW5nZVJlYWR5U3RhdGUoc3RhdGVDaGFuZ2Uuc3RhdGUpOwor
ICAgICAgICB9KTsKKyAgICB9CisgICAgbV9idWZmZXJlZE1lc3NhZ2VzLmNsZWFyKCk7Cit9CisK
K2Jvb2wgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kU3RyaW5nRGF0YShjb25zdCBD
U3RyaW5nJiB0ZXh0KQoreworICAgIEdTVF9ERUJVRygiU2VuZGluZyBzdHJpbmcgJXMiLCB0ZXh0
LmRhdGEoKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5lbC5nZXQoKSwgInNl
bmQtc3RyaW5nIiwgdGV4dC5kYXRhKCkpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEdT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFJhd0RhdGEoY29uc3QgdWludDhfdCogZGF0
YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBhdXRvIGJ5dGVzID0gYWRvcHRHUmVmKGdfYnl0ZXNf
bmV3KGRhdGEsIGxlbmd0aCkpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2NoYW5uZWwu
Z2V0KCksICJzZW5kLWRhdGEiLCBieXRlcy5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjbG9zZSgpCit7CisgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5lbC5nZXQoKSwgImNsb3NlIik7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGVja1N0YXRlKCkKK3sKKyAgICBBU1NFUlQobV9j
bGllbnRMb2NrLmlzSGVsZCgpKTsKKworICAgIEdzdFdlYlJUQ0RhdGFDaGFubmVsU3RhdGUgY2hh
bm5lbFN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX2NoYW5uZWwuZ2V0KCksICJyZWFkeS1zdGF0
ZSIsICZjaGFubmVsU3RhdGUsIG51bGxwdHIpOworCisgICAgUlRDRGF0YUNoYW5uZWxTdGF0ZSBz
dGF0ZTsKKyAgICBzd2l0Y2ggKGNoYW5uZWxTdGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19E
QVRBX0NIQU5ORUxfU1RBVEVfTkVXOgorICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRBX0NIQU5ORUxf
U1RBVEVfQ09OTkVDVElORzoKKyAgICAgICAgc3RhdGUgPSBSVENEYXRhQ2hhbm5lbFN0YXRlOjpD
b25uZWN0aW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9XRUJSVENfREFUQV9DSEFO
TkVMX1NUQVRFX09QRU46CisgICAgICAgIHN0YXRlID0gUlRDRGF0YUNoYW5uZWxTdGF0ZTo6T3Bl
bjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFU
RV9DTE9TSU5HOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3RhdGU6OkNsb3Npbmc7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRBX0NIQU5ORUxfU1RBVEVf
Q0xPU0VEOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3RhdGU6OkNsb3NlZDsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFtX2hhc0NsaWVudCkgeworICAgICAgICBH
U1RfREVCVUcoIk5vIGNsaWVudCB5ZXQsIHF1ZXVlaW5nIHN0YXRlIik7CisgICAgICAgIG1fYnVm
ZmVyZWRNZXNzYWdlcy5hcHBlbmQoU3RhdGVDaGFuZ2UgeyBzdGF0ZSwgeyB9IH0pOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR1NUX0RFQlVHKCJEaXNwYXRjaGluZyBzdGF0ZSBjaGFuZ2UgdG8gJWQiLCBzdGF0aWNf
Y2FzdDxpbnQ+KHN0YXRlKSk7CisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50LCBzdGF0
ZV0geworICAgICAgICBjbGllbnQtPmRpZENoYW5nZVJlYWR5U3RhdGUoc3RhdGUpOworICAgIH0p
OworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6cmVhZHlTdGF0ZUNoYW5n
ZWQoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKyAgICBjaGVja1N0
YXRlKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbk1lc3NhZ2VE
YXRhKEdCeXRlcyogYnl0ZXMpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9
OworCisgICAgaWYgKCFtX2hhc0NsaWVudCkgeworICAgICAgICBtX2J1ZmZlcmVkTWVzc2FnZXMu
YXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGJ5dGVzKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBnc2l6ZSBz
aXplID0gMDsKKyAgICBjb25zdCBhdXRvKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1
aW50OF90Kj4oZ19ieXRlc19nZXRfZGF0YShieXRlcywgJnNpemUpKTsKKyAgICBwb3N0VGFzayhb
Y2xpZW50ID0gbV9jbGllbnQsIGRhdGEsIHNpemVdIHsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNl
aXZlUmF3RGF0YShkYXRhLCBzaXplKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRh
Q2hhbm5lbEhhbmRsZXI6Om9uTWVzc2FnZVN0cmluZyhjaGFyKiBzdHJpbmcpCit7CisgICAgTG9j
a2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9OworCisgICAgR1NUX0RFQlVHKCJJbmNvbWluZyBz
dHJpbmc6ICVzIiwgc3RyaW5nKTsKKyAgICBDU3RyaW5nIGJ1ZmZlcihzdHJpbmcsIHN0cmxlbihz
dHJpbmcpKTsKKyAgICBpZiAoIW1faGFzQ2xpZW50KSB7CisgICAgICAgIEdTVF9ERUJVRygiTm8g
Y2xpZW50IHlldCwga2VlcGluZyBhcyBidWZmZXJlZCBtZXNzYWdlIik7CisgICAgICAgIG1fYnVm
ZmVyZWRNZXNzYWdlcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChidWZmZXIpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdTVF9ERUJVRygiRGlzcGF0Y2hpbmcgcGF5bG9hZCIpOworICAgIHBvc3RUYXNrKFtjbGll
bnQgPSBtX2NsaWVudCwgYnVmZmVyID0gV1RGTW92ZShidWZmZXIpXSB7CisgICAgICAgIGNsaWVu
dC0+ZGlkUmVjZWl2ZVN0cmluZ0RhdGEoU3RyaW5nOjpmcm9tVVRGOChidWZmZXIpKTsKKyAgICAg
ICAgR1NUX0RFQlVHKCJEb25lIik7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNo
YW5uZWxIYW5kbGVyOjpvbkVycm9yKEdFcnJvciogZXJyb3IpCit7CisgICAgTG9ja2VyIGxvY2tl
ciB7IG1fY2xpZW50TG9jayB9OworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsK
KworICAgIEdTVF9XQVJOSU5HKCJHb3QgZGF0YS1jaGFubmVsIGVycm9yICVzIiwgZXJyb3ItPm1l
c3NhZ2UpOworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudCwgZXJyb3JdIHsKKyAgICAg
ICAgaWYgKCFjbGllbnQgfHwgIWVycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGF1dG8gcnRjRXJyb3IgPSB0b1JUQ0Vycm9yKGVycm9yKTsKKyAgICAgICAgaWYgKCFydGNFcnJv
cikKKyAgICAgICAgICAgIHJ0Y0Vycm9yID0gUlRDRXJyb3I6OmNyZWF0ZShSVENFcnJvcjo6SW5p
dCB7IFJUQ0Vycm9yRGV0YWlsVHlwZTo6RGF0YUNoYW5uZWxGYWlsdXJlLCB7IH0sIHsgfSwgeyB9
LCB7IH0gfSwgeyB9KTsKKyAgICAgICAgY2xpZW50LT5kaWREZXRlY3RFcnJvcihydGNFcnJvci5y
ZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXI6Om9uQnVmZmVyZWRBbW91bnRMb3coKQoreworICAgIExvY2tlciBsb2NrZXIgeyBt
X2NsaWVudExvY2sgfTsKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBwb3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnRdIHsKKyAgICAgICAgLy8gRklYTUU6IFBhc3Mg
YW1vdW50IHRvIGhhbmRsZXIgaW5zdGVhZCBvZiAwLgorICAgICAgICBjbGllbnQtPmJ1ZmZlcmVk
QW1vdW50SXNEZWNyZWFzaW5nKDApOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6cG9zdFRhc2soRnVuY3Rpb248dm9pZCgpPiYmIGZ1bmN0aW9uKQorewor
ICAgIEFTU0VSVChtX2NsaWVudExvY2suaXNIZWxkKCkpOworCisgICAgaWYgKCFtX2NvbnRleHRJ
ZGVudGlmaWVyKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoV1RGTW92ZShmdW5jdGlvbikp
OworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQ6OnBv
c3RUYXNrVG8obV9jb250ZXh0SWRlbnRpZmllciwgV1RGTW92ZShmdW5jdGlvbikpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzMwYTAyNjQ0OTNlMjdmYzBhNDY3YjdmNmNhOGJhYzcwYzg5NDA2MAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oCkBAIC0wLDAgKzEsODggQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1VuaXF1
ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsSGFuZGxlci5oIgorI2lu
Y2x1ZGUgIlJUQ0RhdGFDaGFubmVsU3RhdGUuaCIKKyNpbmNsdWRlICJTaGFyZWRCdWZmZXIuaCIK
KworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorI2lu
Y2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRG9j
dW1lbnQ7CitjbGFzcyBSVENEYXRhQ2hhbm5lbEV2ZW50OworY2xhc3MgUlRDRGF0YUNoYW5uZWxI
YW5kbGVyQ2xpZW50Oworc3RydWN0IFJUQ0RhdGFDaGFubmVsSW5pdDsKKworY2xhc3MgR1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyIGZpbmFsIDogcHVibGljIFJUQ0RhdGFDaGFubmVsSGFuZGxl
ciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQg
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+
JiYpOworICAgIH5HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoKTsKKworICAgIHN0YXRpYyBH
VW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZnJvbVJUQ0RhdGFDaGFubmVsSW5pdChjb25zdCBSVENE
YXRhQ2hhbm5lbEluaXQmKTsKKyAgICBzdGF0aWMgUmVmPFJUQ0RhdGFDaGFubmVsRXZlbnQ+IGNo
YW5uZWxFdmVudChEb2N1bWVudCYsIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+JiYpOwor
Citwcm90ZWN0ZWQ6CisgICAgdm9pZCBvbk1lc3NhZ2VEYXRhKEdCeXRlcyopOworICAgIHZvaWQg
b25NZXNzYWdlU3RyaW5nKGNoYXIqKTsKKyAgICB2b2lkIG9uRXJyb3IoR0Vycm9yKik7CisgICAg
dm9pZCBvbkJ1ZmZlcmVkQW1vdW50TG93KCk7CisgICAgdm9pZCByZWFkeVN0YXRlQ2hhbmdlZCgp
OworCitwcml2YXRlOgorICAgIC8vIFJUQ0RhdGFDaGFubmVsSGFuZGxlciBBUEkKKyAgICB2b2lk
IHNldENsaWVudChSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQmLCBTY3JpcHRFeGVjdXRpb25D
b250ZXh0SWRlbnRpZmllcikgZmluYWw7CisgICAgYm9vbCBzZW5kU3RyaW5nRGF0YShjb25zdCBD
U3RyaW5nJikgZmluYWw7CisgICAgYm9vbCBzZW5kUmF3RGF0YShjb25zdCB1aW50OF90Kiwgc2l6
ZV90KSBmaW5hbDsKKyAgICB2b2lkIGNsb3NlKCkgZmluYWw7CisKKyAgICB2b2lkIGNoZWNrU3Rh
dGUoKTsKKyAgICB2b2lkIHBvc3RUYXNrKEZ1bmN0aW9uPHZvaWQoKT4mJik7CisKKyAgICBzdHJ1
Y3QgU3RhdGVDaGFuZ2UgeworICAgICAgICBSVENEYXRhQ2hhbm5lbFN0YXRlIHN0YXRlOworICAg
ICAgICBzdGQ6Om9wdGlvbmFsPEdFcnJvcio+IGVycm9yOworICAgIH07CisgICAgdXNpbmcgTWVz
c2FnZSA9IHN0ZDo6dmFyaWFudDxTdGF0ZUNoYW5nZSwgU3RyaW5nLCBSZWY8RnJhZ21lbnRlZFNo
YXJlZEJ1ZmZlcj4+OworICAgIHVzaW5nIFBlbmRpbmdNZXNzYWdlcyA9IFZlY3RvcjxNZXNzYWdl
PjsKKworICAgIExvY2sgbV9jbGllbnRMb2NrOworICAgIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNo
YW5uZWw+IG1fY2hhbm5lbDsKKyAgICBXZWFrUHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVu
dD4gbV9jbGllbnQgV1RGX0dVQVJERURfQllfTE9DSyhtX2NsaWVudExvY2spIHsgbnVsbHB0ciB9
OworICAgIGJvb2wgbV9oYXNDbGllbnQgV1RGX0dVQVJERURfQllfTE9DSyhtX2NsaWVudExvY2sp
IHsgZmFsc2UgfTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllciBtX2NvbnRl
eHRJZGVudGlmaWVyOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IG1fcHJldmlvdXNCdWZm
ZXJlZEFtb3VudDsKKyAgICBQZW5kaW5nTWVzc2FnZXMgbV9idWZmZXJlZE1lc3NhZ2VzIFdURl9H
VUFSREVEX0JZX0xPQ0sobV9jbGllbnRMb2NrKTsKKworICAgIExvY2sgbV9vcGVuTG9jazsKKyAg
ICBDb25kaXRpb24gbV9vcGVuQ29uZGl0aW9uIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vcGVuTG9j
ayk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjFmYzAxNjA0YWI0MTA0NjRkZmQ0MzFjNzRiOTAz
OWEyNDAzZjQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuY3BwCkBAIC0w
LDAgKzEsOTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorCisj
aWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJU
Q1V0aWxzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5k
KGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mIHRyYW5zcG9ydCkKKyAgICA6
IG1fYmFja2VuZCh0cmFuc3BvcnQpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKK30KKworR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6
On5HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgdW5yZWdpc3RlckNsaWVu
dCgpOworfQorCitVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIHJldHVybiBt
YWtlVW5pcXVlUmVmPEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ+KG1fYmFja2VuZCk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KENs
aWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0g
Y2xpZW50OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCksICJu
b3RpZnk6OnN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFuZ2VkKCk7CisgICAgfSks
IHRoaXMpOworfQorCit2b2lkIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lz
dGVyQ2xpZW50KCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEo
bV9iYWNrZW5kLmdldCgpLCB0aGlzKTsKKyAgICBtX2NsaWVudC5yZXNldCgpOworfQorCit2b2lk
IEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQoKQoreworICAgIGNh
bGxPbk1haW5UaHJlYWRBbmRXYWl0KFt0aGlzXSB7CisgICAgICAgIGlmICghbV9jbGllbnQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiByZW1vdGVD
ZXJ0aWZpY2F0ZTsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBjZXJ0aWZpY2F0ZTsKKyAg
ICAgICAgR3N0V2ViUlRDRFRMU1RyYW5zcG9ydFN0YXRlIHN0YXRlOworCisgICAgICAgIGdfb2Jq
ZWN0X2dldChtX2JhY2tlbmQuZ2V0KCksICJzdGF0ZSIsICZzdGF0ZSwgInJlbW90ZS1jZXJ0aWZp
Y2F0ZSIsICZyZW1vdGVDZXJ0aWZpY2F0ZS5vdXRQdHIoKSwgImNlcnRpZmljYXRlIiwgJmNlcnRp
ZmljYXRlLm91dFB0cigpLCBudWxscHRyKTsKKworICAgICAgICBWZWN0b3I8UmVmPEpTQzo6QXJy
YXlCdWZmZXI+PiBjZXJ0aWZpY2F0ZXM7CisgICAgICAgIGNlcnRpZmljYXRlcy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KDIpOworICAgICAgICBpZiAocmVtb3RlQ2VydGlmaWNhdGUpIHsKKyAgICAg
ICAgICAgIGF1dG8gcmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcgPSBtYWtlU3RyaW5nKHJlbW90ZUNl
cnRpZmljYXRlLmdldCgpKTsKKyAgICAgICAgICAgIGF1dG8ganNSZW1vdGVDZXJ0aWZpY2F0ZSA9
IEpTQzo6QXJyYXlCdWZmZXI6OmNyZWF0ZShyZW1vdGVDZXJ0aWZpY2F0ZVN0cmluZy5jaGFyYWN0
ZXJzOCgpLCByZW1vdGVDZXJ0aWZpY2F0ZVN0cmluZy5zaXplSW5CeXRlcygpKTsKKyAgICAgICAg
ICAgIGNlcnRpZmljYXRlcy5hcHBlbmQoV1RGTW92ZShqc1JlbW90ZUNlcnRpZmljYXRlKSk7CisK
KyAgICAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVTdHJpbmcgPSBtYWtlU3RyaW5nKGNlcnRpZmlj
YXRlLmdldCgpKTsKKyAgICAgICAgICAgIGF1dG8ganNDZXJ0aWZpY2F0ZSA9IEpTQzo6QXJyYXlC
dWZmZXI6OmNyZWF0ZShjZXJ0aWZpY2F0ZVN0cmluZy5jaGFyYWN0ZXJzOCgpLCBjZXJ0aWZpY2F0
ZVN0cmluZy5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgICAgIGNlcnRpZmljYXRlcy5hcHBlbmQo
V1RGTW92ZShqc0NlcnRpZmljYXRlKSk7CisgICAgICAgIH0KKyAgICAgICAgKCptX2NsaWVudCkt
Pm9uU3RhdGVDaGFuZ2VkKHRvUlRDRHRsc1RyYW5zcG9ydFN0YXRlKHN0YXRlKSwgV1RGTW92ZShj
ZXJ0aWZpY2F0ZXMpKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWMyNTRiYzg0N2RhNzkxNjdiOGZjMTk0OWIzMDRlMTc4N2NlZDVhMAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAi
UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5k
IGZpbmFsIDogcHVibGljIFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kLCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ+IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mKTsKKyAgICB+
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQoKTsKKworICAgIHZvaWQgc3RhdGVDaGFuZ2Vk
KCk7CisKK3ByaXZhdGU6CisgICAgLy8gUlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQKKyAgICBjb25z
dCB2b2lkKiBiYWNrZW5kKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9
CisgICAgVW5pcXVlUmVmPFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQ+IGljZVRyYW5zcG9ydEJhY2tl
bmQoKSBmaW5hbDsKKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAg
IHZvaWQgdW5yZWdpc3RlckNsaWVudCgpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENE
VExTVHJhbnNwb3J0PiBtX2JhY2tlbmQ7CisgICAgc3RkOjpvcHRpb25hbDxXZWFrUHRyPENsaWVu
dD4+IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJh
bnNwb3J0QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4wOTRl
NmIzMzc4MjA0NDNiMTgzOTc5NjE4ZmY4ZmEyM2I2MmY1MTdjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNl
VHJhbnNwb3J0QmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMjQgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1Vu
aXF1ZVB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1lckljZVRyYW5zcG9y
dEJhY2tlbmQ6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RX
ZWJSVENEVExTVHJhbnNwb3J0PiYgdHJhbnNwb3J0KQorICAgIDogbV9iYWNrZW5kKHRyYW5zcG9y
dCkKK3sKKyAgICBBU1NFUlQobV9iYWNrZW5kKTsKKworICAgIGljZVRyYW5zcG9ydENoYW5nZWQo
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9iYWNrZW5kLmdldCgpLCAibm90aWZ5
Ojp0cmFuc3BvcnQiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5k
KiBiYWNrZW5kKSB7CisgICAgICAgIGJhY2tlbmQtPmljZVRyYW5zcG9ydENoYW5nZWQoKTsKKyAg
ICB9KSwgdGhpcyk7Cit9CisKK0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFt
ZXJJY2VUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICBpZiAoR19JU19PQkpFQ1QobV9pY2VUcmFu
c3BvcnQuZ2V0KCkpKQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Rh
dGEobV9pY2VUcmFuc3BvcnQuZ2V0KCksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfYnlfZGF0YShtX2JhY2tlbmQuZ2V0KCksIHRoaXMpOworfQorCit2b2lkIEdTdHJl
YW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydENoYW5nZWQoKQoreworICAgIGlm
IChHX0lTX09CSkVDVChtX2ljZVRyYW5zcG9ydC5nZXQoKSkpCisgICAgICAgIGdfc2lnbmFsX2hh
bmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2ljZVRyYW5zcG9ydC5nZXQoKSwgdGhpcyk7CisK
KyAgICBnX29iamVjdF9nZXQobV9iYWNrZW5kLmdldCgpLCAidHJhbnNwb3J0IiwgJm1faWNlVHJh
bnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NBTExCQUNLKCtbXShH
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKiBiYWNrZW5kKSB7CisgICAgICAgIGJhY2tlbmQt
PnN0YXRlQ2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV9pY2VUcmFuc3BvcnQuZ2V0KCksICJub3RpZnk6OmdhdGhlcmluZy1zdGF0ZSIsIEdf
Q0FMTEJBQ0soK1tdKEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAg
ICAgICAgYmFja2VuZC0+Z2F0aGVyaW5nU3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOwor
fQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KENs
aWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0g
Y2xpZW50OworCisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHRyYW5zcG9ydFN0YXRl
OworICAgIEdzdFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIGdhdGhlcmluZ1N0YXRlOworICAgIGdf
b2JqZWN0X2dldChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0YXRl
LCAiZ2F0aGVyaW5nLXN0YXRlIiwgJmdhdGhlcmluZ1N0YXRlLCBudWxscHRyKTsKKworICAgIC8v
IFdlIHN0YXJ0IG9ic2VydmluZyBhIGJpdCBsYXRlIGFuZCBtaWdodCBtaXNzIHRoZSBjaGVja2lu
ZyBzdGF0ZS4gU3ludGhlc2l6ZSBpdCBhcyBuZWVkZWQuCisgICAgaWYgKHRyYW5zcG9ydFN0YXRl
ID4gR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DSEVDS0lORyAmJiB0cmFuc3BvcnRT
dGF0ZSAhPSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NMT1NFRCkgeworICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH1dIHsK
KyAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2NsaWVudCkKKyAgICAgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5tX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQoUlRDSWNlVHJhbnNwb3J0
U3RhdGU6OkNoZWNraW5nKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIGNhbGxPbk1haW5UaHJl
YWQoW3Byb3RlY3RlZFRoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfSwgdHJhbnNwb3J0U3RhdGUsIGdh
dGhlcmluZ1N0YXRlXSB7CisgICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9jbGllbnQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fY2xpZW50LT5vblN0
YXRlQ2hhbmdlZCh0b1JUQ0ljZVRyYW5zcG9ydFN0YXRlKHRyYW5zcG9ydFN0YXRlKSk7CisgICAg
ICAgIHByb3RlY3RlZFRoaXMtPm1fY2xpZW50LT5vbkdhdGhlcmluZ1N0YXRlQ2hhbmdlZCh0b1JU
Q0ljZUdhdGhlcmluZ1N0YXRlKGdhdGhlcmluZ1N0YXRlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNsaWVudCgpCit7CisgICAg
QVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC5jbGVhcigpOworfQorCit2b2lkIEdTdHJl
YW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX2Ns
aWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRl
IHRyYW5zcG9ydFN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX2ljZVRyYW5zcG9ydC5nZXQoKSwg
InN0YXRlIiwgJnRyYW5zcG9ydFN0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFk
KFtwcm90ZWN0ZWRUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH0sIHRyYW5zcG9ydFN0YXRlXSB7Cisg
ICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fY2xpZW50LT5vblN0YXRlQ2hhbmdlZCh0b1JUQ0lj
ZVRyYW5zcG9ydFN0YXRlKHRyYW5zcG9ydFN0YXRlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6Z2F0aGVyaW5nU3RhdGVDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBHc3RXZWJSVENJQ0VHYXRo
ZXJpbmdTdGF0ZSBnYXRoZXJpbmdTdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV9pY2VUcmFuc3Bv
cnQuZ2V0KCksICJnYXRoZXJpbmctc3RhdGUiLCAmZ2F0aGVyaW5nU3RhdGUsIG51bGxwdHIpOwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfSwg
Z2F0aGVyaW5nU3RhdGVdIHsKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2NsaWVudCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9jbGllbnQtPm9u
R2F0aGVyaW5nU3RhdGVDaGFuZ2VkKHRvUlRDSWNlR2F0aGVyaW5nU3RhdGUoZ2F0aGVyaW5nU3Rh
dGUpKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJh
bnNwb3J0QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjZmZWE1MjBi
YmE5MTBmZDE3ZjMwMDc5ODU1MjdhOTg2ODhmNGIwN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFu
c3BvcnRCYWNrZW5kLmgKQEAgLTAsMCArMSw1NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAi
UlRDSWNlVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCBm
aW5hbCA6IHB1YmxpYyBSVENJY2VUcmFuc3BvcnRCYWNrZW5kLCBwdWJsaWMgQ2FuTWFrZVdlYWtQ
dHI8R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworCitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+Jik7CisgICAgfkdTdHJl
YW1lckljZVRyYW5zcG9ydEJhY2tlbmQoKTsKKworICAgIHZvaWQgc3RhdGVDaGFuZ2VkKCk7Cisg
ICAgdm9pZCBnYXRoZXJpbmdTdGF0ZUNoYW5nZWQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENJ
Y2VUcmFuc3BvcnRCYWNrZW5kCisgICAgY29uc3Qgdm9pZCogYmFja2VuZCgpIGNvbnN0IGZpbmFs
IHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgdm9pZCByZWdpc3RlckNsaWVudChD
bGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHVucmVnaXN0ZXJDbGllbnQoKSBmaW5hbDsKKworICAg
IHZvaWQgaWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENEVExT
VHJhbnNwb3J0PiBtX2JhY2tlbmQ7CisgICAgR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+
IG1faWNlVHJhbnNwb3J0OworICAgIFdlYWtQdHI8Q2xpZW50PiBtX2NsaWVudDsKK307CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzQ3MWMxMTQyMGNlOWZhYWE2ZmFiNzRiODk2ODFhZjQ2MGYyZWJl
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuY3BwCkBAIC0wLDAgKzEsMTI0NyBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lck1lZGlhRW5kcG9pbnQuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorCisjaW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24u
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2Vu
ZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiSlNET01Q
cm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbC5oIgor
I2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsRXZlbnQuaCIKKyNpbmNsdWRlICJSVENJY2VDYW5kaWRh
dGUuaCIKKyNpbmNsdWRlICJSVENPZmZlck9wdGlvbnMuaCIKKyNpbmNsdWRlICJSVENQZWVyQ29u
bmVjdGlvbi5oIgorI2luY2x1ZGUgIlJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVk
ZSAiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiUlRDU3RhdHNSZXBvcnQuaCIK
KyNpbmNsdWRlICJSVENUcmFja0V2ZW50LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1
ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVy
LmgiCisKKyNpbmNsdWRlIDxnc3Qvc2RwL3NkcC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNv
dXJjZVByaW9yaXR5Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVy
c2lvbi5oPgorCitHU1RfREVCVUdfQ0FURUdPUlkod2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1
Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVn
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludChHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmIHBlZXJDb25u
ZWN0aW9uKQorICAgIDogbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCisg
ICAgLCBtX3N0YXRzQ29sbGVjdG9yKEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpjcmVhdGUoKSkK
KyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAsIG1fc3RhdHNMb2dUaW1lcigqdGhpcywg
JkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZykKKyAgICAsIG1f
bG9nZ2VyKHBlZXJDb25uZWN0aW9uLmxvZ2dlcigpKQorICAgICwgbV9sb2dJZGVudGlmaWVyKHBl
ZXJDb25uZWN0aW9uLmxvZ0lkZW50aWZpZXIoKSkKKyNlbmRpZgoreworICAgIGVuc3VyZUdTdHJl
YW1lckluaXRpYWxpemVkKCk7CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdSZWdp
c3RlcmVkRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBbXSB7
CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRf
ZGVidWcsICJ3ZWJraXR3ZWJydGNlbmRwb2ludCIsIDAsICJXZWJLaXQgV2ViUlRDIGVuZC1wb2lu
dCIpOworICAgIH0pOworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYWxp
emVQaXBlbGluZSgpCit7CisgICAgc3RhdGljIGludCBuUGlwZWxpbmUgPSAwOworICAgIGF1dG8g
cGlwZWxpbmVOYW1lID0gbWFrZVN0cmluZygid2Via2l0LXdlYnJ0LXBpcGVsaW5lLSIsIG5QaXBl
bGluZSk7CisgICAgbV9waXBlbGluZSA9IGdzdF9waXBlbGluZV9uZXcocGlwZWxpbmVOYW1lLmFz
Y2lpKCkuZGF0YSgpKTsKKworICAgIGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9w
aXBlbGluZS5nZXQoKSwgW3RoaXNdKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpIHsKKyAgICAgICAgaGFu
ZGxlTWVzc2FnZShtZXNzYWdlKTsKKyAgICB9KTsKKworICAgIGF1dG8gYmluTmFtZSA9IG1ha2VT
dHJpbmcoIndlYmtpdC13ZWJydGNiaW4tIiwgblBpcGVsaW5lKyspOworICAgIG1fd2VicnRjQmlu
ID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoIndlYnJ0Y2JpbiIsIGJpbk5hbWUuYXNjaWkoKS5kYXRh
KCkpOworICAgIGlmICghbV93ZWJydGNCaW4pCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAg
IG1fc3RhdHNDb2xsZWN0b3ItPnNldEVsZW1lbnQobV93ZWJydGNCaW4uZ2V0KCkpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm5vdGlmeTo6aWNlLWNv
bm5lY3Rpb24tc3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBl
bmRQb2ludCkgeworICAgICAgICBlbmRQb2ludC0+b25JY2VDb25uZWN0aW9uQ2hhbmdlKCk7Cisg
ICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5n
ZXQoKSwgIm5vdGlmeTo6aWNlLWdhdGhlcmluZy1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50KSB7CisgICAgICAgIGVuZFBvaW50LT5vbkljZUdh
dGhlcmluZ0NoYW5nZSgpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJvbi1uZWdvdGlhdGlvbi1uZWVkZWQiLCBHX0NBTExC
QUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCkgeworICAgICAgICBlbmRQ
b2ludC0+b25OZWdvdGlhdGlvbk5lZWRlZCgpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJvbi1pY2UtY2FuZGlkYXRlIiwg
R19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQsIGd1aW50IHNk
cE1MaW5lSW5kZXgsIGdjaGFyYXJyYXkgY2FuZGlkYXRlKSB7CisgICAgICAgIGVuZFBvaW50LT5v
bkljZUNhbmRpZGF0ZShzZHBNTGluZUluZGV4LCBjYW5kaWRhdGUpOworICAgIH0pLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJwYWQtYWRk
ZWQiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCwgR3N0
UGFkKiBwYWQpIHsKKyAgICAgICAgLy8gSWdub3JlIG91dGdvaW5nIHBhZCBub3RpZmljYXRpb25z
LgorICAgICAgICBpZiAoR1NUX1BBRF9ESVJFQ1RJT04ocGFkKSAhPSBHU1RfUEFEX1NSQykKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbcHJv
dGVjdGVkVGhpcyA9IFJlZigqZW5kUG9pbnQpLCBwYWRdIHsKKyAgICAgICAgICAgIGlmIChwcm90
ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPmFkZFJlbW90ZVN0cmVhbShwYWQpOworICAgICAgICB9KTsK
KyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmlu
LmdldCgpLCAicGFkLXJlbW92ZWQiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBv
aW50KiBlbmRQb2ludCwgR3N0UGFkKiBwYWQpIHsKKyAgICAgICAgLy8gSWdub3JlIG91dGdvaW5n
IHBhZCBub3RpZmljYXRpb25zLgorICAgICAgICBpZiAoR1NUX1BBRF9ESVJFQ1RJT04ocGFkKSAh
PSBHU1RfUEFEX1NSQykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBpZiAoZW5kUG9p
bnQtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBlbmRQb2ludC0+
cmVtb3ZlUmVtb3RlU3RyZWFtKHBhZCk7CisgICAgfSksIHRoaXMpOworCisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAib24tZGF0YS1jaGFubmVsIiwgR19D
QUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQsIEdzdFdlYlJUQ0Rh
dGFDaGFubmVsKiBjaGFubmVsKSB7CisgICAgICAgIGVuZFBvaW50LT5vbkRhdGFDaGFubmVsKGNo
YW5uZWwpOworICAgIH0pLCB0aGlzKTsKKworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVCht
X3BpcGVsaW5lLmdldCgpKSwgbV93ZWJydGNCaW4uZ2V0KCkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp+R1N0cmVhbWVyTWVkaWFFbmRwb2ludCgpCit7
CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIHRlYXJkb3duUGlwZWxpbmUoKTsKK30KKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp0ZWFyZG93blBpcGVsaW5lKCkKK3sKKyNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKKyAg
ICBtX3N0YXRzQ29sbGVjdG9yLT5zZXRFbGVtZW50KG51bGxwdHIpOworCisgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fcGlwZWxpbmUuZ2V0KCksIHRoaXMpOworICAg
IGRpc2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5nZXQoKSk7Cisg
ICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxM
KTsKKworICAgIG1fc291cmNlcy5jbGVhcigpOworICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5jbGVh
cigpOworICAgIG1fcmVtb3RlU3RyZWFtc0J5SWQuY2xlYXIoKTsKKyAgICBtX3dlYnJ0Y0JpbiA9
IG51bGxwdHI7CisgICAgbV9waXBlbGluZSA9IG51bGxwdHI7Cit9CisKK2Jvb2wgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBtZXNzYWdlKQoreworICAg
IHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgeworICAgIGNhc2UgR1NUX01FU1NB
R0VfRU9TOgorICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJ
Tl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsICJlb3Mi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FTEVNRU5UOiB7CisgICAg
ICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBnc3RfbWVzc2FnZV9nZXRfc3RydWN0dXJlKG1lc3NhZ2Up
OworICAgICAgICBpZiAoIWdfc3RyY21wMChnc3Rfc3RydWN0dXJlX2dldF9uYW1lKGRhdGEpLCAi
R3N0QmluRm9yd2FyZGVkIikpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R3N0TWVzc2FnZT4gc3Vi
TWVzc2FnZTsKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KGRhdGEsICJtZXNzYWdlIiwg
R1NUX1RZUEVfTUVTU0FHRSwgJnN1Yk1lc3NhZ2Uub3V0UHRyKCksIG51bGxwdHIpOworICAgICAg
ICAgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUoc3ViTWVzc2FnZS5nZXQoKSkgPT0gR1NUX01FU1NB
R0VfRU9TKQorICAgICAgICAgICAgICAgIGRpc3Bvc2VFbGVtZW50Q2hhaW4oR1NUX0VMRU1FTlRf
Q0FTVChHU1RfTUVTU0FHRV9TUkMoc3ViTWVzc2FnZS5nZXQoKSkpKTsKKyAgICAgICAgfQorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRpc3Bv
c2VFbGVtZW50Q2hhaW4oR3N0RWxlbWVudCogZWxlbWVudCkKK3sKKyAgICBHU1RfREVCVUdfT0JK
RUNUKG1fcGlwZWxpbmUuZ2V0KCksICJHb3QgZWxlbWVudCBFT1MgbWVzc2FnZSBmcm9tICUiIEdT
VF9QVFJfRk9STUFULCBlbGVtZW50KTsKKworICAgIGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9l
bGVtZW50X2dldF9zdGF0aWNfcGFkKGVsZW1lbnQsICJzaW5rIikpOworICAgIGF1dG8gcGVlciA9
IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKHBhZC5nZXQoKSkpOworCisgICAgZ3N0X2VsZW1l
bnRfc2V0X2xvY2tlZF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCB0cnVlKTsKKyAgICBnc3RfcGFk
X3VubGluayhwZWVyLmdldCgpLCBwYWQuZ2V0KCkpOworICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9C
SU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgZWxlbWVudCk7CisgICAgZ3N0X2VsZW1lbnRfcmVs
ZWFzZV9yZXF1ZXN0X3BhZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgcGVlci5nZXQoKSk7CisgICAgZ3N0
X2VsZW1lbnRfc2V0X3N0YXRlKGVsZW1lbnQsIEdTVF9TVEFURV9OVUxMKTsKKyAgICBnc3RfZWxl
bWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIGZhbHNlKTsKK30KKworYm9v
bCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQoreworICAgIGlmIChtX3BpcGVsaW5lKQorICAg
ICAgICB0ZWFyZG93blBpcGVsaW5lKCk7CisKKyAgICBpZiAoIWluaXRpYWxpemVQaXBlbGluZSgp
KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJ1bmRsZVBvbGljeSA9IGJ1bmRs
ZVBvbGljeUZyb21Db25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pOworICAgIGF1dG8gaWNlVHJh
bnNwb3J0UG9saWN5ID0gaWNlVHJhbnNwb3J0UG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oY29uZmln
dXJhdGlvbik7CisgICAgZ19vYmplY3Rfc2V0KG1fd2VicnRjQmluLmdldCgpLCAiYnVuZGxlLXBv
bGljeSIsIGJ1bmRsZVBvbGljeSwgImljZS10cmFuc3BvcnQtcG9saWN5IiwgaWNlVHJhbnNwb3J0
UG9saWN5LCBudWxscHRyKTsKKworICAgIGZvciAoYXV0byYgc2VydmVyIDogY29uZmlndXJhdGlv
bi5pY2VTZXJ2ZXJzKSB7CisgICAgICAgIGJvb2wgc3R1blNldCA9IGZhbHNlOworICAgICAgICBm
b3IgKGF1dG8mIHVybCA6IHNlcnZlci51cmxzKSB7CisgICAgICAgICAgICBpZiAodXJsLnByb3Rv
Y29sKCkuc3RhcnRzV2l0aCgidHVybiIpKSB7CisgICAgICAgICAgICAgICAgYXV0byB2YWxpZCA9
IHVybC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKS5yZXBsYWNlKCJ0dXJuOiIsICJ0dXJuOi8vIiku
cmVwbGFjZSgidHVybnM6IiwgInR1cm5zOi8vIik7CisgICAgICAgICAgICAgICAgVVJMIHZhbGlk
VVJMKFVSTCgpLCB2YWxpZCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGxpYm5pY2UgY3Vy
cmVudGx5IGRvZXNuJ3Qgc2VlbSB0byBoYW5kbGUgSVB2NiBhZGRyZXNzZXMgdmVyeSB3ZWxsLgor
ICAgICAgICAgICAgICAgIGlmICh2YWxpZFVSTC5ob3N0KCkuc3RhcnRzV2l0aCgnWycpKQorICAg
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB2YWxpZFVSTC5zZXRV
c2VyKHNlcnZlci51c2VybmFtZSk7CisgICAgICAgICAgICAgICAgdmFsaWRVUkwuc2V0UGFzc3dv
cmQoc2VydmVyLmNyZWRlbnRpYWwpOworICAgICAgICAgICAgICAgIGJvb2wgcmVzdWx0ID0gZmFs
c2U7CisgICAgICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdl
dCgpLCAiYWRkLXR1cm4tc2VydmVyIiwgdmFsaWRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwg
JnJlc3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAg
ICAgIEdTVF9XQVJOSU5HKCJVbmFibGUgdG8gdXNlIFRVUk4gc2VydmVyOiAlcyIsIHZhbGlkVVJM
LnN0cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYg
KCFzdHVuU2V0ICYmIHVybC5wcm90b2NvbCgpLnN0YXJ0c1dpdGgoInN0dW4iKSkgeworICAgICAg
ICAgICAgICAgIGF1dG8gdmFsaWQgPSB1cmwuc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCkucmVwbGFj
ZSgic3R1bjoiLCAic3R1bjovLyIpOworICAgICAgICAgICAgICAgIFVSTCB2YWxpZFVSTChVUkwo
KSwgdmFsaWQpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBsaWJuaWNlIGN1cnJlbnRseSBk
b2Vzbid0IHNlZW0gdG8gaGFuZGxlIElQdjYgYWRkcmVzc2VzIHZlcnkgd2VsbC4KKyAgICAgICAg
ICAgICAgICBpZiAodmFsaWRVUkwuaG9zdCgpLnN0YXJ0c1dpdGgoJ1snKSkKKyAgICAgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdmFsaWRVUkwuc2V0VXNlcihzZXJ2
ZXIudXNlcm5hbWUpOworICAgICAgICAgICAgICAgIHZhbGlkVVJMLnNldFBhc3N3b3JkKHNlcnZl
ci5jcmVkZW50aWFsKTsKKyAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV93ZWJydGNCaW4u
Z2V0KCksICJzdHVuLXNlcnZlciIsIHZhbGlkVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG51
bGxwdHIpOworICAgICAgICAgICAgICAgIHN0dW5TZXQgPSB0cnVlOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gV0lQOiBodHRwczovL2dpdGxhYi5mcmVlZGVza3Rv
cC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3RzLzMwMgorICAg
IEdTVF9GSVhNRSgiJXp1IGN1c3RvbSBjZXJ0aWZpY2F0ZXMgbm90IHByb3BhZ2F0ZWQgdG8gd2Vi
cnRjYmluIiwgY29uZmlndXJhdGlvbi5jZXJ0aWZpY2F0ZXMuc2l6ZSgpKTsKKworICAgIGdzdF9l
bGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7Cisg
ICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiRW5kLXBvaW50IHJlYWR5Iik7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVz
dGFydEljZSgpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAicmVz
dGFydGluZyBJQ0UiKTsKKyAgICAvLyBXSVAgaW4gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Au
b3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvLS9tZXJnZV9yZXF1ZXN0cy8xODc3CisgICAg
R1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IG9wdGlvbnMoZ3N0X3N0cnVjdHVyZV9uZXcoIndlYnJ0
Y2Jpbi1vZmZlci1vcHRpb25zIiwgImljZS1yZXN0YXJ0IiwgR19UWVBFX0JPT0xFQU4sIFRSVUUs
IG51bGxwdHIpKTsKKyAgICBpbml0aWF0ZSh0cnVlLCBXVEZNb3ZlKG9wdGlvbnMpKTsKK30KKwor
c3RhdGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJUQ1NkcFR5cGUsIFN0cmluZz4+IGZldGNo
RGVzY3JpcHRpb24oR3N0RWxlbWVudCogd2VicnRjQmluLCBjb25zdCBjaGFyKiBuYW1lKQorewor
ICAgIGlmICghd2VicnRjQmluKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgR1VuaXF1ZU91
dFB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IGRlc2NyaXB0aW9uOworICAgIGdfb2Jq
ZWN0X2dldCh3ZWJydGNCaW4sIG1ha2VTdHJpbmcobmFtZSwgIi1kZXNjcmlwdGlvbiIpLnV0Zjgo
KS5kYXRhKCksICZkZXNjcmlwdGlvbi5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgaWYgKCFkZXNj
cmlwdGlvbikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc2Rw
U3RyaW5nKGdzdF9zZHBfbWVzc2FnZV9hc190ZXh0KGRlc2NyaXB0aW9uLT5zZHApKTsKKyAgICBH
U1RfVFJBQ0VfT0JKRUNUKHdlYnJ0Y0JpbiwgIiVzLWRlc2NyaXB0aW9uIFNEUDogJXMiLCBuYW1l
LCBzZHBTdHJpbmcuZ2V0KCkpOworICAgIHJldHVybiB7IHsgZnJvbVNlc3Npb25EZXNjcmlwdGlv
blR5cGUoZGVzY3JpcHRpb24uZ2V0KCkpLCBzZHBTdHJpbmcuZ2V0KCkgfSB9OworfQorCitzdGF0
aWMgR3N0V2ViUlRDU2lnbmFsaW5nU3RhdGUgZmV0Y2hTaWduYWxpbmdTdGF0ZShHc3RFbGVtZW50
KiB3ZWJydGNCaW4pCit7CisgICAgR3N0V2ViUlRDU2lnbmFsaW5nU3RhdGUgc3RhdGU7CisgICAg
Z19vYmplY3RfZ2V0KHdlYnJ0Y0JpbiwgInNpZ25hbGluZy1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0
cik7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIEdVbmlxdWVQdHI8Y2hhcj4g
ZGVzYyhnX2VudW1fdG9fc3RyaW5nKEdTVF9UWVBFX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEUsIHN0
YXRlKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVCh3ZWJydGNCaW4sICJTaWduYWxpbmcgc3RhdGUg
c2V0IHRvICVzIiwgZGVzYy5nZXQoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gc3RhdGU7Cit9CisK
K2VudW0gY2xhc3MgR2F0aGVyU2lnbmFsaW5nU3RhdGUgeyBObywgWWVzIH07CitzdGF0aWMgc3Rk
OjpvcHRpb25hbDxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkRlc2NyaXB0aW9uU3RhdGVzPiBkZXNj
cmlwdGlvbnNGcm9tV2ViUlRDQmluKEdzdEVsZW1lbnQqIHdlYnJ0Y0JpbiwgR2F0aGVyU2lnbmFs
aW5nU3RhdGUgZ2F0aGVyU2lnbmFsaW5nU3RhdGUgPSBHYXRoZXJTaWduYWxpbmdTdGF0ZTo6Tm8p
Cit7CisgICAgc3RkOjpvcHRpb25hbDxSVENTZHBUeXBlPiBjdXJyZW50TG9jYWxEZXNjcmlwdGlv
blNkcFR5cGUsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSwgY3VycmVudFJlbW90ZURl
c2NyaXB0aW9uU2RwVHlwZSwgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwVHlwZTsKKyAgICBT
dHJpbmcgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHAsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9u
U2RwLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHAsIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlv
blNkcDsKKyAgICBpZiAoYXV0byBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3Jp
cHRpb24od2VicnRjQmluLCAiY3VycmVudC1sb2NhbCIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5
cGUsIGRlc2NyaXB0aW9uXSA9ICpjdXJyZW50TG9jYWxEZXNjcmlwdGlvbjsKKyAgICAgICAgY3Vy
cmVudExvY2FsRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgY3VycmVudExv
Y2FsRGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAgaWYg
KGF1dG8gcGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gPSBmZXRjaERlc2NyaXB0aW9uKHdlYnJ0Y0Jp
biwgInBlbmRpbmctbG9jYWwiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlv
bl0gPSAqcGVuZGluZ0xvY2FsRGVzY3JpcHRpb247CisgICAgICAgIHBlbmRpbmdMb2NhbERlc2Ny
aXB0aW9uU2RwVHlwZSA9IHNkcFR5cGU7CisgICAgICAgIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9u
U2RwID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChhdXRvIGN1cnJlbnRS
ZW1vdGVEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAiY3VycmVudC1y
ZW1vdGUiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAqY3VycmVu
dFJlbW90ZURlc2NyaXB0aW9uOworICAgICAgICBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHBU
eXBlID0gc2RwVHlwZTsKKyAgICAgICAgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwID0gV1RG
TW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChhdXRvIHBlbmRpbmdSZW1vdGVEZXNj
cmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAicGVuZGluZy1yZW1vdGUiKSkg
eworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAqcGVuZGluZ1JlbW90ZURl
c2NyaXB0aW9uOworICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlID0gc2Rw
VHlwZTsKKyAgICAgICAgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwID0gZGVzY3JpcHRpb247
CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxSVENTaWduYWxpbmdTdGF0ZT4gc2lnbmFsaW5n
U3RhdGU7CisgICAgaWYgKGdhdGhlclNpZ25hbGluZ1N0YXRlID09IEdhdGhlclNpZ25hbGluZ1N0
YXRlOjpZZXMpCisgICAgICAgIHNpZ25hbGluZ1N0YXRlID0gdG9TaWduYWxpbmdTdGF0ZShmZXRj
aFNpZ25hbGluZ1N0YXRlKHdlYnJ0Y0JpbikpOworCisgICAgcmV0dXJuIFBlZXJDb25uZWN0aW9u
QmFja2VuZDo6RGVzY3JpcHRpb25TdGF0ZXMgeworICAgICAgICBzaWduYWxpbmdTdGF0ZSwKKyAg
ICAgICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHBUeXBlLCBjdXJyZW50TG9jYWxEZXNjcmlw
dGlvblNkcCwKKyAgICAgICAgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5n
TG9jYWxEZXNjcmlwdGlvblNkcCwKKyAgICAgICAgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2Rw
VHlwZSwgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwLAorICAgICAgICBwZW5kaW5nUmVtb3Rl
RGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHAKKyAgICB9Owor
fQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbihj
b25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQoreworICAgIHNldERlc2Ny
aXB0aW9uKGRlc2NyaXB0aW9uLCB0cnVlLCBbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyldIHsK
KyAgICAgICAgYXV0byBkZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKHBy
b3RlY3RlZFRoaXMtPm1fd2VicnRjQmluLmdldCgpLCBHYXRoZXJTaWduYWxpbmdTdGF0ZTo6WWVz
KTsKKyAgICAgICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiB0cmFuc3BvcnQ7Cisg
ICAgICAgIGdfb2JqZWN0X2dldChwcm90ZWN0ZWRUaGlzLT5tX3dlYnJ0Y0Jpbi5nZXQoKSwgInNj
dHAtdHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgIHBy
b3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRpb25T
dWNjZWVkZWQoV1RGTW92ZShkZXNjcmlwdGlvbnMpLCB0cmFuc3BvcnQgPyBtYWtlVW5pcXVlPEdT
dHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kPihXVEZNb3ZlKHRyYW5zcG9ydCkpIDogbnVsbHB0
cik7CisgICAgfSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXShjb25zdCBHRXJyb3IqIGVy
cm9yKSB7CisgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHU1RfV0VCUlRDX0VS
Uk9SX0lOVkFMSURfU1RBVEUpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5zZXRMb2NhbERlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIHNldCBsb2NhbCBhbnN3ZXIgc2RwOiBubyBwZW5kaW5n
IHJlbW90ZSBkZXNjcmlwdGlvbi4iX3MgfSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHBy
b3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRpb25G
YWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lv
biBsb2NhbCBkZXNjcmlwdGlvbiJfcyB9KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpzZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZCgpCit7CisgICAgR1NU
X0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWNraW5nIHJlbW90ZSBkZXNjcmlwdGlv
biIpOworICAgIGF1dG8gZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0Jpbiht
X3dlYnJ0Y0Jpbi5nZXQoKSwgR2F0aGVyU2lnbmFsaW5nU3RhdGU6Olllcyk7CisgICAgR1JlZlB0
cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiB0cmFuc3BvcnQ7CisgICAgZ19vYmplY3RfZ2V0KG1f
d2VicnRjQmluLmdldCgpLCAic2N0cC10cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBu
dWxscHRyKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRSZW1vdGVEZXNjcmlwdGlv
blN1Y2NlZWRlZChXVEZNb3ZlKGRlc2NyaXB0aW9ucyksIHRyYW5zcG9ydCA/IG1ha2VVbmlxdWU8
R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ+KFdURk1vdmUodHJhbnNwb3J0KSkgOiBudWxs
cHRyKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb1NldFJlbW90ZURlc2Ny
aXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAg
c2V0RGVzY3JpcHRpb24oJmRlc2NyaXB0aW9uLCBmYWxzZSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYo
KnRoaXMpXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnNldFJlbW90ZURlc2NyaXB0aW9uU3Vj
Y2VlZGVkKCk7CisgICAgfSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXShjb25zdCBHRXJy
b3IqIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHU1RfV0VC
UlRDX0VSUk9SX0lOVkFMSURfU1RBVEUpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3Bl
ZXJDb25uZWN0aW9uQmFja2VuZC5zZXRSZW1vdGVEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24g
eyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBzZXQgcmVtb3RlIGFuc3dlciBzZHAiX3Mg
fSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5l
Y3Rpb25CYWNrZW5kLnNldFJlbW90ZURlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJh
dGlvbkVycm9yLCAiVW5hYmxlIHRvIGFwcGx5IHNlc3Npb24gcmVtb3RlIGRlc2NyaXB0aW9uIl9z
IH0pOworICAgIH0pOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0YXJ0TG9nZ2lu
Z1N0YXRzKCk7CisjZW5kaWYKK30KKworc3RydWN0IFNldERlc2NyaXB0aW9uQ2FsbERhdGEgewor
ICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICBTZXREZXNjcmlwdGlvbkNh
bGxEYXRhKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQmIGVuZFBvaW50LCBGdW5jdGlvbjx2b2lkKCk+
JiYgc3VjY2Vzc0NhbGxiYWNrLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEdFcnJvciopPiYmIGZhaWx1
cmVDYWxsYmFjaykKKyAgICAgICAgOiBzdWNjZXNzQ2FsbGJhY2soV1RGTW92ZShzdWNjZXNzQ2Fs
bGJhY2spKQorICAgICAgICAsIGZhaWx1cmVDYWxsYmFjayhXVEZNb3ZlKGZhaWx1cmVDYWxsYmFj
aykpCisgICAgICAgICwgZW5kUG9pbnQoZW5kUG9pbnQpIHsgfQorCisgICAgRnVuY3Rpb248dm9p
ZCgpPiBzdWNjZXNzQ2FsbGJhY2s7CisgICAgRnVuY3Rpb248dm9pZChjb25zdCBHRXJyb3IqKT4g
ZmFpbHVyZUNhbGxiYWNrOworICAgIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQmIGVuZFBvaW50Owor
fTsKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXREZXNjcmlwdGlvbihjb25zdCBS
VENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uLCBib29sIGlzTG9jYWwsIEZ1bmN0aW9u
PHZvaWQoKT4mJiBzdWNjZXNzQ2FsbGJhY2ssIEZ1bmN0aW9uPHZvaWQoY29uc3QgR0Vycm9yKik+
JiYgZmFpbHVyZUNhbGxiYWNrKQoreworICAgIEdzdFNEUE1lc3NhZ2UqIG1lc3NhZ2U7CisgICAg
YXV0byBzZHBUeXBlID0gUlRDU2RwVHlwZTo6T2ZmZXI7CisKKyAgICBpZiAoZGVzY3JpcHRpb24p
IHsKKyAgICAgICAgaWYgKGdzdF9zZHBfbWVzc2FnZV9uZXdfZnJvbV90ZXh0KHJlaW50ZXJwcmV0
X2Nhc3Q8Y29uc3QgY2hhcio+KGRlc2NyaXB0aW9uLT5zZHAoKS5jaGFyYWN0ZXJzOCgpKSwgJm1l
c3NhZ2UpICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjayhudWxs
cHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZHBUeXBlID0g
ZGVzY3JpcHRpb24tPnR5cGUoKTsKKyAgICB9IGVsc2UgaWYgKGdzdF9zZHBfbWVzc2FnZV9uZXco
Jm1lc3NhZ2UpICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAgZmFpbHVyZUNhbGxiYWNrKG51bGxw
dHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc0xvY2FsKQorICAgICAg
ICBzdG9yZVJlbW90ZU1MaW5lSW5mbyhtZXNzYWdlKTsKKworICAgIGF1dG8gdHlwZSA9IHRvU2Vz
c2lvbkRlc2NyaXB0aW9uVHlwZShzZHBUeXBlKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJDcmVhdGluZyAlcyBzZXNzaW9uIGZvciBTRFAgJXMiLCBpc0xvY2FsID8g
ImxvY2FsIiA6ICJyZW1vdGUiLCBnc3Rfd2VicnRjX3NkcF90eXBlX3RvX3N0cmluZyh0eXBlKSk7
CisKKyAgICBHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gc2Vzc2lvbkRl
c2NyaXB0aW9uKGdzdF93ZWJydGNfc2Vzc2lvbl9kZXNjcmlwdGlvbl9uZXcodHlwZSwgbWVzc2Fn
ZSkpOworICAgIGF1dG8gc2lnbmFsTmFtZSA9IG1ha2VTdHJpbmcoInNldC0iLCBpc0xvY2FsID8g
ImxvY2FsIiA6ICJyZW1vdGUiLCAiLWRlc2NyaXB0aW9uIik7CisgICAgYXV0byBkYXRhID0gbWFr
ZVVuaXF1ZTxTZXREZXNjcmlwdGlvbkNhbGxEYXRhPigqdGhpcywgV1RGTW92ZShzdWNjZXNzQ2Fs
bGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOworICAgIGdfc2lnbmFsX2VtaXRfYnlf
bmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgc2lnbmFsTmFtZS5hc2NpaSgpLmRhdGEoKSwgc2Vzc2lv
bkRlc2NyaXB0aW9uLmdldCgpLCBnc3RfcHJvbWlzZV9uZXdfd2l0aF9jaGFuZ2VfZnVuYyhbXShH
c3RQcm9taXNlKiBwcm9taXNlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8U2V0RGVzY3JpcHRpb25DYWxsRGF0YT4gZGF0YShyZWludGVycHJldF9jYXN0PFNl
dERlc2NyaXB0aW9uQ2FsbERhdGEqPih1c2VyRGF0YSkpOworICAgICAgICBhdXRvIHJlc3VsdCA9
IGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZSk7CisgICAgICAgIGF1dG8gY2xlYW51cCA9IG1ha2VT
Y29wZUV4aXQoWyZdIHsKKyAgICAgICAgICAgIGdzdF9wcm9taXNlX3VucmVmKHByb21pc2UpOwor
ICAgICAgICB9KTsKKworICAgICAgICBjb25zdCBhdXRvKiByZXBseSA9IGdzdF9wcm9taXNlX2dl
dF9yZXBseShwcm9taXNlKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBHU1RfUFJPTUlTRV9SRVNV
TFRfUkVQTElFRCB8fCAocmVwbHkgJiYgZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQocmVwbHksICJl
cnJvciIpKSkgeworICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9yOworICAg
ICAgICAgICAgaWYgKHJlcGx5KSB7CisgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQo
cmVwbHksICJlcnJvciIsIEdfVFlQRV9FUlJPUiwgJmVycm9yLm91dFB0cigpLCBudWxscHRyKTsK
KyAgICAgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKGRhdGEtPmVuZFBvaW50LnBpcGVsaW5l
KCksICJVbmFibGUgdG8gc2V0IGRlc2NyaXB0aW9uLCBlcnJvcjogJXMiLCBlcnJvci0+bWVzc2Fn
ZSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtlcnJvciA9
IGVycm9yLmdldCgpLCBwcm90ZWN0ZWRUaGlzID0gUmVmKGRhdGEtPmVuZFBvaW50KSwgZmFpbHVy
ZUNhbGxiYWNrID0gV1RGTW92ZShkYXRhLT5mYWlsdXJlQ2FsbGJhY2spXSB7CisgICAgICAgICAg
ICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKGVycm9yKTsKKyAgICAg
ICAgICAgIH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoZGF0YS0+ZW5kUG9pbnQpLCBzdWNjZXNz
Q2FsbGJhY2sgPSBXVEZNb3ZlKGRhdGEtPnN1Y2Nlc3NDYWxsYmFjayldIHsKKyAgICAgICAgICAg
IGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKTsKKyAgICAgICAgfSk7CisgICAgfSwgZGF0
YS5yZWxlYXNlKCksIG51bGxwdHIpKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpzdG9yZVJlbW90ZU1MaW5lSW5mbyhHc3RTRFBNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIG1f
cmVtb3RlTUxpbmVJbmZvcy5jbGVhcigpOworICAgIHVuc2lnbmVkIHRvdGFsTWVkaWFzID0gZ3N0
X3NkcF9tZXNzYWdlX21lZGlhc19sZW4obWVzc2FnZSk7CisgICAgbV9yZW1vdGVNTGluZUluZm9z
LnJlc2VydmVDYXBhY2l0eSh0b3RhbE1lZGlhcyk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiU3RvcmluZyAldSByZW1vdGUgcGVuZGluZyBtbGluZXMiLCB0b3RhbE1l
ZGlhcyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRvdGFsTWVkaWFzOyBpKyspIHsK
KyAgICAgICAgY29uc3QgR3N0U0RQTWVkaWEqIG1lZGlhID0gZ3N0X3NkcF9tZXNzYWdlX2dldF9t
ZWRpYShtZXNzYWdlLCBpKTsKKyAgICAgICAgY29uc3QgY2hhciogdHlwID0gZ3N0X3NkcF9tZWRp
YV9nZXRfbWVkaWEobWVkaWEpOworICAgICAgICBpZiAoIWdfc3RyX2VxdWFsKHR5cCwgImF1ZGlv
IikgJiYgIWdfc3RyX2VxdWFsKHR5cCwgInZpZGVvIikpCisgICAgICAgICAgICBjb250aW51ZTsK
KworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFy
PiBtZWRpYVJlcHJlc2VudGF0aW9uKGdzdF9zZHBfbWVkaWFfYXNfdGV4dChtZWRpYSkpOworICAg
ICAgICBHU1RfTE9HX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUHJvY2Vzc2luZyBtZWRpYTpc
biVzIiwgbWVkaWFSZXByZXNlbnRhdGlvbi5nZXQoKSk7CisjZW5kaWYKKyAgICAgICAgY29uc3Qg
Y2hhciogbWlkID0gZ3N0X3NkcF9tZWRpYV9nZXRfYXR0cmlidXRlX3ZhbChtZWRpYSwgIm1pZCIp
OworICAgICAgICBpZiAoIW1pZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJv
b2wgaXNJbmFjdGl2ZSA9IGZhbHNlOworICAgICAgICBmb3IgKHVuc2lnbmVkIGlpID0gMDsgaWkg
PCBnc3Rfc2RwX21lZGlhX2F0dHJpYnV0ZXNfbGVuKG1lZGlhKTsgaWkrKykgeworICAgICAgICAg
ICAgY29uc3QgR3N0U0RQQXR0cmlidXRlKiBhdHRyID0gZ3N0X3NkcF9tZWRpYV9nZXRfYXR0cmli
dXRlKG1lZGlhLCBpaSk7CisgICAgICAgICAgICBpZiAoIWdfc3RyY21wMChhdHRyLT5rZXksICJp
bmFjdGl2ZSIpKSB7CisgICAgICAgICAgICAgICAgaXNJbmFjdGl2ZSA9IHRydWU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlz
SW5hY3RpdmUpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIlNraXBwaW5nIGluYWN0aXZlIG1lZGlhIik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fbWVkaWFGb3JNaWQuc2V0KFN0cmluZyhtaWQpLCBnX3N0cl9l
cXVhbCh0eXAsICJhdWRpbyIpID8gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8gOiBS
ZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbyk7CisKKyAgICAgICAgLy8gaHR0cHM6Ly9n
aXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvLS9tZXJnZV9y
ZXF1ZXN0cy8xOTA3CisgICAgICAgIGlmIChzZHBNZWRpYUhhc0F0dHJpYnV0ZUtleShtZWRpYSwg
ImljZS1saXRlIikpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8R09iamVjdD4gaWNlOworICAgICAg
ICAgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAiaWNlLWFnZW50IiwgJmljZS5v
dXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBnX29iamVjdF9zZXQoaWNlLmdldCgpLCAi
aWNlLWxpdGUiLCBUUlVFLCBudWxscHRyKTsKKyAgICAgICAgfQorCisgICAgICAgIGF1dG8gY2Fw
cyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgICAgIFZlY3RvcjxpbnQ+
IHBheWxvYWRUeXBlczsKKyAgICAgICAgdW5zaWduZWQgdG90YWxGb3JtYXRzID0gZ3N0X3NkcF9t
ZWRpYV9mb3JtYXRzX2xlbihtZWRpYSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBl
bGluZS5nZXQoKSwgIk1lZGlhICVzIGhhcyAldSBmb3JtYXRzIiwgdHlwLCB0b3RhbEZvcm1hdHMp
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdG90YWxGb3JtYXRzOyBqKyspIHsK
KyAgICAgICAgICAgIGF1dG8gZm9ybWF0ID0gU3RyaW5nKGdzdF9zZHBfbWVkaWFfZ2V0X2Zvcm1h
dChtZWRpYSwgaikpOworICAgICAgICAgICAgYXV0byBwYXlsb2FkVHlwZSA9IHBhcnNlSW50ZWdl
cjxpbnQ+KGZvcm1hdCk7CisgICAgICAgICAgICBpZiAoIXBheWxvYWRUeXBlIHx8ICEqcGF5bG9h
ZFR5cGUpIHsKKyAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGluZS5n
ZXQoKSwgIkludmFsaWQgcGF5bG9hZCB0eXBlOiAlcyIsIGZvcm1hdC51dGY4KCkuZGF0YSgpKTsK
KyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGF1
dG8gZm9ybWF0Q2FwcyA9IGFkb3B0R1JlZihnc3Rfc2RwX21lZGlhX2dldF9jYXBzX2Zyb21fbWVk
aWEobWVkaWEsICpwYXlsb2FkVHlwZSkpOworICAgICAgICAgICAgaWYgKCFmb3JtYXRDYXBzKSB7
CisgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJO
byBjYXBzIGZvdW5kIGZvciBwYXlsb2FkIHR5cGUgJWQiLCAqcGF5bG9hZFR5cGUpOworICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBSZWxh
eSBTRFAgYXR0cmlidXRlcyB0byB0aGUgY2FwcywgdGhpcyBpcyBzcGVjaWFsbHkgdXNlZnVsIHNv
IHRoYXQgZWxlbWVudHMgaW4KKyAgICAgICAgICAgIC8vIHdlYnJ0Y2JpbiB3aWxsIGJlIGFibGUg
dG8gZW5hYmxlIFJUUCBoZWFkZXIgZXh0ZW5zaW9ucy4KKyAgICAgICAgICAgIGdzdF9zZHBfbWVk
aWFfYXR0cmlidXRlc190b19jYXBzKG1lZGlhLCBmb3JtYXRDYXBzLmdldCgpKTsKKworICAgICAg
ICAgICAgZ3N0X2NhcHNfYXBwZW5kKGNhcHMuZ2V0KCksIGZvcm1hdENhcHMubGVha1JlZigpKTsK
KyAgICAgICAgICAgIG1fcHRDb3VudGVyID0gc3RkOjptYXgobV9wdENvdW50ZXIsICpwYXlsb2Fk
VHlwZSArIDEpOworICAgICAgICAgICAgcGF5bG9hZFR5cGVzLmFwcGVuZCgqcGF5bG9hZFR5cGUp
OworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdG90YWxDYXBzID0gZ3N0X2NhcHNfZ2V0
X3NpemUoY2Fwcy5nZXQoKSk7CisgICAgICAgIGlmICh0b3RhbENhcHMpIHsKKyAgICAgICAgICAg
IGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB0b3RhbENhcHM7IGorKykgeworICAgICAgICAgICAg
ICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBz
LmdldCgpLCBqKTsKKyAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKHN0cnVj
dHVyZSwgImFwcGxpY2F0aW9uL3gtcnRwIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDYWNoaW5nIHBheWxvYWQgY2Fwczog
JSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAgICAgICAgICAgbV9yZW1vdGVNTGlu
ZUluZm9zLmFwcGVuZCh7IFdURk1vdmUoY2FwcyksIGZhbHNlLCBXVEZNb3ZlKHBheWxvYWRUeXBl
cykgfSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6Y29uZmlndXJlQW5kTGlua1NvdXJjZShSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXImIHNvdXJjZSkKK3sKKyAgICBhdXRvIGNhcHMgPSBzb3VyY2UuYWxsb3dlZENhcHMoKTsK
KyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxQZW5kaW5nTUxpbmVJbmZvLCBHUmVmUHRyPEdz
dENhcHM+Pj4gZm91bmQ7CisgICAgZm9yIChhdXRvJiBtTGluZUluZm8gOiBtX3JlbW90ZU1MaW5l
SW5mb3MpIHsKKyAgICAgICAgaWYgKG1MaW5lSW5mby5pc1VzZWQpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZ3N0X2NhcHNfZ2V0X3Np
emUobUxpbmVJbmZvLmNhcHMuZ2V0KCkpOyBpKyspIHsKKyAgICAgICAgICAgIGF1dG8qIHN0cnVj
dHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUobUxpbmVJbmZvLmNhcHMuZ2V0KCksIGkpOwor
ICAgICAgICAgICAgYXV0byBjYXBzMiA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZnVsbChnc3Rf
c3RydWN0dXJlX2NvcHkoc3RydWN0dXJlKSwgbnVsbHB0cikpOworICAgICAgICAgICAgYXV0byBp
bnRlcnNlY3RlZCA9IGFkb3B0R1JlZihnc3RfY2Fwc19pbnRlcnNlY3QoY2Fwcy5nZXQoKSwgY2Fw
czIuZ2V0KCkpKTsKKyAgICAgICAgICAgIGlmICghZ3N0X2NhcHNfaXNfZW1wdHkoaW50ZXJzZWN0
ZWQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSBzdGQ6Om1ha2VfcGFpcihtTGlu
ZUluZm8sIFdURk1vdmUoaW50ZXJzZWN0ZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZm91bmQuaGFzX3ZhbHVlKCkpCisg
ICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBib29sIHBheWxvYWRUeXBlV2FzU2V0ID0g
ZmFsc2U7CisgICAgaWYgKGZvdW5kKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBl
bGluZS5nZXQoKSwgIlVudXNlZCBhbmQgY29tcGF0aWJsZSBjYXBzIGZvdW5kIGZvciAlIiBHU1Rf
UFRSX0ZPUk1BVCAiLi4uICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpLCBmb3VuZC0+c2Vj
b25kLmdldCgpKTsKKyAgICAgICAgcGF5bG9hZFR5cGVXYXNTZXQgPSBzb3VyY2Uuc2V0UGF5bG9h
ZFR5cGUoZm91bmQtPnNlY29uZCk7CisgICAgICAgIGZvdW5kLT5maXJzdC5pc1VzZWQgPSB0cnVl
OworICAgIH0gZWxzZQorICAgICAgICBwYXlsb2FkVHlwZVdhc1NldCA9IHNvdXJjZS5zZXRQYXls
b2FkVHlwZShjYXBzKTsKKworICAgIGlmICghcGF5bG9hZFR5cGVXYXNTZXQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGlmICghc291cmNlLnBhZCgpKSB7CisgICAgICAgIHNvdXJjZS5zZXRTaW5r
UGFkKHJlcXVlc3RQYWQobV9yZXF1ZXN0UGFkQ291bnRlciwgc291cmNlLmFsbG93ZWRDYXBzKCkp
KTsKKyAgICAgICAgbV9yZXF1ZXN0UGFkQ291bnRlcisrOworICAgIH0KKworICAgIGF1dG8mIHNp
bmtQYWQgPSBzb3VyY2UucGFkKCk7CisgICAgUkVMRUFTRV9BU1NFUlQoIWdzdF9wYWRfaXNfbGlu
a2VkKHNpbmtQYWQuZ2V0KCkpKTsKKyAgICBhdXRvIHNvdXJjZUJpbiA9IHNvdXJjZS5iaW4oKTsK
KyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIHNvdXJjZUJp
bi5nZXQoKSk7CisgICAgc291cmNlLmxpbmsoKTsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gcGFk
SWQoZ3N0X3BhZF9nZXRfbmFtZShzaW5rUGFkLmdldCgpKSk7CisgICAgYXV0byBkb3RGaWxlTmFt
ZSA9IG1ha2VTdHJpbmcoR1NUX09CSkVDVF9OQU1FKG1fcGlwZWxpbmUuZ2V0KCkpLCAiLm91dGdv
aW5nLSIsIHBhZElkLmdldCgpKTsKKyAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhf
VFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBk
b3RGaWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKworR1JlZlB0cjxHc3RQYWQ+IEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OnJlcXVlc3RQYWQodW5zaWduZWQgbWxpbmVJbmRleCwgY29uc3QgR1Jl
ZlB0cjxHc3RDYXBzPiYgYWxsb3dlZENhcHMpCit7CisgICAgYXV0byBwYWRJZCA9IG1ha2VTdHJp
bmcoInNpbmtfIiwgbWxpbmVJbmRleCk7CisgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9j
YXBzX2NvcHkoYWxsb3dlZENhcHMuZ2V0KCkpKTsKKworICAgIGdzdF9jYXBzX21hcF9pbl9wbGFj
ZShjYXBzLmdldCgpLCBbXShHc3RDYXBzRmVhdHVyZXMqLCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsKKyAgICAgICAgYXV0byogZW5kUG9p
bnQgPSByZWludGVycHJldF9jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqPih1c2VyRGF0YSk7
CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgInBheWxvYWQiLCBHX1RZUEVf
SU5ULCBlbmRQb2ludC0+bV9wdENvdW50ZXIrKywgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBU
UlVFOworICAgIH0sIHRoaXMpOworCisgICAgLy8gRklYTUU6IFJlc3RyaWN0aW5nIGNhcHMgYW5k
IGNvZGVjLXByZWZlcmVuY2VzIGJyZWFrcyBjYXBzIG5lZ290aWF0aW9uIG9mIG91dGdvaW5nIHNv
dXJjZXMgaW4KKyAgICAvLyBzb21lIGNhc2UgKGppdHNpKS4KKyAgICBHU1RfREVCVUdfT0JKRUNU
KG1fcGlwZWxpbmUuZ2V0KCksICJSZXF1ZXN0aW5nIHBhZCAlcyByZXN0cmljdGVkIHRvICUiIEdT
VF9QVFJfRk9STUFULCBwYWRJZC51dGY4KCkuZGF0YSgpLCBjYXBzLmdldCgpKTsKKyAgICBhdXRv
KiBwYWRUZW1wbGF0ZSA9IGdzdF9lbGVtZW50X2dldF9wYWRfdGVtcGxhdGUobV93ZWJydGNCaW4u
Z2V0KCksICJzaW5rXyV1Iik7CisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X3JlcXVlc3RfcGFkKG1fd2VicnRjQmluLmdldCgpLCBwYWRUZW1wbGF0ZSwgcGFkSWQudXRm
OCgpLmRhdGEoKSwgY2Fwcy5nZXQoKSkpOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNj
ZWl2ZXI+IHRyYW5zY2VpdmVyOworICAgIGdfb2JqZWN0X2dldChzaW5rUGFkLmdldCgpLCAidHJh
bnNjZWl2ZXIiLCAmdHJhbnNjZWl2ZXIub3V0UHRyKCksIG51bGxwdHIpOworICAgIGdfb2JqZWN0
X3NldCh0cmFuc2NlaXZlci5nZXQoKSwgImNvZGVjLXByZWZlcmVuY2VzIiwgY2Fwcy5nZXQoKSwg
bnVsbHB0cik7CisgICAgcmV0dXJuIHNpbmtQYWQ7Cit9CisKK2Jvb2wgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6YWRkVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgc2VuZGVyLCBNZWRp
YVN0cmVhbVRyYWNrJiB0cmFjaywgY29uc3QgRml4ZWRWZWN0b3I8U3RyaW5nPiYpCit7CisgICAg
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlIHNvdXJjZTsKKyAgICBHUmVmUHRyPEdz
dFdlYlJUQ1JUUFNlbmRlcj4gcnRjU2VuZGVyOworCisgICAgaWYgKHRyYWNrLnByaXZhdGVUcmFj
aygpLmhhc0F1ZGlvKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdl
dCgpLCAiQWRkaW5nIG91dGdvaW5nIGF1ZGlvIHNvdXJjZSIpOworICAgICAgICBhdXRvIGF1ZGlv
U291cmNlID0gUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJh
Y2sucHJpdmF0ZVRyYWNrKCkpOworICAgICAgICBjb25maWd1cmVBbmRMaW5rU291cmNlKGF1ZGlv
U291cmNlKTsKKworICAgICAgICBydGNTZW5kZXIgPSBhdWRpb1NvdXJjZS0+c2VuZGVyKCk7Cisg
ICAgICAgIHNvdXJjZSA9IFdURk1vdmUoYXVkaW9Tb3VyY2UpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKHRyYWNrLnByaXZhdGVUcmFjaygpLmhhc1ZpZGVvKCkpOworICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBZGRpbmcgb3V0Z29pbmcg
dmlkZW8gc291cmNlIik7CisgICAgICAgIGF1dG8gdmlkZW9Tb3VyY2UgPSBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFjay5wcml2YXRlVHJhY2soKSk7Cisg
ICAgICAgIGNvbmZpZ3VyZUFuZExpbmtTb3VyY2UodmlkZW9Tb3VyY2UpOworCisgICAgICAgIHJ0
Y1NlbmRlciA9IHZpZGVvU291cmNlLT5zZW5kZXIoKTsKKyAgICAgICAgc291cmNlID0gV1RGTW92
ZSh2aWRlb1NvdXJjZSk7CisgICAgfQorCisgICAgc2VuZGVyLnNldFNvdXJjZShXVEZNb3ZlKHNv
dXJjZSkpOworCisgICAgaWYgKGF1dG8gcnRwU2VuZGVyID0gc2VuZGVyLnJ0Y1NlbmRlcigpKSB7
CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFscmVhZHkgaGFz
IGEgc2VuZGVyLiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICBzZW5kZXIu
c2V0UlRDU2VuZGVyKFdURk1vdmUocnRjU2VuZGVyKSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNU
KG1fcGlwZWxpbmUuZ2V0KCksICJTZW5kZXIgY29uZmlndXJlZCIpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVRyYWNrKEdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQmIHNlbmRlcikKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJSZW1vdmluZyB0cmFjayIpOworICAgIGF1dG8gYmluID0gc2VuZGVyLnN0
b3BTb3VyY2UoKTsKKyAgICBpZiAoYmluKQorICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklO
X0NBU1QobV9waXBlbGluZS5nZXQoKSksIGJpbi5nZXQoKSk7CisgICAgc2VuZGVyLmNsZWFyU291
cmNlKCk7CisgICAgb25OZWdvdGlhdGlvbk5lZWRlZCgpOworfQorCit2b2lkIEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlT2ZmZXIoY29uc3QgUlRDT2ZmZXJPcHRpb25zJiBvcHRpb25z
KQoreworICAgIC8vIGZsdXNoUGVuZGluZ1NvdXJjZXModHJ1ZSk7CisKKyAgICAvLyBodHRwczov
L2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdl
X3JlcXVlc3RzLzE4NzcKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gb2ZmZXJPcHRpb25z
KGdzdF9zdHJ1Y3R1cmVfbmV3KCJ3ZWJydGNiaW4tb2ZmZXItb3B0aW9ucyIsICJpY2UtcmVzdGFy
dCIsIEdfVFlQRV9CT09MRUFOLCBvcHRpb25zLmljZVJlc3RhcnQsIG51bGxwdHIpKTsKKyAgICAv
LyBGSVhNRTogUGx1bWIgb3B0aW9ucy52b2ljZUFjdGl2aXR5RGV0ZWN0aW9uLgorICAgIGluaXRp
YXRlKHRydWUsIFdURk1vdmUob2ZmZXJPcHRpb25zKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6ZG9DcmVhdGVBbnN3ZXIoKQoreworICAgIGluaXRpYXRlKGZhbHNlLCBudWxs
cHRyKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWF0ZShib29sIGlz
SW5pdGlhdG9yLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBvcHRpb25zKQoreworICAgIG1f
aXNJbml0aWF0b3IgPSBpc0luaXRpYXRvcjsKKyAgICBjb25zdCBjaGFyKiB0eXBlID0gaXNJbml0
aWF0b3IgPyAib2ZmZXIiIDogImFuc3dlciI7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVs
aW5lLmdldCgpLCAiQ3JlYXRpbmcgJXMiLCB0eXBlKTsKKyAgICBhdXRvIHNpZ25hbE5hbWUgPSBt
YWtlU3RyaW5nKCJjcmVhdGUtIiwgdHlwZSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1f
d2VicnRjQmluLmdldCgpLCBzaWduYWxOYW1lLmFzY2lpKCkuZGF0YSgpLCBvcHRpb25zLnJlbGVh
c2UoKSwgZ3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcHJv
bWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byogZW5kcG9pbnQgPSByZWlu
dGVycHJldF9jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqPih1c2VyRGF0YSk7CisgICAgICAg
IGF1dG8gY2xlYW51cCA9IG1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgICAgIGdzdF9wcm9t
aXNlX3VucmVmKHByb21pc2UpOworICAgICAgICB9KTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBn
c3RfcHJvbWlzZV93YWl0KHByb21pc2UpOworICAgICAgICBpZiAocmVzdWx0ICE9IEdTVF9QUk9N
SVNFX1JFU1VMVF9SRVBMSUVEKSB7CisgICAgICAgICAgICBlbmRwb2ludC0+Y3JlYXRlU2Vzc2lv
bkRlc2NyaXB0aW9uRmFpbGVkKHsgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBhdXRvKiByZXBseSA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9t
aXNlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVwbHkpOworICAgICAgICBpZiAoZ3N0X3N0
cnVjdHVyZV9oYXNfZmllbGQocmVwbHksICJlcnJvciIpKSB7CisgICAgICAgICAgICBHVW5pcXVl
T3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldChyZXBs
eSwgImVycm9yIiwgR19UWVBFX0VSUk9SLCAmZXJyb3Iub3V0UHRyKCksIG51bGxwdHIpOworICAg
ICAgICAgICAgZW5kcG9pbnQtPmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbkZhaWxlZChXVEZNb3Zl
KGVycm9yKSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25z
dCBjaGFyKiB0eXBlID0gZW5kcG9pbnQtPm1faXNJbml0aWF0b3IgPyAib2ZmZXIiIDogImFuc3dl
ciI7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBk
ZXNjcmlwdGlvbjsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksIHR5cGUsIEdTVF9U
WVBFX1dFQlJUQ19TRVNTSU9OX0RFU0NSSVBUSU9OLCAmZGVzY3JpcHRpb24ub3V0UHRyKCksIG51
bGxwdHIpOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgICAgICBHVW5pcXVl
UHRyPGNoYXI+IHNkcChnc3Rfc2RwX21lc3NhZ2VfYXNfdGV4dChkZXNjcmlwdGlvbi0+c2RwKSk7
CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QoZW5kcG9pbnQtPnBpcGVsaW5lKCksICJDcmVhdGVk
ICVzOiAlcyIsIHR5cGUsIHNkcC5nZXQoKSk7CisjZW5kaWYKKyAgICAgICAgZW5kcG9pbnQtPmNy
ZWF0ZVNlc3Npb25EZXNjcmlwdGlvblN1Y2NlZWRlZChXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7Cisg
ICAgfSwgdGhpcywgbnVsbHB0cikpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmdldFN0YXRzKEdzdFBhZCogcGFkLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7
CisgICAgbV9zdGF0c0NvbGxlY3Rvci0+Z2V0U3RhdHMoW3Byb21pc2UgPSBXVEZNb3ZlKHByb21p
c2UpLCBwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKV0oYXV0byYmIHJlcG9ydCkgbXV0YWJsZSB7
CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIGlmIChwcm90ZWN0ZWRU
aGlzLT5pc1N0b3BwZWQoKSB8fCAhcmVwb3J0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIHByb21pc2UtPnJlc29sdmU8SURMSW50ZXJmYWNlPFJUQ1N0YXRzUmVwb3J0Pj4ocmVwb3J0
LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0sIHBhZCk7Cit9CisKK01lZGlhU3RyZWFtJiBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjptZWRpYVN0cmVhbUZyb21SVENTdHJlYW0oU3RyaW5nIGxhYmVs
KQoreworICAgIGF1dG8gbWVkaWFTdHJlYW0gPSBtX3JlbW90ZVN0cmVhbXNCeUlkLmVuc3VyZShs
YWJlbCwgW2xhYmVsLCB0aGlzXSgpIG11dGFibGUgeworICAgICAgICBhdXRvJiBkb2N1bWVudCA9
IGRvd25jYXN0PERvY3VtZW50PigqbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29ubmVjdGlvbigp
LnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgICAgIHJldHVybiBNZWRpYVN0cmVhbTo6
Y3JlYXRlKGRvY3VtZW50LCBNZWRpYVN0cmVhbVByaXZhdGU6OmNyZWF0ZShkb2N1bWVudC5sb2dn
ZXIoKSwgeyB9LCBXVEZNb3ZlKGxhYmVsKSkpOworICAgIH0pOworICAgIHJldHVybiAqbWVkaWFT
dHJlYW0uaXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmFkZFJlbW90ZVN0cmVhbShHc3RQYWQqIHBhZCkKK3sKKyAgICBtX3BlbmRpbmdJbmNvbWluZ1N0
cmVhbXMrKzsKKworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX3F1ZXJ5X2NhcHMo
cGFkLCBudWxscHRyKSk7CisgICAgY29uc3QgY2hhciogbWVkaWFUeXBlID0gY2Fwc01lZGlhVHlw
ZShjYXBzLmdldCgpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJB
ZGRpbmcgcmVtb3RlICVzIHN0cmVhbSB0byAlIiBHU1RfUFRSX0ZPUk1BVCAiICV1IHBlbmRpbmcg
aW5jb21pbmcgc3RyZWFtcywgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIG1lZGlhVHlwZSwgcGFk
LCBtX3BlbmRpbmdJbmNvbWluZ1N0cmVhbXMsIGNhcHMuZ2V0KCkpOworCisgICAgR1JlZlB0cjxH
c3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gcnRjVHJhbnNjZWl2ZXI7CisgICAgZ19vYmplY3RfZ2V0
KHBhZCwgInRyYW5zY2VpdmVyIiwgJnJ0Y1RyYW5zY2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsK
KworICAgIGF1dG8qIHRyYW5zY2VpdmVyID0gbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuZXhpc3Rp
bmdUcmFuc2NlaXZlcihbJl0oYXV0byYgdHJhbnNjZWl2ZXJCYWNrZW5kKSB7CisgICAgICAgIHJl
dHVybiBydGNUcmFuc2NlaXZlci5nZXQoKSA9PSB0cmFuc2NlaXZlckJhY2tlbmQucnRjVHJhbnNj
ZWl2ZXIoKTsKKyAgICB9KTsKKyAgICBpZiAoIXRyYW5zY2VpdmVyKSB7CisgICAgICAgIGF1dG8g
dHlwZSA9IGRvQ2Fwc0hhdmVUeXBlKGNhcHMuZ2V0KCksICJhdWRpbyIpID8gUmVhbHRpbWVNZWRp
YVNvdXJjZTo6VHlwZTo6QXVkaW8gOiBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRlbzsK
KyAgICAgICAgdHJhbnNjZWl2ZXIgPSAmbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQubmV3UmVtb3Rl
VHJhbnNjZWl2ZXIobWFrZVVuaXF1ZTxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KFdU
Rk1vdmUocnRjVHJhbnNjZWl2ZXIpKSwgdHlwZSk7CisgICAgfQorCisgICAgR1VuaXF1ZU91dFB0
cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IGRlc2NyaXB0aW9uOworICAgIGdfb2JqZWN0
X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInJlbW90ZS1kZXNjcmlwdGlvbiIsICZkZXNjcmlwdGlv
bi5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICB1bnNpZ25lZCBtTGluZUluZGV4OworICAgIGdf
b2JqZWN0X2dldChydGNUcmFuc2NlaXZlci5nZXQoKSwgIm1saW5laW5kZXgiLCAmbUxpbmVJbmRl
eCwgbnVsbHB0cik7CisgICAgY29uc3QgYXV0byogbWVkaWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0
X21lZGlhKGRlc2NyaXB0aW9uLT5zZHAsIG1MaW5lSW5kZXgpOworICAgIEdVbmlxdWVQdHI8Y2hh
cj4gc2RwKGdzdF9zZHBfbWVkaWFfYXNfdGV4dChtZWRpYSkpOworICAgIGF1dG8gc2RwU3RyaW5n
ID0gbWFrZVN0cmluZyhzZHAuZ2V0KCkpOworCisgICAgR1VuaXF1ZVB0cjxnY2hhcj4gbmFtZShn
c3RfcGFkX2dldF9uYW1lKHBhZCkpOworICAgIFN0cmluZyBsYWJlbChuYW1lLmdldCgpKTsKKyAg
ICBhdXRvIGtleSA9IG1ha2VTdHJpbmcoIm1zaWQ6Iik7CisgICAgYXV0byBsaW5lcyA9IHNkcFN0
cmluZy5zcGxpdCgnXG4nKTsKKyAgICBmb3IgKGF1dG8mIGxpbmUgOiBsaW5lcykgeworICAgICAg
ICBhdXRvIGkgPSBsaW5lLmZpbmQoa2V5KTsKKyAgICAgICAgaWYgKGkgIT0gbm90Rm91bmQpIHsK
KyAgICAgICAgICAgIGF1dG8gdG1wID0gbGluZS5zdWJzdHJpbmcoaSArIGtleS5hc2NpaSgpLmxl
bmd0aCgpKTsKKyAgICAgICAgICAgIGxhYmVsID0gdG1wLnN1YnN0cmluZygwLCB0bXAuZmluZCgn
ICcpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfQorCisgICAgR1NUX0RF
QlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAibXNpZDogJXMiLCBsYWJlbC5hc2NpaSgpLmRh
dGEoKSk7CisKKyAgICBHc3RFbGVtZW50KiBiaW4gPSBudWxscHRyOworICAgIGF1dG8mIHRyYWNr
ID0gdHJhbnNjZWl2ZXItPnJlY2VpdmVyKCkudHJhY2soKTsKKyAgICBhdXRvJiBzb3VyY2UgPSB0
cmFjay5wcml2YXRlVHJhY2soKS5zb3VyY2UoKTsKKyAgICBpZiAoc291cmNlLmlzSW5jb21pbmdB
dWRpb1NvdXJjZSgpKQorICAgICAgICBiaW4gPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXImPihzb3VyY2UpLmJpbigpOworICAgIGVsc2UgaWYgKHNvdXJj
ZS5pc0luY29taW5nVmlkZW9Tb3VyY2UoKSkKKyAgICAgICAgYmluID0gc3RhdGljX2Nhc3Q8UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyJj4oc291cmNlKS5iaW4oKTsKKyAgICBl
bHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisKKyAgICBnc3RfYmlu
X2FkZChHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIGJpbik7CisgICAgYXV0byBzaW5r
UGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGJpbiwgInNpbmsiKSk7
CisgICAgZ3N0X3BhZF9saW5rKHBhZCwgc2lua1BhZC5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRf
c3luY19zdGF0ZV93aXRoX3BhcmVudChiaW4pOworCisgICAgdHJhY2suc2V0RW5hYmxlZCh0cnVl
KTsKKyAgICBzb3VyY2Uuc2V0TXV0ZWQoZmFsc2UpOworCisgICAgYXV0byYgbWVkaWFTdHJlYW0g
PSBtZWRpYVN0cmVhbUZyb21SVENTdHJlYW0obGFiZWwpOworICAgIG1lZGlhU3RyZWFtLmFkZFRy
YWNrRnJvbVBsYXRmb3JtKHRyYWNrKTsKKyAgICBtX3BlbmRpbmdTdHJlYW1zLmFwcGVuZCgmbWVk
aWFTdHJlYW0pOworCisgICAgYXV0byBkb3RGaWxlTmFtZSA9IG1ha2VTdHJpbmcoR1NUX09CSkVD
VF9OQU1FKG1fcGlwZWxpbmUuZ2V0KCkpLCAiLmluY29taW5nLSIsIG1lZGlhVHlwZSwgJy0nLCBH
U1RfT0JKRUNUX05BTUUocGFkKSk7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRI
X1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwg
ZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6cmVtb3ZlUmVtb3RlU3RyZWFtKEdzdFBhZCopCit7CisgICAgR1NUX0ZJWE1FX09CSkVD
VChtX3BpcGVsaW5lLmdldCgpLCAicmVtb3ZlUmVtb3RlU3RyZWFtIik7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworc3RkOjpvcHRpb25hbDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNr
ZW5kcz4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyhj
b25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCwgR1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiYgc291cmNlKQoreworICAgIGlmICghbV93
ZWJydGNCaW4pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBHU1RfREVCVUdf
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICIlenUgc3RyZWFtcyBpbiBpbml0IGRhdGEiLCBpbml0
LnN0cmVhbXMuc2l6ZSgpKTsKKworICAgIC8vIEZJWE1FOiBTaG91bGQgd2UgYnVpbGQgdGhlIGNh
cHMgZnJvbSB0aGUgaW5pdC5zZW5kRW5jb2RpbmdzPyBQcm9ibGVtIGlzIHRoZXJlIGlzIG5vCisg
ICAgLy8gZW5jb2RpbmdOYW1lIG9yIGNsb2NrUmF0ZSBpbiBSVENSdHBFbmNvZGluZ1BhcmFtZXRl
cnMuCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxjb25zdCBjaGFyKiwgaW50Pj4gZW5jb2RpbmdzOwor
ICAgIGNvbnN0IGNoYXIqIG1lZGlhID0ga2luZC51dGY4KCkuZGF0YSgpOworICAgIGlmIChraW5k
ID09ICJ2aWRlbyJfcykgeworICAgICAgICBlbmNvZGluZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0
eSgzKTsKKyAgICAgICAgZW5jb2RpbmdzLmFwcGVuZCh7ICJWUDgiLCA5MDAwMCB9KTsKKyAgICAg
ICAgZW5jb2RpbmdzLmFwcGVuZCh7ICJWUDkiLCA5MDAwMCB9KTsKKyAgICAgICAgZW5jb2Rpbmdz
LmFwcGVuZCh7ICJIMjY0IiwgOTAwMDAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jb2Rp
bmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7CisgICAgICAgIGVuY29kaW5ncy5hcHBlbmQo
eyAiT1BVUyIsIDQ4MDAwIH0pOworICAgIH0KKworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZm9yIChhdXRvJiBbZW5jb2RpbmdOYW1lLCBjbG9j
a1JhdGVdIDogZW5jb2RpbmdzKSB7CisgICAgICAgIGdzdF9jYXBzX2FwcGVuZChjYXBzLmdldCgp
LCBnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LXJ0cCIsICJtZWRpYSIsIEdfVFlQ
RV9TVFJJTkcsIG1lZGlhLCAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGVuY29kaW5n
TmFtZSwKKyAgICAgICAgICAgICJwYXlsb2FkIiwgR19UWVBFX0lOVCwgbV9wdENvdW50ZXIrKywg
ImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCBjbG9ja1JhdGUsIG51bGxwdHIpKTsKKyAgICB9CisK
KyAgICBhdXRvIGRpcmVjdGlvbiA9IGZyb21SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihpbml0
LmRpcmVjdGlvbik7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gZGVzYyhnX2VudW1fdG9fc3RyaW5nKEdTVF9UWVBFX1dFQlJUQ19SVFBfVFJBTlND
RUlWRVJfRElSRUNUSU9OLCBkaXJlY3Rpb24pKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJBZGRpbmcgJXMgdHJhbnNjZWl2ZXIgZm9yIHBheWxvYWQgJSIgR1NUX1BU
Ul9GT1JNQVQsIGRlc2MuZ2V0KCksIGNhcHMuZ2V0KCkpOworI2VuZGlmCisKKyAgICAvLyBGSVhN
RTogTm9uZSBvZiB0aGlzIChleGNlcHRlZCBkaXJlY3Rpb24pIGlzIHBhc3NlZCB0byB3ZWJydGNi
aW4geWV0LgorICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBpbml0RGF0YShnc3Rfc3RydWN0
dXJlX25ldygidHJhbnNjZWl2ZXItaW5pdC1kYXRhIiwgImRpcmVjdGlvbiIsIEdTVF9UWVBFX1dF
QlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OLCBkaXJlY3Rpb24sIG51bGxwdHIpKTsKKwor
ICAgIEdWYWx1ZSBzdHJlYW1JZHNWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICBnX3ZhbHVlX2lu
aXQoJnN0cmVhbUlkc1ZhbHVlLCBHU1RfVFlQRV9MSVNUKTsKKyAgICBmb3IgKGF1dG8mIHN0cmVh
bSA6IGluaXQuc3RyZWFtcykgeworICAgICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7
CisgICAgICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdfVFlQRV9TVFJJTkcpOworICAgICAgICBn
X3ZhbHVlX3NldF9zdHJpbmcoJnZhbHVlLCBzdHJlYW0tPmlkKCkudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSgmc3RyZWFtSWRzVmFsdWUsICZ2YWx1
ZSk7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKKyAgICB9CisgICAgZ3N0X3N0cnVj
dHVyZV90YWtlX3ZhbHVlKGluaXREYXRhLmdldCgpLCAic3RyZWFtLWlkcyIsICZzdHJlYW1JZHNW
YWx1ZSk7CisKKyAgICBHVmFsdWUgZW5jb2RpbmdzVmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAg
Z192YWx1ZV9pbml0KCZlbmNvZGluZ3NWYWx1ZSwgR1NUX1RZUEVfTElTVCk7CisgICAgaWYgKGtp
bmQgPT0gImF1ZGlvIikgeworICAgICAgICBpZiAoIWluaXQuc2VuZEVuY29kaW5ncy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RpbmdEYXRhID0gZnJvbVJUQ0VuY29kaW5nUGFy
YW1ldGVycyhpbml0LnNlbmRFbmNvZGluZ3NbMF0pOworICAgICAgICAgICAgR1ZhbHVlIHZhbHVl
ID0gR19WQUxVRV9JTklUOworICAgICAgICAgICAgZ192YWx1ZV9pbml0KCZ2YWx1ZSwgR1NUX1RZ
UEVfU1RSVUNUVVJFKTsKKyAgICAgICAgICAgIGdzdF92YWx1ZV9zZXRfc3RydWN0dXJlKCZ2YWx1
ZSwgZW5jb2RpbmdEYXRhLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVu
ZF92YWx1ZSgmZW5jb2RpbmdzVmFsdWUsICZ2YWx1ZSk7CisgICAgICAgICAgICBnX3ZhbHVlX3Vu
c2V0KCZ2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGF1dG8m
IGVuY29kaW5nIDogaW5pdC5zZW5kRW5jb2RpbmdzKSB7CisgICAgICAgICAgICBhdXRvIGVuY29k
aW5nRGF0YSA9IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoZW5jb2RpbmcpOworICAgICAgICAg
ICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOworICAgICAgICAgICAgZ192YWx1ZV9pbml0
KCZ2YWx1ZSwgR1NUX1RZUEVfU1RSVUNUVVJFKTsKKyAgICAgICAgICAgIGdzdF92YWx1ZV9zZXRf
c3RydWN0dXJlKCZ2YWx1ZSwgZW5jb2RpbmdEYXRhLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF92
YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSgmZW5jb2RpbmdzVmFsdWUsICZ2YWx1ZSk7CisgICAgICAg
ICAgICBnX3ZhbHVlX3Vuc2V0KCZ2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZ3N0X3N0
cnVjdHVyZV90YWtlX3ZhbHVlKGluaXREYXRhLmdldCgpLCAiZW5jb2RpbmdzIiwgJmVuY29kaW5n
c1ZhbHVlKTsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHJ0Y1RyYW5z
Y2VpdmVyOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImFk
ZC10cmFuc2NlaXZlciIsIGRpcmVjdGlvbiwgY2Fwcy5nZXQoKSwgJnJ0Y1RyYW5zY2VpdmVyLm91
dFB0cigpKTsKKyAgICBpZiAoIXJ0Y1RyYW5zY2VpdmVyKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgYXV0byB0cmFuc2NlaXZlciA9IG1ha2VVbmlxdWU8R1N0cmVhbWVyUnRw
VHJhbnNjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJ0Y1RyYW5zY2VpdmVyKSk7CisgICAgcmV0dXJu
IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkJhY2tlbmRzIHsgdHJhbnNjZWl2ZXItPmNyZWF0ZVNl
bmRlckJhY2tlbmQobV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQsIFdURk1vdmUoc291cmNlKSwgV1RG
TW92ZShpbml0RGF0YSkpLCB0cmFuc2NlaXZlci0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCksIFdU
Rk1vdmUodHJhbnNjZWl2ZXIpIH07Cit9CisKK3N0ZDo6b3B0aW9uYWw8R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYW5zY2VpdmVy
KGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGlu
aXQpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHModHJhY2tLaW5kLCBp
bml0LCBudWxscHRyKTsKK30KKworR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlIEdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNvdXJjZUZvclRyYWNrKE1lZGlhU3RyZWFtVHJh
Y2smIHRyYWNrKQoreworICAgIGlmICh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNBdWRpbygpKQor
ICAgICAgICByZXR1cm4gUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpjcmVh
dGUodHJhY2sucHJpdmF0ZVRyYWNrKCkpOworCisgICAgUkVMRUFTRV9BU1NFUlQodHJhY2sucHJp
dmF0ZVRyYWNrKCkuaGFzVmlkZW8oKSk7CisgICAgcmV0dXJuIFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsKK30KKworc3Rk
OjpvcHRpb25hbDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6YWRkVHJhbnNjZWl2ZXIoTWVkaWFTdHJlYW1UcmFjayYgdHJhY2ssIGNvbnN0
IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlVHJhbnNj
ZWl2ZXJCYWNrZW5kcyh0cmFjay5raW5kKCksIGluaXQsIGNyZWF0ZVNvdXJjZUZvclRyYWNrKHRy
YWNrKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0U2VuZGVyU291cmNl
RnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJikK
K3sKKyAgICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJzZXRTZW5kZXJTb3Vy
Y2VGcm9tVHJhY2siKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1ZV9w
dHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50
Ojp0cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQm
IGJhY2tlbmQpCit7CisgICAgR1JlZlB0cjxHQXJyYXk+IHRyYW5zY2VpdmVyczsKKyAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJnZXQtdHJhbnNjZWl2ZXJzIiwg
JnRyYW5zY2VpdmVycy5vdXRQdHIoKSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxp
bmUuZ2V0KCksICJMb29raW5nIGZvciBzZW5kZXIgJXAgaW4gJXUgZXhpc3RpbmcgdHJhbnNjZWl2
ZXJzIiwgYmFja2VuZC5ydGNTZW5kZXIoKSwgdHJhbnNjZWl2ZXJzLT5sZW4pOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0cmFuc2NlaXZlcnMtPmxlbjsgaSsrKSB7CisgICAgICAgIEdz
dFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBjdXJyZW50ID0gZ19hcnJheV9pbmRleCh0cmFuc2NlaXZl
cnMuZ2V0KCksIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiwgaSk7CisgICAgICAgIEdSZWZQdHI8
R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXI7CisgICAgICAgIGdfb2JqZWN0X2dldChjdXJyZW50
LCAic2VuZGVyIiwgJnNlbmRlci5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICAgICAgaWYgKCFz
ZW5kZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHNlbmRlci5nZXQoKSA9
PSBiYWNrZW5kLnJ0Y1NlbmRlcigpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1
ZTxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KGN1cnJlbnQpOworICAgIH0KKworICAg
IHJldHVybiBudWxscHRyOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZElj
ZUNhbmRpZGF0ZShHU3RyZWFtZXJJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyBJQ0UgY2FuZGlkYXRlICVz
IiwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghY2FuZGlk
YXRlLmNhbmRpZGF0ZS5zdGFydHNXaXRoKCJjYW5kaWRhdGU6IikpIHsKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxiYWNrKSldKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICB0YXNrLT5ydW4oRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJy
b3IsICJFeHBlY3QgbGluZTogY2FuZGlkYXRlOjxjYW5kaWRhdGUtc3RyPiIgfSk7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBwYXJzZWRDYW5kaWRhdGUg
PSBwYXJzZUljZUNhbmRpZGF0ZVNEUChjYW5kaWRhdGUuY2FuZGlkYXRlKTsKKyAgICBpZiAoIXBh
cnNlZENhbmRpZGF0ZSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gY3JlYXRl
U2hhcmVkVGFzazxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNr
RnVuY3Rpb24+KFdURk1vdmUoY2FsbGJhY2spKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHRh
c2stPnJ1bihFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgIkVycm9yIHByb2Nlc3NpbmcgSUNF
IGNhbmRpZGF0ZSIgfSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gRklYTUU6IGludmFsaWQgc2RwTUxpbmVJbmRleCBleGNlcHRpb24gbm90IHJlbGF5ZWQg
ZnJvbSB3ZWJydGNiaW4uCisgICAgLy8gRklYTUU6IElkZWFsbHkgdGhpcyBzaG91bGQgcGFzcyB0
aGUgcmVzdWx0L2Vycm9yIHRvIGEgR3N0UHJvbWlzZSBvYmplY3QuCisgICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiYWRkLWljZS1jYW5kaWRhdGUiLCBjYW5kaWRh
dGUuc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gY3JlYXRlU2hhcmVkVGFzazxQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrRnVuY3Rpb24+KFdURk1vdmUoY2FsbGJh
Y2spKSwgZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0JpbihtX3dlYnJ0Y0Jp
bi5nZXQoKSldKCkgbXV0YWJsZSB7CisgICAgICAgIHRhc2stPnJ1bihXVEZNb3ZlKGRlc2NyaXB0
aW9ucykpOworICAgIH0pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5k
bGVyPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbChjb25zdCBTdHJp
bmcmIGxhYmVsLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmIG9wdGlvbnMpCit7CisgICAgaWYg
KCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGluaXQg
PSBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmZyb21SVENEYXRhQ2hhbm5lbEluaXQob3B0
aW9ucyk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ3JlYXRpbmcg
ZGF0YSBjaGFubmVsIGZvciBpbml0IG9wdGlvbnMgJSIgR1NUX1BUUl9GT1JNQVQsIGluaXQuZ2V0
KCkpOworICAgIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGNoYW5uZWw7CisgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiY3JlYXRlLWRhdGEtY2hhbm5l
bCIsIGxhYmVsLnV0ZjgoKS5kYXRhKCksIGluaXQuZ2V0KCksICZjaGFubmVsLm91dFB0cigpKTsK
KyAgICBpZiAoIWNoYW5uZWwpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI+KFdURk1vdmUoY2hh
bm5lbCkpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uRGF0YUNoYW5uZWwo
R3N0V2ViUlRDRGF0YUNoYW5uZWwqIGRhdGFDaGFubmVsKQoreworICAgIEdTVF9ERUJVR19PQkpF
Q1QobV9waXBlbGluZS5nZXQoKSwgIkluY29taW5nIGRhdGEgY2hhbm5lbCIpOworICAgIEdSZWZQ
dHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGNoYW5uZWwgPSBkYXRhQ2hhbm5lbDsKKyAgICBjYWxs
T25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgZGF0YUNoYW5uZWwgPSBX
VEZNb3ZlKGNoYW5uZWwpXSgpIG11dGFibGUgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBy
b3RlY3RlZFRoaXMtPm1fcGlwZWxpbmUuZ2V0KCksICJJbmNvbWluZyBkYXRhIGNoYW5uZWwgMSIp
OworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdGVkVGhpcy0+bV9waXBlbGlu
ZS5nZXQoKSwgIkluY29taW5nIGRhdGEgY2hhbm5lbCAyIik7CisgICAgICAgIGF1dG8mIGNvbm5l
Y3Rpb24gPSBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jb25uZWN0aW9u
KCk7CisgICAgICAgIGNvbm5lY3Rpb24uZGlzcGF0Y2hFdmVudChHU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXI6OmNoYW5uZWxFdmVudCgqY29ubmVjdGlvbi5kb2N1bWVudCgpLCBXVEZNb3ZlKGRh
dGFDaGFubmVsKSkpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmNsb3NlKCkKK3sKKyAgICAvLyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVh
bWVyL2dzdC1wbHVnaW5zLWJhZC8tL2lzc3Vlcy8xMTgxCisgICAgR1NUX0RFQlVHX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiQ2xvc2luZyIpOworICAgIGlmIChtX3BpcGVsaW5lKQorICAgICAg
ICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1JFQURZ
KTsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0b3BMb2dnaW5nU3RhdHMoKTsK
KyNlbmRpZgorfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0b3AoKQoreworI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0b3BMb2dnaW5nU3RhdHMoKTsKKyNlbmRpZgor
CisgICAgaWYgKCFtX3BpcGVsaW5lKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUdf
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTdG9wcGluZyIpOworICAgIHRlYXJkb3duUGlwZWxp
bmUoKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdXNwZW5kKCkKK3sKKyAg
ICBpZiAoIW1fcGlwZWxpbmUpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVR19PQkpF
Q1QobV9waXBlbGluZS5nZXQoKSwgIlN1c3BlbmRpbmciKTsKKyAgICBnc3RfZWxlbWVudF9zZXRf
c3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BBVVNFRCk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVzdW1lKCkKK3sKKyAgICBpZiAoIW1fcGlwZWxpbmUpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwg
IlJlc3VtaW5nIik7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
IEdTVF9TVEFURV9QTEFZSU5HKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpv
bk5lZ290aWF0aW9uTmVlZGVkKCkKK3sKKyAgICBtX2lzTmVnb3RpYXRpb25OZWVkZWQgPSB0cnVl
OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ2hlY2tpbmcgbmVn
b3RpYXRpb24gc3RhdHVzIik7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlz
ID0gUmVmKCp0aGlzKV0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdGVk
VGhpcy0+bV9waXBlbGluZS5nZXQoKSwgIk5lZ290aWF0aW9uIG5lZWRlZCEiKTsKKyAgICAgICAg
cHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQubWFya0FzTmVlZGluZ05lZ290
aWF0aW9uKDApOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9u
SWNlQ29ubmVjdGlvbkNoYW5nZSgpCit7CisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRl
IHN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImljZS1jb25uZWN0
aW9uLXN0YXRlIiwgJnN0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90
ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgY29ubmVjdGlvblN0YXRlID0gdG9SVENJY2VDb25uZWN0
aW9uU3RhdGUoc3RhdGUpXSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQo
KSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgY29ubmVjdGlvbiA9IHByb3Rl
Y3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNvbm5lY3Rpb24oKTsKKyAgICAgICAg
aWYgKGNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKCkgIT0gY29ubmVjdGlvblN0YXRlKQor
ICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJY2VDb25uZWN0aW9uU3RhdGUoY29ubmVjdGlv
blN0YXRlKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpvbklj
ZUdhdGhlcmluZ0NoYW5nZSgpCit7CisgICAgR3N0V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgc3Rh
dGU7CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAiaWNlLWdhdGhlcmluZy1z
dGF0ZSIsICZzdGF0ZSwgbnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVk
VGhpcyA9IFJlZigqdGhpcyksIHN0YXRlXSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5p
c1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgY29ubmVjdGlv
biA9IHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNvbm5lY3Rpb24oKTsK
KyAgICAgICAgaWYgKHN0YXRlID09IEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9DT01Q
TEVURSkKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5k
LmRvbmVHYXRoZXJpbmdDYW5kaWRhdGVzKCk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlID09IEdT
VF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9HQVRIRVJJTkcpCisgICAgICAgICAgICBjb25u
ZWN0aW9uLnVwZGF0ZUljZUdhdGhlcmluZ1N0YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpHYXRo
ZXJpbmcpOworICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJ
TkdfU1RBVEVfTkVXKQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJY2VHYXRoZXJpbmdT
dGF0ZShSVENJY2VHYXRoZXJpbmdTdGF0ZTo6TmV3KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUNhbmRpZGF0ZShndWludCBzZHBNTGluZUluZGV4LCBn
Y2hhcmFycmF5IGNhbmRpZGF0ZSkKK3sKKyAgICAvLyBGSVhNRTogR2V0IG1pZCBmcm9tIGNhbmRp
ZGF0ZT8KKyAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVz
Y3JpcHRpb247CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAibG9jYWwtZGVz
Y3JpcHRpb24iLCAmZGVzY3JpcHRpb24ub3V0UHRyKCksIG51bGxwdHIpOworICAgIGlmICghZGVz
Y3JpcHRpb24pCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEdzdFNEUE1lZGlhKiBtZWRp
YSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEoZGVzY3JpcHRpb24tPnNkcCwgc2RwTUxpbmVJ
bmRleCk7CisgICAgU3RyaW5nIGNhbmRpZGF0ZU1pZChnc3Rfc2RwX21lZGlhX2dldF9hdHRyaWJ1
dGVfdmFsKG1lZGlhLCAibWlkIikpOworICAgIFN0cmluZyBjYW5kaWRhdGVTRFAoY2FuZGlkYXRl
KTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgbWlk
ID0gV1RGTW92ZShjYW5kaWRhdGVNaWQpLCBzZHAgPSBXVEZNb3ZlKGNhbmRpZGF0ZVNEUCksIHNk
cE1MaW5lSW5kZXgsIGRlc2NyaXB0aW9ucyA9IGRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4obV93
ZWJydGNCaW4uZ2V0KCkpXSgpIG11dGFibGUgeworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+
aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHByb3RlY3RlZFRoaXMt
Pm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLm5ld0lDRUNhbmRpZGF0ZShXVEZNb3ZlKHNkcCksIFdU
Rk1vdmUobWlkKSwgc2RwTUxpbmVJbmRleCwgeyB9LCBXVEZNb3ZlKGRlc2NyaXB0aW9ucykpOwor
ICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25E
ZXNjcmlwdGlvblN1Y2NlZWRlZChHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlw
dGlvbj4mJiBkZXNjcmlwdGlvbikKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRU
aGlzID0gUmVmKCp0aGlzKSwgZGVzY3JpcHRpb24gPSBkZXNjcmlwdGlvbi5yZWxlYXNlKCldIHsK
KyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gc2RwKGdzdF9zZHBfbWVzc2FnZV9hc190
ZXh0KGRlc2NyaXB0aW9uLT5zZHApKTsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1faXNJ
bml0aWF0b3IpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFj
a2VuZC5jcmVhdGVPZmZlclN1Y2NlZWRlZChzZHAuZ2V0KCkpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3
ZXJTdWNjZWVkZWQoc2RwLmdldCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1ZU91dFB0cjxH
RXJyb3I+JiYgZXJyb3IpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9
IFJlZigqdGhpcyksIGVycm9yID0gZXJyb3IucmVsZWFzZSgpXSB7CisgICAgICAgIGlmIChwcm90
ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBh
dXRvIGV4YyA9IEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCBlcnJvciA/IGVycm9yLT5tZXNz
YWdlIDogIlVua25vd24gRXJyb3IiIH07CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2lz
SW5pdGlhdG9yKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuY3JlYXRlT2ZmZXJGYWlsZWQoV1RGTW92ZShleGMpKTsKKyAgICAgICAgZWxzZQorICAg
ICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3JlYXRlQW5z
d2VyRmFpbGVkKFdURk1vdmUoZXhjKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6Y29sbGVjdFRyYW5zY2VpdmVycygpCit7CisgICAgR1JlZlB0cjxHQXJyYXk+
IHRyYW5zY2VpdmVyczsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0
KCksICJnZXQtdHJhbnNjZWl2ZXJzIiwgJnRyYW5zY2VpdmVycy5vdXRQdHIoKSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IHRyYW5zY2VpdmVycy0+bGVuOyBpKyspIHsKKyAgICAgICAg
R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIGN1cnJlbnQgPSBnX2FycmF5X2luZGV4KHRyYW5zY2Vp
dmVycy5nZXQoKSwgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqLCBpKTsKKworICAgICAgICBhdXRv
KiBleGlzdGluZ1RyYW5zY2VpdmVyID0gbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuZXhpc3RpbmdU
cmFuc2NlaXZlcihbJl0oYXV0byYgdHJhbnNjZWl2ZXJCYWNrZW5kKSB7CisgICAgICAgICAgICBy
ZXR1cm4gY3VycmVudCA9PSB0cmFuc2NlaXZlckJhY2tlbmQucnRjVHJhbnNjZWl2ZXIoKTsKKyAg
ICAgICAgfSk7CisgICAgICAgIGlmIChleGlzdGluZ1RyYW5zY2VpdmVyKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gcmVjZWl2
ZXI7CisgICAgICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gbWlkOworICAgICAgICBnX29iamVjdF9n
ZXQoY3VycmVudCwgInJlY2VpdmVyIiwgJnJlY2VpdmVyLm91dFB0cigpLCAibWlkIiwgJm1pZC5v
dXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICAgICAgaWYgKCFyZWNlaXZlcikKKyAgICAgICAgICAg
IGNvbnRpbnVlOworCisgICAgICAgIGlmICghbWlkKQorICAgICAgICAgICAgY29udGludWU7CisK
KyAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQubmV3UmVtb3RlVHJhbnNjZWl2ZXIoV1RG
OjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4oV1RGTW92ZShjdXJy
ZW50KSksIG1fbWVkaWFGb3JNaWQuZ2V0KG1pZC5nZXQoKSkpOworICAgIH0KK30KKworI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnYXRoZXJT
dGF0c0ZvckxvZ2dpbmcoKQoreworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jp
bi5nZXQoKSwgImdldC1zdGF0cyIsIG51bGxwdHIsIGdzdF9wcm9taXNlX25ld193aXRoX2NoYW5n
ZV9mdW5jKFtdKEdzdFByb21pc2UqIHByb21pc2UsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAg
ICAgIGF1dG8gcmVzdWx0ID0gZ3N0X3Byb21pc2Vfd2FpdChwcm9taXNlKTsKKyAgICAgICAgYXV0
byBjbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICAgICAgZ3N0X3Byb21pc2Vf
dW5yZWYocHJvbWlzZSk7CisgICAgICAgIH0pOworICAgICAgICBpZiAocmVzdWx0ICE9IEdTVF9Q
Uk9NSVNFX1JFU1VMVF9SRVBMSUVEKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNv
bnN0IGF1dG8qIHJlcGx5ID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UpOworICAgICAg
ICBSRUxFQVNFX0FTU0VSVChyZXBseSk7CisgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19m
aWVsZChyZXBseSwgImVycm9yIikpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0
byogZW5kUG9pbnQgPSByZWludGVycHJldF9jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqPih1
c2VyRGF0YSk7CisgICAgICAgIGVuZFBvaW50LT5vblN0YXRzRGVsaXZlcmVkKHJlcGx5KTsKKyAg
ICB9LCB0aGlzLCBudWxscHRyKSk7Cit9CisKK2NsYXNzIFJUQ1N0YXRzTG9nZ2VyIHsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBSVENTdGF0c0xvZ2dlcihjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0YXRz
KQorICAgICAgICA6IG1fc3RhdHMoc3RhdHMpCisgICAgeyB9CisKKyAgICBTdHJpbmcgdG9KU09O
U3RyaW5nKCkgY29uc3QgeyByZXR1cm4gZ3N0U3RydWN0dXJlVG9KU09OU3RyaW5nKG1fc3RhdHMp
OyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgR3N0U3RydWN0dXJlKiBtX3N0YXRzOworfTsKKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpwcm9jZXNzU3RhdHMoY29uc3QgR1ZhbHVlKiB2
YWx1ZSkKK3sKKyAgICBpZiAoIUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUodmFsdWUpKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF92
YWx1ZV9nZXRfc3RydWN0dXJlKHZhbHVlKTsKKyAgICBHc3RXZWJSVENTdGF0c1R5cGUgc3RhdHNU
eXBlOworICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXQoc3RydWN0dXJlLCAidHlwZSIsIEdTVF9U
WVBFX1dFQlJUQ19TVEFUU19UWVBFLCAmc3RhdHNUeXBlLCBudWxscHRyKSkKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gSnVzdCBjaGVjayBhIHNpbmdsZSB0aW1lc3RhbXAsIGluYm91bmQgUlRQ
IGZvciBpbnN0YW5jZS4KKyAgICBpZiAoIW1fc3RhdHNGaXJzdERlbGl2ZXJlZFRpbWVzdGFtcCAm
JiBzdGF0c1R5cGUgPT0gR1NUX1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUCkgeworICAgICAgICBk
b3VibGUgdGltZXN0YW1wOworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHN0
cnVjdHVyZSwgInRpbWVzdGFtcCIsICZ0aW1lc3RhbXApKSB7CisgICAgICAgICAgICBhdXRvIHRz
ID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyh0aW1lc3RhbXApOworICAgICAgICAgICAgbV9z
dGF0c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wID0gdHM7CisKKyAgICAgICAgICAgIGlmICghaXNT
dG9wcGVkKCkgJiYgbV9zdGF0c0xvZ1RpbWVyLnJlcGVhdEludGVydmFsKCkgIT0gc3RhdHNMb2dJ
bnRlcnZhbCh0cykpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRzTG9nVGltZXIuc3RvcCgpOwor
ICAgICAgICAgICAgICAgIG1fc3RhdHNMb2dUaW1lci5zdGFydFJlcGVhdGluZyhzdGF0c0xvZ0lu
dGVydmFsKHRzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAo
bG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIFdURkxvZ0xldmVsOjpEZWJ1ZykpIHsKKyAg
ICAgICAgLy8gU3RhdHMgYXJlIHZlcnkgdmVyYm9zZSwgbGV0J3Mgb25seSBkaXNwbGF5IHRoZW0g
aW4gaW5zcGVjdG9yIGNvbnNvbGUgaW4gdmVyYm9zZSBtb2RlLgorICAgICAgICBsb2dnZXIoKS5k
ZWJ1ZyhMb2dXZWJSVEMsCisgICAgICAgICAgICBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKCJH
U3RyZWFtZXJNZWRpYUVuZHBvaW50IiwgIm9uU3RhdHNEZWxpdmVyZWQiLCBsb2dJZGVudGlmaWVy
KCkpLAorICAgICAgICAgICAgUlRDU3RhdHNMb2dnZXIgeyBzdHJ1Y3R1cmUgfSk7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgbG9nZ2VyKCkubG9nQWx3YXlzKExvZ1dlYlJUQ1N0YXRzLAorICAgICAg
ICAgICAgTG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcigiR1N0cmVhbWVyTWVkaWFFbmRwb2ludCIs
ICJvblN0YXRzRGVsaXZlcmVkIiwgbG9nSWRlbnRpZmllcigpKSwKKyAgICAgICAgICAgIFJUQ1N0
YXRzTG9nZ2VyIHsgc3RydWN0dXJlIH0pOworICAgIH0KK30KKworCit2b2lkIEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6Om9uU3RhdHNEZWxpdmVyZWQoY29uc3QgR3N0U3RydWN0dXJlKiBzdGF0cykK
K3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gc3RhdHNDb3B5KGdzdF9zdHJ1Y3R1cmVf
Y29weShzdGF0cykpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYo
KnRoaXMpLCB0aGlzLCBzdGF0cyA9IHN0YXRzQ29weS5yZWxlYXNlKCldIHsKKyAgICAgICAgZ3N0
X3N0cnVjdHVyZV9mb3JlYWNoKHN0YXRzLCBzdGF0aWNfY2FzdDxHc3RTdHJ1Y3R1cmVGb3JlYWNo
RnVuYz4oW10oR1F1YXJrLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkg
LT4gZ2Jvb2xlYW4geworICAgICAgICAgICAgYXV0byogZW5kUG9pbnQgPSByZWludGVycHJldF9j
YXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBlbmRQ
b2ludC0+cHJvY2Vzc1N0YXRzKHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAg
ICAgICB9KSwgdGhpcyk7CisgICAgfSk7Cit9CisjZW5kaWYKKworI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdGFydExvZ2dpbmdTdGF0cygp
Cit7CisgICAgaWYgKG1fc3RhdHNMb2dUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3N0YXRz
TG9nVGltZXIuc3RvcCgpOworICAgIG1fc3RhdHNMb2dUaW1lci5zdGFydFJlcGVhdGluZyhzdGF0
c0xvZ0ludGVydmFsKFNlY29uZHM6Om5hbigpKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6c3RvcExvZ2dpbmdTdGF0cygpCit7CisgICAgbV9zdGF0c0xvZ1RpbWVyLnN0b3Ao
KTsKK30KKworV1RGTG9nQ2hhbm5lbCYgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6bG9nQ2hhbm5l
bCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIExvZ1dlYlJUQzsKK30KKworU2Vjb25kcyBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpzdGF0c0xvZ0ludGVydmFsKFNlY29uZHMgcmVwb3J0VGltZXN0YW1w
KSBjb25zdAoreworICAgIGlmIChsb2dnZXIoKS53aWxsTG9nKGxvZ0NoYW5uZWwoKSwgV1RGTG9n
TGV2ZWw6OkluZm8pKQorICAgICAgICByZXR1cm4gMl9zOworCisgICAgaWYgKHJlcG9ydFRpbWVz
dGFtcCAtIG1fc3RhdHNGaXJzdERlbGl2ZXJlZFRpbWVzdGFtcCA+IDE1X3MpCisgICAgICAgIHJl
dHVybiAxMF9zOworCisgICAgcmV0dXJuIDRfczsKK30KKyNlbmRpZgorCit2b2lkIEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUoRnVuY3Rpb248
dm9pZChTdHJpbmcmJik+JiYgY2FsbGJhY2spCit7CisgICAgLy8gVE9ETzogY29sbGVjdCBzdGF0
cyBhbmQgbG9va3VwIEluYm91bmRSdHAgImRlY29kZXJfaW1wbGVtZW50YXRpb24iIGZpZWxkLgor
ICAgIGNhbGxiYWNrKHsgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1l
IFR5cGU+CitzdHJ1Y3QgTG9nQXJndW1lbnQ7CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgTG9nQXJn
dW1lbnQ8V2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHRvU3Ry
aW5nKGNvbnN0IFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyJiBsb2dnZXIpCisgICAgeworICAgICAg
ICByZXR1cm4gU3RyaW5nKGxvZ2dlci50b0pTT05TdHJpbmcoKSk7CisgICAgfQorfTsKKworfTsg
Ly8gbmFtZXNwYWNlIFdURgorI2VuZGlmIC8vICFSRUxFQVNFX0xPR19ESVNBQkxFRAorCisjZW5k
aWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRp
YUVuZHBvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzcwMzJiNGM5ZTA4YWQ5NDcxOThmNzM3MDRhMDJlNjFk
NDQwNTljOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaApAQCAtMCwwICsxLDE5MyBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU3RhdHNDb2xsZWN0
b3IuaCIKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRDUnRw
UmVjZWl2ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KKyNpbmNsdWRlIDx3
dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kOworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOworY2xhc3MgTWVk
aWFTdHJlYW1UcmFjazsKK2NsYXNzIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbjsKK2NsYXNzIFJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjsKKworY2xhc3MgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHU3RyZWFtZXJNZWRpYUVuZHBv
aW50LCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPgorI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAorICAgICwgcHJpdmF0ZSBMb2dnZXJIZWxwZXIKKyNlbmRpZgoreworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gY3JlYXRlKEdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZCYgcGVlckNvbm5lY3Rpb24pIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
R1N0cmVhbWVyTWVkaWFFbmRwb2ludChwZWVyQ29ubmVjdGlvbikpOyB9CisgICAgdmlydHVhbCB+
R1N0cmVhbWVyTWVkaWFFbmRwb2ludCgpOworCisgICAgYm9vbCBzZXRDb25maWd1cmF0aW9uKE1l
ZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJik7CisgICAgdm9pZCByZXN0YXJ0SWNlKCk7CisKKyAg
ICB2b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24q
KTsKKyAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uJik7CisgICAgdm9pZCBkb0NyZWF0ZU9mZmVyKGNvbnN0IFJUQ09mZmVyT3B0aW9ucyYp
OworICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoKTsKKworICAgIHZvaWQgZ2V0U3RhdHMoR3N0UGFk
KiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0
YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbChjb25zdCBTdHJpbmcmLCBjb25zdCBS
VENEYXRhQ2hhbm5lbEluaXQmKTsKKyAgICB2b2lkIG9uRGF0YUNoYW5uZWwoR3N0V2ViUlRDRGF0
YUNoYW5uZWwqKTsKKworICAgIHZvaWQgYWRkSWNlQ2FuZGlkYXRlKEdTdHJlYW1lckljZUNhbmRp
ZGF0ZSYsIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRlQ2FsbGJhY2smJik7
CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgYm9vbCBpc1N0b3Bw
ZWQoKSBjb25zdCB7IHJldHVybiAhbV9waXBlbGluZTsgfQorCisgICAgdm9pZCBzdXNwZW5kKCk7
CisgICAgdm9pZCByZXN1bWUoKTsKKworICAgIHZvaWQgZ2F0aGVyRGVjb2RlckltcGxlbWVudGF0
aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJik7CisgICAgYm9vbCBpc05lZ290aWF0
aW9uTmVlZGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc05lZ290aWF0aW9uTmVlZGVkOyB9CisKKyAg
ICB2b2lkIGNvbmZpZ3VyZUFuZExpbmtTb3VyY2UoUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyJik7CisKKyAgICBib29sIGFkZFRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQmLCBNZWRpYVN0cmVhbVRyYWNrJiwgY29uc3QgRml4ZWRWZWN0b3I8U3RyaW5nPiYpOworICAg
IHZvaWQgcmVtb3ZlVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYpOworCisgICAgc3Ry
dWN0IEJhY2tlbmRzIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ+IHNlbmRlckJhY2tlbmQ7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFt
ZXJSdHBSZWNlaXZlckJhY2tlbmQ+IHJlY2VpdmVyQmFja2VuZDsKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4gdHJhbnNjZWl2ZXJCYWNrZW5k
OworICAgIH07CisgICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gYWRkVHJhbnNjZWl2ZXIoY29u
c3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpOworICAg
IHN0ZDo6b3B0aW9uYWw8QmFja2VuZHM+IGFkZFRyYW5zY2VpdmVyKE1lZGlhU3RyZWFtVHJhY2sm
LCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiB0cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVy
KEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmKTsKKworICAgIHZvaWQgc2V0U2VuZGVyU291cmNl
RnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJik7
CisKKyAgICB2b2lkIGNvbGxlY3RUcmFuc2NlaXZlcnMoKTsKKworICAgIHZvaWQgY3JlYXRlU2Vz
c2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVkKEdVbmlxdWVPdXRQdHI8R3N0V2ViUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uPiYmKTsKKyAgICB2b2lkIGNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbkZhaWxlZChH
VW5pcXVlT3V0UHRyPEdFcnJvcj4mJik7CisKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIGNv
bnN0IHsgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0KCk7IH0KKyAgICBib29sIGhhbmRsZU1lc3NhZ2Uo
R3N0TWVzc2FnZSopOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9pZCBwcm9j
ZXNzU3RhdHMoY29uc3QgR1ZhbHVlKik7CisjZW5kaWYKKworcHJvdGVjdGVkOgorI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAorICAgIHZvaWQgb25TdGF0c0RlbGl2ZXJlZChjb25zdCBHc3RTdHJ1
Y3R1cmUqKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQo
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJik7CisKKyAgICBib29sIGluaXRpYWxpemVQ
aXBlbGluZSgpOworICAgIHZvaWQgdGVhcmRvd25QaXBlbGluZSgpOworICAgIHZvaWQgZGlzcG9z
ZUVsZW1lbnRDaGFpbihHc3RFbGVtZW50Kik7CisKKyAgICB2b2lkIHNldERlc2NyaXB0aW9uKGNv
bnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiosIGJvb2wgaXNMb2NhbCwgRnVuY3Rpb248dm9pZCgp
PiYmIHN1Y2Nlc3NDYWxsYmFjaywgRnVuY3Rpb248dm9pZChjb25zdCBHRXJyb3IqKT4mJiBmYWls
dXJlQ2FsbGJhY2spOworICAgIHZvaWQgaW5pdGlhdGUoYm9vbCBpc0luaXRpYXRvciwgR1VuaXF1
ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYpOworCisgICAgdm9pZCBvbk5lZ290aWF0aW9uTmVlZGVkKCk7
CisgICAgdm9pZCBvbkljZUNvbm5lY3Rpb25DaGFuZ2UoKTsKKyAgICB2b2lkIG9uSWNlR2F0aGVy
aW5nQ2hhbmdlKCk7CisgICAgdm9pZCBvbkljZUNhbmRpZGF0ZShndWludCBzZHBNTGluZUluZGV4
LCBnY2hhcmFycmF5IGNhbmRpZGF0ZSk7CisKKyAgICBNZWRpYVN0cmVhbSYgbWVkaWFTdHJlYW1G
cm9tUlRDU3RyZWFtKFN0cmluZyBsYWJlbCk7CisKKyAgICB2b2lkIGFkZFJlbW90ZVN0cmVhbShH
c3RQYWQqKTsKKyAgICB2b2lkIHJlbW92ZVJlbW90ZVN0cmVhbShHc3RQYWQqKTsKKworICAgIHN0
ZDo6b3B0aW9uYWw8QmFja2VuZHM+IGNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHMoY29uc3QgU3Ry
aW5nJiBraW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmLCBHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kOjpTb3VyY2UmJik7CisgICAgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291
cmNlIGNyZWF0ZVNvdXJjZUZvclRyYWNrKE1lZGlhU3RyZWFtVHJhY2smKTsKKworICAgIHZvaWQg
c3RvcmVSZW1vdGVNTGluZUluZm8oR3N0U0RQTWVzc2FnZSopOworCisgICAgR1JlZlB0cjxHc3RQ
YWQ+IHJlcXVlc3RQYWQodW5zaWduZWQgbWxpbmVJbmRleCwgY29uc3QgR1JlZlB0cjxHc3RDYXBz
PiYpOworCisgICAgdm9pZCBzZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZCgpOworCisjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9pZCBnYXRoZXJTdGF0c0ZvckxvZ2dpbmcoKTsK
KyAgICB2b2lkIHN0YXJ0TG9nZ2luZ1N0YXRzKCk7CisgICAgdm9pZCBzdG9wTG9nZ2luZ1N0YXRz
KCk7CisKKyAgICBjb25zdCBMb2dnZXImIGxvZ2dlcigpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
bG9nZ2VyLmdldCgpOyB9CisgICAgY29uc3Qgdm9pZCogbG9nSWRlbnRpZmllcigpIGNvbnN0IGZp
bmFsIHsgcmV0dXJuIG1fbG9nSWRlbnRpZmllcjsgfQorICAgIGNvbnN0IGNoYXIqIGxvZ0NsYXNz
TmFtZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuICJHU3RyZWFtZXJNZWRpYUVuZHBvaW50IjsgfQor
ICAgIFdURkxvZ0NoYW5uZWwmIGxvZ0NoYW5uZWwoKSBjb25zdCBmaW5hbDsKKworICAgIFNlY29u
ZHMgc3RhdHNMb2dJbnRlcnZhbChTZWNvbmRzKSBjb25zdDsKKyNlbmRpZgorCisgICAgSGFzaE1h
cDxTdHJpbmcsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU+IG1fbWVkaWFGb3JNaWQ7CisgICAg
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSBtZWRpYVR5cGVGb3JNaWQoY29uc3QgY2hhciogbWlk
KTsKKworICAgIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgbV9wZWVyQ29ubmVjdGlv
bkJhY2tlbmQ7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3dlYnJ0Y0JpbjsKKyAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IG1fcGlwZWxpbmU7CisKKyAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PE1lZGlhU3RyZWFtPj4gbV9yZW1vdGVTdHJlYW1zQnlJZDsKKworICAgIHN0cnVjdCBQZW5kaW5n
TUxpbmVJbmZvIHsKKyAgICAgICAgR1JlZlB0cjxHc3RDYXBzPiBjYXBzOworICAgICAgICBib29s
IGlzVXNlZDsKKyAgICAgICAgVmVjdG9yPGludD4gcGF5bG9hZFR5cGVzOworICAgIH07CisgICAg
VmVjdG9yPFBlbmRpbmdNTGluZUluZm8+IG1fcmVtb3RlTUxpbmVJbmZvczsKKworICAgIFJlZjxH
U3RyZWFtZXJTdGF0c0NvbGxlY3Rvcj4gbV9zdGF0c0NvbGxlY3RvcjsKKworICAgIHVuc2lnbmVk
IG1fcmVxdWVzdFBhZENvdW50ZXIgeyAwIH07CisgICAgaW50IG1fcHRDb3VudGVyIHsgOTYgfTsK
KworICAgIHVuc2lnbmVkIG1fbWxpbmVJbmRleCB7IDAgfTsKKworICAgIFZlY3RvcjxSZWY8UmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyPj4gbV9zb3VyY2VzOworCisgICAgVmVj
dG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IG1fcGVuZGluZ1N0cmVhbXM7CisgICAgdW5zaWduZWQg
bV9wZW5kaW5nSW5jb21pbmdTdHJlYW1zIHsgMCB9OworCisgICAgYm9vbCBtX2lzSW5pdGlhdG9y
IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNOZWdvdGlhdGlvbk5lZWRlZCB7IGZhbHNlIH07CisK
KyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBUaW1lciBtX3N0YXRzTG9nVGltZXI7Cisg
ICAgU2Vjb25kcyBtX3N0YXRzRmlyc3REZWxpdmVyZWRUaW1lc3RhbXA7CisgICAgUmVmPGNvbnN0
IExvZ2dlcj4gbV9sb2dnZXI7CisgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyOworI2Vu
ZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmEzODRlY2RkYWY2NjJmNDA2MTk2YWNlZWZiN2E0
ZDUzNGE2NzJiYTYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCkBA
IC0wLDAgKzEsMzczIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgi
CisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFFbmRw
b2ludC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJY2VDYW5kaWRhdGUuaCIKKyNpbmNsdWRl
ICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRp
b24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJUQ0ljZUNhbmRp
ZGF0ZS5oIgorI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDUnRw
Q2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiUlRDUnRwUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJS
VENTZXNzaW9uRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFBlZXJDb25u
ZWN0aW9uQmFja2VuZD4gY3JlYXRlR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKFJUQ1Bl
ZXJDb25uZWN0aW9uJiBwZWVyQ29ubmVjdGlvbikKK3sKKyAgICBlbnN1cmVHU3RyZWFtZXJJbml0
aWFsaXplZCgpOworICAgIGlmICghaXNHU3RyZWFtZXJQbHVnaW5BdmFpbGFibGUoIndlYnJ0YyIp
KSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiR3N0V2ViUlRDIHBsdWdpbiBub3QgZm91bmQuIE1h
a2Ugc3VyZSB0byBpbnN0YWxsIGdzdC1wbHVnaW5zLWJhZCA+PSAxLjIwIHdpdGggdGhlIHdlYnJ0
YyBwbHVnaW4gZW5hYmxlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAg
IHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kPihw
ZWVyQ29ubmVjdGlvbik7Cit9CisKK0NyZWF0ZVBlZXJDb25uZWN0aW9uQmFja2VuZCBQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZSA9IGNyZWF0ZUdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDsKKworc3RkOjpvcHRpb25hbDxSVENSdHBDYXBhYmlsaXRpZXM+IFBlZXJDb25uZWN0aW9u
QmFja2VuZDo6cmVjZWl2ZXJDYXBhYmlsaXRpZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNv
bnN0IFN0cmluZyYga2luZCkKK3sKKyAgICBSVENSdHBDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVz
OworICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJodHRwOi8vd3d3
LmlldGYub3JnL2lkL2RyYWZ0LWhvbG1lci1ybWNhdC10cmFuc3BvcnQtd2lkZS1jYy1leHRlbnNp
b25zLTAxIiB9KTsKKyAgICBpZiAoa2luZCA9PSAiYXVkaW8iX3MpIHsKKyAgICAgICAgY2FwYWJp
bGl0aWVzLmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUgPSAiYXVkaW8vT1BVUyIsCisgICAgICAg
ICAgICAuY2xvY2tSYXRlID0gNDgwMDAsCisgICAgICAgICAgICAuY2hhbm5lbHMgPSAyLAorICAg
ICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIKKyAgICAgICAgfSk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgY2FwYWJpbGl0aWVzLmhlYWRlckV4dGVuc2lvbnMuYXBwZW5kKHsgInVybjozZ3BwOnZp
ZGVvLW9yaWVudGF0aW9uIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBlbmQo
eyAubWltZVR5cGUgPSAidmlkZW8vVlA4IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAw
MCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgICAgICBjYXBhYmlsaXRp
ZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDkiLAorICAgICAgICAgICAg
LmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gInByb2ZpbGUt
aWQ9MCIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBl
ID0gInZpZGVvL1ZQOSIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAg
ICAgICAuc2RwRm10cExpbmUgPSAicHJvZmlsZS1pZD0xIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0
aWVzLmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vSDI2NCIsCisgICAgICAgICAg
ICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIiB9KTsK
KyAgICB9CisgICAgcmV0dXJuIGNhcGFiaWxpdGllczsKK30KKworc3RkOjpvcHRpb25hbDxSVENS
dHBDYXBhYmlsaXRpZXM+IFBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2VuZGVyQ2FwYWJpbGl0aWVz
KFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIGtpbmQpCit7CisgICAgUlRD
UnRwQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICBjYXBhYmlsaXRpZXMuaGVhZGVyRXh0
ZW5zaW9ucy5hcHBlbmQoeyAiaHR0cDovL3d3dy5pZXRmLm9yZy9pZC9kcmFmdC1ob2xtZXItcm1j
YXQtdHJhbnNwb3J0LXdpZGUtY2MtZXh0ZW5zaW9ucy0wMSIgfSk7CisgICAgaWYgKGtpbmQgPT0g
ImF1ZGlvIl9zKSB7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVU
eXBlID0gImF1ZGlvL09QVVMiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDQ4MDAwLAorICAg
ICAgICAgICAgLmNoYW5uZWxzID0gMiwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0p
OworICAgIH0gZWxzZSB7CisgICAgICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25zLmFw
cGVuZCh7ICJ1cm46M2dwcDp2aWRlby1vcmllbnRhdGlvbiIgfSk7CisgICAgICAgIGNhcGFiaWxp
dGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL1ZQOCIsCisgICAgICAgICAg
ICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIiB9KTsK
KyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8v
VlA5IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBG
bXRwTGluZSA9ICJwcm9maWxlLWlkPTAiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNz
LmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDkiLAorICAgICAgICAgICAgLmNsb2NrUmF0
ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gInByb2ZpbGUtaWQ9MSIgfSk7
CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVv
L0gyNjQiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNk
cEZtdHBMaW5lID0gIiIgfSk7CisgICAgfQorICAgIHJldHVybiBjYXBhYmlsaXRpZXM7Cit9CisK
K0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kKFJUQ1BlZXJDb25uZWN0aW9uJiBwZWVyQ29ubmVjdGlvbikKKyAgICA6IFBlZXJDb25u
ZWN0aW9uQmFja2VuZChwZWVyQ29ubmVjdGlvbikKKyAgICAsIG1fZW5kcG9pbnQoR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6Y3JlYXRlKCp0aGlzKSkKK3sKKyAgICBkaXNhYmxlSUNFQ2FuZGlkYXRl
RmlsdGVyaW5nKCk7Cit9CisKK0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6fkdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCgpID0gZGVmYXVsdDsKKwordm9pZCBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnN1c3BlbmQoKQoreworICAgIG1fZW5kcG9pbnQtPnN1c3Bl
bmQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlc3VtZSgp
Cit7CisgICAgbV9lbmRwb2ludC0+cmVzdW1lKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpyZXN0YXJ0SWNlKCkKK3sKKyAgICBtX2VuZHBvaW50LT5yZXN0YXJ0
SWNlKCk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzZXRDb25m
aWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlvbikKK3sK
KyAgICByZXR1cm4gbV9lbmRwb2ludC0+c2V0Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsK
K30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdldFN0YXRzKFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBtX2VuZHBvaW50LT5nZXRTdGF0cyhu
dWxscHRyLCBXVEZNb3ZlKHByb21pc2UpKTsKK30KKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kJiBiYWNrZW5kRnJvbVJUUFNlbmRlcihSVENSdHBTZW5kZXImIHNlbmRl
cikKK3sKKyAgICBBU1NFUlQoIXNlbmRlci5pc1N0b3BwZWQoKSk7CisgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmPigqc2VuZGVyLmJhY2tlbmQoKSk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyhSVENSdHBT
ZW5kZXImIHNlbmRlciwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQoreworICAgIGlm
ICghc2VuZGVyLmJhY2tlbmQoKSkgeworICAgICAgICBtX2VuZHBvaW50LT5nZXRTdGF0cyhudWxs
cHRyLCBXVEZNb3ZlKHByb21pc2UpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1
dG8mIGJhY2tlbmQgPSBiYWNrZW5kRnJvbVJUUFNlbmRlcihzZW5kZXIpOworICAgIEdSZWZQdHI8
R3N0UGFkPiBwYWQ7CisgICAgaWYgKFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
ciogc291cmNlID0gYmFja2VuZC5hdWRpb1NvdXJjZSgpKQorICAgICAgICBwYWQgPSBzb3VyY2Ut
PnBhZCgpOworICAgIGVsc2UgaWYgKFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
ciogc291cmNlID0gYmFja2VuZC52aWRlb1NvdXJjZSgpKQorICAgICAgICBwYWQgPSBzb3VyY2Ut
PnBhZCgpOworICAgIG1fZW5kcG9pbnQtPmdldFN0YXRzKHBhZC5nZXQoKSwgV1RGTW92ZShwcm9t
aXNlKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0
cyhSVENSdHBSZWNlaXZlciYgcmVjZWl2ZXIsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlz
ZSkKK3sKKyAgICBpZiAoIXJlY2VpdmVyLmJhY2tlbmQoKSkgeworICAgICAgICBtX2VuZHBvaW50
LT5nZXRTdGF0cyhudWxscHRyLCBXVEZNb3ZlKHByb21pc2UpKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIEdzdEVsZW1lbnQqIGJpbiA9IG51bGxwdHI7CisgICAgYXV0byYgc291cmNl
ID0gcmVjZWl2ZXIudHJhY2soKS5wcml2YXRlVHJhY2soKS5zb3VyY2UoKTsKKyAgICBpZiAoc291
cmNlLmlzSW5jb21pbmdBdWRpb1NvdXJjZSgpKQorICAgICAgICBiaW4gPSBzdGF0aWNfY2FzdDxS
ZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXImPihzb3VyY2UpLmJpbigpOworICAg
IGVsc2UgaWYgKHNvdXJjZS5pc0luY29taW5nVmlkZW9Tb3VyY2UoKSkKKyAgICAgICAgYmluID0g
c3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyJj4oc291cmNl
KS5iaW4oKTsKKyAgICBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
CisKKyAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQoYmluLCAic2luayIpKTsKKyAgICBhdXRvIHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfcGFkX2dl
dF9wZWVyKHNpbmtQYWQuZ2V0KCkpKTsKKyAgICBtX2VuZHBvaW50LT5nZXRTdGF0cyhzcmNQYWQu
Z2V0KCksIFdURk1vdmUocHJvbWlzZSkpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6ZG9TZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlw
dGlvbiogZGVzY3JpcHRpb24pCit7CisgICAgbV9lbmRwb2ludC0+ZG9TZXRMb2NhbERlc2NyaXB0
aW9uKGRlc2NyaXB0aW9uKTsKKyAgICBtX2lzTG9jYWxEZXNjcmlwdGlvblNldCA9IHRydWU7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb1NldFJlbW90ZURlc2Ny
aXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAg
bV9lbmRwb2ludC0+ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7CisgICAgbV9p
c1JlbW90ZURlc2NyaXB0aW9uU2V0ID0gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYgb3B0aW9ucykK
K3sKKyAgICBtX2VuZHBvaW50LT5kb0NyZWF0ZU9mZmVyKG9wdGlvbnMpOworfQorCit2b2lkIEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9DcmVhdGVBbnN3ZXIoUlRDQW5zd2VyT3B0
aW9ucyYmKQoreworICAgIGlmICghbV9pc1JlbW90ZURlc2NyaXB0aW9uU2V0KSB7CisgICAgICAg
IGNyZWF0ZUFuc3dlckZhaWxlZChFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIk5vIHJl
bW90ZSBkZXNjcmlwdGlvbiBzZXQiIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIG1f
ZW5kcG9pbnQtPmRvQ3JlYXRlQW5zd2VyKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpjbG9zZSgpCit7CisgICAgbV9lbmRwb2ludC0+Y2xvc2UoKTsKK30KKwor
dm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU3RvcCgpCit7CisgICAgbV9l
bmRwb2ludC0+c3RvcCgpOworICAgIG1fcGVuZGluZ1JlY2VpdmVycy5jbGVhcigpOworfQorCit2
b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9BZGRJY2VDYW5kaWRhdGUoUlRD
SWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUsIEFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrJiYgY2FsbGJh
Y2spCit7CisgICAgdW5zaWduZWQgc2RwTUxpbmVJbmRleCA9IGNhbmRpZGF0ZS5zZHBNTGluZUlu
ZGV4KCkgPyBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCgpLnZhbHVlKCkgOiAwOworICAgIGF1dG8g
cnRjQ2FuZGlkYXRlID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lckljZUNhbmRpZGF0ZT4oKm5l
dyBHU3RyZWFtZXJJY2VDYW5kaWRhdGUgeyBzZHBNTGluZUluZGV4LCBjYW5kaWRhdGUuY2FuZGlk
YXRlKCkgfSk7CisgICAgbV9lbmRwb2ludC0+YWRkSWNlQ2FuZGlkYXRlKCpydGNDYW5kaWRhdGUs
IFdURk1vdmUoY2FsbGJhY2spKTsKK30KKworUmVmPFJUQ1J0cFJlY2VpdmVyPiBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZVJlY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3Ry
ZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+JiYgYmFja2VuZCwgY29uc3QgU3RyaW5nJiB0cmFja0tp
bmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCkKK3sKKyAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25j
YXN0PERvY3VtZW50PigqbV9wZWVyQ29ubmVjdGlvbi5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OworCisgICAgYXV0byBzb3VyY2UgPSBiYWNrZW5kLT5jcmVhdGVTb3VyY2UodHJhY2tLaW5kLCB0
cmFja0lkKTsKKyAgICAvLyBSZW1vdGUgc291cmNlIGlzIGluaXRpYWxseSBtdXRlZCBhbmQgd2ls
bCBiZSB1bm11dGVkIHdoZW4gcmVjZWl2aW5nIHRoZSBmaXJzdCBwYWNrZXQuCisgICAgc291cmNl
LT5zZXRNdXRlZCh0cnVlKTsKKyAgICBhdXRvIHRyYWNrSUQgPSBzb3VyY2UtPnBlcnNpc3RlbnRJ
RCgpOworICAgIGF1dG8gcmVtb3RlVHJhY2tQcml2YXRlID0gTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU6OmNyZWF0ZShkb2N1bWVudC5sb2dnZXIoKSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKHRy
YWNrSUQpKTsKKyAgICBhdXRvIHJlbW90ZVRyYWNrID0gTWVkaWFTdHJlYW1UcmFjazo6Y3JlYXRl
KGRvY3VtZW50LCBXVEZNb3ZlKHJlbW90ZVRyYWNrUHJpdmF0ZSkpOworCisgICAgcmV0dXJuIFJU
Q1J0cFJlY2VpdmVyOjpjcmVhdGUoKnRoaXMsIFdURk1vdmUocmVtb3RlVHJhY2spLCBXVEZNb3Zl
KGJhY2tlbmQpKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4g
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIo
Y29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JiBvcHRpb25zKQor
eworICAgIHJldHVybiBtX2VuZHBvaW50LT5jcmVhdGVEYXRhQ2hhbm5lbChsYWJlbCwgb3B0aW9u
cyk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUmVmUHRyPFJUQ1J0cFNlbmRlcj4gZmluZEV4aXN0aW5n
U2VuZGVyKGNvbnN0IFZlY3RvcjxSZWZQdHI8UlRDUnRwVHJhbnNjZWl2ZXI+PiYgdHJhbnNjZWl2
ZXJzLCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXJCYWNrZW5kKQoreworICAgIEFT
U0VSVChzZW5kZXJCYWNrZW5kLnJ0Y1NlbmRlcigpKTsKKyAgICBmb3IgKGF1dG8mIHRyYW5zY2Vp
dmVyIDogdHJhbnNjZWl2ZXJzKSB7CisgICAgICAgIGF1dG8mIHNlbmRlciA9IHRyYW5zY2VpdmVy
LT5zZW5kZXIoKTsKKyAgICAgICAgaWYgKCFzZW5kZXIuaXNTdG9wcGVkKCkgJiYgc2VuZGVyQmFj
a2VuZC5ydGNTZW5kZXIoKSA9PSBiYWNrZW5kRnJvbVJUUFNlbmRlcihzZW5kZXIpLnJ0Y1NlbmRl
cigpKQorICAgICAgICAgICAgcmV0dXJuIFJlZihzZW5kZXIpOworICAgIH0KKyAgICByZXR1cm4g
bnVsbHB0cjsKK30KKworRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFNlbmRlcj4+IEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhY2soTWVkaWFTdHJlYW1UcmFjayYgdHJhY2ssIEZp
eGVkVmVjdG9yPFN0cmluZz4mJiBtZWRpYVN0cmVhbUlkcykKK3sKKyAgICBhdXRvIHNlbmRlckJh
Y2tlbmQgPSBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZD4oKnRoaXMs
IG51bGxwdHIsIG51bGxwdHIpOworICAgIGlmICghbV9lbmRwb2ludC0+YWRkVHJhY2soKnNlbmRl
ckJhY2tlbmQsIHRyYWNrLCBtZWRpYVN0cmVhbUlkcykpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBUeXBlRXJyb3IsICJVbmFibGUgdG8gYWRkIHRyYWNrIl9zIH07CisKKyAgICBpZiAoYXV0
byBzZW5kZXIgPSBmaW5kRXhpc3RpbmdTZW5kZXIobV9wZWVyQ29ubmVjdGlvbi5jdXJyZW50VHJh
bnNjZWl2ZXJzKCksICpzZW5kZXJCYWNrZW5kKSkgeworICAgICAgICBiYWNrZW5kRnJvbVJUUFNl
bmRlcigqc2VuZGVyKS50YWtlU291cmNlKCpzZW5kZXJCYWNrZW5kKTsKKyAgICAgICAgc2VuZGVy
LT5zZXRUcmFjayhSZWYodHJhY2spKTsKKyAgICAgICAgc2VuZGVyLT5zZXRNZWRpYVN0cmVhbUlk
cyhXVEZNb3ZlKG1lZGlhU3RyZWFtSWRzKSk7CisgICAgICAgIHJldHVybiBzZW5kZXIucmVsZWFz
ZU5vbk51bGwoKTsKKyAgICB9CisKKyAgICBhdXRvIHRyYW5zY2VpdmVyQmFja2VuZCA9IG1fZW5k
cG9pbnQtPnRyYW5zY2VpdmVyQmFja2VuZEZyb21TZW5kZXIoKnNlbmRlckJhY2tlbmQpOworCisg
ICAgYXV0byBzZW5kZXIgPSBSVENSdHBTZW5kZXI6OmNyZWF0ZShtX3BlZXJDb25uZWN0aW9uLCBS
ZWYodHJhY2spLCBXVEZNb3ZlKHNlbmRlckJhY2tlbmQpKTsKKyAgICBzZW5kZXItPnNldE1lZGlh
U3RyZWFtSWRzKFdURk1vdmUobWVkaWFTdHJlYW1JZHMpKTsKKyAgICBhdXRvIHJlY2VpdmVyID0g
Y3JlYXRlUmVjZWl2ZXIodHJhbnNjZWl2ZXJCYWNrZW5kLT5jcmVhdGVSZWNlaXZlckJhY2tlbmQo
KSwgdHJhY2sua2luZCgpLCB0cmFjay5pZCgpKTsKKyAgICBhdXRvIHRyYW5zY2VpdmVyID0gUlRD
UnRwVHJhbnNjZWl2ZXI6OmNyZWF0ZShzZW5kZXIuY29weVJlZigpLCBXVEZNb3ZlKHJlY2VpdmVy
KSwgV1RGTW92ZSh0cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFk
ZEludGVybmFsVHJhbnNjZWl2ZXIoV1RGTW92ZSh0cmFuc2NlaXZlcikpOworICAgIHJldHVybiBz
ZW5kZXI7Cit9CisKK3RlbXBsYXRlPHR5cGVuYW1lIFQ+CitFeGNlcHRpb25PcjxSZWY8UlRDUnRw
VHJhbnNjZWl2ZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2Vp
dmVyRnJvbVRyYWNrT3JLaW5kKFQmJiB0cmFja09yS2luZCwgY29uc3QgUlRDUnRwVHJhbnNjZWl2
ZXJJbml0JiBpbml0KQoreworICAgIGF1dG8gYmFja2VuZHMgPSBtX2VuZHBvaW50LT5hZGRUcmFu
c2NlaXZlcih0cmFja09yS2luZCwgaW5pdCk7CisgICAgaWYgKCFiYWNrZW5kcykKKyAgICAgICAg
cmV0dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRBY2Nlc3NFcnJvciwgIlVuYWJsZSB0byBhZGQgdHJh
bnNjZWl2ZXIiX3MgfTsKKworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUo
bV9wZWVyQ29ubmVjdGlvbiwgV1RGTW92ZSh0cmFja09yS2luZCksIFdURk1vdmUoYmFja2VuZHMt
PnNlbmRlckJhY2tlbmQpKTsKKyAgICBhdXRvIHJlY2VpdmVyID0gY3JlYXRlUmVjZWl2ZXIoV1RG
TW92ZShiYWNrZW5kcy0+cmVjZWl2ZXJCYWNrZW5kKSwgc2VuZGVyLT50cmFja0tpbmQoKSwgc2Vu
ZGVyLT50cmFja0lkKCkpOworICAgIGF1dG8gdHJhbnNjZWl2ZXIgPSBSVENSdHBUcmFuc2NlaXZl
cjo6Y3JlYXRlKFdURk1vdmUoc2VuZGVyKSwgV1RGTW92ZShyZWNlaXZlciksIFdURk1vdmUoYmFj
a2VuZHMtPnRyYW5zY2VpdmVyQmFja2VuZCkpOworICAgIG1fcGVlckNvbm5lY3Rpb24uYWRkSW50
ZXJuYWxUcmFuc2NlaXZlcih0cmFuc2NlaXZlci5jb3B5UmVmKCkpOworICAgIHJldHVybiB0cmFu
c2NlaXZlcjsKK30KKworRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcmIHRy
YWNrS2luZCwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiBpbml0KQoreworICAgIHJldHVy
biBhZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChTdHJpbmcgeyB0cmFja0tpbmQgfSwgaW5p
dCk7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhbnNjZWl2ZXIoUmVmPE1lZGlhU3RyZWFtVHJhY2s+
JiYgdHJhY2ssIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1
cm4gYWRkVHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQoV1RGTW92ZSh0cmFjayksIGluaXQpOwor
fQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0U2VuZGVyU291cmNl
RnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIHNlbmRlciwgTWVkaWFTdHJlYW1U
cmFjayYgdHJhY2spCit7CisgICAgbV9lbmRwb2ludC0+c2V0U2VuZGVyU291cmNlRnJvbVRyYWNr
KHNlbmRlciwgdHJhY2spOworfQorCitzdGF0aWMgaW5saW5lIEdTdHJlYW1lclJ0cFRyYW5zY2Vp
dmVyQmFja2VuZCYgYmFja2VuZEZyb21SVFBUcmFuc2NlaXZlcihSVENSdHBUcmFuc2NlaXZlciYg
dHJhbnNjZWl2ZXIpCit7CisgICAgcmV0dXJuIHN0YXRpY19jYXN0PEdTdHJlYW1lclJ0cFRyYW5z
Y2VpdmVyQmFja2VuZCY+KCp0cmFuc2NlaXZlci5iYWNrZW5kKCkpOworfQorCitSVENSdHBUcmFu
c2NlaXZlciogR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpleGlzdGluZ1RyYW5zY2Vp
dmVyKFdURjo6RnVuY3Rpb248Ym9vbChHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmKT4m
JiBtYXRjaGluZ0Z1bmN0aW9uKQoreworICAgIGZvciAoYXV0byYgdHJhbnNjZWl2ZXIgOiBtX3Bl
ZXJDb25uZWN0aW9uLmN1cnJlbnRUcmFuc2NlaXZlcnMoKSkgeworICAgICAgICBpZiAobWF0Y2hp
bmdGdW5jdGlvbihiYWNrZW5kRnJvbVJUUFRyYW5zY2VpdmVyKCp0cmFuc2NlaXZlcikpKQorICAg
ICAgICAgICAgcmV0dXJuIHRyYW5zY2VpdmVyLmdldCgpOworICAgIH0KKyAgICByZXR1cm4gbnVs
bHB0cjsKK30KKworUlRDUnRwVHJhbnNjZWl2ZXImIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6bmV3UmVtb3RlVHJhbnNjZWl2ZXIoc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZD4mJiB0cmFuc2NlaXZlckJhY2tlbmQsIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGUgdHlwZSkKK3sKKyAgICBhdXRvIHRyYWNrS2luZCA9IHR5cGUgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8gPyAiYXVkaW8iX3MgOiAidmlkZW8iX3M7CisgICAgYXV0
byBzZW5kZXIgPSBSVENSdHBTZW5kZXI6OmNyZWF0ZShtX3BlZXJDb25uZWN0aW9uLCB0cmFja0tp
bmQsIHRyYW5zY2VpdmVyQmFja2VuZC0+Y3JlYXRlU2VuZGVyQmFja2VuZCgqdGhpcywgbnVsbHB0
ciwgbnVsbHB0cikpOworICAgIGF1dG8gcmVjZWl2ZXIgPSBjcmVhdGVSZWNlaXZlcih0cmFuc2Nl
aXZlckJhY2tlbmQtPmNyZWF0ZVJlY2VpdmVyQmFja2VuZCgpLCB0cmFja0tpbmQsIHNlbmRlci0+
dHJhY2tJZCgpKTsKKyAgICBhdXRvIHRyYW5zY2VpdmVyID0gUlRDUnRwVHJhbnNjZWl2ZXI6OmNy
ZWF0ZShXVEZNb3ZlKHNlbmRlciksIFdURk1vdmUocmVjZWl2ZXIpLCBXVEZNb3ZlKHRyYW5zY2Vp
dmVyQmFja2VuZCkpOworICAgIG1fcGVlckNvbm5lY3Rpb24uYWRkSW50ZXJuYWxUcmFuc2NlaXZl
cih0cmFuc2NlaXZlci5jb3B5UmVmKCkpOworICAgIHJldHVybiB0cmFuc2NlaXZlci5nZXQoKTsK
K30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNvbGxlY3RUcmFuc2Nl
aXZlcnMoKQoreworICAgIG1fZW5kcG9pbnQtPmNvbGxlY3RUcmFuc2NlaXZlcnMoKTsKK30KKwor
dm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlbW92ZVRyYWNrKFJUQ1J0cFNl
bmRlciYgc2VuZGVyKQoreworICAgIG1fZW5kcG9pbnQtPnJlbW92ZVRyYWNrKGJhY2tlbmRGcm9t
UlRQU2VuZGVyKHNlbmRlcikpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6YXBwbHlSb3RhdGlvbkZvck91dGdvaW5nVmlkZW9Tb3VyY2VzKCkKK3sKKyAgICBmb3Ig
KGF1dG8mIHRyYW5zY2VpdmVyIDogbV9wZWVyQ29ubmVjdGlvbi5jdXJyZW50VHJhbnNjZWl2ZXJz
KCkpIHsKKyAgICAgICAgaWYgKCF0cmFuc2NlaXZlci0+c2VuZGVyKCkuaXNTdG9wcGVkKCkpIHsK
KyAgICAgICAgICAgIGlmIChhdXRvKiB2aWRlb1NvdXJjZSA9IGJhY2tlbmRGcm9tUlRQU2VuZGVy
KHRyYW5zY2VpdmVyLT5zZW5kZXIoKSkudmlkZW9Tb3VyY2UoKSkKKyAgICAgICAgICAgICAgICB2
aWRlb1NvdXJjZS0+c2V0QXBwbHlSb3RhdGlvbih0cnVlKTsKKyAgICAgICAgfQorICAgIH0KK30K
Kwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdhdGhlckRlY29kZXJJbXBs
ZW1lbnRhdGlvbk5hbWUoRnVuY3Rpb248dm9pZChTdHJpbmcmJik+JiYgY2FsbGJhY2spCit7Cisg
ICAgbV9lbmRwb2ludC0+Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShXVEZNb3ZlKGNh
bGxiYWNrKSk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjppc05l
Z290aWF0aW9uTmVlZGVkKHVpbnQzMl90KSBjb25zdAoreworICAgIHJldHVybiBtX2VuZHBvaW50
LT5pc05lZ290aWF0aW9uTmVlZGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YWVhMWEyNjAxNmQ3
NWYwYmUzZmQ5ODA2ODI5NjA4OGI5ZTJhZTU5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kLmgKQEAgLTAsMCArMSwxMjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNs
dWRlICJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291
cmNlLmgiCisjaW5jbHVkZSA8Z3N0L2dzdC5oPgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDsKK2Ns
YXNzIEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDsKK2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ7CitjbGFzcyBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ7CitjbGFzcyBS
VENSdHBSZWNlaXZlcjsKK2NsYXNzIFJUQ1J0cFJlY2VpdmVyQmFja2VuZDsKK2NsYXNzIFJUQ1Nl
c3Npb25EZXNjcmlwdGlvbjsKK2NsYXNzIFJUQ1N0YXRzUmVwb3J0OworY2xhc3MgUmVhbHRpbWVJ
bmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlR1N0cmVhbWVyOworY2xhc3MgUmVhbHRpbWVNZWRpYVNvdXJjZUdTdHJlYW1lcjsKK2Ns
YXNzIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjsKK2NsYXNzIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjsKKworc3RydWN0IEdTdHJlYW1lckljZUNhbmRp
ZGF0ZSB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgIHVuc2lnbmVk
IHNkcE1MaW5lSW5kZXg7CisgICAgU3RyaW5nIGNhbmRpZGF0ZTsKK307CisKK2NsYXNzIEdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxp
Y2l0IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYpOwor
ICAgIH5HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICB2
b2lkIGNsb3NlKCkgZmluYWw7CisgICAgdm9pZCBkb0NyZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9u
cyYmKSBmaW5hbDsKKyAgICB2b2lkIGRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlvbnMmJikg
ZmluYWw7CisgICAgdm9pZCBkb1NldExvY2FsRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uKikgZmluYWw7CisgICAgdm9pZCBkb1NldFJlbW90ZURlc2NyaXB0aW9uKGNvbnN0
IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYpIGZpbmFsOworICAgIHZvaWQgZG9BZGRJY2VDYW5kaWRh
dGUoUlRDSWNlQ2FuZGlkYXRlJiwgQWRkSWNlQ2FuZGlkYXRlQ2FsbGJhY2smJikgZmluYWw7Cisg
ICAgdm9pZCBkb1N0b3AoKSBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5u
ZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIoY29uc3QgU3RyaW5nJiwgY29uc3Qg
UlRDRGF0YUNoYW5uZWxJbml0JikgZmluYWw7CisgICAgdm9pZCByZXN0YXJ0SWNlKCkgZmluYWw7
CisgICAgYm9vbCBzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJiYp
IGZpbmFsOworICAgIHZvaWQgZ2V0U3RhdHMoUmVmPERlZmVycmVkUHJvbWlzZT4mJikgZmluYWw7
CisgICAgdm9pZCBnZXRTdGF0cyhSVENSdHBTZW5kZXImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYm
KSBmaW5hbDsKKyAgICB2b2lkIGdldFN0YXRzKFJUQ1J0cFJlY2VpdmVyJiwgUmVmPERlZmVycmVk
UHJvbWlzZT4mJikgZmluYWw7CisKKyAgICB2b2lkIGVtdWxhdGVQbGF0Zm9ybUV2ZW50KGNvbnN0
IFN0cmluZyYpIGZpbmFsIHsgfQorICAgIHZvaWQgYXBwbHlSb3RhdGlvbkZvck91dGdvaW5nVmlk
ZW9Tb3VyY2VzKCkgZmluYWw7CisKKyAgICB2b2lkIGdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlv
bk5hbWUoRnVuY3Rpb248dm9pZChTdHJpbmcmJik+JiYpIGZpbmFsOworCisgICAgYm9vbCBpc05l
Z290aWF0aW9uTmVlZGVkKHVpbnQzMl90KSBjb25zdCBmaW5hbDsKKworICAgIHN0ZDo6b3B0aW9u
YWw8Ym9vbD4gY2FuVHJpY2tsZUljZUNhbmRpZGF0ZXMoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9
OworCisgICAgZnJpZW5kIGNsYXNzIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ7CisgICAgZnJpZW5k
IGNsYXNzIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ7CisgICAgUlRDUGVlckNvbm5lY3Rpb24m
IGNvbm5lY3Rpb24oKSB7IHJldHVybiBtX3BlZXJDb25uZWN0aW9uOyB9CisKKyAgICB2b2lkIGdl
dFN0YXRzU3VjY2VlZGVkKGNvbnN0IERlZmVycmVkUHJvbWlzZSYsIFJlZjxSVENTdGF0c1JlcG9y
dD4mJik7CisKKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwU2VuZGVyPj4gYWRkVHJhY2soTWVk
aWFTdHJlYW1UcmFjayYsIEZpeGVkVmVjdG9yPFN0cmluZz4mJikgZmluYWw7CisgICAgdm9pZCBy
ZW1vdmVUcmFjayhSVENSdHBTZW5kZXImKSBmaW5hbDsKKworICAgIEV4Y2VwdGlvbk9yPFJlZjxS
VENSdHBUcmFuc2NlaXZlcj4+IGFkZFRyYW5zY2VpdmVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJU
Q1J0cFRyYW5zY2VpdmVySW5pdCYpIGZpbmFsOworICAgIEV4Y2VwdGlvbk9yPFJlZjxSVENSdHBU
cmFuc2NlaXZlcj4+IGFkZFRyYW5zY2VpdmVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYmLCBjb25z
dCBSVENSdHBUcmFuc2NlaXZlckluaXQmKSBmaW5hbDsKKyAgICB2b2lkIHNldFNlbmRlclNvdXJj
ZUZyb21UcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiwgTWVkaWFTdHJlYW1UcmFjayYp
OworCisgICAgUlRDUnRwVHJhbnNjZWl2ZXIqIGV4aXN0aW5nVHJhbnNjZWl2ZXIoV1RGOjpGdW5j
dGlvbjxib29sKEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZCYpPiYmKTsKKyAgICBSVENS
dHBUcmFuc2NlaXZlciYgbmV3UmVtb3RlVHJhbnNjZWl2ZXIoc3RkOjp1bmlxdWVfcHRyPEdTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4mJiwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSk7
CisKKyAgICB2b2lkIGNvbGxlY3RUcmFuc2NlaXZlcnMoKSBmaW5hbDsKKworcHJpdmF0ZToKKyAg
ICBib29sIGlzTG9jYWxEZXNjcmlwdGlvblNldCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1faXNM
b2NhbERlc2NyaXB0aW9uU2V0OyB9CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorICAgIEV4
Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IGFkZFRyYW5zY2VpdmVyRnJvbVRyYWNr
T3JLaW5kKFQmJiB0cmFja09yS2luZCwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0Jik7CisK
KyAgICBSZWY8UlRDUnRwUmVjZWl2ZXI+IGNyZWF0ZVJlY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxH
U3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+JiYsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBj
b25zdCBTdHJpbmcmIHRyYWNrSWQpOworCisgICAgdm9pZCBzdXNwZW5kKCkgZmluYWw7CisgICAg
dm9pZCByZXN1bWUoKSBmaW5hbDsKKworICAgIFJlZjxHU3RyZWFtZXJNZWRpYUVuZHBvaW50PiBt
X2VuZHBvaW50OworICAgIGJvb2wgbV9pc0xvY2FsRGVzY3JpcHRpb25TZXQgeyBmYWxzZSB9Owor
ICAgIGJvb2wgbV9pc1JlbW90ZURlc2NyaXB0aW9uU2V0IHsgZmFsc2UgfTsKKworICAgIFZlY3Rv
cjxzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVySWNlQ2FuZGlkYXRlPj4gbV9wZW5kaW5nQ2FuZGlk
YXRlczsKKyAgICBWZWN0b3I8UmVmPFJUQ1J0cFJlY2VpdmVyPj4gbV9wZW5kaW5nUmVjZWl2ZXJz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNr
ZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45YzEzNDNiMTM5ZjViYTkyZjQxNTVmM2QwNTA1MDVkMmNmYWZj
ZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc2
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJh
bnNmb3JtQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUlRDUnRwUGFyYW1ldGVycyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tl
bmQ6OmdldFBhcmFtZXRlcnMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKworVmVjdG9yPFJUQ1J0cENvbnRyaWJ1dGluZ1NvdXJjZT4gR1N0cmVhbWVyUnRw
UmVjZWl2ZXJCYWNrZW5kOjpnZXRDb250cmlidXRpbmdTb3VyY2VzKCkgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxSVENSdHBTeW5j
aHJvbml6YXRpb25Tb3VyY2U+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0U3luY2hy
b25pemF0aW9uU291cmNlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCitSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gR1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kOjpjcmVhdGVTb3VyY2UoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0
IFN0cmluZyYgdHJhY2tJZCkKK3sKKyAgICBpZiAodHJhY2tLaW5kID09ICJ2aWRlbyJfcykKKyAg
ICAgICAgcmV0dXJuIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRl
KHRyYWNrSWQuaXNvbGF0ZWRDb3B5KCkpOworCisgICAgUkVMRUFTRV9BU1NFUlQodHJhY2tLaW5k
ID09ICJhdWRpbyJfcyk7CisgICAgcmV0dXJuIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcjo6Y3JlYXRlKHRyYWNrSWQuaXNvbGF0ZWRDb3B5KCkpOworfQorCitSZWY8UlRDUnRw
VHJhbnNmb3JtQmFja2VuZD4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpydGNSdHBUcmFu
c2Zvcm1CYWNrZW5kKCkKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zv
cm1CYWNrZW5kOjpjcmVhdGUobV9ydGNSZWNlaXZlcik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxS
VENEdGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpkdGxz
VHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0
PiB0cmFuc3BvcnQ7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjUmVjZWl2ZXIuZ2V0KCksICJ0cmFu
c3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJhbnNw
b3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0
KSA6IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2Vp
dmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjYzYTc1OTdiOTgy
NzY3NmRlMDMzYTE5YmM0M2ZjZGEyZjgxMzMwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVy
QmFja2VuZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0
cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQg
ZmluYWwgOiBwdWJsaWMgUlRDUnRwUmVjZWl2ZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJSdHBSZWNlaXZlckJh
Y2tlbmQoR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4mJiBydGNSZWNlaXZlcikKKyAgICAg
ICAgOiBtX3J0Y1JlY2VpdmVyKFdURk1vdmUocnRjUmVjZWl2ZXIpKQorICAgIHsKKyAgICB9CisK
KyAgICBHc3RXZWJSVENSVFBSZWNlaXZlciogcnRjUmVjZWl2ZXIoKSB7IHJldHVybiBtX3J0Y1Jl
Y2VpdmVyLmdldCgpOyB9CisgICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZVNvdXJj
ZShjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKTsKKworcHJp
dmF0ZToKKyAgICBSVENSdHBQYXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMoKSBmaW5hbDsKKyAgICBW
ZWN0b3I8UlRDUnRwQ29udHJpYnV0aW5nU291cmNlPiBnZXRDb250cmlidXRpbmdTb3VyY2VzKCkg
Y29uc3QgZmluYWw7CisgICAgVmVjdG9yPFJUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZT4gZ2V0
U3luY2hyb25pemF0aW9uU291cmNlcygpIGNvbnN0IGZpbmFsOworICAgIFJlZjxSVENSdHBUcmFu
c2Zvcm1CYWNrZW5kPiBydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkgZmluYWw7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBkdGxzVHJhbnNwb3J0QmFja2VuZCgp
IGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gbV9ydGNSZWNlaXZl
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNm
b3JtQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUyOTA4MmZlY2E0ZDQ4YTgzNzAzNjk3OTE3NjdkYmFkYWUzM2Y5MGIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJS
dHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZSBtZWRpYVR5cGVGcm9tUmVjZWl2
ZXIoY29uc3QgR3N0V2ViUlRDUlRQUmVjZWl2ZXImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZTo6VmlkZW87Cit9
CisKK0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+
JiBydGNSZWNlaXZlcikKKyAgICA6IEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQobWVkaWFU
eXBlRnJvbVJlY2VpdmVyKCpydGNSZWNlaXZlciksIFNpZGU6OlJlY2VpdmVyKQorICAgICwgbV9y
dGNSZWNlaXZlcihydGNSZWNlaXZlcikKK3sKK30KKworR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFu
c2Zvcm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKCkKK3sK
K30KKwordm9pZCBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5z
Zm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgc2V0SW5w
dXRDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlG
cmFtZSgpCit7CisgICAgQVNTRVJUKG1lZGlhVHlwZSgpID09IE1lZGlhVHlwZTo6VmlkZW8pOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5k
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODU4NjY3NmEwNmI3YWI5ZWIwYjMyZTdkZjdjNjM0ODE1YThjOTc5Zgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEs
NDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tl
bmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVj
ZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kIGZpbmFsIDogcHVibGljIEdTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyUnRwUmVjZWl2ZXJU
cmFuc2Zvcm1CYWNrZW5kPiBjcmVhdGUoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZl
cj4mIHJlY2VpdmVyKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lclJ0cFJlY2VpdmVy
VHJhbnNmb3JtQmFja2VuZChyZWNlaXZlcikpOyB9CisgICAgfkdTdHJlYW1lclJ0cFJlY2VpdmVy
VHJhbnNmb3JtQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lclJ0
cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2Vp
dmVyPiYpOworCisgICAgLy8gUlRDUnRwVHJhbnNmb3JtQmFja2VuZAorICAgIHZvaWQgc2V0VHJh
bnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soQ2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCByZXF1
ZXN0S2V5RnJhbWUoKSBmaW5hbDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+
IG1fcnRjUmVjZWl2ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmU2NzBhNzUy
YjM3N2UzZmI4N2EzZmMzZjk0M2ZiNzkyMzQyN2M2MDQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zv
cm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRl
ICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSVENSdHBTZW5kZXIuaCIK
KyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZT4K
K3N0YXRpYyBpbmxpbmUgYm9vbCB1cGRhdGVUcmFja1NvdXJjZShTb3VyY2UmIHNvdXJjZSwgTWVk
aWFTdHJlYW1UcmFjayogdHJhY2spCit7CisgICAgaWYgKCF0cmFjaykgeworICAgICAgICBzb3Vy
Y2Uuc3RvcCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHNvdXJj
ZS5zZXRUcmFjayh0cmFjay0+cHJpdmF0ZVRyYWNrKCkpOworfQorCit2b2lkIEdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQ6OnN0YXJ0U291cmNlKCkKK3sKKyAgICBzd2l0Y2hPbihtX3NvdXJjZSwg
W10oUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgewor
ICAgICAgICBzb3VyY2UtPnN0YXJ0KCk7CisgICAgfSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0YXJ0KCk7
CisgICAgfSwgW10oc3RkOjpudWxscHRyX3QmKSB7CisgICAgfSk7Cit9CisKK0dSZWZQdHI8R3N0
RWxlbWVudD4gR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c3RvcFNvdXJjZSgpCit7CisgICAg
c3dpdGNoT24obV9zb3VyY2UsIFtdKFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgc291cmNlLT5zdG9wKCk7CisgICAgICAgIHJldHVy
biBHUmVmUHRyPEdzdEVsZW1lbnQ+KHNvdXJjZS0+YmluKCkpOworICAgIH0sIFtdKFJlZjxSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgc291
cmNlLT5zdG9wKCk7CisgICAgICAgIHJldHVybiBHUmVmUHRyPEdzdEVsZW1lbnQ+KHNvdXJjZS0+
YmluKCkpOworICAgIH0sIFtdKHN0ZDo6bnVsbHB0cl90JikgeworICAgICAgICByZXR1cm4gR1Jl
ZlB0cjxHc3RFbGVtZW50PihudWxscHRyKTsKKyAgICB9KTsKKyAgICByZXR1cm4gbnVsbHB0cjsK
K30KKworYm9vbCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpyZXBsYWNlVHJhY2soUlRDUnRw
U2VuZGVyJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJhY2sqIHRyYWNrKQoreworICAgIGlmICghdHJh
Y2spIHsKKyAgICAgICAgc3RvcFNvdXJjZSgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9
CisKKyAgICBpZiAoc2VuZGVyLnRyYWNrKCkpIHsKKyAgICAgICAgc3dpdGNoT24obV9zb3VyY2Us
IFsmXShSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7
CisgICAgICAgICAgICBBU1NFUlQodHJhY2stPnNvdXJjZSgpLnR5cGUoKSA9PSBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpBdWRpbyk7CisgICAgICAgICAgICBzb3VyY2UtPnN0b3AoKTsKKyAg
ICAgICAgICAgIHNvdXJjZS0+c2V0U291cmNlKHRyYWNrLT5wcml2YXRlVHJhY2soKSk7CisgICAg
ICAgICAgICBzb3VyY2UtPnN0YXJ0KCk7CisgICAgICAgIH0sIFsmXShSZWY8UmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7CisgICAgICAgICAgICBBU1NFUlQo
dHJhY2stPnNvdXJjZSgpLnR5cGUoKSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRl
byk7CisgICAgICAgICAgICBzb3VyY2UtPnN0b3AoKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c2V0
U291cmNlKHRyYWNrLT5wcml2YXRlVHJhY2soKSk7CisgICAgICAgICAgICBzb3VyY2UtPnN0YXJ0
KCk7CisgICAgICAgIH0sIFtdKHN0ZDo6bnVsbHB0cl90JikgeworICAgICAgICB9KTsKKyAgICB9
CisKKyAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC0+c2V0U2VuZGVyU291cmNlRnJvbVRyYWNr
KCp0aGlzLCAqdHJhY2spOworICAgIHJldHVybiB0cnVlOworfQorCitSVENSdHBTZW5kUGFyYW1l
dGVycyBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJzKCkgY29uc3QKK3sK
KyAgICByZXR1cm4gdG9SVENSdHBTZW5kUGFyYW1ldGVycyhtX2luaXREYXRhLmdldCgpKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzZXRQYXJhbWV0ZXJzKGNvbnN0IFJU
Q1J0cFNlbmRQYXJhbWV0ZXJzJiwgRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYgcHJvbWlzZSkK
K3sKKyAgICBpZiAoIW1fcnRjU2VuZGVyKSB7CisgICAgICAgIHByb21pc2UucmVqZWN0KE5vdFN1
cHBvcnRlZEVycm9yKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG5vdEltcGxlbWVu
dGVkKCk7CisgICAgcHJvbWlzZS5yZXNvbHZlKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENE
VE1GU2VuZGVyQmFja2VuZD4gR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6Y3JlYXRlRFRNRkJh
Y2tlbmQoKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlPEdTdHJlYW1lckRUTUZTZW5kZXJCYWNr
ZW5kPigpOworfQorCitSZWY8UlRDUnRwVHJhbnNmb3JtQmFja2VuZD4gR1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZDo6cnRjUnRwVHJhbnNmb3JtQmFja2VuZCgpCit7CisgICAgcmV0dXJuIEdTdHJl
YW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OmNyZWF0ZShtX3J0Y1NlbmRlcik7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c2V0TWVkaWFTdHJlYW1JZHMoY29uc3Qg
Rml4ZWRWZWN0b3I8U3RyaW5nPiYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgR1JlZlB0cjxHc3RXZWJSVENE
VExTVHJhbnNwb3J0PiB0cmFuc3BvcnQ7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjU2VuZGVyLmdl
dCgpLCAidHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0
dXJuIHRyYW5zcG9ydCA/IG1ha2VVbmlxdWU8R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ+
KHRyYW5zcG9ydCkgOiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI5OTdh
Njg2NzNlZGEzMDgwZTlkYmQ0YjRiYTI2MTU1MmE0ZmY2NAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNl
bmRlckJhY2tlbmQuaApAQCAtMCwwICsxLDEyMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQu
aCIKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRDUnRwU2Vu
ZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5o
IgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOworCitjbGFzcyBHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ1J0cFNlbmRlckJhY2tlbmQgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdTdHJlYW1lclJ0cFNlbmRlckJh
Y2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBiYWNrZW5kLCBHUmVmUHRyPEdz
dFdlYlJUQ1JUUFNlbmRlcj4mJiBydGNTZW5kZXIsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYm
IGluaXREYXRhKQorICAgICAgICA6IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kKFdlYWtQdHIgeyAm
YmFja2VuZCB9KQorICAgICAgICAsIG1fcnRjU2VuZGVyKFdURk1vdmUocnRjU2VuZGVyKSkKKyAg
ICAgICAgLCBtX2luaXREYXRhKFdURk1vdmUoaW5pdERhdGEpKQorICAgIHsKKyAgICB9CisKKyAg
ICB1c2luZyBTb3VyY2UgPSBzdGQ6OnZhcmlhbnQ8c3RkOjpudWxscHRyX3QsIFJlZjxSZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+LCBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlR1N0cmVhbWVyPj47CisgICAgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZChHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmIGJhY2tlbmQsIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2Vu
ZGVyPiYmIHJ0Y1NlbmRlciwgU291cmNlJiYgc291cmNlLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVy
ZT4mJiBpbml0RGF0YSkKKyAgICAgICAgOiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZChXZWFrUHRy
IHsgJmJhY2tlbmQgfSkKKyAgICAgICAgLCBtX3J0Y1NlbmRlcihXVEZNb3ZlKHJ0Y1NlbmRlcikp
CisgICAgICAgICwgbV9zb3VyY2UoV1RGTW92ZShzb3VyY2UpKQorICAgICAgICAsIG1faW5pdERh
dGEoV1RGTW92ZShpbml0RGF0YSkpCisgICAgeworICAgIH0KKworICAgIHZvaWQgc2V0UlRDU2Vu
ZGVyKEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiYmIHJ0Y1NlbmRlcikgeyBtX3J0Y1NlbmRl
ciA9IFdURk1vdmUocnRjU2VuZGVyKTsgfQorICAgIEdzdFdlYlJUQ1JUUFNlbmRlciogcnRjU2Vu
ZGVyKCkgeyByZXR1cm4gbV9ydGNTZW5kZXIuZ2V0KCk7IH0KKworICAgIFJlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lciogYXVkaW9Tb3VyY2UoKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIFdURjo6c3dpdGNoT24obV9zb3VyY2UsCisgICAgICAgICAgICBbXSAoUmVmPFJlYWx0aW1l
T3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLnB0
cigpOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSAtPiBSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXIqIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICAgICAgKTsKKyAg
ICB9CisKKyAgICBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIqIHZpZGVvU291
cmNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLAorICAg
ICAgICAgICAgW10gKFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+JiBz
b3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5wdHIoKTsgfSwKKyAgICAgICAgICAgIFtdIChjb25zdCBh
dXRvJikgLT4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKiB7IHJldHVybiBu
dWxscHRyOyB9CisgICAgICAgICk7CisgICAgfQorCisgICAgYm9vbCBoYXNTb3VyY2UoKSBjb25z
dAorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9zb3VyY2UsCisgICAgICAg
ICAgICBbXSAoY29uc3Qgc3RkOjpudWxscHRyX3QmKSB7IHJldHVybiBmYWxzZTsgfSwKKyAgICAg
ICAgICAgIFtdIChjb25zdCBhdXRvJikgeyByZXR1cm4gdHJ1ZTsgfQorICAgICAgICApOworICAg
IH0KKworICAgIHZvaWQgY2xlYXJTb3VyY2UoKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGhhc1Nv
dXJjZSgpKTsKKyAgICAgICAgbV9zb3VyY2UgPSBudWxscHRyOworICAgIH0KKworICAgIHZvaWQg
c2V0U291cmNlKFNvdXJjZSYmIHNvdXJjZSkKKyAgICB7CisgICAgICAgIEFTU0VSVCghaGFzU291
cmNlKCkpOworICAgICAgICBtX3NvdXJjZSA9IFdURk1vdmUoc291cmNlKTsKKyAgICAgICAgQVNT
RVJUKGhhc1NvdXJjZSgpKTsKKyAgICB9CisKKyAgICB2b2lkIHRha2VTb3VyY2UoR1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZCYgYmFja2VuZCkKKyAgICB7CisgICAgICAgIEFTU0VSVChiYWNrZW5k
Lmhhc1NvdXJjZSgpKTsKKyAgICAgICAgc2V0U291cmNlKFdURk1vdmUoYmFja2VuZC5tX3NvdXJj
ZSkpOworICAgIH0KKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gc3RvcFNvdXJjZSgpOworCitw
cml2YXRlOgorICAgIGJvb2wgcmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYsIE1lZGlhU3RyZWFt
VHJhY2sqKSBmaW5hbDsKKyAgICBSVENSdHBTZW5kUGFyYW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFJUQ1J0cFNlbmRQYXJh
bWV0ZXJzJiwgRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpIGZpbmFsOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxSVENEVE1GU2VuZGVyQmFja2VuZD4gY3JlYXRlRFRNRkJhY2tlbmQoKSBmaW5hbDsK
KyAgICBSZWY8UlRDUnRwVHJhbnNmb3JtQmFja2VuZD4gcnRjUnRwVHJhbnNmb3JtQmFja2VuZCgp
IGZpbmFsOworICAgIHZvaWQgc2V0TWVkaWFTdHJlYW1JZHMoY29uc3QgRml4ZWRWZWN0b3I8U3Ry
aW5nPiYpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFja2Vu
ZD4gZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBmaW5hbDsKKworICAgIHZvaWQgc3RhcnRTb3VyY2Uo
KTsKKworICAgIFdlYWtQdHI8R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kPiBtX3BlZXJD
b25uZWN0aW9uQmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9ydGNT
ZW5kZXI7CisgICAgU291cmNlIG1fc291cmNlOworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJl
PiBtX2luaXREYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2Vu
ZGVyVHJhbnNmb3JtQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mNjZjNGRlYzFiYjAzYTMyNzdkOTJiMDY1NDI5YzY0MDcyYmUxNDNlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHAKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJM
RShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBHU3RyZWFt
ZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGUgbWVkaWFUeXBlRnJvbVNlbmRl
cihjb25zdCBHc3RXZWJSVENSVFBTZW5kZXImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZTo6VmlkZW87Cit9CisK
K0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFNlbmRlclRy
YW5zZm9ybUJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiBydGNTZW5k
ZXIpCisgICAgOiBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKG1lZGlhVHlwZUZyb21TZW5k
ZXIoKnJ0Y1NlbmRlciksIFNpZGU6OlNlbmRlcikKKyAgICAsIG1fcnRjU2VuZGVyKHJ0Y1NlbmRl
cikKK3sKK30KKworR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJlYW1l
clJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoKQoreworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNl
bmRlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxi
YWNrJiYgY2FsbGJhY2spCit7CisgICAgc2V0SW5wdXRDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNr
KSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJU
cmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJhbWUoKQoreworICAgIEFTU0VSVChtZWRpYVR5
cGUoKSA9PSBNZWRpYVR5cGU6OlZpZGVvKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIwYTU3NmRiMTI2ODNlNzU4
OTc4NDJkMTRhNzk1OGE0OTBlOTI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9y
bUJhY2tlbmQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRp
bHMuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdTdHJlYW1lclNlbmRlclRyYW5zZm9ybWVyOworCitjbGFzcyBHU3RyZWFtZXJSdHBT
ZW5kZXJUcmFuc2Zvcm1CYWNrZW5kIGZpbmFsIDogcHVibGljIEdTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZD4gY3JlYXRlKGNvbnN0
IEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiYgc2VuZGVyKSB7IHJldHVybiBhZG9wdFJlZigq
bmV3IEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoc2VuZGVyKSk7IH0KKyAgICB+
R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIGV4
cGxpY2l0IEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoY29uc3QgR1JlZlB0cjxH
c3RXZWJSVENSVFBTZW5kZXI+Jik7CisKKyAgICAvLyBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kCisg
ICAgdm9pZCBzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayhDYWxsYmFjayYmKSBmaW5hbDsK
KyAgICB2b2lkIHJlcXVlc3RLZXlGcmFtZSgpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJS
VENSVFBTZW5kZXI+IG1fcnRjU2VuZGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uYjVkMTBhMmM0YWFlZGE5OGJhYjJlMDZkYTQ5NDQxZTVjYmI0ZDE3NAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMjkgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lclJ0
cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUlRDUnRwQ29kZWNDYXBhYmlsaXR5LmgiCisjaW5jbHVkZSA8
d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtp
dF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0
X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kKEdS
ZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+JiYgcnRjVHJhbnNjZWl2ZXIpCisgICAgOiBt
X3J0Y1RyYW5zY2VpdmVyKFdURk1vdmUocnRjVHJhbnNjZWl2ZXIpKQoreworICAgIGdfb2JqZWN0
X3NldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiZG8tbmFjayIsIHRydWUsICJmZWMtdHlwZSIs
IEdTVF9XRUJSVENfRkVDX1RZUEVfVUxQX1JFRCwgbnVsbHB0cik7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+IEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJU
Q1JUUFJlY2VpdmVyPiByZWNlaXZlcjsKKyAgICBnX29iamVjdF9nZXQobV9ydGNUcmFuc2NlaXZl
ci5nZXQoKSwgInJlY2VpdmVyIiwgJnJlY2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBy
ZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4oV1RGTW92
ZShyZWNlaXZlcikpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwU2VuZGVyQmFj
a2VuZD4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVTZW5kZXJCYWNrZW5k
KEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgYmFja2VuZCwgR1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZDo6U291cmNlJiYgc291cmNlLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBp
bml0RGF0YSkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVyOworICAg
IGdfb2JqZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAic2VuZGVyIiwgJnNlbmRlci5v
dXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kPihiYWNrZW5kLCBXVEZNb3ZlKHNlbmRlciksIFdURk1vdmUoc291cmNl
KSwgV1RGTW92ZShpbml0RGF0YSkpOworfQorCitSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBH
U3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAg
R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZ3N0RGlyZWN0aW9uOworICAgIGdfb2Jq
ZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiZGlyZWN0aW9uIiwgJmdzdERpcmVjdGlv
biwgbnVsbHB0cik7CisgICAgcmV0dXJuIHRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZ3N0
RGlyZWN0aW9uKTsKK30KKworc3RkOjpvcHRpb25hbDxSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlv
bj4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjdXJyZW50RGlyZWN0aW9uKCkgY29u
c3QKK3sKKyAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlvbiBnc3REaXJlY3Rpb247
CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJjdXJyZW50LWRpcmVj
dGlvbiIsICZnc3REaXJlY3Rpb24sIG51bGxwdHIpOworICAgIGlmICghZ3N0RGlyZWN0aW9uKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiB0b1JUQ1J0cFRyYW5zY2Vp
dmVyRGlyZWN0aW9uKGdzdERpcmVjdGlvbik7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kOjpzZXREaXJlY3Rpb24oUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZGly
ZWN0aW9uKQoreworICAgIGdfb2JqZWN0X3NldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiZGly
ZWN0aW9uIiwgZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKGRpcmVjdGlvbiksIG51bGxw
dHIpOworfQorCitTdHJpbmcgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjptaWQoKQor
eworICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gbWlkOworICAgIGdfb2JqZWN0X2dldChtX3J0Y1Ry
YW5zY2VpdmVyLmdldCgpLCAibWlkIiwgJm1pZC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0
dXJuIG1pZC5nZXQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6
OnN0b3AoKQoreworICAgIC8vIEZJWE1FOiB3ZWJydGNiaW4gdHJhbnNjZWl2ZXJzIGNhbid0IGJl
IHN0b3BwZWQgeWV0LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgR1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzdG9wcGVkKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
d2VicnRjYmluIHRyYW5zY2VpdmVycyBjYW4ndCBiZSBzdG9wcGVkIHlldC4KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgRXhjZXB0aW9uT3I8R3N0Q2Fwcyo+IHRvUnRwQ29k
ZWNDYXBhYmlsaXR5KGNvbnN0IFJUQ1J0cENvZGVjQ2FwYWJpbGl0eSYgY29kZWMpCit7CisgICAg
aWYgKCFjb2RlYy5taW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSAmJiAhY29kZWMubWltZVR5
cGUuc3RhcnRzV2l0aCgiYXVkaW8vIikpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZh
bGlkTW9kaWZpY2F0aW9uRXJyb3IsICJSVENSdHBDb2RlY0NhcGFiaWxpdHkgYmFkIG1pbWVUeXBl
IiB9OworCisgICAgYXV0byBjb21wb25lbnRzID0gY29kZWMubWltZVR5cGUuc3BsaXQoJy8nKTsK
KyAgICBhdXRvKiBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXBwbGljYXRpb24veC1ydHAi
LCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCBjb21wb25lbnRzWzBdLmFzY2lpKCkuZGF0YSgpLCAi
ZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGNvbXBvbmVudHNbMV0uYXNjaWkoKS5kYXRh
KCksIG51bGxwdHIpOworICAgIGdzdF9jYXBzX3NldF9zaW1wbGUoY2FwcywgImNsb2NrLXJhdGUi
LCBHX1RZUEVfSU5ULCBjb2RlYy5jbG9ja1JhdGUsIG51bGxwdHIpOworICAgIGlmIChjb2RlYy5j
aGFubmVscykKKyAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShjYXBzLCAiY2hhbm5lbHMiLCBH
X1RZUEVfSU5ULCAqY29kZWMuY2hhbm5lbHMsIG51bGxwdHIpOworCisgICAgaWYgKCFjb2RlYy5z
ZHBGbXRwTGluZS5pc0VtcHR5KCkpCisgICAgICAgIEdTVF9GSVhNRSgiVW5wcm9jZXNzZWQgU0RQ
IEZtdHBMaW5lOiAlcyIsIGNvZGVjLnNkcEZtdHBMaW5lLnV0ZjgoKS5kYXRhKCkpOworICAgIEdT
VF9ERUJVRygiQ29kZWMgY2FwYWJpbGl0eTogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOworICAg
IHJldHVybiBjYXBzOworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBHU3RyZWFtZXJSdHBUcmFuc2Nl
aXZlckJhY2tlbmQ6OnNldENvZGVjUHJlZmVyZW5jZXMoY29uc3QgVmVjdG9yPFJUQ1J0cENvZGVj
Q2FwYWJpbGl0eT4mIGNvZGVjcykKK3sKKyAgICBhdXRvIGdzdENvZGVjcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZm9yIChhdXRvJiBjb2RlYyA6IGNvZGVjcykgewor
ICAgICAgICBhdXRvIHJlc3VsdCA9IHRvUnRwQ29kZWNDYXBhYmlsaXR5KGNvZGVjKTsKKyAgICAg
ICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQu
cmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICBnc3RfY2Fwc19hcHBlbmQoZ3N0Q29kZWNzLmdl
dCgpLCByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIH0KKyAgICBnX29iamVjdF9z
ZXQobV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgImNvZGVjLXByZWZlcmVuY2VzIiwgZ3N0Q29kZWNz
LmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4geyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmRlYTc3MzA0YjA2ZTQxODBmYzcwNzE0N2Y1NDg4Njk4NTg4MTZhNjkK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaApAQCAtMCwwICsxLDU3IEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQ
dHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisj
aW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFRyYW5zY2Vp
dmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0
cFJlY2VpdmVyQmFja2VuZDsKKworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
IGZpbmFsIDogcHVibGljIFJUQ1J0cFRyYW5zY2VpdmVyQmFja2VuZCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kKEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+JiYpOworCisgICAgc3RkOjp1bmlx
dWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4gY3JlYXRlUmVjZWl2ZXJCYWNrZW5k
KCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+IGNyZWF0
ZVNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiwgR1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiYsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmKTsK
KworICAgIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBydGNUcmFuc2NlaXZlcigpIHsgcmV0dXJu
IG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBSVENSdHBUcmFuc2Nl
aXZlckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCBmaW5hbDsKKyAgICBzdGQ6Om9wdGlvbmFs
PFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uPiBjdXJyZW50RGlyZWN0aW9uKCkgY29uc3QgZmlu
YWw7CisgICAgdm9pZCBzZXREaXJlY3Rpb24oUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24pIGZp
bmFsOworICAgIFN0cmluZyBtaWQoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKyAg
ICBib29sIHN0b3BwZWQoKSBjb25zdCBmaW5hbDsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRD
b2RlY1ByZWZlcmVuY2VzKGNvbnN0IFZlY3RvcjxSVENSdHBDb2RlY0NhcGFiaWxpdHk+JikgZmlu
YWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBtX3J0Y1RyYW5zY2Vp
dmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWI0YTZhMzdlNWZi
MDNjZTk4MzYzMDZjYmVmY2RmZDlhNWEwZjUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3Jt
QmFja2VuZC5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEt
MjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpzZXRJbnB1dENhbGxiYWNrKENh
bGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgTG9ja2VyIGhvbGRMb2NrIHsgbV9pbnB1dENhbGxi
YWNrTG9jayB9OworICAgIG1faW5wdXRDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworfQor
Cit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OmNsZWFyVHJhbnNmb3JtYWJsZUZy
YW1lQ2FsbGJhY2soKQoreworICAgIHNldElucHV0Q2FsbGJhY2soeyB9KTsKK30KKwordm9pZCBH
U3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpwcm9jZXNzVHJhbnNmb3JtZWRGcmFtZShSVENS
dHBUcmFuc2Zvcm1hYmxlRnJhbWUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5z
Zm9ybUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTU0NDhmYzdkMzI2MThmNzhlN2U4MTVmYzE1ZTE0
OTYxMWIyYjNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAg
KzEsNjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVk
ZSAiUlRDUnRwVHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCA6
IHB1YmxpYyBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kIHsKK3Byb3RlY3RlZDoKKyAgICBHU3RyZWFt
ZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKE1lZGlhVHlwZSwgU2lkZSk7CisgICAgdm9pZCBzZXRJbnB1
dENhbGxiYWNrKENhbGxiYWNrJiYpOworCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFUeXBlIG1lZGlh
VHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbWVkaWFUeXBlOyB9CisKK3ByaXZhdGU6Cisg
ICAgLy8gUlRDUnRwVHJhbnNmb3JtQmFja2VuZAorICAgIHZvaWQgcHJvY2Vzc1RyYW5zZm9ybWVk
RnJhbWUoUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lJikgZmluYWw7CisgICAgdm9pZCBjbGVhclRy
YW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKCkgZmluYWw7CisgICAgU2lkZSBzaWRlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9zaWRlOyB9CisKKyAgICBNZWRpYVR5cGUgbV9tZWRpYVR5cGU7Cisg
ICAgU2lkZSBtX3NpZGU7CisKKyAgICBMb2NrIG1faW5wdXRDYWxsYmFja0xvY2s7CisgICAgQ2Fs
bGJhY2sgbV9pbnB1dENhbGxiYWNrOworCisgICAgTG9jayBtX291dHB1dENhbGxiYWNrTG9jazsK
K307CisKK2lubGluZSBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBU
cmFuc2Zvcm1CYWNrZW5kKE1lZGlhVHlwZSBtZWRpYVR5cGUsIFNpZGUgc2lkZSkKKyAgICA6IG1f
bWVkaWFUeXBlKG1lZGlhVHlwZSkKKyAgICAsIG1fc2lkZShzaWRlKQoreworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTRjZmVkNzNiNzYzYzIwYWY5MDc5MmYyNjRjOTVk
MzJiODQ2OGU5YgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDk3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaCIKKwor
I2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUg
IkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2Vi
UlRDVXRpbHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIFJUQ1Nj
dHBUcmFuc3BvcnRTdGF0ZSB0b1JUQ1NjdHBUcmFuc3BvcnRTdGF0ZShHc3RXZWJSVENTQ1RQVHJh
bnNwb3J0U3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgR1NU
X1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9ORVc6CisgICAgY2FzZSBHU1RfV0VCUlRDX1ND
VFBfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgIHJldHVybiBSVENTY3RwVHJh
bnNwb3J0U3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NDVFBfVFJBTlNQ
T1JUX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ1NjdHBUcmFuc3BvcnRTdGF0
ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9D
TE9TRUQ6CisgICAgICAgIHJldHVybiBSVENTY3RwVHJhbnNwb3J0U3RhdGU6OkNsb3NlZDsKKyAg
ICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitHU3RyZWFtZXJT
Y3RwVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoR1JlZlB0
cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiYmIHRyYW5zcG9ydCkKKyAgICA6IG1fYmFja2VuZChX
VEZNb3ZlKHRyYW5zcG9ydCkpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7Cit9CisKK0dTdHJl
YW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQo
KQoreworICAgIHVucmVnaXN0ZXJDbGllbnQoKTsKK30KKworVW5pcXVlUmVmPFJUQ0R0bHNUcmFu
c3BvcnRCYWNrZW5kPiBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6ZHRsc1RyYW5zcG9y
dEJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJhbnNw
b3J0OworICAgIGdfb2JqZWN0X2dldChtX2JhY2tlbmQuZ2V0KCksICJ0cmFuc3BvcnQiLCAmdHJh
bnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KTsKK30KKwordm9pZCBHU3RyZWFt
ZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQpCit7
CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1fYmFja2VuZC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBH
X0NBTExCQUNLKCtbXShHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgewor
ICAgICAgICBiYWNrZW5kLT5zdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQoKQorewor
ICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2JhY2tlbmQuZ2V0KCks
IHRoaXMpOworICAgIG1fY2xpZW50LmNsZWFyKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyU2N0cFRy
YW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDU0NUUFRyYW5zcG9ydFN0YXRlIHRyYW5zcG9y
dFN0YXRlOworICAgIGd1aW50MTYgbWF4Q2hhbm5lbHM7CisgICAgdWludDY0X3QgbWF4TWVzc2Fn
ZVNpemU7CisgICAgZ19vYmplY3RfZ2V0KG1fYmFja2VuZC5nZXQoKSwgInN0YXRlIiwgJnRyYW5z
cG9ydFN0YXRlLCAibWF4LW1lc3NhZ2Utc2l6ZSIsICZtYXhNZXNzYWdlU2l6ZSwgIm1heC1jaGFu
bmVscyIsICZtYXhDaGFubmVscywgbnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGhp
cywgdHJhbnNwb3J0U3RhdGUsIG1heENoYW5uZWxzLCBtYXhNZXNzYWdlU2l6ZV0geworICAgICAg
ICBpZiAoIW1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIG1fY2xpZW50
LT5vblN0YXRlQ2hhbmdlZCh0b1JUQ1NjdHBUcmFuc3BvcnRTdGF0ZSh0cmFuc3BvcnRTdGF0ZSks
IG1heE1lc3NhZ2VTaXplLCBtYXhDaGFubmVscyk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ5ODBmYzg0OThjMDVjMzk3ZGNiMDZjNzBjNDMzMDhiMDI5MGYw
MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1NDVFBU
cmFuc3BvcnQgR3N0V2ViUlRDU0NUUFRyYW5zcG9ydDsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENT
Y3RwVHJhbnNwb3J0QmFja2VuZCwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdTdHJlYW1lclNjdHBU
cmFuc3BvcnRCYWNrZW5kPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoR1JlZlB0cjxHc3RX
ZWJSVENTQ1RQVHJhbnNwb3J0PiYmKTsKKyAgICB+R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tl
bmQoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgc3RhdGVDaGFuZ2VkKCk7CisKK3ByaXZhdGUg
OgorICAgIC8vIFJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kCisgICAgY29uc3Qgdm9pZCogYmFja2Vu
ZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorICAgIFVuaXF1ZVJl
ZjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBmaW5hbDsK
KyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAgIHZvaWQgdW5yZWdp
c3RlckNsaWVudCgpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0
PiBtX2JhY2tlbmQ7CisgICAgV2Vha1B0cjxDbGllbnQ+IG1fY2xpZW50OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI2MTkzYWY1NjkwYTE3ODkwYWZlMWVjZjk3NGZiY2M2Mjg3OTQxYmUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5jcHAKQEAgLTAsMCArMSwyNzAgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5o
IgorI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5oIgorI2luY2x1ZGUgIkpTUlRDU3RhdHNSZXBvcnQu
aCIKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJydGMv
d2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19l
bmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2Vu
ZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSB2b2lk
IGZpbGxSVENTdGF0cyhSVENTdGF0c1JlcG9ydDo6U3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBkb3VibGUgdGltZXN0YW1wOworICAgIGlmIChnc3Rf
c3RydWN0dXJlX2dldF9kb3VibGUoc3RydWN0dXJlLCAidGltZXN0YW1wIiwgJnRpbWVzdGFtcCkp
CisgICAgICAgIHN0YXRzLnRpbWVzdGFtcCA9IHRpbWVzdGFtcDsKKyAgICBzdGF0cy5pZCA9IGdz
dF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJpZCIpOworfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgZmlsbFJUQ1JUUFN0cmVhbVN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpSdHBTdHJlYW1T
dGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZpbGxS
VENTdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIHN0YXRzLnRyYW5zcG9ydElkID0gZ3N0
X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgInRyYW5zcG9ydC1pZCIpOworICAgIHN0
YXRzLmNvZGVjSWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiY29kZWMt
aWQiKTsKKworICAgIHVuc2lnbmVkIHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91
aW50KHN0cnVjdHVyZSwgInNzcmMiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5zc3JjID0gdmFs
dWU7CisKKyAgICAvLyBGSVhNRToKKyAgICAvLyBzdGF0cy50cmFuc3BvcnRJZAorICAgIC8vIHN0
YXRzLmNvZGVjSWQKKyAgICAvLyBzdGF0cy5tZWRpYVR5cGUKKyAgICAvLyBzdGF0cy5raW5kCit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDQ29kZWNTdGF0cyhSVENTdGF0c1JlcG9ydDo6
Q29kZWNTdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAg
IGZpbGxSVENTdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIHVuc2lnbmVkIHZhbHVlOwor
ICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50KHN0cnVjdHVyZSwgInBheWxvYWQtdHlwZSIs
ICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnBheWxvYWRUeXBlID0gdmFsdWU7CisgICAgaWYgKGdz
dF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAiY2xvY2stcmF0ZSIsICZ2YWx1ZSkpCisg
ICAgICAgIHN0YXRzLmNsb2NrUmF0ZSA9IHZhbHVlOworCisgICAgLy8gRklYTUU6CisgICAgLy8g
c3RhdHMubWltZVR5cGUgPQorICAgIC8vIHN0YXRzLmNoYW5uZWxzID0KKyAgICAvLyBzdGF0cy5z
ZHBGbXRwTGluZSA9CisgICAgLy8gc3RhdHMuaW1wbGVtZW50YXRpb24gPQorfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgZmlsbEluYm91bmRSVFBTdHJlYW1TdGF0cyhSVENTdGF0c1JlcG9ydDo6SW5i
b3VuZFJ0cFN0cmVhbVN0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Cit7CisgICAgZmlsbFJUQ1JUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworCisgICAg
dWludDY0X3QgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChzdHJ1Y3R1
cmUsICJwYWNrZXRzLXJlY2VpdmVkIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMucGFja2V0c1Jl
Y2VpdmVkID0gdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChzdHJ1Y3R1
cmUsICJieXRlcy1yZWNlaXZlZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLmJ5dGVzUmVjZWl2
ZWQgPSB2YWx1ZTsKKworICAgIHVuc2lnbmVkIHBhY2tldHNMb3N0OworICAgIGlmIChnc3Rfc3Ry
dWN0dXJlX2dldF91aW50KHN0cnVjdHVyZSwgInBhY2tldHMtbG9zdCIsICZwYWNrZXRzTG9zdCkp
CisgICAgICAgIHN0YXRzLnBhY2tldHNMb3N0ID0gcGFja2V0c0xvc3Q7CisKKyAgICBkb3VibGUg
aml0dGVyOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUoc3RydWN0dXJlLCAiaml0
dGVyIiwgJmppdHRlcikpCisgICAgICAgIHN0YXRzLmppdHRlciA9IGppdHRlcjsKKworICAgIC8v
IEZJWE1FOgorICAgIC8vIHN0YXRzLmZyYWN0aW9uTG9zdCA9CisgICAgLy8gc3RhdHMucGFja2V0
c0Rpc2NhcmRlZCA9CisgICAgLy8gc3RhdHMucGFja2V0c1JlcGFpcmVkID0KKyAgICAvLyBzdGF0
cy5idXJzdFBhY2tldHNMb3N0ID0KKyAgICAvLyBzdGF0cy5idXJzdFBhY2tldHNEaXNjYXJkZWQg
PQorICAgIC8vIHN0YXRzLmJ1cnN0TG9zc0NvdW50ID0KKyAgICAvLyBzdGF0cy5idXJzdERpc2Nh
cmRDb3VudCA9CisgICAgLy8gc3RhdHMuYnVyc3RMb3NzUmF0ZSA9CisgICAgLy8gc3RhdHMuYnVy
c3REaXNjYXJkUmF0ZSA9CisgICAgLy8gc3RhdHMuZ2FwTG9zc1JhdGUgPQorICAgIC8vIHN0YXRz
LmdhcERpc2NhcmRSYXRlID0KKyAgICAvLyBzdGF0cy5mcmFtZXNEZWNvZGVkID0KK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKFJUQ1N0YXRzUmVwb3J0
OjpPdXRib3VuZFJ0cFN0cmVhbVN0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit7CisgICAgZmlsbFJUQ1JUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOwor
CisgICAgdWludDY0X3QgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChz
dHJ1Y3R1cmUsICJwYWNrZXRzLXNlbnQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5wYWNrZXRz
U2VudCA9IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50NjQoc3RydWN0dXJl
LCAiYnl0ZXMtc2VudCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLmJ5dGVzU2VudCA9IHZhbHVl
OworCisgICAgLy8gRklYTUUKKyAgICAvLyBzdGF0cy50YXJnZXRCaXRyYXRlID0KKyAgICAvLyBz
dGF0cy5mcmFtZXNFbmNvZGVkID0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENQZWVy
Q29ubmVjdGlvblN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVjdGlvblN0YXRzJiBzdGF0
cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZmlsbFJUQ1N0YXRzKHN0
YXRzLCBzdHJ1Y3R1cmUpOworCisgICAgaW50IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJl
X2dldF9pbnQoc3RydWN0dXJlLCAiZGF0YS1jaGFubmVscy1vcGVuZWQiLCAmdmFsdWUpKQorICAg
ICAgICBzdGF0cy5kYXRhQ2hhbm5lbHNPcGVuZWQgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVj
dHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgImRhdGEtY2hhbm5lbHMtY2xvc2VkIiwgJnZhbHVlKSkK
KyAgICAgICAgc3RhdHMuZGF0YUNoYW5uZWxzQ2xvc2VkID0gdmFsdWU7Cit9CisKK3N0YXRpYyBp
bmxpbmUgdm9pZCBmaWxsUlRDVHJhbnNwb3J0U3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlRyYW5zcG9y
dFN0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZmls
bFJUQ1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworCisgICAgLy8gRklYTUUKK30KKworc3RhdGlj
IGdib29sZWFuIGZpbGxSZXBvcnRDYWxsYmFjayhHUXVhcmssIGNvbnN0IEdWYWx1ZSogdmFsdWUs
IGdwb2ludGVyIHVzZXJEYXRhKQoreworICAgIGlmICghR1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVS
RSh2YWx1ZSkpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgY29uc3QgR3N0U3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZSh2YWx1ZSk7CisgICAgR3N0V2Vi
UlRDU3RhdHNUeXBlIHN0YXRzVHlwZTsKKyAgICBpZiAoIWdzdF9zdHJ1Y3R1cmVfZ2V0KHN0cnVj
dHVyZSwgInR5cGUiLCBHU1RfVFlQRV9XRUJSVENfU1RBVFNfVFlQRSwgJnN0YXRzVHlwZSwgbnVs
bHB0cikpCisgICAgICAgIHJldHVybiBUUlVFOworCisgICAgRE9NTWFwQWRhcHRlciYgcmVwb3J0
ID0gKnJlaW50ZXJwcmV0X2Nhc3Q8RE9NTWFwQWRhcHRlcio+KHVzZXJEYXRhKTsKKworICAgIHN3
aXRjaCAoc3RhdHNUeXBlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX0NPREVDOiB7Cisg
ICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzIHN0YXRzOworICAgICAgICBmaWxsUlRD
Q29kZWNTdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKyAgICAgICAgcmVwb3J0LnNldDxJRExET01T
dHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3RhdHM+PihzdGF0cy5p
ZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1Rf
V0VCUlRDX1NUQVRTX0lOQk9VTkRfUlRQOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpJbmJv
dW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3Rh
dHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJ
RExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0
cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBH
U1RfV0VCUlRDX1NUQVRTX09VVEJPVU5EX1JUUDogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6
T3V0Ym91bmRSdHBTdHJlYW1TdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbE91dGJvdW5kUlRQU3Ry
ZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3Ry
aW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpPdXRib3VuZFJ0cFN0cmVhbVN0YXRz
Pj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgR1NUX1dFQlJUQ19TVEFUU19SRU1PVEVfSU5CT1VORF9SVFA6IHsKKyAgICAgICAgUlRD
U3RhdHNSZXBvcnQ6OkluYm91bmRSdHBTdHJlYW1TdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbElu
Ym91bmRSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKyAgICAgICAgcmVwb3J0LnNl
dDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkluYm91bmRSdHBT
dHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUkVNT1RFX09VVEJPVU5EX1JUUDogewor
ICAgICAgICBSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cyBzdGF0czsKKyAg
ICAgICAgZmlsbE91dGJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0
OjpPdXRib3VuZFJ0cFN0cmVhbVN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DU1JDOgorICAg
ICAgICBHU1RfRklYTUUoIkRlcHJlY2F0ZWQgc3RhdHM6IGNzcmMiKTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1BFRVJfQ09OTkVDVElPTjogeworICAgICAgICBS
VENTdGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJU
Q1BlZXJDb25uZWN0aW9uU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5z
ZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVj
dGlvblN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19UUkFOU1BPUlQ6IHsKKyAgICAgICAgUlRD
U3RhdHNSZXBvcnQ6OlRyYW5zcG9ydFN0YXRzIHN0YXRzOworICAgICAgICBmaWxsUlRDVHJhbnNw
b3J0U3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3Ry
aW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cz4+KHN0YXRz
LmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdT
VF9XRUJSVENfU1RBVFNfU1RSRUFNOgorICAgICAgICBHU1RfRklYTUUoIkRlcHJlY2F0ZWQgc3Rh
dHM6IHN0cmVhbSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNf
REFUQV9DSEFOTkVMOgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgZGF0YS1jaGFubmVsIHN0
YXRzIHN1cHBvcnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRT
X0NBTkRJREFURV9QQUlSOgorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19MT0NBTF9DQU5ESURB
VEU6CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1JFTU9URV9DQU5ESURBVEU6CisgICAgICAg
IEdTVF9GSVhNRSgiTWlzc2luZyBjYW5kaWRhdGUgc3RhdHMgc3VwcG9ydCIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfQ0VSVElGSUNBVEU6CisgICAgICAgIEdT
VF9GSVhNRSgiTWlzc2luZyBjZXJ0aWZpY2F0ZSBzdGF0cyBzdXBwb3J0Iik7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKworICAgIHJldHVybiBUUlVFOworfQorCitzdHJ1Y3QgQ2FsbGJhY2tIb2xk
ZXIgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICBDYWxsYmFja0hv
bGRlcihHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Q29sbGVjdG9yQ2FsbGJhY2smJiBjb2xsZWN0
b3JDYWxsYmFjaykKKyAgICAgICAgOiBjYWxsYmFjayhXVEZNb3ZlKGNvbGxlY3RvckNhbGxiYWNr
KSkKKyAgICB7CisgICAgfQorICAgIEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpDb2xsZWN0b3JD
YWxsYmFjayBjYWxsYmFjazsKK307CisKK3ZvaWQgR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6Omdl
dFN0YXRzKENvbGxlY3RvckNhbGxiYWNrJiYgY2FsbGJhY2ssIEdzdFBhZCogcGFkKQoreworICAg
IGlmICghbV93ZWJydGNCaW4pIHsKKyAgICAgICAgY2FsbGJhY2sobnVsbHB0cik7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIGhvbGRlciA9IFdURjo6bWFrZVVuaXF1ZTxDYWxs
YmFja0hvbGRlcj4oV1RGTW92ZShjYWxsYmFjaykpOworICAgIGF1dG8qIHByb21pc2UgPSBnc3Rf
cHJvbWlzZV9uZXdfd2l0aF9jaGFuZ2VfZnVuYyhbXShHc3RQcm9taXNlKiBwcm9taXNlLCBncG9p
bnRlciB1c2VyRGF0YSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbGJhY2tIb2xkZXI+
IGhvbGRlcihyZWludGVycHJldF9jYXN0PENhbGxiYWNrSG9sZGVyKj4odXNlckRhdGEpKTsKKyAg
ICAgICAgaWYgKGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZSkgIT0gR1NUX1BST01JU0VfUkVTVUxU
X1JFUExJRUQpIHsKKyAgICAgICAgICAgIGhvbGRlci0+Y2FsbGJhY2sobnVsbHB0cik7CisgICAg
ICAgICAgICBnc3RfcHJvbWlzZV91bnJlZihwcm9taXNlKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGF1dG8qIHN0YXRzID0gZ3N0X3Byb21pc2VfZ2V0
X3JlcGx5KHByb21pc2UpOworICAgICAgICBpZiAoIXN0YXRzKSB7CisgICAgICAgICAgICBob2xk
ZXItPmNhbGxiYWNrKG51bGxwdHIpOworICAgICAgICAgICAgZ3N0X3Byb21pc2VfdW5yZWYocHJv
bWlzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjYWxsT25N
YWluVGhyZWFkQW5kV2FpdChbc3RhdHMsIHByb21pc2UsIGhvbGRlciA9IGhvbGRlci5nZXQoKV0g
eworICAgICAgICAgICAgaG9sZGVyLT5jYWxsYmFjayhSVENTdGF0c1JlcG9ydDo6Y3JlYXRlKFtz
dGF0cywgcHJvbWlzZV0oYXV0byYgbWFwQWRhcHRlcikgeworICAgICAgICAgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfZm9yZWFjaChzdGF0cywgZmlsbFJlcG9ydENhbGxiYWNrLCAmbWFwQWRhcHRlcik7
CisgICAgICAgICAgICAgICAgZ3N0X3Byb21pc2VfdW5yZWYocHJvbWlzZSk7CisgICAgICAgICAg
ICB9KSk7CisgICAgICAgIH0pOworICAgIH0sIGhvbGRlci5yZWxlYXNlKCksIG51bGxwdHIpOwor
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC1zdGF0cyIs
IHBhZCwgcHJvbWlzZSk7Cit9CisKK307IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0
c0NvbGxlY3Rvci5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41NDI3MzU1M2Y4MjUxMzcy
NjFmYTk0NzZiZmUwYWUxNzJiZDA4MWI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3Iu
aApAQCAtMCwwICsxLDQ4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxp
YSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Db21wbGV0
aW9uSGFuZGxlci5oPgorI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSVENT
dGF0c1JlcG9ydDsKKworY2xhc3MgR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IsIFdURjo6RGVzdHJ1Y3Rp
b25UaHJlYWQ6Ok1haW4+IHsKK3B1YmxpYzoKKyAgICB1c2luZyBDb2xsZWN0b3JDYWxsYmFjayA9
IENvbXBsZXRpb25IYW5kbGVyPHZvaWQoUmVmUHRyPFJUQ1N0YXRzUmVwb3J0PiYmKT47CisgICAg
c3RhdGljIFJlZjxHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcj4gY3JlYXRlKCkgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBHU3RyZWFtZXJTdGF0c0NvbGxlY3RvcigpKTsgfQorCisgICAgdm9pZCBzZXRF
bGVtZW50KEdzdEVsZW1lbnQqIGVsZW1lbnQpIHsgbV93ZWJydGNCaW4gPSBlbGVtZW50OyB9Cisg
ICAgdm9pZCBnZXRTdGF0cyhDb2xsZWN0b3JDYWxsYmFjayYmLCBHc3RQYWQqKTsKKworcHJpdmF0
ZToKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fd2VicnRjQmluOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjVkMmJhMjdkMzA2ZjZkMmZkYWQ5MmUwN2VmNWZhZmU0MTg3ODM1YjMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJXZWJSVENVdGlscy5jcHAKQEAgLTAsMCArMSw0NDggQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENV
dGlscy5oIgorCisjaW5jbHVkZSAiUlRDSWNlQ2FuZGlkYXRlLmgiCisjaW5jbHVkZSAiUlRDSWNl
UHJvdG9jb2wuaCIKKworI2luY2x1ZGUgPG9wZW5zc2wvYm4uaD4KKyNpbmNsdWRlIDxvcGVuc3Ns
L3JzYS5oPgorI2luY2x1ZGUgPG9wZW5zc2wvc3NsLmg+CisjaW5jbHVkZSA8d3RmL0NyeXB0b2dy
YXBoaWNhbGx5UmFuZG9tTnVtYmVyLmg+CisjaW5jbHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVk
ZSA8d3RmL1dhbGxUaW1lLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvQmFzZTY0Lmg+CisjaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgorCitHU1RfREVCVUdfQ0FU
RUdPUllfU1RBVElDKHdlYmtpdF93ZWJydGNfdXRpbHNfZGVidWcpOworI2RlZmluZSBHU1RfQ0FU
X0RFRkFVTFQgd2Via2l0X3dlYnJ0Y191dGlsc19kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlQ29tcG9uZW50IHRvUlRDSWNlQ29tcG9uZW50KGludCBj
b21wb25lbnQpCit7CisgICAgcmV0dXJuIGNvbXBvbmVudCA9PSAxID8gUlRDSWNlQ29tcG9uZW50
OjpSdHAgOiBSVENJY2VDb21wb25lbnQ6OlJ0Y3A7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpv
cHRpb25hbDxSVENJY2VQcm90b2NvbD4gdG9SVENJY2VQcm90b2NvbChjb25zdCBTdHJpbmcmIHBy
b3RvY29sKQoreworICAgIGlmICghcHJvdG9jb2wgfHwgcHJvdG9jb2wuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4geyB9OworICAgIGlmIChwcm90b2NvbCA9PSAidWRwIikKKyAgICAgICAgcmV0
dXJuIFJUQ0ljZVByb3RvY29sOjpVZHA7CisgICAgQVNTRVJUKHByb3RvY29sID09ICJ0Y3AiKTsK
KyAgICByZXR1cm4gUlRDSWNlUHJvdG9jb2w6OlRjcDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6
Om9wdGlvbmFsPFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU+IHRvUlRDSWNlVGNwQ2FuZGlkYXRlVHlw
ZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKCF0eXBlIHx8IHR5cGUuaXNFbXB0eSgp
KQorICAgICAgICByZXR1cm4geyB9OworICAgIGlmICh0eXBlID09ICJhY3RpdmUiKQorICAgICAg
ICByZXR1cm4gUlRDSWNlVGNwQ2FuZGlkYXRlVHlwZTo6QWN0aXZlOworICAgIGlmICh0eXBlID09
ICJwYXNzaXZlIikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU6OlBhc3Np
dmU7CisgICAgQVNTRVJUKHR5cGUgPT0gInNvIik7CisgICAgcmV0dXJuIFJUQ0ljZVRjcENhbmRp
ZGF0ZVR5cGU6OlNvOworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDSWNlQ2Fu
ZGlkYXRlVHlwZT4gdG9SVENJY2VDYW5kaWRhdGVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sK
KyAgICBpZiAoIXR5cGUgfHwgdHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgaWYgKHR5cGUgPT0gImhvc3QiKQorICAgICAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlw
ZTo6SG9zdDsKKyAgICBpZiAodHlwZSA9PSAic3JmbHgiKQorICAgICAgICByZXR1cm4gUlRDSWNl
Q2FuZGlkYXRlVHlwZTo6U3JmbHg7CisgICAgaWYgKHR5cGUgPT0gInByZmx4IikKKyAgICAgICAg
cmV0dXJuIFJUQ0ljZUNhbmRpZGF0ZVR5cGU6OlByZmx4OworICAgIEFTU0VSVCh0eXBlID09ICJy
ZWxheSIpOworICAgIHJldHVybiBSVENJY2VDYW5kaWRhdGVUeXBlOjpSZWxheTsKK30KKworUmVm
UHRyPFJUQ0Vycm9yPiB0b1JUQ0Vycm9yKEdFcnJvciogcnRjRXJyb3IpCit7CisgICAgYXV0byBk
ZXRhaWwgPSB0b1JUQ0Vycm9yRGV0YWlsVHlwZShzdGF0aWNfY2FzdDxHc3RXZWJSVENFcnJvcj4o
cnRjRXJyb3ItPmNvZGUpKTsKKyAgICBpZiAoIWRldGFpbCkKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgcmV0dXJuIFJUQ0Vycm9yOjpjcmVhdGUoKmRldGFpbCwgcnRjRXJyb3ItPm1lc3Nh
Z2UpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSB0b1dlYlJUQ0JpdFJhdGVQcmlvcml0eShS
VENQcmlvcml0eVR5cGUgcHJpb3JpdHkpCit7CisgICAgc3dpdGNoIChwcmlvcml0eSkgeworICAg
IGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93OgorICAgICAgICByZXR1cm4gMC41OworICAg
IGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpMb3c6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2Ug
UlRDUHJpb3JpdHlUeXBlOjpNZWRpdW06CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgUlRD
UHJpb3JpdHlUeXBlOjpIaWdoOgorICAgICAgICByZXR1cm4gNDsKKyAgICB9CisKKyAgICBSRUxF
QVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4g
ZnJvbVJUQ0VuY29kaW5nUGFyYW1ldGVycyhjb25zdCBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMm
IHBhcmFtZXRlcnMpCit7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IHJ0Y1BhcmFtZXRl
cnMoZ3N0X3N0cnVjdHVyZV9uZXcoImVuY29kaW5nLXBhcmFtZXRlcnMiLCAiYWN0aXZlIiwgR19U
WVBFX0JPT0xFQU4sIHBhcmFtZXRlcnMuYWN0aXZlLAorICAgICAgICAicmlkIiwgR19UWVBFX1NU
UklORywgcGFyYW1ldGVycy5yaWQudXRmOCgpLmRhdGEoKSwgImJpdHJhdGUtcHJpb3JpdHkiLCBH
X1RZUEVfRE9VQkxFLCB0b1dlYlJUQ0JpdFJhdGVQcmlvcml0eShwYXJhbWV0ZXJzLnByaW9yaXR5
KSwgbnVsbHB0cikpOworCisgICAgaWYgKHBhcmFtZXRlcnMuc3NyYykKKyAgICAgICAgZ3N0X3N0
cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgInNzcmMiLCBHX1RZUEVfVUxPTkcsIHBh
cmFtZXRlcnMuc3NyYywgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5tYXhCaXRyYXRl
KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAibWF4LWJp
dHJhdGUiLCBHX1RZUEVfVUxPTkcsIHBhcmFtZXRlcnMubWF4Qml0cmF0ZSwgbnVsbHB0cik7CisK
KyAgICBpZiAocGFyYW1ldGVycy5tYXhGcmFtZXJhdGUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVf
c2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJtYXgtZnJhbWVyYXRlIiwgR19UWVBFX1VMT05HLCBw
YXJhbWV0ZXJzLm1heEZyYW1lcmF0ZSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5z
Y2FsZVJlc29sdXRpb25Eb3duQnkpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFt
ZXRlcnMuZ2V0KCksICJzY2FsZS1yZXNvbHV0aW9uLWRvd24tYnkiLCBHX1RZUEVfRE9VQkxFLCBw
YXJhbWV0ZXJzLnNjYWxlUmVzb2x1dGlvbkRvd25CeSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFy
YW1ldGVycy5uZXR3b3JrUHJpb3JpdHkpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1Bh
cmFtZXRlcnMuZ2V0KCksICJuZXR3b3JrLXByaW9yaXR5IiwgR19UWVBFX0lOVCwgKnBhcmFtZXRl
cnMubmV0d29ya1ByaW9yaXR5LCBudWxscHRyKTsKKworICAgIHJldHVybiBydGNQYXJhbWV0ZXJz
OworfQorCitzdGF0aWMgaW5saW5lIFJUQ1ByaW9yaXR5VHlwZSBmcm9tV2ViUlRDQml0UmF0ZVBy
aW9yaXR5KGRvdWJsZSBwcmlvcml0eSkKK3sKKyAgICBpZiAocHJpb3JpdHkgPCAwLjcpCisgICAg
ICAgIHJldHVybiBSVENQcmlvcml0eVR5cGU6OlZlcnlMb3c7CisgICAgaWYgKHByaW9yaXR5IDwg
MS41KQorICAgICAgICByZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpMb3c7CisgICAgaWYgKHByaW9y
aXR5IDwgMi41KQorICAgICAgICByZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpNZWRpdW07CisgICAg
cmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6SGlnaDsKK30KKworc3RhdGljIGlubGluZSBSVENSdHBF
bmNvZGluZ1BhcmFtZXRlcnMgdG9SVENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3QgR3N0U3RydWN0
dXJlKiBydGNQYXJhbWV0ZXJzKQoreworICAgIFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycyBwYXJh
bWV0ZXJzOworCisgICAgdW5zaWduZWQgc3NyYzsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRf
dWludChydGNQYXJhbWV0ZXJzLCAic3NyYyIsICZzc3JjKSkKKyAgICAgICAgcGFyYW1ldGVycy5z
c3JjID0gc3NyYzsKKworICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJ0Y1BhcmFtZXRlcnMsICJhY3Rp
dmUiLCBHX1RZUEVfQk9PTEVBTiwgJihwYXJhbWV0ZXJzLmFjdGl2ZSksIG51bGxwdHIpOworCisg
ICAgdWludDY0X3QgbWF4Qml0cmF0ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0
KHJ0Y1BhcmFtZXRlcnMsICJtYXgtYml0cmF0ZSIsICZtYXhCaXRyYXRlKSkKKyAgICAgICAgcGFy
YW1ldGVycy5tYXhCaXRyYXRlID0gbWF4Qml0cmF0ZTsKKworICAgIHVpbnQ2NF90IG1heEZyYW1l
cmF0ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHJ0Y1BhcmFtZXRlcnMsICJt
YXgtZnJhbWVyYXRlIiwgJm1heEZyYW1lcmF0ZSkpCisgICAgICAgIHBhcmFtZXRlcnMubWF4RnJh
bWVyYXRlID0gbWF4RnJhbWVyYXRlOworCisgICAgcGFyYW1ldGVycy5yaWQgPSBnc3Rfc3RydWN0
dXJlX2dldF9zdHJpbmcocnRjUGFyYW1ldGVycywgInJpZCIpOworCisgICAgZG91YmxlIHNjYWxl
UmVzb2x1dGlvbkRvd25CeTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHJ0Y1Bh
cmFtZXRlcnMsICJzY2FsZS1yZXNvbHV0aW9uLWRvd24tYnkiLCAmc2NhbGVSZXNvbHV0aW9uRG93
bkJ5KSkKKyAgICAgICAgcGFyYW1ldGVycy5zY2FsZVJlc29sdXRpb25Eb3duQnkgPSBzY2FsZVJl
c29sdXRpb25Eb3duQnk7CisKKyAgICBkb3VibGUgYml0cmF0ZVByaW9yaXR5OworICAgIGlmIChn
c3Rfc3RydWN0dXJlX2dldF9kb3VibGUocnRjUGFyYW1ldGVycywgImJpdHJhdGUtcHJpb3JpdHki
LCAmYml0cmF0ZVByaW9yaXR5KSkKKyAgICAgICAgcGFyYW1ldGVycy5wcmlvcml0eSA9IGZyb21X
ZWJSVENCaXRSYXRlUHJpb3JpdHkoYml0cmF0ZVByaW9yaXR5KTsKKworICAgIGludCBuZXR3b3Jr
UHJpb3JpdHk7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChydGNQYXJhbWV0ZXJzLCAi
bmV0d29yay1wcmlvcml0eSIsICZuZXR3b3JrUHJpb3JpdHkpKQorICAgICAgICBwYXJhbWV0ZXJz
Lm5ldHdvcmtQcmlvcml0eSA9IHN0YXRpY19jYXN0PFJUQ1ByaW9yaXR5VHlwZT4obmV0d29ya1By
aW9yaXR5KTsKKworICAgIHJldHVybiBwYXJhbWV0ZXJzOworfQorCitSVENSdHBTZW5kUGFyYW1l
dGVycyB0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSogcnRjUGFyYW1l
dGVycykKK3sKKyAgICBpZiAoIXJ0Y1BhcmFtZXRlcnMpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBSVENSdHBTZW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIGF1dG8qIGVuY29kaW5n
cyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHJ0Y1BhcmFtZXRlcnMsICJlbmNvZGluZ3MiKTsK
KyAgICB1bnNpZ25lZCBzaXplID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUoZW5jb2RpbmdzKTsK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGNvbnN0
IGF1dG8qIHZhbHVlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlKGVuY29kaW5ncywgaSk7Cisg
ICAgICAgIHBhcmFtZXRlcnMuZW5jb2RpbmdzLmFwcGVuZCh0b1JUQ0VuY29kaW5nUGFyYW1ldGVy
cyhHU1RfU1RSVUNUVVJFX0NBU1QodmFsdWUpKSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEhh
bmRsZSBydGNQYXJhbWV0ZXJzLmRlZ3JhZGF0aW9uX3ByZWZlcmVuY2UuCisgICAgcmV0dXJuIHBh
cmFtZXRlcnM7Cit9CisKKworc3RhdGljIHZvaWQgZW5zdXJlRGVidWdDYXRlZ29yeUluaXRpYWxp
emVkKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpj
YWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQo
d2Via2l0X3dlYnJ0Y191dGlsc19kZWJ1ZywgIndlYmtpdHdlYnJ0Y3V0aWxzIiwgMCwgIldlYktp
dCBXZWJSVEMgdXRpbGl0aWVzIik7CisgICAgfSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDSWNl
Q2FuZGlkYXRlOjpGaWVsZHM+IHBhcnNlSWNlQ2FuZGlkYXRlU0RQKGNvbnN0IFN0cmluZyYgc2Rw
KQoreworICAgIGVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpOworICAgIEdTVF9ERUJV
RygiUGFyc2luZyBJQ0UgQ2FuZGlkYXRlOiAlcyIsIHNkcC51dGY4KCkuZGF0YSgpKTsKKyAgICBp
ZiAoIXNkcC5zdGFydHNXaXRoKCJjYW5kaWRhdGU6IikpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBTdHJpbmcgZm91bmRhdGlvbjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRJZCA9IDA7Cisg
ICAgU3RyaW5nIHRyYW5zcG9ydDsKKyAgICB1bnNpZ25lZCBwcmlvcml0eSA9IDA7CisgICAgU3Ry
aW5nIGFkZHJlc3M7CisgICAgdWludDMyX3QgcG9ydCA9IDA7CisgICAgU3RyaW5nIHR5cGU7Cisg
ICAgU3RyaW5nIHRjcHR5cGU7CisgICAgU3RyaW5nIHJlbGF0ZWRBZGRyZXNzOworICAgIGd1aW50
MTYgcmVsYXRlZFBvcnQgPSAwOworICAgIFN0cmluZyB1c2VybmFtZUZyYWdtZW50OworICAgIGF1
dG8gdG9rZW5zID0gc2RwLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3Vic3RyaW5nKDEwKS5z
cGxpdCgnICcpOworCisgICAgZm9yIChhdXRvIGl0ID0gdG9rZW5zLmJlZ2luKCk7IGl0ICE9IHRv
a2Vucy5lbmQoKTsgKytpdCkgeworICAgICAgICBhdXRvIGkgPSBzdGQ6OmRpc3RhbmNlKHRva2Vu
cy5iZWdpbigpLCBpdCk7CisgICAgICAgIGF1dG8gdG9rZW4gPSAqaXQ7CisgICAgICAgIHN3aXRj
aCAoaSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBmb3VuZGF0aW9uID0gdG9rZW47
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKGF1
dG8gdmFsdWUgPSBwYXJzZUludGVnZXI8dW5zaWduZWQ+KHRva2VuKSkKKyAgICAgICAgICAgICAg
ICBjb21wb25lbnRJZCA9ICp2YWx1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAg
ICByZXR1cm4geyB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAg
ICAgICAgIHRyYW5zcG9ydCA9IHRva2VuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgMzoKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVk
Pih0b2tlbikpCisgICAgICAgICAgICAgICAgcHJpb3JpdHkgPSAqdmFsdWU7CisgICAgICAgICAg
ICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBhZGRyZXNzID0gdG9rZW47CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBw
YXJzZUludGVnZXI8dW5zaWduZWQ+KHRva2VuKSkKKyAgICAgICAgICAgICAgICBwb3J0ID0gKnZh
bHVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChpdCArIDEg
PT0gdG9rZW5zLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAg
ICAgIGl0Kys7CisgICAgICAgICAgICBpZiAodG9rZW4gPT0gInR5cCIpCisgICAgICAgICAgICAg
ICAgdHlwZSA9ICppdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJyYWRkciIpCisg
ICAgICAgICAgICAgICAgcmVsYXRlZEFkZHJlc3MgPSAqaXQ7CisgICAgICAgICAgICBlbHNlIGlm
ICh0b2tlbiA9PSAicnBvcnQiKQorICAgICAgICAgICAgICAgIHJlbGF0ZWRQb3J0ID0gcGFyc2VJ
bnRlZ2VyPHVuc2lnbmVkPigqaXQpLnZhbHVlX29yKDApOworICAgICAgICAgICAgZWxzZSBpZiAo
dG9rZW4gPT0gInRjcHR5cGUiKQorICAgICAgICAgICAgICAgIHRjcHR5cGUgPSAqaXQ7CisgICAg
ICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAidWZyYWciKQorICAgICAgICAgICAgICAgIHVzZXJu
YW1lRnJhZ21lbnQgPSAqaXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0K
KworICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFJU
Q0ljZUNhbmRpZGF0ZTo6RmllbGRzIGZpZWxkczsKKyAgICBmaWVsZHMuZm91bmRhdGlvbiA9IGZv
dW5kYXRpb247CisgICAgZmllbGRzLmNvbXBvbmVudCA9IHRvUlRDSWNlQ29tcG9uZW50KGNvbXBv
bmVudElkKTsKKyAgICBmaWVsZHMucHJpb3JpdHkgPSBwcmlvcml0eTsKKyAgICBmaWVsZHMucHJv
dG9jb2wgPSB0b1JUQ0ljZVByb3RvY29sKHRyYW5zcG9ydCk7CisgICAgaWYgKCFhZGRyZXNzLmlz
RW1wdHkoKSkgeworICAgICAgICBmaWVsZHMuYWRkcmVzcyA9IGFkZHJlc3M7CisgICAgICAgIGZp
ZWxkcy5wb3J0ID0gcG9ydDsKKyAgICB9CisgICAgZmllbGRzLnR5cGUgPSB0b1JUQ0ljZUNhbmRp
ZGF0ZVR5cGUodHlwZSk7CisgICAgZmllbGRzLnRjcFR5cGUgPSB0b1JUQ0ljZVRjcENhbmRpZGF0
ZVR5cGUodGNwdHlwZSk7CisgICAgaWYgKCFyZWxhdGVkQWRkcmVzcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZmllbGRzLnJlbGF0ZWRBZGRyZXNzID0gcmVsYXRlZEFkZHJlc3M7CisgICAgICAgIGZp
ZWxkcy5yZWxhdGVkUG9ydCA9IHJlbGF0ZWRQb3J0OworICAgIH0KKyAgICBmaWVsZHMudXNlcm5h
bWVGcmFnbWVudCA9IHVzZXJuYW1lRnJhZ21lbnQ7CisgICAgcmV0dXJuIGZpZWxkczsKK30KKwor
c3RhdGljIFN0cmluZyB4NTA5U2VyaWFsaXplKFg1MDkqIHg1MDkpCit7CisgICAgQklPKiBiaW8g
PSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAgICBpZiAoIWJpbykKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIGF1dG8gc2NvcGVFeGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsmXSB7CisgICAg
ICAgIEJJT19mcmVlKGJpbyk7CisgICAgfSk7CisKKyAgICBpZiAoIVBFTV93cml0ZV9iaW9fWDUw
OShiaW8sIHg1MDkpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGJ1
ZmZlcjsKKyAgICBidWZmZXIucmVzZXJ2ZUNhcGFjaXR5KDQwOTYpOworICAgIGludCBsZW5ndGgg
PSBCSU9fcmVhZChiaW8sIGJ1ZmZlci5kYXRhKCksIDQwOTYpOworICAgIGlmICghbGVuZ3RoKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBs
ZW5ndGgpOworfQorCitzdGF0aWMgU3RyaW5nIHByaXZhdGVLZXlTZXJpYWxpemUoRVZQX1BLRVkq
IHByaXZhdGVLZXkpCit7CisgICAgQklPKiBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAg
ICBpZiAoIWJpbykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gc2NvcGVFeGl0ID0g
V1RGOjptYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgfSk7
CisKKyAgICBpZiAoIVBFTV93cml0ZV9iaW9fUHJpdmF0ZUtleShiaW8sIHByaXZhdGVLZXksIG51
bGxwdHIsIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzZXJ2ZUNhcGFjaXR5
KDQwOTYpOworICAgIGludCBsZW5ndGggPSBCSU9fcmVhZChiaW8sIGJ1ZmZlci5kYXRhKCksIDQw
OTYpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJu
IFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpOworfQorCitzdGQ6Om9wdGlvbmFsPFJlZjxS
VENDZXJ0aWZpY2F0ZT4+IGdlbmVyYXRlQ2VydGlmaWNhdGUoUmVmPFNlY3VyaXR5T3JpZ2luPiYm
IG9yaWdpbiwgY29uc3QgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0
aW9uJiBpbmZvKQoreworICAgIGVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpOworICAg
IEVWUF9QS0VZKiBwcml2YXRlS2V5ID0gRVZQX1BLRVlfbmV3KCk7CisgICAgaWYgKCFwcml2YXRl
S2V5KSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gY3JlYXRlIHByaXZhdGUga2V5
Iik7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBzY29wZUV4aXQgPSBX
VEY6Om1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgRVZQX1BLRVlfZnJlZShwcml2YXRlS2V5
KTsKKyAgICB9KTsKKworICAgIHN3aXRjaCAoaW5mby50eXBlKSB7CisgICAgY2FzZSBQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb246OlR5cGU6OkVDRFNBUDI1Njog
eworICAgICAgICBFQ19LRVkqIGVjS2V5ID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKE5JRF9Y
OV82Ml9wcmltZTI1NnYxKTsKKyAgICAgICAgLy8gRW5zdXJlIGN1cnZlIG5hbWUgaXMgaW5jbHVk
ZWQgd2hlbiBFQyBrZXkgaXMgc2VyaWFsaXplZC4KKyAgICAgICAgLy8gV2l0aG91dCB0aGlzIGNh
bGwsIE9wZW5TU0wgdmVyc2lvbnMgYmVmb3JlIDEuMS4wIHdpbGwgY3JlYXRlCisgICAgICAgIC8v
IGNlcnRpZmljYXRlcyB0aGF0IGRvbid0IHdvcmsgZm9yIFRMUy4KKyAgICAgICAgLy8gVGhpcyBp
cyBhIG5vLW9wIGZvciBCb3JpbmdTU0wgYW5kIE9wZW5TU0wgMS4xLjArCisgICAgICAgIEVDX0tF
WV9zZXRfYXNuMV9mbGFnKGVjS2V5LCBPUEVOU1NMX0VDX05BTUVEX0NVUlZFKTsKKyAgICAgICAg
aWYgKCFwcml2YXRlS2V5IHx8ICFlY0tleSB8fCAhRUNfS0VZX2dlbmVyYXRlX2tleShlY0tleSkg
fHwgIUVWUF9QS0VZX2Fzc2lnbl9FQ19LRVkocHJpdmF0ZUtleSwgZWNLZXkpKSB7CisgICAgICAg
ICAgICBFQ19LRVlfZnJlZShlY0tleSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAg
ICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6Q2VydGlmaWNhdGVJbmZvcm1hdGlvbjo6VHlwZTo6UlNBU1NBUEtDUzF2MTU6IHsKKyAgICAg
ICAgUlNBKiByc2EgPSBSU0FfbmV3KCk7CisgICAgICAgIGlmICghcnNhKQorICAgICAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgICAgICBCSUdOVU0qIGV4cG9uZW50ID0gQk5fbmV3KCk7CisgICAg
ICAgIGludCBwdWJsaWNFeHBvbmVudCA9IGluZm8ucnNhUGFyYW1ldGVycyA/IGluZm8ucnNhUGFy
YW1ldGVycy0+cHVibGljRXhwb25lbnQgOiA2NTUzNzsKKyAgICAgICAgYXV0byBtb2R1bHVzTGVu
Z3RoID0gaW5mby5yc2FQYXJhbWV0ZXJzID8gaW5mby5yc2FQYXJhbWV0ZXJzLT5tb2R1bHVzTGVu
Z3RoIDogMjA0ODsKKyAgICAgICAgaWYgKCFCTl9zZXRfd29yZChleHBvbmVudCwgcHVibGljRXhw
b25lbnQpIHx8ICFSU0FfZ2VuZXJhdGVfa2V5X2V4KHJzYSwgbW9kdWx1c0xlbmd0aCwgZXhwb25l
bnQsIG51bGxwdHIpCisgICAgICAgICAgICB8fCAhRVZQX1BLRVlfYXNzaWduX1JTQShwcml2YXRl
S2V5LCByc2EpKSB7CisgICAgICAgICAgICBSU0FfZnJlZShyc2EpOworICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICBCTl9mcmVlKGV4cG9uZW50KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIH0KKworICAgIFg1MDkqIHg1MDkgPSBYNTA5X25ldygpOworICAg
IGlmICgheDUwOSkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBjZXJ0
aWZpY2F0ZSIpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGF1dG8gY2VydFNj
b3BlRXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBYNTA5X2ZyZWUoeDUw
OSk7CisgICAgfSk7CisKKyAgICBYNTA5X3NldF92ZXJzaW9uKHg1MDksIDIpOworCisgICAgLy8g
U2V0IGEgcmFuZG9tIDY0IGJpdCBpbnRlZ2VyIGFzIHNlcmlhbCBudW1iZXIuCisgICAgQklHTlVN
KiBzZXJpYWxOdW1iZXIgPSBCTl9uZXcoKTsKKyAgICBCTl9wc2V1ZG9fcmFuZChzZXJpYWxOdW1i
ZXIsIDY0LCAwLCAwKTsKKyAgICBBU04xX0lOVEVHRVIqIGFzbjFTZXJpYWxOdW1iZXIgPSBYNTA5
X2dldF9zZXJpYWxOdW1iZXIoeDUwOSk7CisgICAgQk5fdG9fQVNOMV9JTlRFR0VSKHNlcmlhbE51
bWJlciwgYXNuMVNlcmlhbE51bWJlcik7CisgICAgQk5fZnJlZShzZXJpYWxOdW1iZXIpOworCisg
ICAgLy8gU2V0IGEgcmFuZG9tIDggYnl0ZSBiYXNlNjQgc3RyaW5nIGFzIGlzc3Vlci9zdWJqZWN0
LgorICAgIFg1MDlfTkFNRSogbmFtZSA9IFg1MDlfTkFNRV9uZXcoKTsKKyAgICBWZWN0b3I8dWlu
dDhfdD4gYnVmZmVyOworICAgIGJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDgpOworICAg
IFdURjo6Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoYnVmZmVyLmRhdGEoKSwgOCk7Cisg
ICAgYXV0byBjb21tb25OYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVyKTsKKyAgICBY
NTA5X05BTUVfYWRkX2VudHJ5X2J5X05JRChuYW1lLCBOSURfY29tbW9uTmFtZSwgTUJTVFJJTkdf
QVNDLCAoY29uc3QgZ3VjaGFyKiljb21tb25OYW1lLmFzY2lpKCkuZGF0YSgpLCAtMSwgLTEsIDAp
OworICAgIFg1MDlfc2V0X3N1YmplY3RfbmFtZSh4NTA5LCBuYW1lKTsKKyAgICBYNTA5X3NldF9p
c3N1ZXJfbmFtZSh4NTA5LCBuYW1lKTsKKyAgICBYNTA5X05BTUVfZnJlZShuYW1lKTsKKworICAg
IC8vIEZhbGxiYWNrIHRvIDMwIGRheXMsIG1heCBvdXQgYXQgb25lIHllYXIuCisgICAgdWludDY0
X3QgZXhwaXJlcyA9IGluZm8uZXhwaXJlcy52YWx1ZV9vcigyNTkyMDAwKTsKKyAgICBleHBpcmVz
ID0gc3RkOjptaW48dWludDY0X3Q+KGV4cGlyZXMsIDMxNTM2MDAwMDAwKTsKKyAgICBYNTA5X2dt
dGltZV9hZGooWDUwOV9nZXRtX25vdEJlZm9yZSh4NTA5KSwgMCk7CisgICAgWDUwOV9nbXRpbWVf
YWRqKFg1MDlfZ2V0bV9ub3RBZnRlcih4NTA5KSwgZXhwaXJlcyk7CisgICAgWDUwOV9zZXRfcHVi
a2V5KHg1MDksIHByaXZhdGVLZXkpOworCisgICAgaWYgKCFYNTA5X3NpZ24oeDUwOSwgcHJpdmF0
ZUtleSwgRVZQX3NoYTI1NigpKSkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIHNp
Z24gY2VydGlmaWNhdGUiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRv
IHBlbSA9IHg1MDlTZXJpYWxpemUoeDUwOSk7CisgICAgR1NUX0RFQlVHKCJHZW5lcmF0ZWQgY2Vy
dGlmaWNhdGUgUEVNOiAlcyIsIHBlbS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0byBzZXJpYWxp
emVkUHJpdmF0ZUtleSA9IHByaXZhdGVLZXlTZXJpYWxpemUocHJpdmF0ZUtleSk7CisgICAgVmVj
dG9yPFJUQ0NlcnRpZmljYXRlOjpEdGxzRmluZ2VycHJpbnQ+IGZpbmdlcnByaW50czsKKyAgICAv
LyBGSVhNRTogRmlsbCBmaW5nZXJwcmludHMuCisgICAgYXV0byBleHBpcmF0aW9uVGltZSA9IFdU
Rjo6V2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkgKyBXVEY6OlNlY29uZHMoZXhw
aXJlcyk7CisgICAgcmV0dXJuIFJUQ0NlcnRpZmljYXRlOjpjcmVhdGUoV1RGTW92ZShvcmlnaW4p
LCBleHBpcmF0aW9uVGltZS5taWxsaXNlY29uZHMoKSwgV1RGTW92ZShmaW5nZXJwcmludHMpLCBX
VEZNb3ZlKHBlbSksIFdURk1vdmUoc2VyaWFsaXplZFByaXZhdGVLZXkpKTsKK30KKworYm9vbCBz
ZHBNZWRpYUhhc0F0dHJpYnV0ZUtleShjb25zdCBHc3RTRFBNZWRpYSogbWVkaWEsIGNvbnN0IGNo
YXIqIGtleSkKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSBnc3Rfc2RwX21lZGlhX2F0dHJpYnV0ZXNf
bGVuKG1lZGlhKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAg
ICAgICAgY29uc3QgYXV0byogYXR0cmlidXRlID0gZ3N0X3NkcF9tZWRpYV9nZXRfYXR0cmlidXRl
KG1lZGlhLCBpKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXR0cmlidXRlLT5rZXksIGtleSkp
CisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGls
cy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyV2ViUlRDVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NThkNzExZTZhYTY2ZGVhODNlYTdhMjk0NzRh
YjBmNTllNDg3MmYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaApAQCAtMCwwICsxLDI2
NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJH
VW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRp
b24uaCIKKyNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJSVENC
dW5kbGVQb2xpY3kuaCIKKyNpbmNsdWRlICJSVENDZXJ0aWZpY2F0ZS5oIgorI2luY2x1ZGUgIlJU
Q0R0bHNUcmFuc3BvcnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgorI2luY2x1ZGUgIlJUQ0lj
ZUNvbm5lY3Rpb25TdGF0ZS5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFBvbGljeS5oIgor
I2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFN0YXRlLmgiCisjaW5jbHVkZSAiUlRDUnRwU2VuZFBh
cmFtZXRlcnMuaCIKKyNpbmNsdWRlICJSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbi5oIgorI2lu
Y2x1ZGUgIlJUQ1NkcFR5cGUuaCIKKyNpbmNsdWRlICJSVENTaWduYWxpbmdTdGF0ZS5oIgorCisj
ZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMu
aD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2lubGluZSBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB0b1JUQ1J0cFRyYW5zY2VpdmVyRGly
ZWN0aW9uKEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlW
RVJfRElSRUNUSU9OX05PTkU6CisgICAgICAgIC8vIMKvXF8o44OEKV8vwq8KKyAgICAgICAgcmV0
dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBjYXNlIEdTVF9X
RUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9JTkFDVElWRToKKyAgICAgICAgcmV0dXJu
IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBjYXNlIEdTVF9XRUJS
VENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5ET05MWToKKyAgICAgICAgcmV0dXJuIFJU
Q1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kb25seTsKKyAgICBjYXNlIEdTVF9XRUJSVENf
UlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9SRUNWT05MWToKKyAgICAgICAgcmV0dXJuIFJUQ1J0
cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpSZWN2b25seTsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQ
X1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5EUkVDVjoKKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRy
YW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kcmVjdjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246Oklu
YWN0aXZlOworfQorCitpbmxpbmUgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZnJv
bVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRp
cmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgUlRDUnRwVHJh
bnNjZWl2ZXJEaXJlY3Rpb246OkluYWN0aXZlOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19S
VFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX0lOQUNUSVZFOworICAgIGNhc2UgUlRDUnRwVHJhbnNj
ZWl2ZXJEaXJlY3Rpb246OlNlbmRvbmx5OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBf
VFJBTlNDRUlWRVJfRElSRUNUSU9OX1NFTkRPTkxZOworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2
ZXJEaXJlY3Rpb246OlJlY3Zvbmx5OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJB
TlNDRUlWRVJfRElSRUNUSU9OX1JFQ1ZPTkxZOworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2ZXJE
aXJlY3Rpb246OlNlbmRyZWN2OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlND
RUlWRVJfRElSRUNUSU9OX1NFTkRSRUNWOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJ
T05fTk9ORTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENTRFBUeXBlIHRvU2Vzc2lvbkRl
c2NyaXB0aW9uVHlwZShSVENTZHBUeXBlIHNkcFR5cGUpCit7CisgICAgc3dpdGNoIChzZHBUeXBl
KSB7CisgICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJS
VENfU0RQX1RZUEVfT0ZGRVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpQcmFuc3dlcjoKKyAgICAg
ICAgcmV0dXJuIEdTVF9XRUJSVENfU0RQX1RZUEVfUFJBTlNXRVI7CisgICAgY2FzZSBSVENTZHBU
eXBlOjpBbnN3ZXI6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX0FOU1dFUjsK
KyAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJU
Q19TRFBfVFlQRV9ST0xMQkFDSzsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX09GRkVSOworfQorCitzdGF0
aWMgaW5saW5lIFJUQ1NkcFR5cGUgZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5cGUoR3N0V2ViUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbikKK3sKKyAgICBhdXRvIHR5cGUgPSBkZXNj
cmlwdGlvbi0+dHlwZTsKKyAgICBpZiAodHlwZSA9PSBHU1RfV0VCUlRDX1NEUF9UWVBFX09GRkVS
KQorICAgICAgICByZXR1cm4gUlRDU2RwVHlwZTo6T2ZmZXI7CisgICAgaWYgKHR5cGUgPT0gR1NU
X1dFQlJUQ19TRFBfVFlQRV9BTlNXRVIpCisgICAgICAgIHJldHVybiBSVENTZHBUeXBlOjpBbnN3
ZXI7CisgICAgQVNTRVJUKHR5cGUgPT0gR1NUX1dFQlJUQ19TRFBfVFlQRV9QUkFOU1dFUik7Cisg
ICAgcmV0dXJuIFJUQ1NkcFR5cGU6OlByYW5zd2VyOworfQorCitzdGF0aWMgaW5saW5lIFJUQ1Np
Z25hbGluZ1N0YXRlIHRvU2lnbmFsaW5nU3RhdGUoR3N0V2ViUlRDU2lnbmFsaW5nU3RhdGUgc3Rh
dGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJ
TkdfU1RBVEVfU1RBQkxFOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5nU3RhdGU6OlN0YWJs
ZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NUQVRFX0hBVkVfTE9DQUxfT0ZGRVI6
CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsT2ZmZXI7CisgICAg
Y2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX0xPQ0FMX1BSQU5TV0VSOgorICAg
ICAgICByZXR1cm4gUlRDU2lnbmFsaW5nU3RhdGU6OkhhdmVMb2NhbFByYW5zd2VyOworICAgIGNh
c2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9SRU1PVEVfT0ZGRVI6CisgICAgICAg
IHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90ZU9mZmVyOworICAgIGNhc2UgR1NU
X1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9SRU1PVEVfUFJBTlNXRVI6CisgICAgICAgIHJl
dHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90ZVByYW5zd2VyOworICAgIGNhc2UgR1NU
X1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFs
aW5nU3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOworfQorCitzdGF0aWMg
aW5saW5lIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB0b1JUQ0ljZUNvbm5lY3Rpb25TdGF0ZShHc3RX
ZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgewor
ICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ORVc6CisgICAgICAgIHJl
dHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNF
X0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkc6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0
aW9uU3RhdGU6OkNoZWNraW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9T
VEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNv
bm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ09NUExF
VEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDb21wbGV0ZWQ7Cisg
ICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0ZBSUxFRDoKKyAgICAgICAg
cmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6RmFpbGVkOworICAgIGNhc2UgR1NUX1dFQlJU
Q19JQ0VfQ09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENJ
Y2VDb25uZWN0aW9uU3RhdGU6OkRpc2Nvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNF
X0NPTk5FQ1RJT05fU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlv
blN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7Cit9CisKK3N0YXRpYyBp
bmxpbmUgUlRDRHRsc1RyYW5zcG9ydFN0YXRlIHRvUlRDRHRsc1RyYW5zcG9ydFN0YXRlKEdzdFdl
YlJUQ0RUTFNUcmFuc3BvcnRTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7Cisg
ICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX05FVzoKKyAgICAgICAgcmV0
dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6TmV3OworICAgIGNhc2UgR1NUX1dFQlJUQ19EVExT
X1RSQU5TUE9SVF9TVEFURV9DT05ORUNUSU5HOgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5z
cG9ydFN0YXRlOjpDb25uZWN0aW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19EVExTX1RSQU5TUE9S
VF9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJhbnNwb3J0U3RhdGU6
OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVfQ0xP
U0VEOgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpDbG9zZWQ7CisgICAg
Y2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0ZBSUxFRDoKKyAgICAgICAgcmV0
dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6RmFpbGVkOworICAgIH0KKworICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlVHJhbnNwb3J0
U3RhdGUgdG9SVENJY2VUcmFuc3BvcnRTdGF0ZShHc3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUg
c3RhdGUpCit7CisgICAgLy8gRklYTUU6IE5vIEdzdFdlYlJUQ0lDRVRyYW5zcG9ydFN0YXRlID8K
KyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9O
X1NUQVRFX05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpOZXc7Cisg
ICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NIRUNLSU5HOgorICAgICAg
ICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5nOworICAgIGNhc2UgR1NUX1dF
QlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENJ
Y2VUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09O
TkVDVElPTl9TVEFURV9DT01QTEVURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRT
dGF0ZTo6Q29tcGxldGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFU
RV9GQUlMRUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RmFpbGVkOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNURUQ6Cisg
ICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RGlzY29ubmVjdGVkOworICAgIGNh
c2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVy
biBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpOZXc7
Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlR2F0aGVyaW5nU3RhdGUgdG9SVENJY2VHYXRoZXJp
bmdTdGF0ZShHc3RXZWJSVENJQ0VHYXRoZXJpbmdTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2gg
KHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfTkVXOgor
ICAgICAgICByZXR1cm4gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5ldzsKKyAgICBjYXNlIEdTVF9X
RUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9HQVRIRVJJTkc6CisgICAgICAgIHJldHVybiBSVENJ
Y2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfR0FU
SEVSSU5HX1NUQVRFX0NPTVBMRVRFOgorICAgICAgICByZXR1cm4gUlRDSWNlR2F0aGVyaW5nU3Rh
dGU6OkNvbXBsZXRlOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgR3N0V2ViUlRDQnVuZGxlUG9saWN5IGJ1bmRsZVBvbGljeUZy
b21Db25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9u
KQoreworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xpY3kpIHsKKyAgICBjYXNl
IFJUQ0J1bmRsZVBvbGljeTo6QmFsYW5jZWQ6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0JV
TkRMRV9QT0xJQ1lfQkFMQU5DRUQ7CisgICAgY2FzZSBSVENCdW5kbGVQb2xpY3k6Ok1heENvbXBh
dDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElDWV9NQVhfQ09NUEFUOwor
ICAgIGNhc2UgUlRDQnVuZGxlUG9saWN5OjpNYXhCdW5kbGU6CisgICAgICAgIHJldHVybiBHU1Rf
V0VCUlRDX0JVTkRMRV9QT0xJQ1lfTUFYX0JVTkRMRTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lf
Tk9ORTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENJQ0VUcmFuc3BvcnRQb2xpY3kgaWNl
VHJhbnNwb3J0UG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRp
b24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uLmljZVRyYW5z
cG9ydFBvbGljeSkgeworICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0UG9saWN5OjpBbGw6CisgICAg
ICAgIHJldHVybiBHU1RfV0VCUlRDX0lDRV9UUkFOU1BPUlRfUE9MSUNZX0FMTDsKKyAgICBjYXNl
IFJUQ0ljZVRyYW5zcG9ydFBvbGljeTo6UmVsYXk6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRD
X0lDRV9UUkFOU1BPUlRfUE9MSUNZX1JFTEFZOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5TUE9SVF9QT0xJ
Q1lfQUxMOworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDRXJyb3JEZXRhaWxU
eXBlPiB0b1JUQ0Vycm9yRGV0YWlsVHlwZShHc3RXZWJSVENFcnJvciBjb2RlKQoreworICAgIHN3
aXRjaCAoY29kZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9EQVRBX0NIQU5ORUxfRkFJ
TFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6RGF0YUNoYW5uZWxGYWls
dXJlOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9EVExTX0ZBSUxVUkU6CisgICAgICAgIHJl
dHVybiBSVENFcnJvckRldGFpbFR5cGU6OkR0bHNGYWlsdXJlOworICAgIGNhc2UgR1NUX1dFQlJU
Q19FUlJPUl9GSU5HRVJQUklOVF9GQUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRh
aWxUeXBlOjpGaW5nZXJwcmludEZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX1ND
VFBfRkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6U2N0cEZhaWx1
cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX1NEUF9TWU5UQVhfRVJST1I6CisgICAgICAg
IHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OlNkcFN5bnRheEVycm9yOworICAgIGNhc2UgR1NU
X1dFQlJUQ19FUlJPUl9IQVJEV0FSRV9FTkNPREVSX05PVF9BVkFJTEFCTEU6CisgICAgY2FzZSBH
U1RfV0VCUlRDX0VSUk9SX0VOQ09ERVJfRVJST1I6CisgICAgICAgIC8vIEZJWE1FCisgICAgZGVm
YXVsdDoKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9OworfQorCitSZWZQdHI8UlRDRXJyb3I+
IHRvUlRDRXJyb3IoR0Vycm9yKik7CisKK0dVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBmcm9tUlRD
RW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0IFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycyYpOworUlRD
UnRwU2VuZFBhcmFtZXRlcnMgdG9SVENSdHBTZW5kUGFyYW1ldGVycyhjb25zdCBHc3RTdHJ1Y3R1
cmUqKTsKKworc3RkOjpvcHRpb25hbDxSZWY8UlRDQ2VydGlmaWNhdGU+PiBnZW5lcmF0ZUNlcnRp
ZmljYXRlKFJlZjxTZWN1cml0eU9yaWdpbj4mJiwgY29uc3QgUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uJik7CisKK2Jvb2wgc2RwTWVkaWFIYXNBdHRyaWJ1dGVL
ZXkoY29uc3QgR3N0U0RQTWVkaWEqLCBjb25zdCBjaGFyKiBrZXkpOworCit9CisjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQppbmRleCBhYjljNzA5MmU2NWY1MTE1
MjAxM2MxMmJhNDgwMjdmZDcwYjgyNGI0Li44NTI1ZjQ5NTI0YjU5MTZiZDVhY2NjNTQ1NDVhMDY5
NDEwNDIxNTliIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIu
Y21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0x
LDEyICsxLDI5IEBACiBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAg
IiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyIgogICAgICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyIgogICAgICAgICAiJHtX
RUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL21zZSIKICAgICAgICAgIiR7
V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9lbWUiCiAgICAgKQogCiAg
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TT1VSQ0VTCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5jcHAKKyAgICAgICAgTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQu
Y3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRy
YW5zcG9ydEJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKKyAgICAgICAgTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNw
cAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNl
aXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuY3Bw
CisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5z
Y2VpdmVyQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuY3BwCisgICAgICAg
IE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmNw
cAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENV
dGlscy5jcHAKKwogICAgICAgICBNb2R1bGVzL3dlYmF1ZGlvL01lZGlhU3RyZWFtQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuY3BwCisKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0F1
ZGlvVHJhY2tQcml2YXRlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR0xWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcApAQCAtNjAsNiArNzcsNyBAQCBpZiAo
RU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAogICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0
dXJlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckRUTUZTZW5kZXJCYWNrZW5kLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRGlzcGxheUNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcAogICAgICAgICBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2Uu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRl
b0NhcHR1cmVTb3VyY2UuY3BwCkBAIC02Nyw3ICs4NSwxMyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9S
IEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9Nb2NrUmVhbHRpbWVBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKICAgICAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0
cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5jcHAKKyAg
ICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3Bw
CiAgICAgKQogCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFE
RVJTCkBAIC0xNDYsNyArMTcwLDcgQEAgaWYgKEVOQUJMRV9WSURFTykKICAgICAgICAgKQogICAg
IGVuZGlmICgpCiAKLSAgICBpZiAoRU5BQkxFX01FRElBX1NUUkVBTSBPUiBFTkFCTEVfV0VCX1JU
QykKKyAgICBpZiAoVVNFX0xJQldFQlJUQykKICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9T
WVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwogICAgICAgICAgICAgJHtHU1RSRUFNRVJfQ09ERUNQ
QVJTRVJTX0lOQ0xVREVfRElSU30KICAgICAgICAgKQpAQCAtMTU1LDYgKzE3OSwyMSBAQCBpZiAo
RU5BQkxFX1ZJREVPKQogICAgICAgICAgICAgICAgICR7R1NUUkVBTUVSX0NPREVDUEFSU0VSU19M
SUJSQVJJRVN9CiAgICAgICAgICAgICApCiAgICAgICAgIGVuZGlmICgpCisgICAgZWxzZWlmIChV
U0VfR1NUUkVBTUVSX1dFQlJUQykKKyAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TWVNURU1f
SU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAgICAgJHtHU1RSRUFNRVJfUlRQX0lOQ0xVREVf
RElSU30KKyAgICAgICAgICAgICR7R1NUUkVBTUVSX1NEUF9JTkNMVURFX0RJUlN9CisgICAgICAg
ICAgICAke0dTVFJFQU1FUl9XRUJSVENfSU5DTFVERV9ESVJTfQorICAgICAgICApCisgICAgICAg
IGlmIChOT1QgVVNFX0dTVFJFQU1FUl9GVUxMKQorICAgICAgICAgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9MSUJSQVJJRVMKKyAgICAgICAgICAgICAgICAke0dTVFJFQU1FUl9SVFBfTElCUkFSSUVT
fQorICAgICAgICAgICAgICAgICR7R1NUUkVBTUVSX1NEUF9MSUJSQVJJRVN9CisgICAgICAgICAg
ICAgICAgJHtHU1RSRUFNRVJfV0VCUlRDX0xJQlJBUklFU30KKyAgICAgICAgICAgICkKKyAgICAg
ICAgZW5kaWYgKCkKKworICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUyBPcGVu
U1NMOjpDcnlwdG8pCiAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0
cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRp
b1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcAppbmRleCBiNGQ1ZjY3MDNlOTI5ZWRmMTdmMTA5
ZWY2NDgxMzBhY2UwMzhjYWM0Li5hMWFjZTk3NjFkYTJjZTJhYWQ0NjQyMWI5YmU2ZGY4ZDNhOWU1
NDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIuY3BwCkBA
IC0xMDAsMTAgKzEwMCw1OCBAQCBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpBdWRpb1Nv
dXJjZVByb3ZpZGVyR1N0cmVhbWVyKE1lZGlhU3RyZWFtVHJhY2tQcml2YQogCiAgICAgbV9hdWRp
b1NpbmtCaW4gPSBnc3RfcGFyc2VfYmluX2Zyb21fZGVzY3JpcHRpb24oInRlZSBuYW1lPWF1ZGlv
VGVlIiwgdHJ1ZSwgbnVsbHB0cik7CiAKLSAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FT
VChtX3BpcGVsaW5lLmdldCgpKSwgc3JjLCBtX2F1ZGlvU2lua0Jpbi5nZXQoKSwgbnVsbHB0cik7
Ci0gICAgZ3N0X2VsZW1lbnRfbGluayhzcmMsIG1fYXVkaW9TaW5rQmluLmdldCgpKTsKKyAgICBh
dXRvKiBkZWNvZGViaW4gPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgiZGVjb2RlYmluMyIsIG51bGxw
dHIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChkZWNvZGViaW4sICJwYWQtYWRkZWQi
LCBHX0NBTExCQUNLKCtbXShBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKiBwcm92aWRlciwg
R3N0UGFkKiBwYWQpIHsKKyAgICAgICAgYXV0byBwYWRDYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRf
cXVlcnlfY2FwcyhwYWQsIG51bGxwdHIpKTsKKyAgICAgICAgYm9vbCBpc0F1ZGlvID0gZG9DYXBz
SGF2ZVR5cGUocGFkQ2Fwcy5nZXQoKSwgImF1ZGlvIik7CisgICAgICAgIGlmICh3ZWJraXRHc3RD
aGVja1ZlcnNpb24oMSwgMTgsIDApKQorICAgICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBdWRp
byk7CisgICAgICAgIGVsc2UgaWYgKCFpc0F1ZGlvKQorICAgICAgICAgICAgcmV0dXJuOworCisg
ICAgICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZChwcm92aWRlci0+bV9hdWRpb1NpbmtCaW4uZ2V0KCksICJzaW5rIikpOworICAgICAgICBnc3Rf
cGFkX2xpbmsocGFkLCBzaW5rUGFkLmdldCgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc3luY19z
dGF0ZV93aXRoX3BhcmVudChwcm92aWRlci0+bV9hdWRpb1NpbmtCaW4uZ2V0KCkpOworICAgIH0p
LCB0aGlzKTsKKworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUu
Z2V0KCkpLCBzcmMsIGRlY29kZWJpbiwgbV9hdWRpb1NpbmtCaW4uZ2V0KCksIG51bGxwdHIpOwor
ICAgIGdzdF9lbGVtZW50X2xpbmsoc3JjLCBkZWNvZGViaW4pOworCisgICAgYXV0byBidXMgPSBh
ZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0
KCkpKSk7CisgICAgQVNTRVJUKGJ1cyk7CisKKyAgICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIo
YnVzLmdldCgpLCBbXShHc3RCdXMqLCBHc3RNZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciB1c2Vy
RGF0YSkgLT4gR3N0QnVzU3luY1JlcGx5IHsKKyAgICAgICAgYXV0byogZGVjb2RlYmluID0gR1NU
X0VMRU1FTlRfQ0FTVCh1c2VyRGF0YSk7CisgICAgICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1l
c3NhZ2UpICE9IEdTVF9NRVNTQUdFX1NUUkVBTV9DT0xMRUNUSU9OIHx8IEdTVF9NRVNTQUdFX1NS
QyhtZXNzYWdlKSAhPSBHU1RfT0JKRUNUX0NBU1QoZGVjb2RlYmluKSkgeworICAgICAgICAgICAg
Z3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgICAgICAgICByZXR1cm4gR1NUX0JVU19E
Uk9QOworICAgICAgICB9CisKKyAgICAgICAgR1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBj
b2xsZWN0aW9uOworICAgICAgICBnc3RfbWVzc2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbiht
ZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7CisgICAgICAgIGlmICghY29sbGVjdGlvbikg
eworICAgICAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgICAgICAgICBy
ZXR1cm4gR1NUX0JVU19EUk9QOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9
IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6ZShjb2xsZWN0aW9uLmdldCgpKTsKKyAgICAg
ICAgR0xpc3QqIHN0cmVhbXMgPSBudWxscHRyOworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICBhdXRvKiBzdHJlYW0gPSBnc3Rfc3RyZWFt
X2NvbGxlY3Rpb25fZ2V0X3N0cmVhbShjb2xsZWN0aW9uLmdldCgpLCBpKTsKKyAgICAgICAgICAg
IGF1dG8gc3RyZWFtVHlwZSA9IGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV90eXBlKHN0cmVhbSk7Cisg
ICAgICAgICAgICBpZiAoc3RyZWFtVHlwZSA9PSBHU1RfU1RSRUFNX1RZUEVfQVVESU8pIHsKKyAg
ICAgICAgICAgICAgICBzdHJlYW1zID0gZ19saXN0X2FwcGVuZChzdHJlYW1zLCBjb25zdF9jYXN0
PGNoYXIqPihnc3Rfc3RyZWFtX2dldF9zdHJlYW1faWQoc3RyZWFtKSkpOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChzdHJlYW1z
KSB7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50KGRlY29kZWJpbiwgZ3N0X2V2
ZW50X25ld19zZWxlY3Rfc3RyZWFtcyhzdHJlYW1zKSk7CisgICAgICAgICAgICBnX2xpc3RfZnJl
ZShzdHJlYW1zKTsKKyAgICAgICAgfQogCi0gICAgY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxs
YmFjayhtX3BpcGVsaW5lLmdldCgpKTsKKyAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2Fn
ZSk7CisgICAgICAgIHJldHVybiBHU1RfQlVTX0RST1A7CisgICAgfSwgZ3N0X29iamVjdF9yZWYo
ZGVjb2RlYmluKSwgZ3N0X29iamVjdF91bnJlZik7CiB9CiAjZW5kaWYKIApAQCAtMTIwLDEwICsx
NjgsOCBAQCBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjp+QXVkaW9Tb3VyY2VQcm92aWRl
ckdTdHJlYW1lcigpCiAKICAgICBzZXRDbGllbnQobnVsbHB0cik7CiAjaWYgRU5BQkxFKE1FRElB
X1NUUkVBTSkKLSAgICBpZiAobV9waXBlbGluZSkgewotICAgICAgICBkaXNjb25uZWN0U2ltcGxl
QnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCkpOworICAgIGlmIChtX3BpcGVsaW5l
KQogICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NU
QVRFX05VTEwpOwotICAgIH0KICNlbmRpZgogfQogCkBAIC0zNDUsNyArMzkxLDYgQEAgdm9pZCBB
dWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpoYW5kbGVOZXdEZWludGVybGVhdmVQYWQoR3N0
UGFkKiBwYWQpCiAKICAgICBHUXVhcmsgcXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmlu
ZygicGVlciIpOwogICAgIGdfb2JqZWN0X3NldF9xZGF0YShHX09CSkVDVChwYWQpLCBxdWFyaywg
c2lua1BhZC5nZXQoKSk7Ci0KICAgICBtX2RlaW50ZXJsZWF2ZVNvdXJjZVBhZHMrKzsKICAgICBH
UXVhcmsgY2hhbm5lbElkUXVhcmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZygiY2hhbm5l
bC1pZCIpOwogICAgIGdfb2JqZWN0X3NldF9xZGF0YShHX09CSkVDVChzaW5rKSwgY2hhbm5lbElk
UXVhcmssIEdJTlRfVE9fUE9JTlRFUihtX2RlaW50ZXJsZWF2ZVNvdXJjZVBhZHMpKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJB
dWRpb1N0cmVhbURlc2NyaXB0aW9uLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9n
c3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCmluZGV4IDZmMjg4NzJh
ZmIxMTc2ZTUxM2QyYmRmNTVhNjIyMWQ0ZjZmYjBhZTcuLmRkMzEzYjMxNDI0MDZjYWY1Nzk0ZWFj
N2NjMmFmOGQ2NGU1NDVhYTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaApAQCAtMzIsMTkgKzMyLDE2IEBAIGNsYXNzIEdTdHJlYW1lckF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24gZmluYWw6IHB1YmxpYyBBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHsKIHB1
YmxpYzoKICAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKEdzdEF1ZGlvSW5mbyYm
IGluZm8pCiAgICAgICAgIDogbV9pbmZvKFdURk1vdmUoaW5mbykpCi0gICAgICAgICwgbV9jYXBz
KGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZtX2luZm8pKSkKICAgICB7CiAgICAg
fQogCiAgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihjb25zdCBHc3RBdWRpb0lu
Zm8mIGluZm8pCiAgICAgICAgIDogbV9pbmZvKGluZm8pCi0gICAgICAgICwgbV9jYXBzKGFkb3B0
R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZtX2luZm8pKSkKICAgICB7CiAgICAgfQogCiAg
ICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihHc3RBdWRpb0luZm8qIGluZm8pCiAg
ICAgICAgIDogbV9pbmZvKCppbmZvKQotICAgICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1
ZGlvX2luZm9fdG9fY2FwcygmbV9pbmZvKSkpCiAgICAgewogICAgIH0KIApAQCAtOTksNyArOTYs
MTIgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBHU3RyZWFtZXJBdWRpb1N0
cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1cm4gZ3N0X2F1ZGlvX2luZm9faXNfZXF1YWwo
Jm1faW5mbywgJm90aGVyLm1faW5mbyk7IH0KICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgR1N0
cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIHsgcmV0dXJuICFvcGVyYXRvciA9
PSAob3RoZXIpOyB9CiAKLSAgICBjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBjYXBzKCkgY29uc3Qg
eyByZXR1cm4gbV9jYXBzOyB9CisgICAgY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcygpCisg
ICAgeworICAgICAgICBpZiAoIW1fY2FwcykKKyAgICAgICAgICAgIG1fY2FwcyA9IGFkb3B0R1Jl
Zihnc3RfYXVkaW9faW5mb190b19jYXBzKCZtX2luZm8pKTsKKyAgICAgICAgcmV0dXJuIG1fY2Fw
czsKKyAgICB9CiAgICAgY29uc3QgR3N0QXVkaW9JbmZvJiBnZXRJbmZvKCkgY29uc3QgeyByZXR1
cm4gbV9pbmZvOyB9CiAKIHByaXZhdGU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKaW5k
ZXggMjNhYzEyNTc2NjIxOTdmYTRlYWM5N2E5OTdjYjVkMGZlZWU3NDM5MC4uOWY2Zjc2MTVhNzYx
ODE4Y2E0YmQ5ZmNlOGM4N2YyMjIzNDM5NDQ5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVy
LmNwcApAQCAtMjcsNiArMjcsMTIgQEAKICNpbmNsdWRlIDxnc3QvZ2wvZWdsL2dzdGVnbGltYWdl
Lmg+CiAjZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2RlZmluZSBHU1RfVVNF
X1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NU
X1VTRV9VTlNUQUJMRV9BUEkKKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8
PiBHUmVmUHRyPEdzdE1pbmlPYmplY3Q+IGFkb3B0R1JlZihHc3RNaW5pT2JqZWN0KiBwdHIpCkBA
IC01NjksNiArNTc1LDEyNCBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RFR0xJbWFn
ZT4oR3N0RUdMSW1hZ2UqIHB0cikKIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfR0wpCiAKKyNp
ZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENS
VFBSZWNlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIpCit7CisgICAg
cmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KHB0ciwgR1JlZlB0ckFkb3B0KTsK
K30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHJlZkdQdHI8R3N0V2ViUlRD
UlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIpCit7CisgICAgaWYgKHB0cikK
KyAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBw
dHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVy
PihHc3RXZWJSVENSVFBSZWNlaXZlciogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdz
dF9vYmplY3RfdW5yZWYocHRyKTsKK30KKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENS
VFBTZW5kZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sKKyAgICByZXR1
cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwor
dGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQU2VuZGVyKiByZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRl
cj4oR3N0V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0
X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3Rl
bXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQ
U2VuZGVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihw
dHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBh
ZG9wdEdSZWYoR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sKKyAgICByZXR1cm4gR1Jl
ZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0
ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcmVmR1B0cjxHc3RXZWJSVENSVFBU
cmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sKKyAgICBpZiAocHRy
KQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJu
IHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNj
ZWl2ZXI+KEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAg
ICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdz
dFdlYlJUQ0RhdGFDaGFubmVsPiBhZG9wdEdSZWYoR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHB0cikK
K3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4ocHRyLCBHUmVmUHRy
QWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEYXRhQ2hhbm5lbCogcmVmR1B0cjxH
c3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHB0cikKK3sKKyAgICBp
ZiAocHRyKQorICAgICAgICBnX29iamVjdF9yZWYoR19PQkpFQ1QocHRyKSk7CisKKyAgICByZXR1
cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hh
bm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAg
ICBnX29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJU
Q0RUTFNUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJSVENEVExTVHJhbnNwb3J0KiBwdHIpCit7
CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4ocHRyLCBHUmVmUHRy
QWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEVExTVHJhbnNwb3J0KiByZWZHUHRy
PEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOwor
CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2Vi
UlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcHRyKQoreworICAgIGlm
IChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KKwordGVtcGxhdGUgPD4g
R1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJSVENJQ0VUcmFu
c3BvcnQqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+
KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDSUNFVHJhbnNw
b3J0KiByZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRDSUNFVHJhbnNwb3J0
KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVD
VChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZH
UHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRDSUNFVHJhbnNwb3J0KiBwdHIpCit7
CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCisjZW5k
aWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5k
aWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCmluZGV4IDA3OGQz
YzU2Mzk3NGY2YTJiM2FmMWViODM5ODY0OTg3OTQ1ZmE3ZDguLjg3ZmYwNmY0ZTUwM2Q0NTUxZmI0
MGNiN2Y0NTkyODA3MWFjY2I4ZWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaApAQCAtMzMs
NiArMzMsMTUgQEAgdHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7CiB0
eXBlZGVmIHN0cnVjdCBfR3N0RUdMSW1hZ2UgR3N0RUdMSW1hZ2U7CiAjZW5kaWYKIAorI2lmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ0RhdGFDaGFubmVs
IEdzdFdlYlJUQ0RhdGFDaGFubmVsOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFJlY2Vp
dmVyIEdzdFdlYlJUQ1JUUFJlY2VpdmVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFNl
bmRlciBHc3RXZWJSVENSVFBTZW5kZXI7Cit0eXBlZGVmIHN0cnVjdCBfR3N0V2ViUlRDUlRQVHJh
bnNjZWl2ZXIgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI7Cit0eXBlZGVmIHN0cnVjdCBfR3N0V2Vi
UlRDRFRMU1RyYW5zcG9ydCBHc3RXZWJSVENEVExTVHJhbnNwb3J0OwordHlwZWRlZiBzdHJ1Y3Qg
X0dzdFdlYlJUQ0lDRVRyYW5zcG9ydCBHc3RXZWJSVENJQ0VUcmFuc3BvcnQ7CisjZW5kaWYKKwog
bmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RQbHVnaW4+IGFkb3B0R1Jl
ZihHc3RQbHVnaW4qIHB0cik7CkBAIC0xNDYsNiArMTU1LDMzIEBAIHRlbXBsYXRlPD4gR3N0RUdM
SW1hZ2UqIHJlZkdQdHI8R3N0RUdMSW1hZ2U+KEdzdEVHTEltYWdlKiBwdHIpOwogdGVtcGxhdGU8
PiB2b2lkIGRlcmVmR1B0cjxHc3RFR0xJbWFnZT4oR3N0RUdMSW1hZ2UqIHB0cik7CiAjZW5kaWYK
IAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJS
VENSVFBSZWNlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFJlY2VpdmVyKik7Cit0ZW1wbGF0
ZSA8PiBHc3RXZWJSVENSVFBSZWNlaXZlciogcmVmR1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4o
R3N0V2ViUlRDUlRQUmVjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdl
YlJUQ1JUUFJlY2VpdmVyPihHc3RXZWJSVENSVFBSZWNlaXZlciopOworCit0ZW1wbGF0ZSA8PiBH
UmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFNlbmRlciop
OwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQU2VuZGVyKiByZWZHUHRyPEdzdFdlYlJUQ1JUUFNl
bmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxH
c3RXZWJSVENSVFBTZW5kZXI+KEdzdFdlYlJUQ1JUUFNlbmRlciopOworCit0ZW1wbGF0ZSA8PiBH
UmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQVHJh
bnNjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiByZWZHUHRy
PEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciopOwordGVt
cGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyKik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNo
YW5uZWw+IGFkb3B0R1JlZihHc3RXZWJSVENEYXRhQ2hhbm5lbCopOwordGVtcGxhdGUgPD4gR3N0
V2ViUlRDRGF0YUNoYW5uZWwqIHJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+KEdzdFdlYlJU
Q0RhdGFDaGFubmVsKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENEYXRh
Q2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxH
c3RXZWJSVENEVExTVHJhbnNwb3J0PiBhZG9wdEdSZWYoR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCop
OwordGVtcGxhdGUgPD4gR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcmVmR1B0cjxHc3RXZWJSVENE
VExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0Kik7Cit0ZW1wbGF0ZSA8PiB2b2lk
IGRlcmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0
Kik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PiBhZG9wdEdS
ZWYoR3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENJQ0VUcmFu
c3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJQ0VUcmFuc3Bv
cnQqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4o
R3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7CisKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXVEYK
IAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmlu
ZGV4IDlmNDk1ZGRmOTAyZGY0ZmZkZjUzYWZlOGMwZjY3NGY1NmNiZjVmZTEuLmE4Y2JlNWM3MmUy
MzAyMWNmZTQ3YzgyYWExZGVjYzM4ZTM2NDI2MWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24u
Y3BwCkBAIC0xODksNiArMTg5LDkgQEAgY29uc3QgY2hhciogY2Fwc01lZGlhVHlwZShjb25zdCBH
c3RDYXBzKiBjYXBzKQogICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwg
ImFwcGxpY2F0aW9uL3gtY2VuYyIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJl
LCAiYXBwbGljYXRpb24veC1jYmNzIikgfHwgZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1
cmUsICJhcHBsaWNhdGlvbi94LXdlYm0tZW5jIikpCiAgICAgICAgIHJldHVybiBnc3Rfc3RydWN0
dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIpOwogI2VuZGlm
CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24v
eC1ydHAiKSkKKyAgICAgICAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1
cmUsICJtZWRpYSIpOworCiAgICAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0
dXJlKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmgKaW5kZXggYmY3NGVjZjAy
Y2MyMmY2MDZlYmNiOWZlODVjMDM0YjI2YzQwNjQ0MS4uZTUyNDcxY2E3ZWE2MmEzMTU4YzUyMzMz
NjA2MzUyZWM2MzE1MmEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oCkBAIC0z
MCw2ICszMCwxMiBAQAogI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogI2luY2x1ZGUgPHd0
Zi9nbGliL0dVbmlxdWVQdHIuaD4KIAorI2lmIGRlZmluZWQoQlVJTERJTkdfV2ViQ29yZSkgJiYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5j
bHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQor
I2VuZGlmCisKICNpZiBVU0UoV1BFX1ZJREVPX1BMQU5FX0RJU1BMQVlfRE1BQlVGKQogI2luY2x1
ZGUgPHdwZS9leHRlbnNpb25zL3ZpZGVvLXBsYW5lLWRpc3BsYXktZG1hYnVmLmg+CiAjZW5kaWYK
QEAgLTQ5LDYgKzU1LDEwIEBAIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdEJ5dGVSZWFkZXIs
IGdzdF9ieXRlX3JlYWRlcl9mcmVlKQogV1RGX0RFRklORV9HUFRSX0RFTEVURVIoR3N0VmlkZW9D
b252ZXJ0ZXIsIGdzdF92aWRlb19jb252ZXJ0ZXJfZnJlZSkKIFdURl9ERUZJTkVfR1BUUl9ERUxF
VEVSKEdzdEF1ZGlvQ29udmVydGVyLCBnc3RfYXVkaW9fY29udmVydGVyX2ZyZWUpCiAKKyNpZiBk
ZWZpbmVkKEJVSUxESU5HX1dlYkNvcmUpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorV1RGX0RF
RklORV9HUFRSX0RFTEVURVIoR3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLCBnc3Rfd2VicnRj
X3Nlc3Npb25fZGVzY3JpcHRpb25fZnJlZSkKKyNlbmRpZgorCiAjaWYgVVNFKFdQRV9WSURFT19Q
TEFORV9ESVNQTEFZX0RNQUJVRikKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKHN0cnVjdCB3cGVf
dmlkZW9fcGxhbmVfZGlzcGxheV9kbWFidWZfc291cmNlLCB3cGVfdmlkZW9fcGxhbmVfZGlzcGxh
eV9kbWFidWZfc291cmNlX2Rlc3Ryb3kpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRl
LmNwcAppbmRleCBlYzMyYmE4NWNjZjg0NzI1MzgzNTI2ODE4NTljNDA3N2ViZDQ5OTJkLi4xODI2
NmYxMjJjNGIxODY3NGExZjc5YmFiOTFmMDU0OTY3ZmNiNzAwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNp
bmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VQcm92aWRlckNvY29hLmgiCi0jZWxp
ZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VC
UlRDKSAmJiBVU0UoR1NUUkVBTUVSKQorI2VsaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxF
KE1FRElBX1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKICNpbmNsdWRlICJBdWRpb1NvdXJjZVBy
b3ZpZGVyR1N0cmVhbWVyLmgiCiAjZWxzZQogI2luY2x1ZGUgIldlYkF1ZGlvU291cmNlUHJvdmlk
ZXIuaCIKQEAgLTE5OSw3ICsxOTksNyBAQCBSZWZQdHI8V2ViQXVkaW9Tb3VyY2VQcm92aWRlcj4g
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZUF1ZGlvU291cmNlUHJvdmlkZQogCiAjaWYg
UExBVEZPUk0oQ09DT0EpCiAgICAgcmV0dXJuIE1lZGlhU3RyZWFtVHJhY2tBdWRpb1NvdXJjZVBy
b3ZpZGVyQ29jb2E6OmNyZWF0ZSgqdGhpcyk7Ci0jZWxpZiBVU0UoTElCV0VCUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSKQorI2VsaWYgVVNFKEdTVFJFQU1FUikKICAgICByZXR1cm4gQXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lcjo6Y3JlYXRlKCp0aGlzKTsKICNlbHNlCiAgICAgcmV0dXJuIG51bGxw
dHI7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKaW5kZXgg
MjZlZTQyNjNiOWRiODc4MWRiYWU2MWUxYTMwMTJlZjdkYzcwOTcyNS4uMzVlNjVjMGViMGJkNDgx
ZDNmODVhOWRkMDViNjZiZjk1NjkwZTdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJBdWRpb0NhcHR1cmVyLmNwcApAQCAtMjksMjkgKzI5LDQ2IEBACiAjaW5jbHVkZSAiTGliV2Vi
UlRDQXVkaW9Gb3JtYXQuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5r
Lmg+Ci0KIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShMSUJXRUJSVEMpCi1zdGF0aWMg
Y29uc3RleHByIHNpemVfdCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gTGliV2ViUlRDQXVkaW9G
b3JtYXQ6OnNhbXBsZVJhdGU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBzX2F1ZGlvQ2FwdHVy
ZVNhbXBsZVJhdGUgPSBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlUmF0ZTsKICNlbHNlCi1z
dGF0aWMgY29uc3RleHByIHNpemVfdCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gNDgwMDA7Citz
dGF0aWMgY29uc3RleHByIHNpemVfdCBzX2F1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUgPSA0ODAwMDsK
ICNlbmRpZgogCiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVy
KEdTdHJlYW1lckNhcHR1cmVEZXZpY2UgZGV2aWNlKQotICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIo
ZGV2aWNlLCBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLCAicmF0
ZSIsIEdfVFlQRV9JTlQsIEF1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51bGxwdHIpKSkKKyAgICA6
IEdTdHJlYW1lckNhcHR1cmVyKGRldmljZSwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUo
ImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBzX2F1ZGlvQ2FwdHVyZVNhbXBsZVJh
dGUsIG51bGxwdHIpKSkKIHsKIH0KIAogR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVy
QXVkaW9DYXB0dXJlcigpCi0gICAgOiBHU3RyZWFtZXJDYXB0dXJlcigiYXBwc3JjIiwgYWRvcHRH
UmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5U
LCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSksIENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGU6Ok1pY3JvcGhvbmUpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcigiYXBwc3JjIiwgYWRv
cHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVf
SU5ULCBzX2F1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51bGxwdHIpKSwgQ2FwdHVyZURldmljZTo6
RGV2aWNlVHlwZTo6TWljcm9waG9uZSkKIHsKIH0KIAogR3N0RWxlbWVudCogR1N0cmVhbWVyQXVk
aW9DYXB0dXJlcjo6Y3JlYXRlQ29udmVydGVyKCkKIHsKLSAgICByZXR1cm4gbWFrZUdTdHJlYW1l
ckJpbigiYXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSIsIHRydWUpOworICAgIGF1dG8qIGJp
biA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOworICAgIGF1dG8qIGF1ZGlvY29udmVydCA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgbnVsbHB0cik7CisgICAgYXV0byog
YXVkaW9yZXNhbXBsZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9yZXNhbXBsZSIs
IG51bGxwdHIpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKGJpbiksIGF1ZGlv
Y29udmVydCwgYXVkaW9yZXNhbXBsZSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfbGluayhh
dWRpb2NvbnZlcnQsIGF1ZGlvcmVzYW1wbGUpOworCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisgICAgaWYgKGF1dG8qIHdlYnJ0Y2RzcCA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJ3ZWJydGNk
c3AiLCBudWxscHRyKSkgeworICAgICAgICBnX29iamVjdF9zZXQod2VicnRjZHNwLCAiZWNoby1j
YW5jZWwiLCBmYWxzZSwgInZvaWNlLWRldGVjdGlvbiIsIHRydWUsIG51bGxwdHIpOworICAgICAg
ICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QoYmluKSwgd2VicnRjZHNwKTsKKyAgICAgICAgZ3N0
X2VsZW1lbnRfbGluayh3ZWJydGNkc3AsIGF1ZGlvY29udmVydCk7CisgICAgfQorI2VuZGlmCisK
KyAgICBpZiAoYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZChH
U1RfQklOX0NBU1QoYmluKSwgR1NUX1BBRF9TUkMpKSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfYWRk
X3BhZChHU1RfRUxFTUVOVF9DQVNUKGJpbiksIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQu
Z2V0KCkpKTsKKyAgICBpZiAoYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2Jpbl9maW5kX3VubGlu
a2VkX3BhZChHU1RfQklOX0NBU1QoYmluKSwgR1NUX1BBRF9TSU5LKSkpCisgICAgICAgIGdzdF9l
bGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlRfQ0FTVChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldygi
c2luayIsIHBhZC5nZXQoKSkpOworCisgICAgcmV0dXJuIGJpbjsKIH0KIAogYm9vbCBHU3RyZWFt
ZXJBdWRpb0NhcHR1cmVyOjpzZXRTYW1wbGVSYXRlKGludCBzYW1wbGVSYXRlKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckNhcHR1cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKaW5kZXggYzllMGQ1ZWI2MGUyYmMzOGVmM2E5YTVk
NTMyYzQzODgwMTA5NmY0ZS4uMDk4MzRhNjU4YzEyNDAzMjA0NDU1ODRlMjE5NDE1YTg1ZTEzNzBi
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCkBAIC0xMDAsNyArMTAw
LDcgQEAgR3N0RWxlbWVudCogR1N0cmVhbWVyQ2FwdHVyZXI6OmNyZWF0ZVNvdXJjZSgpCiAgICAg
ICAgIG1fc3JjID0gbWFrZUVsZW1lbnQobV9zb3VyY2VGYWN0b3J5KTsKICAgICAgICAgQVNTRVJU
KG1fc3JjKTsKICAgICAgICAgaWYgKEdTVF9JU19BUFBfU1JDKG1fc3JjLmdldCgpKSkKLSAgICAg
ICAgICAgIGdfb2JqZWN0X3NldChtX3NyYy5nZXQoKSwgImlzLWxpdmUiLCB0cnVlLCAiZm9ybWF0
IiwgR1NUX0ZPUk1BVF9USU1FLCBudWxscHRyKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldCht
X3NyYy5nZXQoKSwgImlzLWxpdmUiLCB0cnVlLCAiZm9ybWF0IiwgR1NUX0ZPUk1BVF9USU1FLCAi
ZG8tdGltZXN0YW1wIiwgdHJ1ZSwgbnVsbHB0cik7CiAKICAgICAgICAgYXV0byBzcmNQYWQgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9zcmMuZ2V0KCksICJzcmMiKSk7
CiAgICAgICAgIGlmIChtX2RldmljZVR5cGUgPT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6
Q2FtZXJhKSB7CkBAIC0xMzgsNiArMTM4LDcgQEAgR3N0RWxlbWVudCogR1N0cmVhbWVyQ2FwdHVy
ZXI6OmNyZWF0ZVNvdXJjZSgpCiAgICAgbV9zcmMgPSBnc3RfZGV2aWNlX2NyZWF0ZV9lbGVtZW50
KG1fZGV2aWNlLmdldCgpLCBzb3VyY2VOYW1lLmdldCgpKTsKICAgICBBU1NFUlQobV9zcmMpOwog
CisgICAgLy8gZ19vYmplY3Rfc2V0KG1fc3JjLmdldCgpLCAiaW8tbW9kZSIsIDIsIG51bGxwdHIp
OwogICAgIHJldHVybiBtX3NyYy5nZXQoKTsKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmExZGU1MmJkNTgxOTRj
NzM3NmE2YTFhNGYzZmZlNGRlZGMxYTcyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFj
a2VuZC5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckRUTUZTZW5kZXJCYWNr
ZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisK
KyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OkdT
dHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
CitHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6fkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5k
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEdTdHJlYW1lckRUTUZTZW5k
ZXJCYWNrZW5kOjpjYW5JbnNlcnREVE1GKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6cGxh
eVRvbmUoY29uc3QgU3RyaW5nJiwgc2l6ZV90LCBzaXplX3QpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworU3RyaW5nIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjp0b25lcygpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitzaXpl
X3QgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCitzaXplX3QgR1N0cmVhbWVyRFRN
RlNlbmRlckJhY2tlbmQ6OmludGVyVG9uZUdhcCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2Vu
ZDo6b25Ub25lUGxheWVkKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgb25Ub25lUGxh
eWVkKQoreworICAgIG1fb25Ub25lUGxheWVkID0gV1RGTW92ZShvblRvbmVQbGF5ZWQpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1G
U2VuZGVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1Nzk3MDUwY2VjOWI0YjBhYTZkOWVmZTk4MDhh
ZTVjOTA4OGZiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaApAQCAtMCww
ICsxLDUwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1
ZGUgIlJUQ0RUTUZTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2UgZWFnZXIgaW5pdGlhbGl6YXRpb24gZm9yIHRo
ZSBXZWFrUHRyRmFjdG9yeSBzaW5jZSB3ZSBjYWxsIG1ha2VXZWFrUHRyKCkgZnJvbSBhbm90aGVy
IHRocmVhZC4KK2NsYXNzIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kIGZpbmFsIDogcHVibGlj
IFJUQ0RUTUZTZW5kZXJCYWNrZW5kLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1N0cmVhbWVyRFRN
RlNlbmRlckJhY2tlbmQsIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVh
bWVyRFRNRlNlbmRlckJhY2tlbmQoKTsKKyAgICB+R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQo
KTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENEVE1GU2VuZGVyQmFja2VuZAorICAgIGJvb2wgY2Fu
SW5zZXJ0RFRNRigpIGZpbmFsOworICAgIHZvaWQgcGxheVRvbmUoY29uc3QgU3RyaW5nJiB0b25l
LCBzaXplX3QgZHVyYXRpb24sIHNpemVfdCBpbnRlclRvbmVHYXApIGZpbmFsOworICAgIHZvaWQg
b25Ub25lUGxheWVkKEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpIGZpbmFsOworICAg
IFN0cmluZyB0b25lcygpIGNvbnN0IGZpbmFsOworICAgIHNpemVfdCBkdXJhdGlvbigpIGNvbnN0
IGZpbmFsOworICAgIHNpemVfdCBpbnRlclRvbmVHYXAoKSBjb25zdCBmaW5hbDsKKworICAgIEZ1
bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1fb25Ub25lUGxheWVkOworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVh
bVNvdXJjZS5jcHAKaW5kZXggOTk1NGZhNjU4MzEzYTlhNDVhNTJlM2NmNzYxZjEwMWYzNGQ5YWFk
NS4uMDViYTIwZjcwNGZlN2I2YzIyNmFmNzcwYWFhYTExMDE5M2M1MjhlYiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1l
ZGlhU3RyZWFtU291cmNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCkBAIC0zNCwxNyAr
MzQsMjMgQEAKICNpbmNsdWRlICJWaWRlb0ZyYW1lTWV0YWRhdGFHU3RyZWFtZXIuaCIKICNpbmNs
dWRlICJWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFtLmgiCiAKKyNpZiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNl
bmRpZgorCiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KKyNpbmNsdWRlIDxnc3QvYmFz
ZS9nc3RmbG93Y29tYmluZXIuaD4KICNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0
Zi9nbGliL1dURkdUeXBlLmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGF0aWMg
R3N0U3RhdGljUGFkVGVtcGxhdGUgdmlkZW9TcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RF
TVBMQVRFKCJ2aWRlb19zcmMldSIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywKLSAg
ICBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gtcmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwOCIp
KTsKKyAgICBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gtcmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94
LXZwODt2aWRlby94LXZwOTthcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbyIp
KTsKIAogc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIGF1ZGlvU3JjVGVtcGxhdGUgPSBHU1Rf
U1RBVElDX1BBRF9URU1QTEFURSgiYXVkaW9fc3JjJXUiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9T
T01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTKCJhdWRpby94LXJhdyhBTlkpOyIpKTsKKyAg
ICBHU1RfU1RBVElDX0NBUFMoImF1ZGlvL3gtcmF3KEFOWSk7YXBwbGljYXRpb24veC1ydHAsIG1l
ZGlhPShzdHJpbmcpYXVkaW8iKSk7CiAKIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0
TWVkaWFTdHJlYW1TcmNEZWJ1Zyk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRp
YVN0cmVhbVNyY0RlYnVnCkBAIC0yMjEsNyArMjI3LDcgQEAgcHVibGljOgogCiAgICAgICAgIGlm
IChkcm9wKSB7CiAgICAgICAgICAgICBtX25lZWRzRGlzY29udCA9IHRydWU7Ci0gICAgICAgICAg
ICBHU1RfSU5GT19PQkpFQ1QobV9zcmMuZ2V0KCksICIlcyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4g
bm90IHB1c2hpbmciLCBtX3RyYWNrLmhhc1ZpZGVvKCkgPyAiVmlkZW8iIDogIkF1ZGlvIik7Cisg
ICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKG1fc3JjLmdldCgpLCAiJXMgcXVldWUgZnVsbCBh
bHJlYWR5Li4uIG5vdCBwdXNoaW5nIiwgbV90cmFjay5oYXNWaWRlbygpID8gIlZpZGVvIiA6ICJB
dWRpbyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTY1Miw2ICs2NTgs
NyBAQCB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkVHJhY2soV2ViS2l0TWVkaWFTdHJlYW1T
cmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcgogICAgIGNvbnN0IGNoYXIqIHNvdXJjZVR5cGU7
CiAgICAgdW5zaWduZWQgY291bnRlcjsKICAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkVGVt
cGxhdGU7CisKICAgICBpZiAodHJhY2stPmhhc0F1ZGlvKCkpIHsKICAgICAgICAgcGFkVGVtcGxh
dGUgPSAmYXVkaW9TcmNUZW1wbGF0ZTsKICAgICAgICAgc291cmNlVHlwZSA9ICJhdWRpbyI7CkBA
IC02NjMsOSArNjcwLDE5IEBAIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXZWJL
aXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1UcmFja1ByCiAgICAgICAgIGNvdW50
ZXIgPSBzZWxmLT5wcml2LT52aWRlb1BhZENvdW50ZXIuZXhjaGFuZ2VBZGQoMSk7CiAgICAgfQog
Ci0gICAgYXV0byBwYWROYW1lID0gbWFrZVN0cmluZyhzb3VyY2VUeXBlLCAiX3NyYyIsIGNvdW50
ZXIpOworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorICAgIGlmICh0cmFjay0+c291cmNlKCku
aXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpIHsKKyAgICAgICAgYXV0byYgc291cmNlID0gc3RhdGlj
X2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJj
ZSgpKTsKKyAgICAgICAgc291cmNlLnJlZ2lzdGVyQ2xpZW50KCk7CisgICAgfSBlbHNlIGlmICh0
cmFjay0+c291cmNlKCkuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkpIHsKKyAgICAgICAgYXV0byYg
c291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVy
Jj4odHJhY2stPnNvdXJjZSgpKTsKKyAgICAgICAgc291cmNlLnJlZ2lzdGVyQ2xpZW50KCk7Cisg
ICAgfQorI2VuZGlmCisKICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJTZXR1cCAlcyBzb3Vy
Y2UgZm9yIHRyYWNrICVzLCBvbmx5IHRyYWNrOiAlcyIsIHNvdXJjZVR5cGUsIHRyYWNrLT5pZCgp
LnV0ZjgoKS5kYXRhKCksIGJvb2xGb3JQcmludGluZyhvbmx5VHJhY2spKTsKIAorICAgIGF1dG8g
cGFkTmFtZSA9IG1ha2VTdHJpbmcoc291cmNlVHlwZSwgIl9zcmMiLCBjb3VudGVyKTsKICAgICBh
dXRvIHNvdXJjZSA9IG1ha2VVbmlxdWU8SW50ZXJuYWxTb3VyY2U+KEdTVF9FTEVNRU5UX0NBU1Qo
c2VsZiksICp0cmFjaywgcGFkTmFtZSk7CiAgICAgYXV0byogZWxlbWVudCA9IHNvdXJjZS0+Z2V0
KCk7CiAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKHNlbGYpLCBlbGVtZW50KTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJWaWRlb0VuY29kZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKaW5kZXggZmFjNDcwNWZiOGE3
Y2YyZGMyM2VhNTExYjE1ZmNmNDg1NTJjZjMzYS4uYTc2ZWYxZWZmZDE2ZmEyNmI2ZGUzNTc0ZjQ2
NGY1ZDIzM2M5NWVmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rl
ci5jcHAKQEAgLTI5Nyw5ICsyOTcsMTEgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYnJ0Y192aWRl
b19lbmNvZGVyX2NsYXNzX2luaXQoV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyQ2xhc3MKICAgICAg
ICAgICAgIGdfb2JqZWN0X3NldChzZWxmLT5wcml2LT5wYXJzZXIuZ2V0KCksICJjb25maWctaW50
ZXJ2YWwiLCAxLCBudWxscHRyKTsKICAgICAgICAgfSwgInRhcmdldC1iaXRyYXRlIiwgc2V0Qml0
cmF0ZUJpdFBlclNlYywgImludGVydmFsLWludHJhZnJhbWVzIik7CiAgICAgRW5jb2RlcnM6OnJl
Z2lzdGVyRW5jb2RlcihYMjY0LCAieDI2NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0
IiwKLSAgICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRl
LXN0cmVhbSxwcm9maWxlPWJhc2VsaW5lIiwKKyAgICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1l
bnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVhbSxwcm9maWxlPWNvbnN0cmFpbmVkLWJhc2Vs
aW5lIiwKICAgICAgICAgW10oV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyKiBzZWxmKSB7CiAgICAg
ICAgICAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVChzZWxmLT5wcml2LT5lbmNv
ZGVyLmdldCgpKSwgInR1bmUiLCAiemVyb2xhdGVuY3kiKTsKKyAgICAgICAgICAgIGdzdF91dGls
X3NldF9vYmplY3RfYXJnKEdfT0JKRUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAic3Bl
ZWQtcHJlc2V0IiwgInVsdHJhZmFzdCIpOworICAgICAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JK
RUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAia2V5LWludC1tYXgiLCAxNSwgTlVMTCk7
CiAgICAgICAgICAgICBnX29iamVjdF9zZXQoc2VsZi0+cHJpdi0+cGFyc2VyLmdldCgpLCAiY29u
ZmlnLWludGVydmFsIiwgMSwgbnVsbHB0cik7CiAgICAgICAgIH0sICJiaXRyYXRlIiwgc2V0Qml0
cmF0ZUtiaXRQZXJTZWMsICJrZXktaW50LW1heCIpOwogICAgIEVuY29kZXJzOjpyZWdpc3RlckVu
Y29kZXIoT3BlbkgyNjQsICJvcGVuaDI2NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0
IiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODY4MDU2YTg1ODhlNWZkYTc1OTc3ZDE4
MTIwMDM4YWVhZWJjN2JjYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2lu
Y2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaW5jbHVk
ZSAiR1N0cmVhbWVyQXVkaW9EYXRhLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
KFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8sIFdURk1vdmUoYXVkaW9UcmFja0lkKSkKKyAgICAs
IFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIHN0YXJ0KCk7Cit9CisK
K1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lcigpCit7CisgICAgc3RvcCgpOworfQorCit2b2lkIFJlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAg
ICByZWxlYXNlVmFsdmUoKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBsb2NrVmFsdmUoKTsKK30KKwor
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ0F1
ZGlvU291cmNlR1N0cmVhbWVyOjpjYXBhYmlsaXRpZXMoKQoreworICAgIHJldHVybiBSZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOworfQorCitjb25z
dCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcjo6c2V0dGluZ3MoKQoreworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsK
K30KKwordm9pZCBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNo
U2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmIGdzdFNhbXBsZSkKK3sKKyAgICBhdXRvKiBidWZm
ZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoZ3N0U2FtcGxlLmdldCgpKTsKKyAgICBHU3RyZWFt
ZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGRlc2NyaXB0aW9uOworICAgIEdTdHJlYW1lckF1ZGlv
RGF0YSBmcmFtZXMoV1RGTW92ZShnc3RTYW1wbGUpLCBkZXNjcmlwdGlvbi5nZXRJbmZvKCkpOwor
CisgICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlhVGltZShHU1RfVElNRV9BU19VU0VDT05E
UyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSwgR19VU0VDX1BFUl9TRUMpLCBmcmFtZXMsIGRlc2Ny
aXB0aW9uLCAwKTsKK30KKworfQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
R1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmRmNmRhM2I3MWY1ZmVlNTk2ZjI1NmYyMTVkZGNkZjc2
OTg4NGVhNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaApA
QCAtMCwwICsxLDU3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2Uu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNvdXJjZSwgcHVibGljIFJlYWx0
aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiBjcmVhdGUoU3RyaW5nJiYgYXVkaW9U
cmFja0lkKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcihXVEZNb3ZlKGF1ZGlvVHJhY2tJZCkpKTsgfQorCitwcm90ZWN0ZWQ6CisgICAg
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmKTsKKyAgICB+UmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKCk7CisKK3ByaXZhdGU6CisgICAgLy8g
UmVhbHRpbWVNZWRpYVNvdXJjZSBBUEkKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZp
bmFsOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSAgZmluYWw7CisgICAgY29uc3QgUmVh
bHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgZmluYWw7CisgICAg
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGZpbmFsOworICAg
IGJvb2wgaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsg
fQorCisgICAgLy8gUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciBBUEkKKyAgICB2b2lk
IGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmKSBmaW5hbDsKKworICAgIFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpS
ZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIpCisgICAgc3RhdGljIGJvb2wgaXNU
eXBlKGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2UmIHNvdXJjZSkgeyByZXR1cm4g
c291cmNlLmlzSW5jb21pbmdBdWRpb1NvdXJjZSgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0VORCgpCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29t
aW5nU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5hMTk2ZjI1ZDlkMmQwNWJjMmJiMmIxZDJjMWVlNmQ2MTJiNjk5NDc4Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXIuaCIKKworI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8
Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisK
K0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7
CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6
UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcigpCit7CisgICAgbV9iaW4gPSBnc3RfYmlu
X25ldyhudWxscHRyKTsKKyAgICBtX3ZhbHZlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2
YWx2ZSIsIG51bGxwdHIpOworICAgIG1fdGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ0
ZWUiLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9zZXQobV90ZWUuZ2V0KCksICJhbGxvdy1ub3Qt
bGlua2VkIiwgdHJ1ZSwgbnVsbHB0cik7CisKKyAgICBhdXRvKiBxdWV1ZSA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdT
VF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fdmFsdmUuZ2V0KCksIHF1ZXVlLCBtX3RlZS5nZXQo
KSwgbnVsbHB0cik7CisKKyAgICBnc3RfZWxlbWVudF9saW5rX21hbnkobV92YWx2ZS5nZXQoKSwg
cXVldWUsIG1fdGVlLmdldCgpLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRl
X3dpdGhfcGFyZW50KG1fdmFsdmUuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVf
d2l0aF9wYXJlbnQocXVldWUpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJl
bnQobV90ZWUuZ2V0KCkpOworCisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVt
ZW50X2dldF9zdGF0aWNfcGFkKG1fdmFsdmUuZ2V0KCksICJzaW5rIikpOworICAgIGdzdF9lbGVt
ZW50X2FkZF9wYWQobV9iaW4uZ2V0KCksIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgc2lua1Bh
ZC5nZXQoKSkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6Omxv
Y2tWYWx2ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fdmFsdmUpCisgICAgICAgIGdfb2JqZWN0X3Nl
dChtX3ZhbHZlLmdldCgpLCAiZHJvcCIsIHRydWUsIG51bGxwdHIpOworfQorCit2b2lkIFJlYWx0
aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OnJlbGVhc2VWYWx2ZSgpIGNvbnN0Cit7CisgICAg
aWYgKG1fdmFsdmUpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3ZhbHZlLmdldCgpLCAiZHJvcCIs
IGZhbHNlLCBudWxscHRyKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVh
bWVyOjpyZWdpc3RlckNsaWVudCgpCit7CisgICAgR1NUX0RFQlVHKCJSZWdpc3RlcmluZyBuZXcg
Y2xpZW50Iik7CisgICAgYXV0byogcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1
ZXVlIiwgbnVsbHB0cik7CisgICAgYXV0byogc2luayA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFr
ZSgiYXBwc2luayIsIG51bGxwdHIpOworICAgIGdfb2JqZWN0X3NldChzaW5rLCAiZW5hYmxlLWxh
c3Qtc2FtcGxlIiwgRkFMU0UsICJlbWl0LXNpZ25hbHMiLCBUUlVFLCAibWF4LWJ1ZmZlcnMiLCAx
LCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoc2luaywgIm5ldy1zYW1w
bGUiLCBHX0NBTExCQUNLKCtbXShSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKiBzZWxm
LCBHc3RFbGVtZW50KiBzaW5rKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAgICAgYXV0byBzYW1w
bGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2FtcGxlKEdTVF9BUFBfU0lOSyhzaW5r
KSkpOworICAgICAgICBzZWxmLT5kaXNwYXRjaFNhbXBsZShXVEZNb3ZlKHNhbXBsZSkpOworICAg
ICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfSksIHRoaXMpOworCisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKHNpbmssICJuZXctcHJlcm9sbCIsIEdfQ0FMTEJBQ0soK1tdKFJlYWx0
aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIqIHNlbGYsIEdzdEVsZW1lbnQqIHNpbmspIC0+IEdz
dEZsb3dSZXR1cm4geworICAgICAgICBhdXRvIHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3Np
bmtfcHVsbF9wcmVyb2xsKEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgICAgICBzZWxmLT5kaXNw
YXRjaFNhbXBsZShXVEZNb3ZlKHNhbXBsZSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7
CisgICAgfSksIHRoaXMpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9i
aW4uZ2V0KCkpLCBxdWV1ZSwgc2luaywgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfbGlua19t
YW55KG1fdGVlLmdldCgpLCBxdWV1ZSwgc2luaywgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRf
c3luY19zdGF0ZV93aXRoX3BhcmVudChxdWV1ZSk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0
ZV93aXRoX3BhcmVudChzaW5rKTsKKworICAgIGF1dG8gZG90RmlsZU5hbWUgPSBtYWtlU3RyaW5n
KEdTVF9PQkpFQ1RfTkFNRShtX2Jpbi5nZXQoKSksICIuaW5jb21pbmciKTsKKyAgICBHU1RfREVC
VUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgR1NU
X0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkb3RGaWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFt
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi41Njc0YzRiOTAyOTQyNmNiNWQyYzE5YWE1NjdhOWM1YWVkYTI3MWVh
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaApAQCAtMCwwICsxLDUw
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXIgeworcHVibGljOgorICAgIEdzdEVsZW1lbnQqIGJpbigpIHsgcmV0dXJuIG1fYmluLmdl
dCgpOyB9CisgICAgdm9pZCByZWdpc3RlckNsaWVudCgpOworCitwcm90ZWN0ZWQ6CisgICAgUmVh
bHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcigpOworCisgICAgdm9pZCBsb2NrVmFsdmUoKSBj
b25zdDsKKyAgICB2b2lkIHJlbGVhc2VWYWx2ZSgpIGNvbnN0OworCisgICAgR1JlZlB0cjxHc3RF
bGVtZW50PiBtX3ZhbHZlOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFNh
bXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJikgeyB9CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fYmluOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV90ZWU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uMTVmMDgwNzYyYmMyNTZlZDdlYzlmMWY4ZTk5NTRiYzEyYjQx
ODBmOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBA
IC0wLDAgKzEsMTA3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIk1lZGlhU2Ft
cGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9GcmFtZU1ldGFkYXRhR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSA8Z3N0L3J0cC9ydHAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcihTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCisgICAgOiBSZWFsdGltZU1lZGlh
U291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBXVEZNb3ZlKHZpZGVvVHJh
Y2tJZCkpCisgICAgLCBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBS
ZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgY29uc3RyYWludHM7CisgICAg
Y29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsKKyAgICBjb25zdHJhaW50cy5zZXRT
dXBwb3J0c0hlaWdodCh0cnVlKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5ncyB7IH07CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFN1cHBvcnRl
ZENvbnN0cmFpbnRzKFdURk1vdmUoY29uc3RyYWludHMpKTsKKworICAgIGF1dG8gc2lua1BhZCA9
IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3ZhbHZlLmdldCgpLCAic2lu
ayIpKTsKKyAgICBnc3RfcGFkX2FkZF9wcm9iZShzaW5rUGFkLmdldCgpLCBzdGF0aWNfY2FzdDxH
c3RQYWRQcm9iZVR5cGU+KEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIpLCBbXShHc3RQYWQqLCBH
c3RQYWRQcm9iZUluZm8qIGluZm8sIGdwb2ludGVyKSAtPiBHc3RQYWRQcm9iZVJldHVybiB7Cisg
ICAgICAgIGF1dG8gdmlkZW9TYW1wbGVNZXRhZGF0YSA9IHN0ZDo6bWFrZV9vcHRpb25hbDxWaWRl
b1NhbXBsZU1ldGFkYXRhPih7IH0pOworICAgICAgICB2aWRlb1NhbXBsZU1ldGFkYXRhLT5yZWNl
aXZlVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCk7CisKKyAg
ICAgICAgYXV0byogYnVmZmVyID0gR1NUX0JVRkZFUl9DQVNUKEdTVF9QQURfUFJPQkVfSU5GT19E
QVRBKGluZm8pKTsKKyAgICAgICAgR3N0UlRQQnVmZmVyIHJ0cEJ1ZmZlciBHU1RfUlRQX0JVRkZF
Ul9JTklUOworICAgICAgICBpZiAoZ3N0X3J0cF9idWZmZXJfbWFwKGJ1ZmZlciwgR1NUX01BUF9S
RUFELCAmcnRwQnVmZmVyKSkgeworICAgICAgICAgICAgdmlkZW9TYW1wbGVNZXRhZGF0YS0+cnRw
VGltZXN0YW1wID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCgmcnRwQnVmZmVyKTsKKyAg
ICAgICAgICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwKCZydHBCdWZmZXIpOworICAgICAgICB9Cisg
ICAgICAgIGJ1ZmZlciA9IHdlYmtpdEdzdEJ1ZmZlclNldFZpZGVvU2FtcGxlTWV0YWRhdGEoYnVm
ZmVyLCBXVEZNb3ZlKHZpZGVvU2FtcGxlTWV0YWRhdGEpKTsKKyAgICAgICAgR1NUX1BBRF9QUk9C
RV9JTkZPX0RBVEEoaW5mbykgPSBidWZmZXI7CisgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JF
X09LOworICAgIH0sIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgc3RhcnQoKTsKK30KKwordm9p
ZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0
YSgpCit7CisgICAgcmVsZWFzZVZhbHZlKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgbG9ja1ZhbHZl
KCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVzKCkKK3sKKyAgICByZXR1
cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsK
K30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKCkKK3sKKyAgICBpZiAobV9jdXJyZW50U2V0
dGluZ3MpCisgICAgICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5ncy52YWx1ZSgpOworCisgICAg
UmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOworICAg
IGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzV2lkdGgodHJ1ZSk7CisgICAgY29uc3RyYWludHMuc2V0
U3VwcG9ydHNIZWlnaHQodHJ1ZSk7CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mg
c2V0dGluZ3M7CisgICAgYXV0byYgc2l6ZSA9IHRoaXMtPnNpemUoKTsKKyAgICBzZXR0aW5ncy5z
ZXRXaWR0aChzaXplLndpZHRoKCkpOworICAgIHNldHRpbmdzLnNldEhlaWdodChzaXplLmhlaWdo
dCgpKTsKKyAgICBzZXR0aW5ncy5zZXRTdXBwb3J0ZWRDb25zdHJhaW50cyhjb25zdHJhaW50cyk7
CisKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IFdURk1vdmUoc2V0dGluZ3MpOworICAgIHJldHVy
biBtX2N1cnJlbnRTZXR0aW5ncy52YWx1ZSgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gc2V0dGluZ3MpCit7CisgICAgaWYgKHNldHRpbmdz
LmNvbnRhaW5zQW55KHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpXaWR0aCwg
UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWlnaHQgfSkpCisgICAgICAgIG1f
Y3VycmVudFNldHRpbmdzID0gc3RkOjpudWxsb3B0OworfQorCit2b2lkIFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+
JiYgZ3N0U2FtcGxlKQoreworICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlR1N0
cmVhbWVyOjpjcmVhdGVXcmFwcGVkU2FtcGxlKGdzdFNhbXBsZSksIHsgfSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5YmMzMDA2OWNkMzMyMDkyMzE4YmJmNzc4YWI5M2Q5MTg0
ODMxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgKQEAg
LTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5j
b21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UsIHB1YmxpYyBSZWFsdGlt
ZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4gY3JlYXRlKFN0cmluZyYmIHZpZGVvVHJh
Y2tJZCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXIoV1RGTW92ZSh2aWRlb1RyYWNrSWQpKSk7IH0KKyAgICB+UmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyKCkgPSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6CisgICAgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmKTsKKworcHJpdmF0ZToK
KyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdE
YXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBmaW5hbDsKKyAgICB2
b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3M6OkZsYWc+KSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0
aWVzJiBjYXBhYmlsaXRpZXMoKSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNl
U2V0dGluZ3MmIHNldHRpbmdzKCkgZmluYWw7CisgICAgYm9vbCBpc0luY29taW5nVmlkZW9Tb3Vy
Y2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBSZWFsdGltZUluY29t
aW5nU291cmNlR1N0cmVhbWVyIEFQSQorICAgIHZvaWQgZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxH
c3RTYW1wbGU+JiYpIGZpbmFsOworCisgICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291
cmNlU2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcikKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3Qg
V2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZSYgc291cmNlKSB7IHJldHVybiBzb3VyY2UuaXNJ
bmNvbWluZ1ZpZGVvU291cmNlKCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKwor
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iODA1MzkxOTMzNjEzYWJjOGE3NzVjZWY3OTc0NGQyNzIyYjBkYTg2Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSw5NiBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3Vy
Y2UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CisK
K0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7
CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVh
bWVyOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoUmVmPE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlPiYmIHNvdXJjZSkKKyAgICA6IFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJj
ZUdTdHJlYW1lcigpCit7CisgICAgbV9hbGxvd2VkQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19u
ZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LXJ0cCIsICJtZWRpYSIsIEdfVFlQRV9TVFJJTkcsICJh
dWRpbyIsCisgICAgICAgICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklORywgIk9QVVMiLCAi
Y2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIDQ4MDAwLCBudWxscHRyKSk7CisKKyAgICBtX2F1ZGlv
Y29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgbnVsbHB0
cik7CisgICAgbV9hdWRpb3Jlc2FtcGxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRp
b3Jlc2FtcGxlIiwgbnVsbHB0cik7CisKKyAgICBtX2VuY29kZXIgPSBtYWtlR1N0cmVhbWVyRWxl
bWVudCgib3B1c2VuYyIsIG51bGxwdHIpOworICAgIGlmICghbV9lbmNvZGVyKQorICAgICAgICBy
ZXR1cm47CisKKyAgICAvLyBGSVhNRTogRW5hYmxlIGR0eCB0b28/CisgICAgZ3N0X3V0aWxfc2V0
X29iamVjdF9hcmcoR19PQkpFQ1QobV9lbmNvZGVyLmdldCgpKSwgImF1ZGlvLXR5cGUiLCAidm9p
Y2UiKTsKKworICAgIG1fcGF5bG9hZGVyID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoInJ0cG9wdXNw
YXkiLCBudWxscHRyKTsKKyAgICBpZiAoIW1fcGF5bG9hZGVyKQorICAgICAgICByZXR1cm47CisK
KyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJhdXRvLWhlYWRlci1leHRlbnNp
b24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FT
VChtX2Jpbi5nZXQoKSksIG1fYXVkaW9jb252ZXJ0LmdldCgpLCBtX2F1ZGlvcmVzYW1wbGUuZ2V0
KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9wYXlsb2FkZXIuZ2V0KCksIG51bGxwdHIpOworICAgIHNl
dFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkpOworfQorCitib29sIFJlYWx0aW1lT3V0Z29pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUoR1JlZlB0cjxHc3RDYXBzPiYgY2FwcykK
K3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fYmluLmdldCgpLCAiT3V0Z29pbmcgYXVkaW8gc291
cmNlIHBheWxvYWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAgIGF1
dG8qIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgMCk7Cisg
ICAgaWYgKGNvbnN0IGNoYXIqIGVuY29kaW5nTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmlu
ZyhzdHJ1Y3R1cmUsICJlbmNvZGluZy1uYW1lIikpIHsKKyAgICAgICAgaWYgKCFlcXVhbChlbmNv
ZGluZ05hbWUsICJPUFVTIikpIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9iaW4u
Z2V0KCksICJVbnN1cHBvcnRlZCBvdXRnb2luZyBhdWRpbyBlbmNvZGluZzogJXMiLCBlbmNvZGlu
Z05hbWUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX2Jpbi5nZXQoKSwgImVuY29kaW5nLW5hbWUg
bm90IGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY29u
c3QgY2hhciogdXNlSW5iYW5kRmVjID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVy
ZSwgInVzZWluYmFuZGZlYyIpKSB7CisgICAgICAgIGlmICghc3RyY21wKHVzZUluYmFuZEZlYywg
IjEiKSkKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX2VuY29kZXIuZ2V0KCksICJpbmJhbmQt
ZmVjIiwgdHJ1ZSwgbnVsbHB0cik7CisgICAgfQorCisgICAgaWYgKGNvbnN0IGNoYXIqIG1pblBU
aW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm1pbnB0aW1lIikpIHsK
KyAgICAgICAgU3RyaW5nIHRpbWUobWluUFRpbWUpOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9
IHBhcnNlSW50ZWdlckFsbG93aW5nVHJhaWxpbmdKdW5rPGludDY0X3Q+KHRpbWUpKQorICAgICAg
ICAgICAgZ19vYmplY3Rfc2V0KG1fcGF5bG9hZGVyLmdldCgpLCAibWluLXB0aW1lIiwgKnZhbHVl
ICogR1NUX01TRUNPTkQsIG51bGxwdHIpOworICAgIH0KKworICAgIGludCBwYXlsb2FkVHlwZTsK
KyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgInBheWxvYWQiLCAmcGF5
bG9hZFR5cGUpKQorICAgICAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJwdCIs
IHBheWxvYWRUeXBlLCBudWxscHRyKTsKKworICAgIGdfb2JqZWN0X3NldChtX2NhcHNGaWx0ZXIu
Z2V0KCksICJjYXBzIiwgY2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBnc3RfZWxlbWVudF9s
aW5rX21hbnkobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSwgbV92YWx2ZS5nZXQoKSwgbV9hdWRpb2Nv
bnZlcnQuZ2V0KCksIG1fYXVkaW9yZXNhbXBsZS5nZXQoKSwgbV9wcmVFbmNvZGVyUXVldWUuZ2V0
KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9wYXlsb2FkZXIuZ2V0KCksIG1fcG9zdEVuY29kZXJRdWV1
ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjE5ZTgxZTViYzdlYzMwMDRmNDIwMGIzZWE0MGE4NmQyOGJiNmZiMjYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0
NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0
aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVh
bHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlPiYmIGF1ZGlvU291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0
aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKGF1ZGlvU291cmNlKSkpOyB9
CisKKyAgICBib29sIHNldFBheWxvYWRUeXBlKEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsKKwor
cHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCitwcml2YXRlOgorICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gbV9hdWRpb2NvbnZlcnQ7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBtX2F1ZGlvcmVzYW1wbGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MjI2NzIwYjJiNGJjMDg4MjcyNTgzYzA1ZTgzMjIyMjQyMjVmNmFjYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmgiCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJM
RV9BUEkKKyNpbmNsdWRlIDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5T
VEFCTEVfQVBJCisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRw
b2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBv
aW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVPdXRnb2luZ01lZGlh
U291cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQor
eworICAgIG1fYmluID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7CisKKyAgICBtX3ZhbHZlID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAgIG1fcHJlRW5jb2Rl
clF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAg
IG1fcG9zdEVuY29kZXJRdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBu
dWxscHRyKTsKKyAgICBtX2NhcHNGaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNh
cHNmaWx0ZXIiLCBudWxscHRyKTsKKworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNU
KG1fYmluLmdldCgpKSwgbV92YWx2ZS5nZXQoKSwgbV9wcmVFbmNvZGVyUXVldWUuZ2V0KCksCisg
ICAgICAgIG1fcG9zdEVuY29kZXJRdWV1ZS5nZXQoKSwgbV9jYXBzRmlsdGVyLmdldCgpLCBudWxs
cHRyKTsKKworICAgIGF1dG8gc3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKG1fY2Fwc0ZpbHRlci5nZXQoKSwgInNyYyIpKTsKKyAgICBnc3RfZWxlbWVudF9hZGRf
cGFkKG1fYmluLmdldCgpLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgc3JjUGFkLmdldCgpKSk7
Cit9CisKK1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpCit7CisgICAgc3RvcCgpOworCisgICAgZ3N0X2Vs
ZW1lbnRfc2V0X3N0YXRlKG1fYmluLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgaWYgKGF1
dG8gcGlwZWxpbmUgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudChtX2Jpbi5nZXQo
KSkpKQorICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NBU1QocGlwZWxpbmUuZ2V0KCkp
LCBtX2Jpbi5nZXQoKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyOjpzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJj
ZSkKK3sKKyAgICBpZiAobV9zb3VyY2UgJiYgIW1faW5pdGlhbFNldHRpbmdzKQorICAgICAgICBt
X2luaXRpYWxTZXR0aW5ncyA9IG1fc291cmNlLnZhbHVlKCktPnNldHRpbmdzKCk7CisKKyAgICBp
ZiAobV9zb3VyY2UpCisgICAgICAgIG1fc291cmNlLnZhbHVlKCktPnJlbW92ZU9ic2VydmVyKCp0
aGlzKTsKKyAgICBtX3NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKKyAgICBpbml0aWFsaXpl
RnJvbVRyYWNrKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyOjpzdGFydCgpCit7CisgICAgbV9zb3VyY2UudmFsdWUoKS0+YWRkT2JzZXJ2ZXIoKnRoaXMp
OworICAgIG1faXNTdG9wcGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyOjpzdG9wKCkKK3sKKyAgICBpZiAobV9zb3VyY2UpIHsKKyAgICAg
ICAgbV9zb3VyY2UudmFsdWUoKS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgICAgICBnc3Rf
ZWxlbWVudF9zZW5kX2V2ZW50KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIGdzdF9ldmVudF9uZXdf
ZW9zKCkpOworCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9iaW4uZ2V0
KCksIHRydWUpOworICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9vdXRnb2luZ1NvdXJj
ZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworCisgICAgICAgIGlmIChtX3dlYnJ0Y1NpbmtQYWQp
IHsKKyAgICAgICAgICAgIGF1dG8gc3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKG1fYmluLmdldCgpLCAic3JjIikpOworICAgICAgICAgICAgZ3N0X3BhZF91bmxp
bmsoc3JjUGFkLmdldCgpLCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworCisgICAgICAgICAgICBh
dXRvIHBhcmVudCA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChtX3dlYnJ0
Y1NpbmtQYWQuZ2V0KCkpKTsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFyZW50Lmdl
dCgpLCAiUmVtb3ZpbmcgcGFkICUiIEdTVF9QVFJfRk9STUFULCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0
KCkpOworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZChwYXJlbnQu
Z2V0KCksIG1fd2VicnRjU2lua1BhZC5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBnc3Rf
ZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fYmluLmdldCgpLCBmYWxzZSk7CisgICAgICAgIG1f
c291cmNlLnJlc2V0KCk7CisgICAgfQorICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsKK30KKwordm9p
ZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZU11dGVkQ2hhbmdl
ZCgpCit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVCht
X211dGVkICE9IG1fc291cmNlLnZhbHVlKCktPm11dGVkKCkpOworICAgIG1fbXV0ZWQgPSBtX3Nv
dXJjZS52YWx1ZSgpLT5tdXRlZCgpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6c291cmNlRW5hYmxlZENoYW5nZWQoKQoreworICAgIGlmICghbV9zb3Vy
Y2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fZW5hYmxlZCA9IG1fc291cmNlLnZhbHVlKCkt
PmVuYWJsZWQoKTsKKyAgICBpZiAobV92YWx2ZSkKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fdmFs
dmUuZ2V0KCksICJkcm9wIiwgIW1fZW5hYmxlZCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjppbml0aWFsaXplRnJvbVRyYWNrKCkKK3sK
KyAgICBtX211dGVkID0gbV9zb3VyY2UudmFsdWUoKS0+bXV0ZWQoKTsKKyAgICBtX2VuYWJsZWQg
PSBtX3NvdXJjZS52YWx1ZSgpLT5lbmFibGVkKCk7CisgICAgbV9vdXRnb2luZ1NvdXJjZSA9IHdl
YmtpdE1lZGlhU3RyZWFtU3JjTmV3KCk7CisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1f
YmluLmdldCgpKSwgbV9vdXRnb2luZ1NvdXJjZS5nZXQoKSk7CisgICAgd2Via2l0TWVkaWFTdHJl
YW1TcmNBZGRUcmFjayhXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhtX291dGdvaW5nU291cmNlLmdl
dCgpKSwgbV9zb3VyY2UtPnB0cigpLCB0cnVlKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXI6OmxpbmsoKQoreworICAgIGdzdF9lbGVtZW50X2xpbmsobV9w
b3N0RW5jb2RlclF1ZXVlLmdldCgpLCBtX2NhcHNGaWx0ZXIuZ2V0KCkpOworCisgICAgYXV0byBz
cmNQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9iaW4uZ2V0KCks
ICJzcmMiKSk7CisgICAgZ3N0X3BhZF9saW5rKHNyY1BhZC5nZXQoKSwgbV93ZWJydGNTaW5rUGFk
LmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fYmluLmdl
dCgpKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNl
dFNpbmtQYWQoY29uc3QgR1JlZlB0cjxHc3RQYWQ+JiBwYWQpCit7CisgICAgbV93ZWJydGNTaW5r
UGFkID0gcGFkOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHRyYW5zY2Vp
dmVyOworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCksICJ0cmFuc2NlaXZl
ciIsICZ0cmFuc2NlaXZlci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgZ19vYmplY3RfZ2V0KHRy
YW5zY2VpdmVyLmdldCgpLCAic2VuZGVyIiwgJm1fc2VuZGVyLm91dFB0cigpLCBudWxscHRyKTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjVlMGJjNWE5NWY1Yjc0YTU5M2EyYmRm
YTEzNTcyMzE5YWI4NGI1NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuaApAQCAtMCwwICsxLDg1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgi
CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyIDogcHVi
bGljIFRocmVhZFNhZmVSZWZDb3VudGVkPFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJl
YW1lcj4sIHB1YmxpYyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgeworcHVibGlj
OgorICAgIH5SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKKworICAgIHZv
aWQgc3RhcnQoKTsKKyAgICB2b2lkIHN0b3AoKTsKKyAgICB2b2lkIHNldFNvdXJjZShSZWY8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBz
b3VyY2UoKSBjb25zdCB7IHJldHVybiBtX3NvdXJjZS0+Z2V0KCk7IH0KKworICAgIEdSZWZQdHI8
R3N0Q2Fwcz4gYWxsb3dlZENhcHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93ZWRDYXBzOyB9CisK
KyAgICB2b2lkIGxpbmsoKTsKKyAgICBjb25zdCBHUmVmUHRyPEdzdFBhZD4mIHBhZCgpIGNvbnN0
IHsgcmV0dXJuIG1fd2VicnRjU2lua1BhZDsgfQorICAgIHZvaWQgc2V0U2lua1BhZChjb25zdCBH
UmVmUHRyPEdzdFBhZD4mKTsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5k
ZXIoKSBjb25zdCB7IHJldHVybiBtX3NlbmRlcjsgfQorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4g
YmluKCkgY29uc3QgeyByZXR1cm4gbV9iaW47IH0KKworICAgIHZpcnR1YWwgYm9vbCBzZXRQYXls
b2FkVHlwZShHUmVmUHRyPEdzdENhcHM+JikgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVk
OgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpOwor
CisgICAgdm9pZCBpbml0aWFsaXplRnJvbVRyYWNrKCk7CisKKyAgICBib29sIG1fZW5hYmxlZCB7
IHRydWUgfTsKKyAgICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1N0b3Bw
ZWQgeyBmYWxzZSB9OworICAgIHN0ZDo6b3B0aW9uYWw8UmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlPj4gbV9zb3VyY2U7CisgICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3M+IG1faW5pdGlhbFNldHRpbmdzOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9iaW47
CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX291dGdvaW5nU291cmNlOworICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gbV92YWx2ZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcHJlRW5jb2Rl
clF1ZXVlOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9lbmNvZGVyOworICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gbV9wYXlsb2FkZXI7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3Bvc3RF
bmNvZGVyUXVldWU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2NhcHNGaWx0ZXI7CisgICAg
R1JlZlB0cjxHc3RDYXBzPiBtX2FsbG93ZWRDYXBzOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQ
U2VuZGVyPiBtX3NlbmRlcjsKKyAgICBHUmVmUHRyPEdzdFBhZD4gbV93ZWJydGNTaW5rUGFkOwor
Citwcml2YXRlOgorICAgIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCk7CisgICAgdm9pZCBzb3Vy
Y2VFbmFibGVkQ2hhbmdlZCgpOworCisgICAgLy8gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9i
c2VydmVyIEFQSQorICAgIHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUmKSBvdmVycmlkZSB7IHNvdXJjZU11dGVkQ2hhbmdlZCgpOyB9CisgICAgdm9pZCB0cmFj
a0VuYWJsZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgb3ZlcnJpZGUgeyBzb3Vy
Y2VFbmFibGVkQ2hhbmdlZCgpOyB9CisgICAgdm9pZCB0cmFja1NldHRpbmdzQ2hhbmdlZChNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgaW5pdGlhbGl6ZUZyb21UcmFjaygpOyB9
CisgICAgdm9pZCB0cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgb3ZlcnJpZGUg
eyB9Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZWNjMzMwMTAwM2Q4OWY5
MjdjYmU3OTM0MDM4ZjA2OTc1ZTc4MDczYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KworI2luY2x1ZGUgIkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oIgorCitHU1RfREVCVUdf
Q0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBH
U1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4mJiBzb3VyY2UpCisgICAgOiBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIo
KQoreworICAgIHJlZ2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKTsKKworICAgIG1fdmlk
ZW9Db252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2aWRlb2NvbnZlcnQiLCBudWxs
cHRyKTsKKyAgICBtX2VuY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndlYnJ0Y3Zp
ZGVvZW5jb2RlciIsIG51bGxwdHIpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNU
KG1fYmluLmdldCgpKSwgbV92aWRlb0NvbnZlcnQuZ2V0KCksIG1fZW5jb2Rlci5nZXQoKSwgbnVs
bHB0cik7CisKKyAgICBhdXRvKiBwYWRUZW1wbGF0ZSA9IGdzdF9lbGVtZW50X2dldF9wYWRfdGVt
cGxhdGUobV9lbmNvZGVyLmdldCgpLCAic3JjIik7CisgICAgYXV0byBjYXBzID0gYWRvcHRHUmVm
KGdzdF9wYWRfdGVtcGxhdGVfZ2V0X2NhcHMocGFkVGVtcGxhdGUpKTsKKyAgICBtX2FsbG93ZWRD
YXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICBnc3RfY2Fwc19mb3Jl
YWNoKGNhcHMuZ2V0KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0Q2Fwc0ZvcmVhY2hGdW5jPigrW10o
R3N0Q2Fwc0ZlYXR1cmVzKiwgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGdwb2ludGVyIHVzZXJE
YXRhKSB7CisgICAgICAgIGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKj4odXNlckRhdGEpOworICAgICAgICBjb25zdCBj
aGFyKiBuYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworICAgICAgICBj
b25zdCBjaGFyKiBlbmNvZGluZ05hbWUgPSBudWxscHRyOworICAgICAgICBpZiAoZXF1YWwobmFt
ZSwgInZpZGVvL3gtdnA4IikpCisgICAgICAgICAgICBlbmNvZGluZ05hbWUgPSAiVlA4IjsKKyAg
ICAgICAgZWxzZSBpZiAoZXF1YWwobmFtZSwgInZpZGVvL3gtdnA5IikpCisgICAgICAgICAgICBl
bmNvZGluZ05hbWUgPSAiVlA5IjsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWwobmFtZSwgInZpZGVv
L3gtaDI2NCIpKQorICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIkgyNjQiOworICAgICAgICBp
ZiAoZW5jb2RpbmdOYW1lKQorICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZShz
b3VyY2UtPm1fYWxsb3dlZENhcHMuZ2V0KCksIGdzdF9zdHJ1Y3R1cmVfbmV3KCJhcHBsaWNhdGlv
bi94LXJ0cCIsICJtZWRpYSIsIEdfVFlQRV9TVFJJTkcsICJ2aWRlbyIsICJlbmNvZGluZy1uYW1l
IiwgR19UWVBFX1NUUklORywgZW5jb2RpbmdOYW1lLCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQs
IDkwMDAwLCBudWxscHRyKSk7CisgICAgfSksIHRoaXMpOworCisgICAgc2V0U291cmNlKFdURk1v
dmUoc291cmNlKSk7Cit9CisKK2Jvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVh
bWVyOjpzZXRQYXlsb2FkVHlwZShHUmVmUHRyPEdzdENhcHM+JiBjYXBzKQoreworICAgIEdTVF9E
RUJVR19PQkpFQ1QobV9iaW4uZ2V0KCksICJPdXRnb2luZyB2aWRlbyBzb3VyY2UgcGF5bG9hZCBj
YXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSk7CisgICAgYXV0byogc3RydWN0dXJl
ID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLmdldCgpLCAwKTsKKyAgICBHUmVmUHRyPEdz
dENhcHM+IGVuY29kZXJDYXBzOworICAgIGlmIChjb25zdCBjaGFyKiBlbmNvZGluZ05hbWUgPSBn
c3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiZW5jb2RpbmctbmFtZSIpKSB7Cisg
ICAgICAgIGlmIChlcXVhbChlbmNvZGluZ05hbWUsICJWUDgiKSkgeworICAgICAgICAgICAgZW5j
b2RlckNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidmlkZW8veC12
cDgiKSk7CisgICAgICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJy
dHB2cDhwYXkiLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlIGlmIChlcXVhbChlbmNvZGluZ05h
bWUsICJWUDkiKSkgeworICAgICAgICAgICAgZW5jb2RlckNhcHMgPSBhZG9wdEdSZWYoZ3N0X2Nh
cHNfbmV3X2VtcHR5X3NpbXBsZSgidmlkZW8veC12cDkiKSk7CisgICAgICAgICAgICBtX3BheWxv
YWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJydHB2cDlwYXkiLCBudWxscHRyKTsKKyAgICAg
ICAgfSBlbHNlIGlmIChlcXVhbChlbmNvZGluZ05hbWUsICJIMjY0IikpIHsKKyAgICAgICAgICAg
IGVuY29kZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVv
L3gtaDI2NCIpKTsKKyAgICAgICAgICAgIG1fcGF5bG9hZGVyID0gbWFrZUdTdHJlYW1lckVsZW1l
bnQoInJ0cGgyNjRwYXkiLCBudWxscHRyKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczov
L2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWdvb2QvLS9pc3N1
ZXMvODkzCisgICAgICAgICAgICAvLyBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVCht
X3BheWxvYWRlci5nZXQoKSksICJhZ2dyZWdhdGUtbW9kZSIsICJ6ZXJvLWxhdGVuY3kiKTsKKyAg
ICAgICAgICAgIC8vIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwgImNvbmZpZy1pbnRl
cnZhbCIsIC0xLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJVbnN1cHBvcnRlZCBvdXRnb2luZyB2aWRlbyBlbmNv
ZGluZzogJXMiLCBlbmNvZGluZ05hbWUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAg
ICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX2Jpbi5nZXQo
KSwgImVuY29kaW5nLW5hbWUgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9CisKKyAgICBpZiAoIW1fcGF5bG9hZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICAvLyBGSVhNRTogUmUtZW5hYmxlIHRoaXMuIEN1cnJlbnRseSB0cmlnZ2VycyBjYXBzIG5lZ290
aWF0aW9uIGVycm9yLgorICAgIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwgImF1dG8t
aGVhZGVyLWV4dGVuc2lvbiIsIEZBTFNFLCBudWxscHRyKTsKKworICAgIGdfb2JqZWN0X3NldCht
X2VuY29kZXIuZ2V0KCksICJmb3JtYXQiLCBlbmNvZGVyQ2Fwcy5nZXQoKSwgbnVsbHB0cik7CisK
KyAgICBpbnQgcGF5bG9hZFR5cGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1
Y3R1cmUsICJwYXlsb2FkIiwgJnBheWxvYWRUeXBlKSkKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1f
cGF5bG9hZGVyLmdldCgpLCAicHQiLCBwYXlsb2FkVHlwZSwgbnVsbHB0cik7CisKKyAgICBhdXRv
IGZpbHRlcmVkQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZnVsbChnc3Rfc3RydWN0dXJl
X2NvcHkoc3RydWN0dXJlKSwgbnVsbHB0cikpOworICAgIGdfb2JqZWN0X3NldChtX2NhcHNGaWx0
ZXIuZ2V0KCksICJjYXBzIiwgZmlsdGVyZWRDYXBzLmdldCgpLCBudWxscHRyKTsKKworICAgIGdz
dF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fcGF5bG9hZGVyLmdldCgpKTsK
KyAgICBnc3RfZWxlbWVudF9saW5rX21hbnkobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSwgbV92YWx2
ZS5nZXQoKSwgbV92aWRlb0NvbnZlcnQuZ2V0KCksIG1fcHJlRW5jb2RlclF1ZXVlLmdldCgpLAor
ICAgICAgICBtX2VuY29kZXIuZ2V0KCksIG1fcGF5bG9hZGVyLmdldCgpLCBtX3Bvc3RFbmNvZGVy
UXVldWUuZ2V0KCksIG51bGxwdHIpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yNmQ0Y2JlNjk1NDM5MDZiNzk0MDEzYWM2YzgzYzlmMWM2ZmNkOWY5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIgZmluYWwgOiBwdWJsaWMgUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4gY3JlYXRlKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJiBzb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFdURk1vdmUoc291cmNlKSkpOyB9CisKKyAg
ICB2b2lkIHNldEFwcGx5Um90YXRpb24oYm9vbCBzaG91bGRBcHBseVJvdGF0aW9uKSB7IG1fc2hv
dWxkQXBwbHlSb3RhdGlvbiA9IHNob3VsZEFwcGx5Um90YXRpb247IH0KKworICAgIGJvb2wgc2V0
UGF5bG9hZFR5cGUoR1JlZlB0cjxHc3RDYXBzPiYpIGZpbmFsOworCitwcm90ZWN0ZWQ6CisgICAg
ZXhwbGljaXQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisKKyAgICBib29sIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiB7
IGZhbHNlIH07CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ZpZGVvQ29u
dmVydDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IGE3ZjBj
MWExZGNiZmZhZDQ5OWJiOGQ0NWViYzE0MjJlZjhiYTMyZDAuLjQzNGJlYjhjZjVlZTVkNTUyNmFi
NWNjNzkyNWQ0Nzk5YzdkMDA4YjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
QEAgLTU5Niw2ICs1OTYsOSBAQCB2b2lkIEludGVybmFsczo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0
ZShQYWdlJiBwYWdlKQogICAgIHJ0Y1Byb3ZpZGVyLnNldEgyNjVTdXBwb3J0KHRydWUpOwogICAg
IHJ0Y1Byb3ZpZGVyLnNldFZQOVN1cHBvcnQodHJ1ZSwgdHJ1ZSk7CiAgICAgcnRjUHJvdmlkZXIu
Y2xlYXJGYWN0b3J5KCk7CisjZWxpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyAgICBwYWdlLnNl
dHRpbmdzKCkuc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQodHJ1ZSk7CisgICAgcGFnZS5zZXR0
aW5ncygpLnNldFBlZXJDb25uZWN0aW9uRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAgICAgcGFn
ZS5zZXRGdWxsc2NyZWVuQXV0b0hpZGVEdXJhdGlvbigwX3MpOwpAQCAtMTYwOSw2ICsxNjEyLDcg
QEAgdm9pZCBJbnRlcm5hbHM6OmFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcyhS
VENQZWVyQ29ubmVjdGlvbiYgY29ubmVjdGkKIHsKICAgICBjb25uZWN0aW9uLmFwcGx5Um90YXRp
b25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcygpOwogfQorCiB2b2lkIEludGVybmFsczo6c2V0V2Vi
UlRDSDI2NVN1cHBvcnQoYm9vbCB2YWx1ZSkKIHsKICNpZiBVU0UoTElCV0VCUlRDKQpAQCAtMTYx
Niw2ICsxNjIwLDggQEAgdm9pZCBJbnRlcm5hbHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KGJvb2wg
dmFsdWUpCiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0SDI2NVN1cHBvcnQo
dmFsdWUpOwogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLmNsZWFyRmFjdG9yeSgp
OwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNlbmRpZgogfQogCkBA
IC0xNjI2LDYgKzE2MzIsOSBAQCB2b2lkIEludGVybmFsczo6c2V0V2ViUlRDVlA5U3VwcG9ydChi
b29sIHN1cHBvcnRWUDlQcm9maWxlMCwgYm9vbCBzdXBwb3J0VlA5UHJvZgogICAgICAgICBwYWdl
LT5saWJXZWJSVENQcm92aWRlcigpLnNldFZQOVN1cHBvcnQoc3VwcG9ydFZQOVByb2ZpbGUwLCBz
dXBwb3J0VlA5UHJvZmlsZTIpOwogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLmNs
ZWFyRmFjdG9yeSgpOwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHN1cHBvcnRWUDlQ
cm9maWxlMCk7CisgICAgVU5VU0VEX1BBUkFNKHN1cHBvcnRWUDlQcm9maWxlMik7CiAjZW5kaWYK
IH0KIApAQCAtMTYzNiw2ICsxNjQ1LDggQEAgdm9pZCBJbnRlcm5hbHM6OnNldFdlYlJUQ1ZQOVZU
QlN1cHBvcnQoYm9vbCB2YWx1ZSkKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5z
ZXRWUDlWVEJTdXBwb3J0KHZhbHVlKTsKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIo
KS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
CiAjZW5kaWYKIH0KIApAQCAtMTY3Niw2ICsxNjg3LDggQEAgdm9pZCBJbnRlcm5hbHM6OnNldEVu
YWJsZVdlYlJUQ0VuY3J5cHRpb24oYm9vbCB2YWx1ZSkKICNpZiBVU0UoTElCV0VCUlRDKQogICAg
IGlmIChhdXRvKiBwYWdlID0gY29udGV4dERvY3VtZW50KCktPnBhZ2UoKSkKICAgICAgICAgcGFn
ZS0+c2V0dGluZ3MoKS5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZCh2YWx1ZSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KIApAQCAtMTY4Niw2ICsxNjk5LDgg
QEAgdm9pZCBJbnRlcm5hbHM6OnNldFVzZURUTFMxMChib29sIHVzZURUTFMxMCkKICAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQogICAgICAgICByZXR1cm47CiAgICAgZG9j
dW1lbnQtPnBhZ2UoKS0+bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRVc2VEVExTMTAodXNlRFRMUzEw
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHVzZURUTFMxMCk7CiAjZW5kaWYKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvY21ha2Uv
RmluZEdTdHJlYW1lci5jbWFrZQppbmRleCA5ZDk3YTRiNTBjYjBmOTgwZjViODQwNTdjMmJhZWU4
OTk3OTlkZjY2Li40ODYyNTU3YTk5YjM1OTJlMDAxOWU3NmIyOGFlNTUxYWNkODk0NWYyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvY21ha2UvRmluZEdTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvY21h
a2UvRmluZEdTdHJlYW1lci5jbWFrZQpAQCAtMjYsNiArMjYsOSBAQAogIyAgZ3N0cmVhbWVyLXZp
ZGVvOiAgICAgIEdTVFJFQU1FUl9WSURFT19JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9WSURF
T19MSUJSQVJJRVMKICMgIGdzdHJlYW1lci1jb2RlY3BhcnNlcjpHU1RSRUFNRVJfQ09ERUNQQVJT
RVJTX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVMKICMg
IGdzdHJlYW1lci1mdWxsOiAgICAgICBHU1RSRUFNRVJfRlVMTF9JTkNMVURFX0RJUlMgYW5kIEdT
VFJFQU1FUl9GVUxMX0xJQlJBUklFUworIyAgZ3N0cmVhbWVyLXJ0cDogICAgICAgIEdTVFJFQU1F
Ul9SVFBfSU5DTFVERV9ESVJTIGFuZCBHU1RSRUFNRVJfUlRQX0xJQlJBUklFUworIyAgZ3N0cmVh
bWVyLXNkcDogICAgICAgIEdTVFJFQU1FUl9TRFBfSU5DTFVERV9ESVJTIGFuZCBHU1RSRUFNRVJf
U0RQX0xJQlJBUklFUworIyAgZ3N0cmVhbWVyLXdlYnJ0YzogICAgIEdTVFJFQU1FUl9XRUJSVENf
SU5DTFVERV9ESVJTIGFuZCBHU1RSRUFNRVJfV0VCUlRDX0xJQlJBUklFUwogIwogIyBDb3B5cmln
aHQgKEMpIDIwMTIgUmFwaGFlbCBLdWJvIGRhIENvc3RhIDxyYWt1Y29Ad2Via2l0Lm9yZz4KICMK
QEAgLTEwNiw2ICsxMDksOSBAQCBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX1BC
VVRJTFMgZ3N0cmVhbWVyLXBidXRpbHMtMS4wIGdzdHBidXRpbHMtMS4wKQogRklORF9HU1RSRUFN
RVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9UQUcgZ3N0cmVhbWVyLXRhZy0xLjAgZ3N0dGFnLTEuMCkK
IEZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVklERU8gZ3N0cmVhbWVyLXZpZGVv
LTEuMCBnc3R2aWRlby0xLjApCiBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX0NP
REVDUEFSU0VSUyBnc3RyZWFtZXItY29kZWNwYXJzZXJzLTEuMCBnc3Rjb2RlY3BhcnNlcnMtMS4w
KQorRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9SVFAgZ3N0cmVhbWVyLXJ0cC0x
LjAgZ3N0cnRwLTEuMCkKK0ZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfU0RQIGdz
dHJlYW1lci1zZHAtMS4wIGdzdHNkcC0xLjApCitGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NU
UkVBTUVSX1dFQlJUQyBnc3RyZWFtZXItd2VicnRjLTEuMCBnc3R3ZWJydGMtMS4wKQogCiAjIC0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogIyAzLiBQcm9j
ZXNzIHRoZSBDT01QT05FTlRTIHBhc3NlZCB0byBGSU5EX1BBQ0tBR0UKQEAgLTE0OCw0ICsxNTQs
NiBAQCBtYXJrX2FzX2FkdmFuY2VkKAogICAgIEdTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfTElCUkFS
SUVTCiAgICAgR1NUUkVBTUVSX0ZVTExfSU5DTFVERV9ESVJTCiAgICAgR1NUUkVBTUVSX0ZVTExf
TElCUkFSSUVTCisgICAgR1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlMKKyAgICBHU1RSRUFN
RVJfV0VCUlRDX0xJQlJBUklFUwogKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0dTdHJlYW1l
ckNoZWNrcy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UKaW5kZXgg
NzdlOTU4NDVlOTkxM2E1OTc4ZGFkMTBjZmM0MzAwOTNiNDNjN2FhMy4uYzhkMGZhZmIyM2ZiMThm
YzU5YjkxZTBjZTA0YzE0ZWU0NTliMjQ3NiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0dTdHJl
YW1lckNoZWNrcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtl
CkBAIC0yOCw2ICsyOCwxMCBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8p
CiAgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEdTVFJFQU1FUl9DT01QT05FTlRTIGF1ZGlvIGZm
dCkKICAgICAgICAgICBlbmRpZiAoKQogCisgICAgICAgICAgaWYgKFVTRV9HU1RSRUFNRVJfV0VC
X1JUQykKKyAgICAgICAgICAgICAgbGlzdChBUFBFTkQgR1NUUkVBTUVSX0NPTVBPTkVOVFMgd2Vi
cnRjKQorICAgICAgICAgIGVuZGlmICgpCisKICAgICAgICAgICBmaW5kX3BhY2thZ2UoR1N0cmVh
bWVyIDEuMTQuMCBSRVFVSVJFRCBDT01QT05FTlRTICR7R1NUUkVBTUVSX0NPTVBPTkVOVFN9KQog
CiAgICAgICAgICAgaWYgKEVOQUJMRV9XRUJfQVVESU8pCkBAIC00OSwxMSArNTMsMjEgQEAgaWYg
KEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgICAgICAgIGlmIChVU0VfR1NU
UkVBTUVSX0dMIEFORCBOT1QgUENfR1NUUkVBTUVSX0dMX0ZPVU5EKQogICAgICAgICAgICAgICBt
ZXNzYWdlKEZBVEFMX0VSUk9SICJHU3RyZWFtZXJHTCBpcyBuZWVkZWQgZm9yIFVTRV9HU1RSRUFN
RVJfR0wuIikKICAgICAgICAgICBlbmRpZiAoKQorCisgICAgICAgICAgaWYgKFVTRV9HU1RSRUFN
RVJfV0VCUlRDIEFORCAoUENfR1NUUkVBTUVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxLjIwIiBP
UiBOT1QgUENfR1NUUkVBTUVSX1dFQlJUQ19GT1VORCkpCisgICAgICAgICAgICAgIG1lc3NhZ2Uo
RkFUQUxfRVJST1IgIkdTdHJlYW1lcldlYlJUQyA+PSAxLjIwIGlzIG5lZWRlZCBmb3IgVVNFX0dT
VFJFQU1FUl9XRUJSVEMuIikKKyAgICAgICAgICBlbmRpZiAoKQogICAgICAgZW5kaWYgKCkKIGVu
ZGlmICgpCiAKIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNIEFORCBFTkFCTEVfV0VCX1JUQykKLSAg
ICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIFRSVUUpCisgICAgaWYgKFVT
RV9HU1RSRUFNRVJfV0VCUlRDKQorICAgICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0Vf
TElCV0VCUlRDIEZBTFNFKQorCisgICAgICAgIGZpbmRfcGFja2FnZShPcGVuU1NMIFJFUVVJUkVE
KQorICAgIGVsc2UgKCkKKyAgICAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0xJQldF
QlJUQyBUUlVFKQorICAgIGVuZGlmICgpCiBlbHNlICgpCiAgICAgU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoVVNFX0xJQldFQlJUQyBGQUxTRSkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVy
RGVmaW5pdGlvbnMuY21ha2UKaW5kZXggMWYxYTIxM2MyMTAxMGQzMmFjYzE3ZmI5MWNiNTIwYzFi
ZDIzOGVhYi4uMmYzMDBhMDcwNjQ4OTFmNjc2ZWNhYzVkMmVhZmQ3Y2M4NTY4OTI5MyAxMDA2NDQK
LS0tIGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlCisrKyBiL1NvdXJj
ZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQpAQCAtMTAsMyArMTAsNCBAQCBXRUJL
SVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX0ZVTEwgIldoZXRoZXIgdG8gZW5hYmxlIHN1
cHBvcnQgZm9yIHN0YXRpYyBHUwogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9O
QVRJVkVfVklERU8gIlRvZ2dsZSBuYXRpdmUgdmlkZW8gc3VwcG9ydCBpbiBHU3RyZWFtZXIgbWVk
aWEgcGxheWVyIiBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RSRUFN
RVJfTkFUSVZFX0FVRElPICJUb2dnbGUgbmF0aXZlIGF1ZGlvIHN1cHBvcnQgaW4gR1N0cmVhbWVy
IG1lZGlhIHBsYXllciIgUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NU
UkVBTUVSX1RFWFRfU0lOSyAiVG9nZ2xlIHRleHQgc2luayBzdXBwb3J0IGluIEdTdHJlYW1lciBt
ZWRpYSBwbGF5ZXIiIFBSSVZBVEUgT04pCitXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVB
TUVSX1dFQlJUQyAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgV2ViUlRDIiBQUklWQVRF
IE9OKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVuZGVuY2llcy5jbWFr
ZSBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2UKaW5kZXggZjQyYzdl
NzA2OTc3YmYxNmM5ZjI5YmYzZGUzMDhjNWU5NjgwMjk5Ni4uMDliNmMyNWU4ZDU5MmQ1ODg0ZTg5
NDZiYTZhZjU4ZDJmZGIxNjE5ZCAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRl
cGVuZGVuY2llcy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVz
LmNtYWtlCkBAIC0xLDMgKzEsNCBAQAogV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX0dTVFJFQU1F
Ul9HTCBFTkFCTEVfVklERU8pCiBXRUJLSVRfT1BUSU9OX0RFUEVORChVU0VfR1NUUkVBTUVSX01Q
RUdUUyBFTkFCTEVfVklERU8pCiBXRUJLSVRfT1BUSU9OX0RFUEVORChVU0VfV1BFX1ZJREVPX1BM
QU5FX0RJU1BMQVlfRE1BQlVGIFVTRV9HU1RSRUFNRVJfR0wpCitXRUJLSVRfT1BUSU9OX0RFUEVO
RChVU0VfR1NUUkVBTUVSX1dFQlJUQyBFTkFCTEVfV0VCX1JUQykKZGlmZiAtLWdpdCBhL1Rvb2xz
L0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxYmNlNmRmYjFjZjJmZGMwMjIxNGNh
ZmRmM2YyZTk0Njg2YzgyZWJiLi45NjUyMmRmZGE0Y2RiOGNjNzZjMDYyM2Y1MjFhODkxMTQ5MjNl
NDlkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMTMgQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0IG9mIHRoZSBH
c3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgKiBmbGF0cGFrL2ZsYXRwYWt1dGlscy5weToKKyAgICAgICAgKFdlYmtpdEZsYXRw
YWsucnVuX2luX3NhbmRib3gpOiBBbGxvdyBsaWJuaWNlIGRlYnVnIGxvZyBlbnZpcm9ubWVudCB2
YXJpYWJsZSBpbiBydW50aW1lIHNhbmRib3guCisKIDIwMjItMDItMTIgIEtldmluIFR1cm5lciAg
PGtldmluX3R1cm5lckBhcHBsZS5jb20+CiAKICAgICAgICAgSW52b2tlIG1vdXNlIGhvdmVyIGRl
bGVnYXRlIGNhbGxiYWNrIG9uIGlPUwpkaWZmIC0tZ2l0IGEvVG9vbHMvZmxhdHBhay9mbGF0cGFr
dXRpbHMucHkgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQppbmRleCAwNzU2YjA5ZWNl
NWVmYmIxY2E3YjU5YTMyYTZiODc3NGNjYTczYTRkLi5hYjU3YjUzOTQzYmQ4ZTViNmIzMGE5YjU2
MDM1NDIwNTE0NzU4ODVkIDEwMDY0NAotLS0gYS9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5w
eQorKysgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQpAQCAtODM4LDYgKzgzOCw3IEBA
IGNsYXNzIFdlYmtpdEZsYXRwYWs6CiAgICAgICAgICAgICAiTUVTQSIsCiAgICAgICAgICAgICAi
TElCR0wiLAogICAgICAgICAgICAgIlBJUEVXSVJFIiwKKyAgICAgICAgICAgICJOSUNFIiwKICAg
ICAgICAgICAgICJSVVNUIiwKICAgICAgICAgICAgICJTQ0NBQ0hFIiwKICAgICAgICAgICAgICJT
UEEiLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDFmOGNhYWZkODdjMzI1NzhiZjM2MDA0MDQ3NGE4N2NjOTdmNmViY2MuLjI0
MjJhYTQwOTNiN2QxMzE2NzczY2FjMWZiYTk1MWY5YmRlZGIyYmMgMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBi
YWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczogRmxhZyBtb3N0IFdlYlJUQyBhcyBmYWls
aW5nLiBEdXJpbmcgdGhpcyBmaXJzdCBkZXZlbG9wbWVudAorICAgICAgICBjeWNsZSBJIGZvY3Vz
ZWQgbW9zdGx5IG9uIGZpeGluZyBjcmFzaGVzIGFuZCBvbmx5IGZpeGVkIGEgZmV3IGZhaWx1cmVz
LiBUaGUgcmVtYWluaW5nIG9uZXMKKyAgICAgICAgd2lsbCBiZSBhZHJlc3NlZCBpbiBmb2xsb3ct
dXAgcGF0Y2hlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1y
ZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlw
dGlvbi1vZmZlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIv
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKwogMjAyMi0wMi0xMiAgUm9iIEJ1aXMgIDxyYnVpc0BpZ2FsaWEuY29tPgogCiAgICAg
ICAgIFN1cHByZXNzIHN0eWxlIGludmFsaWRhdGlvbiB3aGVuIG1hdGNoaW5nIDpjaGVja2VkCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNzQ2NTQzY2Ji
OTMyYmE4ZjRkZThkYTQ4NDc4ZTMwNGVhN2Q3ODZiYS4uYmU4MDkyMTZkODRhYmVhMzhmOTg0ZGZi
MDFkMzlhMjMwZDNiYWZiMiAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9U
ZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVj
dGF0aW9ucwpAQCAtODU0LDcgKzg1NCw3IEBAIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvdmlk
ZW8tY29uY3VycmVudC1wbGF5YmFjay5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMx
ODExIG1lZGlhL3ZpZGVvLWludGVycnVwdGlvbi13aXRoLXJlc3VtZS1ub3QtYWxsb3dpbmctcGxh
eS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLW11bHRp
cGxlLWNvbmN1cnJlbnQtcGxheWJhY2suaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIz
MTgxMSBtZWRpYS93ZWJhdWRpby1iYWNrZ3JvdW5kLXBsYXliYWNrLmh0bWwgWyBGYWlsdXJlIF0K
LXdlYmtpdC5vcmcvYi8yMzE4MTEgd2VicnRjL2NvbmN1cnJlbnRWaWRlb1BsYXliYWNrMi5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxODExIHdlYmtpdC5vcmcvYi8yMzU4ODUgd2Vi
cnRjL2NvbmN1cnJlbnRWaWRlb1BsYXliYWNrMi5odG1sIFsgRmFpbHVyZSBUaW1lb3V0IF0KIHdl
YmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvbWVkaWEtc2Vzc2lvbi9jYWxsQWN0aW9uSGFuZGxlci5o
dG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL21lZGlhLXNlc3Npb24v
cGxheS1hZnRlci1zZWVrLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVk
aWEvcmVtb3RlLWNvbnRyb2wtY29tbWFuZC1pcy11c2VyLWdlc3R1cmUuaHRtbCBbIFRpbWVvdXQg
XQpAQCAtODY3LDEwICs4NjcsMTAgQEAgd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS92aWRlby1z
eXN0ZW0tc2xlZXAuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSB3ZWJhdWRp
by9hdWRpb2NvbnRleHQtc3RhdGUtaW50ZXJydXB0ZWQuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0
Lm9yZy9iLzIzMTgxMSB3ZWJhdWRpby9zdXNwZW5kLWNvbnRleHQtd2hpbGUtaW50ZXJydXB0ZWQu
aHRtbCBbIFRpbWVvdXQgXQogCisjIHJ2ZmMgcmVsYXRlZCBmYWlsdXJlcwogaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1ydmZjIFsgUGFzcyBdCiBmYXN0L21lZGlhc3RyZWFt
L2dldFVzZXJNZWRpYS1ydmZjLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogd2VicnRjL3BlZXJDb25u
ZWN0aW9uLXJ2ZmMuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL2NhbnZhcy10by1wZWVyLWNvbm5l
Y3Rpb24uaHRtbCBbIEZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92
aWRlby1ydmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2std2VicnRjLmh0dHBzLmh0bWwg
WyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdmlkZW8tcnZmYy9yZXF1
ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWJlZm9yZS14ci1zZXNzaW9uLmh0dHBzLmh0bWwgWyBT
a2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdmlkZW8tcnZmYy9yZXF1ZXN0
LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWR1cmluZy14ci1zZXNzaW9uLmh0dHBzLmh0bWwgWyBTa2lw
IF0KQEAgLTg4OCw2ICs4ODgsOTQgQEAgd2Via2l0Lm9yZy9iLzIzNDA4NCBtZWRpYS90cmFjay9h
dWRpby10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KICMgYml0cmF0ZSBlc3Rp
bWF0aW9uLgogd2Via2l0Lm9yZy9iLzIzNDA4NCBtZWRpYS90cmFjay92aWRlby10cmFjay1jb25m
aWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIAorIyBEYXRhQ2hhbm5lbCBHc3RXZWJSVEMgaW1w
bGVtZW50YXRpb24gaW5jb21wbGV0ZQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGF0YWNo
YW5uZWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0cC93cHQvd2VicnRjL3RyYW5z
ZmVyLWRhdGFjaGFubmVsLXNlcnZpY2Utd29ya2VyLmh0dHBzLmh0bWwgWyBTa2lwIF0KKworIyBU
aGUgR3N0V2ViUlRDIGJhY2tlbmQgZG9lc24ndCBzdXBwb3J0IHRyYW5zZm9ybXMgeWV0Lgord2Vi
a2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93ZWJydGMvYXVkaW92aWRlby1zY3JpcHQtdHJhbnNm
b3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0cC93cHQvd2VicnRjL3Zp
ZGVvLXNjcmlwdC10cmFuc2Zvcm0ta2V5ZnJhbWUtb25seS5odG1sIFsgU2tpcCBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy92aWRlby1zY3JpcHQtdHJhbnNmb3JtLmh0bWwg
WyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2NyaXB0LWF1ZGlvLXRyYW5zZm9ybS5odHRw
cy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3JtL3NjcmlwdC1jaGFuZ2UtdHJhbnNm
b3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2NyaXB0LW1ldGFk
YXRhLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3JtL3Nj
cmlwdC10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1lbmNvZGVkLXRyYW5zZm9ybS9z
Y3JpcHQtd3JpdGUtdHdpY2UtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KKword2Via2l0
Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWFkZEljZUNh
bmRpZGF0ZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tYWRkVHJhY2stcmV1c2Utc2VuZGVyLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi1oYXZlLWxvY2FsLW9mZmVyLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taGF2ZS1sb2NhbC1wcmFuc3dlci5o
dG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLWhhdmUtcmVtb3RlLW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLXJlbW90
ZS1wcmFuc3dlci5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWljZWNhbmRpZGF0ZS1ldmVudC5odG1sIFsgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24taW5zcGVjdC1hbnN3ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBm
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLW1lZGlhLXNldHVwLWNhbGxiYWNrcy1zaW5nbGUtZGlhbG9nLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC10
d28tZGlhbG9ncy5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXBhZ2UtY2FjaGUuaHRtbCBbIENyYXNoIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVs
eS1hc3NpZ25lZC10cmFuc2NlaXZlci1taWQuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldExvY2FsRGVzY3Jp
cHRpb24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRzU2VsZWN0b3IuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL2NoYW5nZS10cmFja3MtbWVk
aWEtc3RyZWFtLWJlaW5nLXBsYXllZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWV4dGVuc2lvbnMvUlRD
UnRwUGFyYW1ldGVycy1tYXhGcmFtZXJhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1leHRlbnNpb25z
L1JUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZS1jYXB0dXJlVGltZXN0YW1wLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJydGMtcHJpb3JpdHkvUlRDUnRwUGFyYW1ldGVycy1lbmNvZGluZ3MuaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbnNwZWN0b3IvcGFnZS9vdmVycmlkZVNldHRpbmct
SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtY2FwYWJpbGl0
aWVzL2RlY29kaW5nSW5mby53ZWJydGMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLWNhcGFiaWxpdGllcy9l
bmNvZGluZ0luZm8ud2VicnRjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL2FkZFRyYW5zY2VpdmVyLXRoZW4tYWRkVHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tbXV0ZWQtc3RhdHMuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0aW9uLWc3MjIu
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVlci1j
b25uZWN0aW9uLXdlYmF1ZGlvLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL2F1ZGlvLXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvYXVkaW8tc2FtcGxlcmF0ZS1jaGFuZ2UuaHRtbCBbIENyYXNoIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2F1ZGlvLXZpZGVvLWVsZW1lbnQtcGxheWluZy5odG1s
IFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jYW5kaWRhdGUtc3RhdHMu
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FudmFzLXRvLXBl
ZXItY29ubmVjdGlvbi5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy9jbG9uZS1hdWRpby10cmFjay5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IHdlYnJ0Yy9jbG9zaW5nLXBlZXJjb25uZWN0aW9uLmh0bWwgWyBUaW1lb3V0IF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2RpcmVjdGlvbi1jaGFuZ2UuaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGlzYWJsZS1lbmNyeXB0aW9uLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2VwaGVtZXJhbC1jZXJ0aWZp
Y2F0ZXMtYW5kLWNuYW1lcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1hZnRlci1yZWxvYWQuaHRtbCBbIFRpbWVvdXQg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvaDI2NC1wYWNrZXRpemF0aW9uLW1vZGUuaHRt
bCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvbGlid2VicnRjL3NldExv
Y2FsRGVzY3JpcHRpb25DcmFzaC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy9tdWx0aS12aWRlby5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy9uby1wb3J0LXplcm8taW4tdXBkLWNhbmRpZGF0ZXMuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLWF1ZGlvLW11dGUuaHRt
bCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9u
LWF1ZGlvLW11dGUyLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3BlZXItY29ubmVjdGlvbi1hdWRpby11bm11dGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLWNyZWF0ZU1lZGlhU3RyZWFtRGVzdGlu
YXRpb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1j
b25uZWN0aW9uLXJlbW90ZS1hdWRpby1tdXRlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0ZTIuaHRtbCBb
IFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLXRy
YWNrLWVuZC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVy
Y29ubmVjdGlvbi1wYWdlLWNhY2hlLWxvbmcuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvcGVlcmNvbm5lY3Rpb24tcGFnZS1jYWNoZS5odG1sIFsgVGltZW91dCBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZWNlaXZlci10cmFjay1zaG91bGQtc3RheS1s
aXZlLWV2ZW4taWYtcmVjZWl2ZXItaXMtaW5hY3RpdmUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcmVsZWFzZS1hZnRlci1nZXR0aW5nLXRyYWNrLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3JlbW90ZUF1ZGlvLW5ldmVyLXBs
YXllZC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZW1vdmUt
dHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdXRmOC1z
ZHAuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tYWRk
VHJhbnNjZWl2ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMv
dmlkZW8tYXV0b3BsYXkuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJy
dGMvdmlkZW8tZ2V0UGFyYW1ldGVycy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy92aWRlby1tZWRpYXN0cmVhbXRyYWNrLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW11dGUtdnA4Lmh0bWwgWyBUaW1lb3V0
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW11dGUuaHRtbCBbIFRpbWVvdXQg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVjZWl2ZXJzLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlcGxhY2UtdHJhY2stdG8t
bnVsbC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1y
ZXBsYWNlLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3ZpZGVvLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3ZpZGVvLXVubXV0ZS5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMv
dmlkZW8tdnA4LXZpZGVvcmFuZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSB3ZWJydGMvdmlkZW8uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJy
dGMvdnA4LXRoZW4taDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy92cDktc3ZjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3ZwOS5odG1sIFsgRmFpbHVyZSBdCisKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CiAjIEVuZCBvZiBHU3RyZWFtZXItcmVsYXRlZCBidWdzCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwpAQCAtMTQxMywxNCArMTUwMSwxNCBAQCB3ZWJraXQub3JnL2IvNzkyMDMgd2Vi
a2l0Lm9yZy9iLzE4NjY3OCBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1l
bgogCiBmYXN0L21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy1hZGRFdmVudExpc3RlbmVyLmh0bWwg
WyBEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgXQogCi13ZWJraXQub3JnL2IvMTkxMDA2IHdlYnJ0
Yy9zaW11bGNhc3QtaDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTkxMDA2IHdl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3NpbXVsY2FzdC1oMjY0Lmh0bWwgWyBGYWlsdXJlIFRp
bWVvdXQgXQogCiB3ZWJraXQub3JnL2IvMTkzNjQxIHdlYnJ0Yy92aWRlby1zZXREaXJlY3Rpb24u
aHRtbCBbIEZhaWx1cmUgUGFzcyBdCiAKIHdlYmtpdC5vcmcvYi8xOTQ2MTEgaHR0cC93cHQvd2Vi
cnRjL2dldFVzZXJNZWRpYS1wcm9jZXNzU3dhcHBpbmcuaHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJr
aXQub3JnL2IvMjAxMjY3IFsgUmVsZWFzZSBdIHdlYnJ0Yy92aWRlby1oMjY0Lmh0bWwgWyBUaW1l
b3V0IEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIyMjU4NSBbIERlYnVnIF0gd2VicnRjL3ZpZGVv
LWgyNjQuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMjI1ODUgd2Via2l0Lm9yZy9iLzIz
NTg4NSBbIERlYnVnIF0gd2VicnRjL3ZpZGVvLWgyNjQuaHRtbCBbIENyYXNoIEZhaWx1cmUgXQog
CiB3ZWJraXQub3JnL2IvMjEwMjcyIHdlYnJ0Yy9kYXRhY2hhbm5lbC9tdWx0aXBsZS1jb25uZWN0
aW9ucy5odG1sIFsgVGltZW91dCBQYXNzIF0KIApAQCAtMTQzMSw3ICsxNTE5LDcgQEAgd2Via2l0
Lm9yZy9iLzIxNTAwNyBbIERlYnVnIF0gd2VicnRjL2gyNjQtaGlnaC5odG1sIFsgU2xvdyBGYWls
dXJlIF0KIAogd2Via2l0Lm9yZy9iLzIxNjUzOCB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMt
c29mdHdhcmUtaDI2NC1iYXNlbGluZS5odG1sIFsgU2xvdyBGYWlsdXJlIF0KIAotd2Via2l0Lm9y
Zy9iLzIxNjc2MyB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMtc29mdHdhcmUtaDI2NC1oaWdo
Lmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMTY3NjMgd2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMtc29mdHdhcmUtaDI2NC1oaWdoLmh0
bWwgWyBDcmFzaCBGYWlsdXJlIFRpbWVvdXQgXQogCiB3ZWJraXQub3JnL2IvMjE4MjIxIHdlYnJ0
Yy92cDktcHJvZmlsZTIuaHRtbCBbIFRpbWVvdXQgRmFpbHVyZSBdCiAKQEAgLTIyMTksMTMgKzIz
MDcsMTMgQEAgd2Via2l0Lm9yZy9iLzE4NjEwMCBjc3MzL2NvbG9yLWZpbHRlcnMvY29sb3ItZmls
dGVyLWNvbG9yLXByb3BlcnR5LWxpc3QtaXRlbS5odG0KIHdlYmtpdC5vcmcvYi8xODYxMDAgZmFz
dC9oaWRwaS9maWx0ZXJzLXR1cmJ1bGVuY2UuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Vi
a2l0Lm9yZy9iLzE4NzA0NCB3ZWJhbmltYXRpb25zL29wYWNpdHktYW5pbWF0aW9uLXlpZWxkcy1j
b21wb3NpdGluZy1zcGFuLmh0bWwgWyBGYWlsdXJlIF0KIAotd2Via2l0Lm9yZy9iLzE4NzA2NCB3
ZWJydGMvZGF0YWNoYW5uZWwvbWRucy1pY2UtY2FuZGlkYXRlcy5odG1sIFsgVGltZW91dCBdCit3
ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2RhdGFjaGFubmVs
L21kbnMtaWNlLWNhbmRpZGF0ZXMuaHRtbCBbIFRpbWVvdXQgRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1hZGRUcmFjay5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQu
b3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1kaXNhYmxlZC1ibGFjay5odG1sIFsgQ3Jhc2ggXQot
d2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcmVtb3RlLW11dGUuaHRtbCBbIENyYXNo
IF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJlcGxhY2UtbXV0ZWQtdHJhY2su
aHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy92aWRlby1yZXBsYWNlLW11dGVkLXRyYWNrLmh0bWwgWyBUaW1lb3V0IEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1k
aXNhYmxlZC1ibGFjay5odG1sIFsgQ3Jhc2ggVGltZW91dCBdCit3ZWJraXQub3JnL2IvMTg3MDY0
IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlbW90ZS1tdXRlLmh0bWwgWyBDcmFz
aCBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJvdGF0aW9uLmh0
bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJvdGF0aW9u
LW5vLWN2by5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJvdGF0aW9uLW5vLWN2by5odG1sIFsgRmFpbHVyZSBDcmFz
aCBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby13aXRoLWRhdGEtY2hhbm5lbC5o
dG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWdldFN0YXRzLmh0dHBzLmh0bWwg
WyBGYWlsdXJlIFBhc3MgXQogCkBAIC0yNTIwLDcgKzI2MDgsNyBAQCBtZWRpYS92aWRlby1yZW1v
dGUtY29udHJvbC1wbGF5cGF1c2UuaHRtbCBbIFNraXAgXQogCiB3ZWJraXQub3JnL2IvMjA3MDYy
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNl
LXJlcGxheS5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAotd2Via2l0Lm9yZy9iLzIyOTM0NiB3ZWJy
dGMvbXVsdGktYXVkaW8uaHRtbCBbIFRpbWVvdXQgUGFzcyBdCit3ZWJraXQub3JnL2IvMjI5MzQ2
IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL211bHRpLWF1ZGlvLmh0bWwgWyBUaW1lb3V0IFBh
c3MgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMjk3MTUgWyBEZWJ1ZyBdIGZhc3QvbWVkaWFz
dHJlYW0vZ2V0RGlzcGxheU1lZGlhLW1heC1jb25zdHJhaW50czMuaHRtbCBbIFRpbWVvdXQgXQog
d2Via2l0Lm9yZy9iLzIyOTcxNSBbIERlYnVnIF0gZmFzdC9tZWRpYXN0cmVhbS9zY3JlZW5jYXB0
dXJlLXVzZXItZ2VzdHVyZS5odG1sIFsgVGltZW91dCBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxE
ZXNjcmlwdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzk1YTliNjE5MDA5YTc0MzJhMTI5MzZhN2M2YTgxODkwODRkMmM3Zgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDE5IEBACitUZXN0cyBSVENQZWVyQ29ubmVjdGlvbiBsb2NhbERlc2NyaXB0aW9uLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0
aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgcmVxdWVzdEZh
aWxlZDEpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdFN1Y2NlZWRlZCB3
YXMgY2FsbGVkLgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlv
bikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgcmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdEZhaWxlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5sb2Nh
bERlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNk
cCBzaG91bGQgYmUgbG9jYWwuIFdhcyB0PTAgMAorLgorUEFTUyBwYy5sb2NhbERlc2NyaXB0aW9u
LnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUg
bG9jYWwuIFdhcyB0PTAgMAorLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24tcmVtb3RlRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlk
NTNlYzVjMjE2MGQwMzI3M2MxOTgxZjhlZDlmYTE4Mzg0ZmQwNzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24tcmVtb3RlRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1Rl
c3RzIFJUQ1BlZXJDb25uZWN0aW9uIHJlbW90ZURlc2NyaXB0aW9uLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVz
Y3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDEsIHJlcXVlc3RGYWlsZWQxKTsgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHJlcXVlc3RTdWNjZWVkZWQgd2FzIGNhbGxlZC4KK1BB
U1MgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKHJlcXVl
c3RTdWNjZWVkZWQyLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgor
UEFTUyByZXF1ZXN0RmFpbGVkIHdhcyBjYWxsZWQuCitQQVNTIHBjLnJlbW90ZURlc2NyaXB0aW9u
LnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJl
IHJlbW90ZS4gV2FzIHQ9MCAwCisuCitQQVNTIHBjLnJlbW90ZURlc2NyaXB0aW9uLnR5cGUgaXMg
Im9mZmVyIgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIHJlbW90ZS4g
V2FzIHQ9MCAwCisuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZmNjNDE4MTBiOGRlMTkxZGRlZTU5YTBlYzU5YzM1MTk5MWJlN2ZiYgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwzOSBAQAorVGVzdCBSVENQZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlw
dGlvbiBjYWxsZWQgd2l0aCBhbiBSVENTZXNzaW9uRGVzY3JpcHRpb24gb2YgdHlwZSAnb2ZmZXIn
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisqKiogQ3JlYXRlIChyZW1vdGUpIG9m
ZmVyIHdpdGggYXVkaW8gKHJlbW90ZU9mZmVyMSkKKyoqKiBEb25lLCBzdGFydCB0ZXN0aW5nIHdp
dGggcmVtb3RlT2ZmZXIxCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICdzdGFibGUnCitQQVNT
IHBjLnJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGMucGVuZGluZ1JlbW90ZURlc2Ny
aXB0aW9uIGlzIG51bGwKK1BBU1MgcGMuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwK
KworUEFTUyByZW1vdGVPZmZlcjEgc2V0IGFzIHJlbW90ZSBkZXNjcmlwdGlvbgorUEFTUyBwYy5z
aWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1vdGUtb2ZmZXInCitGQUlMIHBjLnJlbW90ZURlc2Ny
aXB0aW9uIHNob3VsZCBiZSBbb2JqZWN0IE9iamVjdF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbl0uCitGQUlMIHBjLnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUg
W29iamVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgorUEFT
UyBwYy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorCitQQVNTIHJlbW90ZU9mZmVy
MSBzZXQgYXMgcmVtb3RlIGRlc2NyaXB0aW9uIChhZ2FpbikKK1BBU1MgcGMuc2lnbmFsaW5nU3Rh
dGUgaXMgJ2hhdmUtcmVtb3RlLW9mZmVyJworCisqKiogVHJ5IHNldHRpbmcgbG9jYWwgZGVzY3Jp
cHRpb25zIHdpdGggYmFkIHR5cGVzIGZvciB0aGUgY3VycmVudCBzdGF0ZQorUEFTUyBwcm9taXNl
IHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHt0eXBlOidhbnN3ZXInLCBzZHA6cmVtb3RlT2ZmZXIx
LnNkcH0pOyByZWplY3RlZCB3aXRoIE9wZXJhdGlvbkVycm9yOiBVbmFibGUgdG8gYXBwbHkgc2Vz
c2lvbiByZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcHJvbWlzZSBwYy5zZXRSZW1vdGVEZXNjcmlw
dGlvbih7dHlwZToncHJhbnN3ZXInLCBzZHA6cmVtb3RlT2ZmZXIxLnNkcH0pOyByZWplY3RlZCB3
aXRoIE9wZXJhdGlvbkVycm9yOiBVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiByZW1vdGUgZGVzY3Jp
cHRpb24KKworKioqIENyZWF0ZSAocmVtb3RlKSBvZmZlciB3aXRoIHZpZGVvIChyZW1vdGVPZmZl
cjIpCisqKiogRG9uZSwgc3RhcnQgdGVzdGluZyB3aXRoIHJlbW90ZU9mZmVyMgorUEFTUyBwYy5z
aWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1vdGUtb2ZmZXInCisKK1BBU1MgcmVtb3RlT2ZmZXIy
IHNldCBhcyByZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hh
dmUtcmVtb3RlLW9mZmVyJworRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUgW29i
amVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgorRkFJTCBw
Yy5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2Fz
IFtvYmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uXS4KK1BBU1MgcGMuY3VycmVudFJlbW90ZURl
c2NyaXB0aW9uIGlzIG51bGwKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LXN0YWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAxNjZkY2E1NjNlY2U0N2Y0OGMwNzIy
Y2MwODdhM2UyZjk2NmM0ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNTEgQEAKK1Rlc3RzIFJUQ1BlZXJDb25uZWN0aW9uIGluIHN0YWJsZSBz
dGF0ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcGMuc2lnbmFsaW5n
U3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVz
Y3JpcHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQxKTsgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldExvY2FsRGVzY3JpcHRpb24gZmFpbGVkLgorRkFJ
TCBlcnJvclJlYXNvbi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9uRXJy
b3IuIFdhcyBPcGVyYXRpb25FcnJvci4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQg
dGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24g
c2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0
YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2Ny
aXB0aW9uKS50aGVuKGZpbmlzaElmU3VjY2VlZGVkLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRMb2NhbERlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwg
ZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9y
LiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRo
cm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNo
b3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0
ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3Jp
cHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQzKTsgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwg
ZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9y
LiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRo
cm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNo
b3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0
ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3Jp
cHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQ0KTsgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwg
ZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9y
LiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRo
cm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNo
b3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0
ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlw
dGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgZmluaXNoSWZGYWlsZWQpOyBkaWQgbm90IHRo
cm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0TG9jYWxEZXNjcmlwdGlvbiBzdWNjZWVkZWQuCitQQVNT
IHBjLmxvY2FsRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVzY3Jp
cHRpb24uc2RwIHNob3VsZCBiZSBsb2NhbC4gV2FzIHQ9MCAwCisuCitGQUlMIHBjLnJlbW90ZURl
c2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5z
aWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1sb2NhbC1vZmZlciIKK0ZBSUwgcGMubG9jYWxEZXNjcmlw
dGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3Rl
RGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBj
LnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9u
KHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgZmluaXNoSWZGYWls
ZWQpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0UmVtb3RlRGVzY3JpcHRpb24g
c3VjY2VlZGVkLgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNl
cHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZl
ciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSByZW1vdGUuIFdhcyB0
PTAgMAorLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1yZW1vdGUtb2ZmZXIiCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDgwNDkzNTVmNGNiNjFmYWE5ZGNiZjlm
OGQ2NjNjMjM1M2VhYzFkMWMuLmMzMWEzYTgyNTg0MWYxZWIyMTY0MTViMTE5NzRlN2IwYjEwYjk3
ZWUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNr
ZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1
NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFi
bGUgR3N0V2ViUlRDIGJ5IGRlZmF1bHQgaWYgYSByZWNlbnQtZW5vdWdoICg+PSAxLjIwKSB2ZXJz
aW9uIGlzIGF2YWlsYWJsZS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVy
LmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2U6Cisg
ICAgICAgICogU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2U6CisKIDIwMjItMDIt
MTEgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBbQ01h
a2VdIENoZWNrIGZvciBNQVBfQUxJR05FRCBzdXBwb3J0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>451816</attachid>
            <date>2022-02-13 06:35:11 -0800</date>
            <delta_ts>2022-02-18 10:45:30 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220213063509.patch</filename>
            <type>text/plain</type>
            <size>326587</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjg5NzA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDVjOGFhZWYzNzk5ZjJmYTJmNjY5YzFm
YWZmNTU3YTc4ZmI1YzYyMDEuLmZlNWQ1N2ViODY3NmYyNDA5NmE3NDQ5ZGViZDdiZGUzY2JlODFm
NWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAyLTEyICBKZXIgTm9ibGUgIDxqZXIubm9i
bGVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBzZXR0aW5ncyB0byByZXN0cmljdCBtZWRpYSBj
b250YWluZXJzIGFuZCBjb2RlY3Mgd2hlbiBpbiBDYXB0aXZlIFBvcnRhbCBtb2RlCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cK
aW5kZXggMzAyNWJhMjg0MWVjMGY2N2E3Zjg1YWVlYmYwN2U2ZTg5OThiYWFhOC4uNmQyNjM5NmM3
YTdlNWIyMWYyNjRhMDBmNGJlZDIxOTEzMTIxNjk5YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3
NCBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBi
YWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJ
bml0aWFsIEdzdFdlYlJUQyBiYWNrZW5kLiBBIGxvdCBvZiBmZWF0dXJlcyB1bmltcGxlbWVudGVk
IHN0aWxsLCBidXQgd2Ugd2lsbCBpbmNyZW1lbnRhbGx5CisgICAgICAgIGltcHJvdmUgdGhlIGxh
eW91dCB0ZXN0IGNvdmVyYWdlIGluIGZvbGxvdy11cCBwYXRjaGVzLiBNb3N0IG5vdGFibGUgc2hv
cnQtY29taW5ncyBjdXJyZW50bHk6CisKKyAgICAgICAgLSBEYXRhQ2hhbm5lbCBzdXBwb3J0IGlz
IGluY29tcGxldGUgKGJ1ZyAyMzU4NzkpCisgICAgICAgIC0gTmV0d29yayB0cmFmZmljIG5vdCBy
b3V0ZWQgdGhyb3VnaCBOZXR3b3JrIHByb2Nlc3MgeWV0CisgICAgICAgIC0gU3RhdHMgc3VwcG9y
dCBpbmNvbXBsZXRlCisgICAgICAgIC0gRFRNRiBzdXBwb3J0IHVuaW1wbGVtZW50ZWQKKyAgICAg
ICAgLSBJQ0UgcmVzdGFydHMgbm90IHN1cHBvcnRlZCB5ZXQKKyAgICAgICAgLSBSZS1uZWdvdGlh
dGlvbiB1bmxpa2VseSB0byB3b3JrCisgICAgICAgIC0gU2ltdWxjYXN0IG5vdCBoYW5kbGVkIHll
dAorICAgICAgICAtIEJhbGFuY2VkIGJ1bmRsZSBub3Qgc3VwcG9ydGVkCisgICAgICAgIC0gUlRY
IGFuZCBGRUMgdW4tdGVzdGVkLCBidXQgc2hvdWxkbid0IGJlIGhhcmQgdG8gZml4CisKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHA6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZW5lcmF0ZUNlcnRpZmljYXRlKToKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpmcm9t
UlRDRGF0YUNoYW5uZWxJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFu
bmVsSGFuZGxlcjo6Y2hhbm5lbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRh
dGFDaGFubmVsSGFuZGxlcjo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6fkdTdHJlYW1lckRhdGFDaGFu
bmVsSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6OnNldENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6OnNlbmRTdHJpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6c2VuZFJhd0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJE
YXRhQ2hhbm5lbEhhbmRsZXI6OmNoZWNrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpyZWFkeVN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uTWVzc2FnZURhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbk1lc3NhZ2VTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbkVycm9y
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25CdWZm
ZXJlZEFtb3VudExvdyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6OnBvc3RUYXNrKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5k
OjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjppY2VU
cmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kOjpyZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFj
a2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNr
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6On5H
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ckljZVRyYW5zcG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydENoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpz
dGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZDo6Z2F0aGVyaW5nU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9p
bnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6aW5pdGlhbGl6ZVBpcGVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6On5HU3RyZWFtZXJNZWRpYUVuZHBvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRlYXJkb3duUGlwZWxpbmUpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aGFuZGxlTWVzc2FnZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpkaXNwb3NlRWxlbWVudENoYWlu
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3Vy
YXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVzdGFy
dEljZSk6CisgICAgICAgIChXZWJDb3JlOjpmZXRjaERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OmZldGNoU2lnbmFsaW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzY3JpcHRp
b25zRnJvbVdlYlJUQ0Jpbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50Ojpkb1NldExvY2FsRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6c2V0UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpTZXREZXNjcmlwdGlvbkNhbGxEYXRhOjpTZXREZXNjcmlwdGlv
bkNhbGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNl
dERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OnN0b3JlUmVtb3RlTUxpbmVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmNvbmZpZ3VyZUFuZExpbmtTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVxdWVzdFBhZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0ZU9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlQW5zd2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OmdldFN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6Om1lZGlhU3RyZWFtRnJvbVJUQ1N0cmVhbSk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRSZW1vdGVTdHJlYW0pOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVtb3ZlUmVtb3RlU3RyZWFtKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVRyYW5zY2VpdmVy
QmFja2VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRk
VHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
Y3JlYXRlU291cmNlRm9yVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6c2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRyYW5zY2VpdmVyQmFja2VuZEZyb21TZW5kZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkSWNlQ2FuZGlkYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZURhdGFDaGFu
bmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uRGF0YUNo
YW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdXNwZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlc3VtZSk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpvbk5lZ290aWF0aW9uTmVlZGVkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlQ29ubmVjdGlvbkNoYW5n
ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUdhdGhl
cmluZ0NoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpv
bkljZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNjZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uRmFpbGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNvbGxlY3RUcmFuc2Nl
aXZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVy
U3RhdHNGb3JMb2dnaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyOjpSVENT
dGF0c0xvZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpSVENTdGF0c0xvZ2dlcjo6dG9KU09OU3Ry
aW5nIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnBy
b2Nlc3NTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpv
blN0YXRzRGVsaXZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OnN0YXJ0TG9nZ2luZ1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OnN0b3BMb2dnaW5nU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6bG9nQ2hhbm5lbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpzdGF0c0xvZ0ludGVydmFsIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlv
bk5hbWUpOgorICAgICAgICAoV1RGOjpMb2dBcmd1bWVudDxXZWJDb3JlOjpSVENTdGF0c0xvZ2dl
cj46OnRvU3RyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJNZWRpYUVuZHBvaW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmlzU3RvcHBlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Ojppc05lZ290aWF0aW9uTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnBpcGVsaW5lIGNvbnN0KToKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OnJlY2VpdmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uQmFja2VuZDo6c2VuZGVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c3Vz
cGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OnJlc3RhcnRJY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpzZXRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6YmFj
a2VuZEZyb21SVFBTZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpkb1NldExvY2FsRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb1NldFJlbW90ZURlc2NyaXB0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9DcmVh
dGVPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmRvQ3JlYXRlQW5zd2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpkb1N0b3ApOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpkb0FkZEljZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZVJlY2VpdmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlRGF0YUNo
YW5uZWxIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRFeGlzdGluZ1NlbmRlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYWNr
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRk
VHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlcik6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpiYWNrZW5kRnJvbVJUUFRyYW5zY2VpdmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZXhpc3RpbmdUcmFu
c2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6Om5ld1JlbW90ZVRyYW5zY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6Y29sbGVjdFRyYW5zY2VpdmVycyk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlbW92ZVRyYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YXBwbHlSb3RhdGlv
bkZvck91dGdvaW5nVmlkZW9Tb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmlzTmVnb3Rp
YXRpb25OZWVkZWQgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2Vu
ZDo6Z2V0UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZl
ckJhY2tlbmQ6OmdldENvbnRyaWJ1dGluZ1NvdXJjZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRTeW5jaHJvbml6YXRpb25Tb3VyY2Vz
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6
Y3JlYXRlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFj
a2VuZDo6cnRjUnRwVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQu
aDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjptZWRpYVR5cGVGcm9tUmVjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9y
bUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zv
cm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6c2V0VHJh
bnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRw
UmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJhbWUpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3Jt
QmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
Ojp1cGRhdGVUcmFja1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kOjpzdGFydFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kOjpzdG9wU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQ6OnJlcGxhY2VUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnNldFBhcmFtZXRlcnMpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6Y3JlYXRlRFRNRkJhY2tlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6cnRjUnRwVHJhbnNm
b3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5k
OjpzZXRNZWRpYVN0cmVhbUlkcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJU
cmFuc2Zvcm1CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjptZWRpYVR5cGVG
cm9tU2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9y
bUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJlYW1lclJ0
cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRw
U2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6c2V0VHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6cmVx
dWVzdEtleUZyYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVSZWNlaXZlckJhY2tlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVh
dGVTZW5kZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2Vp
dmVyQmFja2VuZDo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6Y3VycmVudERpcmVjdGlvbiBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNldERpcmVjdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6Om1pZCk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnN0b3Ap
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzdG9w
cGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZDo6c2V0Q29kZWNQcmVmZXJlbmNlcyk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5z
Zm9ybUJhY2tlbmQ6OnNldElucHV0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6Y2xlYXJUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpwcm9jZXNz
VHJhbnNmb3JtZWRGcmFtZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJh
Y2tlbmQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b1JU
Q1NjdHBUcmFuc3BvcnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJh
bnNwb3J0QmFja2VuZDo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFtZXJTY3RwVHJh
bnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5n
ZWQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNj
dHBUcmFuc3BvcnRCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpmaWxsUlRDU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJUQ1JUUFN0
cmVhbVN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENDb2RlY1N0YXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZmlsbE91dGJvdW5kUlRQU3RyZWFtU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJU
Q1BlZXJDb25uZWN0aW9uU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJUQ1RyYW5zcG9y
dFN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSZXBvcnRDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpDYWxsYmFja0hvbGRlcjo6Q2FsbGJhY2tIb2xkZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OmdldFN0YXRzKToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpjcmVhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OnNldEVsZW1lbnQpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0
aWxzLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZUNvbXBvbmVudCk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZVByb3RvY29sKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
UlRDSWNlVGNwQ2FuZGlkYXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZUNhbmRp
ZGF0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENFcnJvcik6CisgICAgICAgIChXZWJD
b3JlOjp0b1dlYlJUQ0JpdFJhdGVQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpmcm9tUlRD
RW5jb2RpbmdQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmZyb21XZWJSVENCaXRSYXRl
UHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENFbmNvZGluZ1BhcmFtZXRlcnMpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9SVENSdHBTZW5kUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJD
b3JlOjplbnN1cmVEZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6
cGFyc2VJY2VDYW5kaWRhdGVTRFApOgorICAgICAgICAoV2ViQ29yZTo6eDUwOVNlcmlhbGl6ZSk6
CisgICAgICAgIChXZWJDb3JlOjpwcml2YXRlS2V5U2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNv
cmU6OmdlbmVyYXRlQ2VydGlmaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6c2RwTWVkaWFIYXNB
dHRyaWJ1dGVLZXkpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lcldlYlJUQ1V0aWxzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9SVENSdHBU
cmFuc2NlaXZlckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmcm9tUlRDUnRwVHJhbnNj
ZWl2ZXJEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9TZXNzaW9uRGVzY3JpcHRpb25U
eXBlKToKKyAgICAgICAgKFdlYkNvcmU6OmZyb21TZXNzaW9uRGVzY3JpcHRpb25UeXBlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvU2lnbmFsaW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9S
VENJY2VDb25uZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENEdGxzVHJhbnNw
b3J0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VUcmFuc3BvcnRTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OmJ1bmRsZVBvbGljeUZyb21Db25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Omlj
ZVRyYW5zcG9ydFBvbGljeUZyb21Db25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRv
UlRDRXJyb3JEZXRhaWxUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2U6
CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJH
U3RyZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJl
YW1lcjo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjp+QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1l
cik6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpoYW5k
bGVOZXdEZWludGVybGVhdmVQYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV1RGOjph
ZG9wdEdSZWYpOgorICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPik6
CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4pOgorICAgICAg
ICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4pOgorICAgICAgICAoV1RGOjpkZXJl
ZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2Vi
UlRDUlRQVHJhbnNjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ1JU
UFRyYW5zY2VpdmVyPik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5u
ZWw+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPik6Cisg
ICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4pOgorICAgICAgICAo
V1RGOjpkZXJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4pOgorICAgICAgICAoV1RGOjpy
ZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8
R3N0V2ViUlRDSUNFVHJhbnNwb3J0Pik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhcHNNZWRp
YVR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HVW5pcXVlUHRy
R1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU6OmNyZWF0ZUF1ZGlvU291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6Y3JlYXRlQ29udmVydGVy
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2Fw
dHVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyQ2FwdHVyZXI6OmNyZWF0ZVNv
dXJjZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckRUTUZTZW5kZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJEVE1GU2VuZGVyQmFja2VuZDo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6On5HU3RyZWFtZXJEVE1GU2Vu
ZGVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2Vu
ZDo6Y2FuSW5zZXJ0RFRNRik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVy
QmFja2VuZDo6cGxheVRvbmUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRl
ckJhY2tlbmQ6OnRvbmVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZT
ZW5kZXJCYWNrZW5kOjpkdXJhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJEVE1GU2VuZGVyQmFja2VuZDo6aW50ZXJUb25lR2FwIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpvblRvbmVQbGF5ZWQpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2Vu
ZC5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAod2Via2l0TWVkaWFTdHJlYW1T
cmNBZGRUcmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclZpZGVvRW5jb2Rlci5jcHA6CisgICAgICAgICh3ZWJraXRfd2VicnRjX3ZpZGVvX2Vu
Y29kZXJfY2xhc3NfaW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpSZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjp+UmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c3RvcFByb2R1Y2luZ0RhdGEp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
OjpjYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlR1N0cmVhbWVyOjpzZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
R1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1
ZGlvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdT
dHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1Nv
dXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpsb2NrVmFsdmUgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6
cmVsZWFzZVZhbHZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdT
b3VyY2VHU3RyZWFtZXI6OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmJp
bik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpk
aXNwYXRjaFNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzdGFydFByb2R1Y2luZ0RhdGEpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzdG9w
UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXI6OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3NEaWRDaGFu
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyOjpkaXNwYXRjaFNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3Jl
YXRlKToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVy
OjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzZXRQYXlsb2FkVHlwZSk6
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6On5SZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzdGFydCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0b3Ap
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
Ojpzb3VyY2VNdXRlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2lu
Z01lZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2VFbmFibGVkQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmluaXRpYWxpemVG
cm9tVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyOjpsaW5rKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6c2V0U2lua1BhZCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6c291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lcjo6YWxsb3dlZENhcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpwYWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZW5k
ZXIgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyOjpiaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2lu
Z01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRQYXlsb2FkVHlwZSk6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpz
ZXRQYXlsb2FkVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAg
KiB0ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJl
c2V0VG9Db25zaXN0ZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRX
ZWJSVENIMjY1U3VwcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFdlYlJU
Q1ZQOVN1cHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRXZWJSVENWUDlW
VEJTdXBwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0RW5hYmxlV2ViUlRD
RW5jcnlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFVzZURUTFMxMCk6
CisKIDIwMjItMDItMTMgIEFudHRpIEtvaXZpc3RvICA8YW50dGlAYXBwbGUuY29tPgogCiAgICAg
ICAgIFtDU1MgQ29udGFpbmVyIFF1ZXJpZXNdIEFkZCBzZXBhcmF0ZSBDb250YWluZXJRdWVyeSBh
bmQgRmlsdGVyZWRDb250YWluZXJRdWVyeSB0eXBlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9T
Y3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlhbWwgYi9Tb3VyY2UvV1RGL1Njcmlw
dHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFtbAppbmRleCA0YWE2N2EzMTI5ODA0ZGE5
ZmY4ZTZhNDQ5NDU5NmM0NjYxZmY5ZTE2Li5iNjZjNzQwZTgwNzJjYzU5YzViYTI3YzVlZTQzMzY0
MTZmOWYxY2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXMueWFtbAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXMueWFtbApAQCAtMTcyMiw3ICsxNzIyLDkgQEAgUGVlckNvbm5lY3Rpb25FbmFi
bGVkOgogICAgIFdlYktpdExlZ2FjeToKICAgICAgIGRlZmF1bHQ6IHRydWUKICAgICBXZWJLaXQ6
Ci0gICAgICBkZWZhdWx0OiBXZWJDb3JlOjpMaWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxh
YmxlKCkKKyAgICAgICJVU0UoTElCV0VCUlRDKSI6IFdlYkNvcmU6OkxpYldlYlJUQ1Byb3ZpZGVy
Ojp3ZWJSVENBdmFpbGFibGUoKQorICAgICAgIlVTRShHU1RSRUFNRVJfV0VCUlRDKSI6IHRydWUK
KyAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgV2ViQ29yZToKICAgICAgIGRlZmF1bHQ6IHRydWUK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVu
Y2VzRXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRleCA0Nzc1MGVjZjkwZTg3OTU2MjM4YWEw
ZGI3NmJjMDA0NGUzZDM2NzQwLi4yODYzYmI4OGNkMDVlNGM3YmM4MGJjNzdhYmQ0ODk4ZGVjYzNh
N2FhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVy
ZW5jZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5j
ZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApAQCAtMTY3Myw5ICsxNjczLDExIEBA
IFdlYlJUQ0VuY29kZWRUcmFuc2Zvcm1FbmFibGVkOgogICAgIFdlYktpdExlZ2FjeToKICAgICAg
IGRlZmF1bHQ6IGZhbHNlCiAgICAgV2ViS2l0OgotICAgICAgZGVmYXVsdDogdHJ1ZQorICAgICAg
IlVTRShMSUJXRUJSVEMpIjogdHJ1ZQorICAgICAgZGVmYXVsdDogZmFsc2UKICAgICBXZWJDb3Jl
OgotICAgICAgZGVmYXVsdDogdHJ1ZQorICAgICAgIlVTRShMSUJXRUJSVEMpIjogdHJ1ZQorICAg
ICAgZGVmYXVsdDogZmFsc2UKIAogIyBGSVhNRTogSXMgdGhpcyBpbXBsZW1lbnRlZCBmb3IgV2Vi
S2l0TGVnYWN5PyBJZiBub3QsIHRoaXMgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gV2ViS2l0TGVn
YWN5IGVudGlyZWx5LgogV2ViUlRDSDI2NExvd0xhdGVuY3lFbmNvZGVyRW5hYmxlZDoKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9n
bGliL0dSZWZQdHIuY3BwCmluZGV4IDFiOWFkZTNmOTM2ZWU1NjRkMzgyYzA3ZWY5NjY1NzZhYjY2
MTliNDEuLjkzMTJhM2U4OTRiZDhhMGQ3YTExYTZhNDVjY2JkMzY4NzNmOGM1MGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAKKysrIGIvU291cmNlL1dURi93dGYv
Z2xpYi9HUmVmUHRyLmNwcApAQCAtMjIzLDYgKzIyMywyMiBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cihHVXJpKiBwdHIpCiB9CiAjZW5kaWYKIAordGVtcGxhdGUgPD4KK0dBcnJheSogcmVm
R1B0cihHQXJyYXkqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX2FycmF5X3JlZihw
dHIpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgZGVyZWZHUHRy
KEdBcnJheSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdfYXJyYXlfdW5yZWYocHRy
KTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoR0xJQikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oIGIvU291cmNlL1dURi93dGYvZ2xp
Yi9HUmVmUHRyLmgKaW5kZXggZTcyMWZkNTVmNDJhYzNkNzZiNDAxNzYwZTBhMTliOTlmZTNlMGY4
Yi4uNjY3MzYwNzg3YWM1ZjY0OTYwYmUxZDU0NjJkZGU1OWQ3MzU1ZjZhMyAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9H
UmVmUHRyLmgKQEAgLTI1MCw2ICsyNTAsOCBAQCB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZB
VEUgR0RhdGVUaW1lKiByZWZHUHRyKEdEYXRlVGltZSogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9F
WFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHRGF0ZVRpbWUqIHB0cik7CiB0ZW1wbGF0ZSA8
PiBXVEZfRVhQT1JUX1BSSVZBVEUgR0RCdXNOb2RlSW5mbyogcmVmR1B0cihHREJ1c05vZGVJbmZv
KiBwdHIpOwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdE
QnVzTm9kZUluZm8qIHB0cik7Cit0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgR0FycmF5
KiByZWZHUHRyKEdBcnJheSopOwordGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQg
ZGVyZWZHUHRyKEdBcnJheSopOwogCiAjaWYgSEFWRShHVVJJKQogdGVtcGxhdGUgPD4gV1RGX0VY
UE9SVF9QUklWQVRFIEdVcmkqIHJlZkdQdHIoR1VyaSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVz
LmNwcAppbmRleCBkZmI5YmRhYzU2NmI3OTY1YmFhY2ZlMGNmZWU3MDYxNDM4YjE5NWIyLi44Yzc0
NGZjZDEzNzcwMDZmYmI5MDc2NmViYjNiYzRjODRlOGRjY2JlIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJp
bGl0aWVzLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyB2b2lkIGdhdGhlckRlY29kaW5n
SW5mbyhEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uJiYKICAg
ICBjb25maWd1cmF0aW9uLmNhbkV4cG9zZVZQOSA9IGRvY3VtZW50LnNldHRpbmdzKCkudnA5RGVj
b2RlckVuYWJsZWQoKTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFdFQl9SVEMpCisjaWYgRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGNvbmZpZ3VyYXRpb24udHlwZSA9
PSBNZWRpYURlY29kaW5nVHlwZTo6V2ViUlRDKSB7CiAgICAgICAgIGlmIChhdXRvKiBwYWdlID0g
ZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5j
cmVhdGVEZWNvZGluZ0NvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0aW9uKSwgV1RGTW92
ZShkZWNvZGluZ0NhbGxiYWNrKSk7CkBAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGljIHZvaWQgZ2F0
aGVyRW5jb2RpbmdJbmZvKERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFFbmNvZGluZ0NvbmZpZ3Vy
YXRpb24mJgogICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlc3VsdCkpOwogICAgIH07CiAKLSNp
ZiBFTkFCTEUoV0VCX1JUQykKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKExJQldFQlJUQykK
ICAgICBpZiAoY29uZmlndXJhdGlvbi50eXBlID09IE1lZGlhRW5jb2RpbmdUeXBlOjpXZWJSVEMp
IHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCkpCiAgICAgICAgICAg
ICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLmNyZWF0ZUVuY29kaW5nQ29uZmlndXJhdGlvbihX
VEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBXVEZNb3ZlKGVuY29kaW5nQ2FsbGJhY2spKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcApp
bmRleCA1MDZmMzM3NGI3ZTZkNzZkNTk4ZjQ5NTNkODQ5YzM4ZWFhYzcyN2U5Li43YjliNWI2NmRh
NTE1MzI0ZTY2NmNmNGIxYmEzZjVjZDJmYWUwYmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwCkBAIC00MCw2ICs0MCw3IEBA
CiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgog
I2luY2x1ZGUgIkpTTWVkaWFEZXZpY2VJbmZvLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2lu
Y2x1ZGUgIk1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5oIgogI2luY2x1ZGUgIlJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0
aW9uQmFja2VuZC5jcHAKaW5kZXggODZkNzU3Mzk5MmY0ZDViZDRjMzUzZGNiNjA5NzI2NGU5ODVk
NTdlOC4uMGU3MDFiZmQ0N2U5Mjg0YmExNzgxNjQxZDkyMjdhM2FmODU5ZDU3NiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tl
bmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5l
Y3Rpb25CYWNrZW5kLmNwcApAQCAtNTMsOSArNTMsMTQgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1i
ZXJzLmg+CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJHU3RyZWFtZXJX
ZWJSVENVdGlscy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmICFVU0Uo
TElCV0VCUlRDKQorI2lmICFVU0UoTElCV0VCUlRDKSAmJiAhVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisKIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UGVlckNvbm5lY3Rpb25CYWNrZW5kPiBjcmVhdGVO
b1BlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYpCiB7CiAgICAgcmV0dXJu
IG51bGxwdHI7CkBAIC00MzcsMTMgKzQ0MiwxOSBAQCB2b2lkIFBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IENlcnRpZgog
ICAgICAgICBwcm9taXNlLnJlamVjdChJbnZhbGlkU3RhdGVFcnJvcik7CiAgICAgICAgIHJldHVy
bjsKICAgICB9CisKICAgICBMaWJXZWJSVENDZXJ0aWZpY2F0ZUdlbmVyYXRvcjo6Z2VuZXJhdGVD
ZXJ0aWZpY2F0ZShkb2N1bWVudC5zZWN1cml0eU9yaWdpbigpLCBwYWdlLT5saWJXZWJSVENQcm92
aWRlcigpLCBpbmZvLCBbcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldKGF1dG8mJiByZXN1bHQp
IG11dGFibGUgewogICAgICAgICBwcm9taXNlLnNldHRsZShXVEZNb3ZlKHJlc3VsdCkpOwogICAg
IH0pOworI2VsaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisgICAgYXV0byBjZXJ0aWZpY2F0ZSA9
IDo6V2ViQ29yZTo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZShkb2N1bWVudC5zZWN1cml0eU9yaWdpbigp
LCBpbmZvKTsKKyAgICBpZiAoY2VydGlmaWNhdGUuaGFzX3ZhbHVlKCkpCisgICAgICAgIHByb21p
c2UucmVzb2x2ZSgqY2VydGlmaWNhdGUpOworICAgIGVsc2UKKyAgICAgICAgcHJvbWlzZS5yZWpl
Y3QoTm90U3VwcG9ydGVkRXJyb3IpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQp
OwotICAgIFVOVVNFRF9QQVJBTShleHBpcmVzKTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7Cisg
ICAgVU5VU0VEX1BBUkFNKGluZm8pOwogICAgIHByb21pc2UucmVqZWN0KE5vdFN1cHBvcnRlZEVy
cm9yKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRleCA1YmRkZmVjN2U0ZGZjOWQ5YzAy
OTljOWUyN2NhOWRjMjJkZjY0MTA0Li45MGRlNjM5OTM0ZWQ2MWM1YzBiMTAxMmMwYWE1Mzk3ZGQw
ZDhiMzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcApAQCAtOTUsNyArOTUsNyBAQCBFeGNlcHRpb25PcjxS
ZWY8UlRDUGVlckNvbm5lY3Rpb24+PiBSVENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKERvY3VtZW50
JiBkb2N1bWVudAogICAgIGlmICghcGVlckNvbm5lY3Rpb24tPmlzQ2xvc2VkKCkpIHsKICAgICAg
ICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCkpIHsKICAgICAgICAgICAgIHBlZXJD
b25uZWN0aW9uLT5yZWdpc3RlclRvQ29udHJvbGxlcihwYWdlLT5ydGNDb250cm9sbGVyKCkpOwot
I2lmICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisjaWYgVVNFKExJQldF
QlJUQykgJiYgKCFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVEKQogICAgICAg
ICAgICAgaWYgKCFwYWdlLT5zZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQogICAgICAgICAgICAg
ICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0TG9nZ2luZ0xldmVsKExvZ1dlYlJUQy5s
ZXZlbCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMzMzVjY2FlMWIxMzMzZjg0NjkwZjVjYjlkMmE4ZmI3
YWQ5MjIyM2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwCkBAIC0wLDAg
KzEsMzAxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgiCisKKyNpZiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsLmgiCisj
aW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxFdmVudC5oIgorI2luY2x1ZGUgIlJUQ0Vycm9yLmgiCisj
aW5jbHVkZSAiUlRDUHJpb3JpdHlUeXBlLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVi
dWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1
ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBHU3Ry
ZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmZyb21SVENEYXRhQ2hhbm5lbEluaXQoY29uc3QgUlRD
RGF0YUNoYW5uZWxJbml0JiBvcHRpb25zKQoreworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJl
PiBpbml0KGdzdF9zdHJ1Y3R1cmVfbmV3KCJvcHRpb25zIiwgInByb3RvY29sIiwgR19UWVBFX1NU
UklORywgb3B0aW9ucy5wcm90b2NvbC51dGY4KCkuZGF0YSgpLCBudWxscHRyKSk7CisKKyAgICBp
ZiAob3B0aW9ucy5vcmRlcmVkKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgp
LCAib3JkZXJlZCIsIEdfVFlQRV9CT09MRUFOLCAqb3B0aW9ucy5vcmRlcmVkLCBudWxscHRyKTsK
KyAgICBpZiAob3B0aW9ucy5tYXhQYWNrZXRMaWZlVGltZSkKKyAgICAgICAgZ3N0X3N0cnVjdHVy
ZV9zZXQoaW5pdC5nZXQoKSwgIm1heC1wYWNrZXQtbGlmZXRpbWUiLCBHX1RZUEVfSU5ULCAqb3B0
aW9ucy5tYXhQYWNrZXRMaWZlVGltZSwgbnVsbHB0cik7CisgICAgaWYgKG9wdGlvbnMubWF4UmV0
cmFuc21pdHMpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJtYXgtcmV0
cmFuc21pdHMiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5tYXhSZXRyYW5zbWl0cywgbnVsbHB0cik7
CisgICAgaWYgKG9wdGlvbnMubmVnb3RpYXRlZCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQo
aW5pdC5nZXQoKSwgIm5lZ290aWF0ZWQiLCBHX1RZUEVfQk9PTEVBTiwgKm9wdGlvbnMubmVnb3Rp
YXRlZCwgbnVsbHB0cik7CisgICAgaWYgKG9wdGlvbnMuaWQpCisgICAgICAgIGdzdF9zdHJ1Y3R1
cmVfc2V0KGluaXQuZ2V0KCksICJpZCIsIEdfVFlQRV9JTlQsICpvcHRpb25zLmlkLCBudWxscHRy
KTsKKworICAgIEdzdFdlYlJUQ1ByaW9yaXR5VHlwZSBwcmlvcml0eVR5cGU7CisgICAgc3dpdGNo
IChvcHRpb25zLnByaW9yaXR5KSB7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OlZlcnlMb3c6
CisgICAgICAgIHByaW9yaXR5VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9WRVJZX0xP
VzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OkxvdzoKKyAgICAg
ICAgcHJpb3JpdHlUeXBlID0gR1NUX1dFQlJUQ19QUklPUklUWV9UWVBFX0xPVzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6Ok1lZGl1bToKKyAgICAgICAgcHJpb3Jp
dHlUeXBlID0gR1NUX1dFQlJUQ19QUklPUklUWV9UWVBFX01FRElVTTsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OkhpZ2g6CisgICAgICAgIHByaW9yaXR5VHlwZSA9
IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9ISUdIOworICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgInByaW9yaXR5IiwgR1NUX1RZUEVfV0VC
UlRDX1BSSU9SSVRZX1RZUEUsIHByaW9yaXR5VHlwZSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4g
aW5pdDsKK30KKworUmVmPFJUQ0RhdGFDaGFubmVsRXZlbnQ+IEdTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlcjo6Y2hhbm5lbEV2ZW50KERvY3VtZW50JiBkb2N1bWVudCwgR1JlZlB0cjxHc3RXZWJS
VENEYXRhQ2hhbm5lbD4mJiBkYXRhQ2hhbm5lbCkKK3sKKyAgICBHVW5pcXVlT3V0UHRyPGNoYXI+
IGxhYmVsOworICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gcHJvdG9jb2w7CisgICAgZ2Jvb2xlYW4g
b3JkZXJlZCwgbmVnb3RpYXRlZDsKKyAgICBnaW50IG1heFBhY2tldExpZmVUaW1lLCBtYXhSZXRy
YW5zbWl0cywgaWQ7CisgICAgZ19vYmplY3RfZ2V0KGRhdGFDaGFubmVsLmdldCgpLCAib3JkZXJl
ZCIsICZvcmRlcmVkLCAibGFiZWwiLCAmbGFiZWwub3V0UHRyKCksCisgICAgICAgICJtYXgtcGFj
a2V0LWxpZmV0aW1lIiwgJm1heFBhY2tldExpZmVUaW1lLCAibWF4LXJldHJhbnNtaXRzIiwgJm1h
eFJldHJhbnNtaXRzLAorICAgICAgICAicHJvdG9jb2wiLCAmcHJvdG9jb2wub3V0UHRyKCksICJu
ZWdvdGlhdGVkIiwgJm5lZ290aWF0ZWQsICJpZCIsICZpZCwgbnVsbHB0cik7CisKKyAgICBSVENE
YXRhQ2hhbm5lbEluaXQgaW5pdDsKKyAgICBpbml0Lm9yZGVyZWQgPSBvcmRlcmVkOworICAgIGlu
aXQubWF4UGFja2V0TGlmZVRpbWUgPSBtYXhQYWNrZXRMaWZlVGltZTsKKyAgICBpbml0Lm1heFJl
dHJhbnNtaXRzID0gbWF4UmV0cmFuc21pdHM7CisgICAgaW5pdC5wcm90b2NvbCA9IFN0cmluZyhw
cm90b2NvbC5nZXQoKSk7CisgICAgaW5pdC5uZWdvdGlhdGVkID0gbmVnb3RpYXRlZDsKKyAgICBp
bml0LmlkID0gaWQ7CisKKyAgICBhdXRvIGhhbmRsZXIgPSBXVEY6Om1ha2VVbmlxdWU8R1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyPihXVEZNb3ZlKGRhdGFDaGFubmVsKSk7CisgICAgYXV0byBj
aGFubmVsID0gUlRDRGF0YUNoYW5uZWw6OmNyZWF0ZShkb2N1bWVudCwgV1RGTW92ZShoYW5kbGVy
KSwgU3RyaW5nKGxhYmVsLmdldCgpKSwgV1RGTW92ZShpbml0KSk7CisgICAgcmV0dXJuIFJUQ0Rh
dGFDaGFubmVsRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGF0YWNoYW5uZWxFdmVudCwgRXZl
bnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vLCBXVEZNb3ZlKGNoYW5u
ZWwpKTsKK30KKworR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpHU3RyZWFtZXJEYXRhQ2hh
bm5lbEhhbmRsZXIoR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4mJiBjaGFubmVsKQorICAg
IDogbV9jaGFubmVsKFdURk1vdmUoY2hhbm5lbCkpCit7CisgICAgQVNTRVJUKG1fY2hhbm5lbCk7
CisKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAibm90aWZ5
OjpyZWFkeS1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxl
ciogaGFuZGxlcikgeworICAgICAgICBoYW5kbGVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAg
IH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgp
LCAib24tbWVzc2FnZS1kYXRhIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRGF0YUNoYW5uZWxI
YW5kbGVyKiBoYW5kbGVyLCBHQnl0ZXMqIGJ5dGVzKSB7CisgICAgICAgIGhhbmRsZXItPm9uTWVz
c2FnZURhdGEoYnl0ZXMpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tbWVzc2FnZS1zdHJpbmciLCBHX0NBTExCQUNLKCtb
XShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIsIGNoYXIqIG1lc3NhZ2UpIHsK
KyAgICAgICAgaGFuZGxlci0+b25NZXNzYWdlU3RyaW5nKG1lc3NhZ2UpOworICAgIH0pLCB0aGlz
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tZXJy
b3IiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIs
IEdFcnJvciogZXJyb3IpIHsKKyAgICAgICAgaGFuZGxlci0+b25FcnJvcihlcnJvcik7CisgICAg
fSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NoYW5uZWwuZ2V0KCks
ICJvbi1idWZmZXJlZC1hbW91bnQtbG93IiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRGF0YUNo
YW5uZWxIYW5kbGVyKiBoYW5kbGVyKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcGFz
cyB0aGUgYW1vdW50IGRlbHRhIGZyb20gd2VicnRjYmluIHRvIHRoZSBXZWJDb3JlIGhhbmRsZXIu
CisgICAgICAgIGhhbmRsZXItPm9uQnVmZmVyZWRBbW91bnRMb3coKTsKKyAgICB9KSwgdGhpcyk7
Cit9CisKK0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6fkdTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlcigpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1f
Y2hhbm5lbC5nZXQoKSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyOjpzZXRDbGllbnQoUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50JiBjbGllbnQsIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyIGNvbnRleHRJZGVudGlmaWVyKQoreworICAgIExv
Y2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKyAgICBBU1NFUlQoIW1faGFzQ2xpZW50KTsK
KyAgICBtX2hhc0NsaWVudCA9IHRydWU7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9j
bGllbnQgPSAmY2xpZW50OworICAgIG1fY29udGV4dElkZW50aWZpZXIgPSBjb250ZXh0SWRlbnRp
ZmllcjsKKworICAgIGZvciAoYXV0byYgbWVzc2FnZSA6IG1fYnVmZmVyZWRNZXNzYWdlcykgewor
ICAgICAgICBzd2l0Y2hPbihtZXNzYWdlLCBbJl0oUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+
JiBkYXRhKSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIk5vdGlmeWluZyBxdWV1ZWQgcmF3IGRh
dGEgKHNpemU6ICV6dSkiLCBkYXRhLT5zaXplKCkpOworICAgICAgICAgICAgY2xpZW50LmRpZFJl
Y2VpdmVSYXdEYXRhKGRhdGEtPm1ha2VDb250aWd1b3VzKCktPmRhdGEoKSwgZGF0YS0+c2l6ZSgp
KTsKKyAgICAgICAgfSwgWyZdKFN0cmluZyYgdGV4dCkgeworICAgICAgICAgICAgR1NUX0RFQlVH
KCJOb3RpZnlpbmcgcXVldWVkIHN0cmluZyAlcyIsIHRleHQuYXNjaWkoKS5kYXRhKCkpOworICAg
ICAgICAgICAgY2xpZW50LmRpZFJlY2VpdmVTdHJpbmdEYXRhKHRleHQpOworICAgICAgICB9LCBb
Jl0oU3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2UpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZUNoYW5n
ZS5lcnJvcikgeworICAgICAgICAgICAgICAgIGlmIChhdXRvIHJ0Y0Vycm9yID0gdG9SVENFcnJv
cigqc3RhdGVDaGFuZ2UuZXJyb3IpKQorICAgICAgICAgICAgICAgICAgICBjbGllbnQuZGlkRGV0
ZWN0RXJyb3IocnRjRXJyb3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBHU1RfREVCVUcoIkRpc3BhdGNoaW5nIHN0YXRlIGNoYW5nZSB0byAlZCIsIHN0YXRp
Y19jYXN0PGludD4oc3RhdGVDaGFuZ2Uuc3RhdGUpKTsKKyAgICAgICAgICAgIGNsaWVudC5kaWRD
aGFuZ2VSZWFkeVN0YXRlKHN0YXRlQ2hhbmdlLnN0YXRlKTsKKyAgICAgICAgfSk7CisgICAgfQor
ICAgIG1fYnVmZmVyZWRNZXNzYWdlcy5jbGVhcigpOworfQorCitib29sIEdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6c2VuZFN0cmluZ0RhdGEoY29uc3QgQ1N0cmluZyYgdGV4dCkKK3sKKyAg
ICBHU1RfREVCVUcoIlNlbmRpbmcgc3RyaW5nICVzIiwgdGV4dC5kYXRhKCkpOworICAgIGdfc2ln
bmFsX2VtaXRfYnlfbmFtZShtX2NoYW5uZWwuZ2V0KCksICJzZW5kLXN0cmluZyIsIHRleHQuZGF0
YSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6OnNlbmRSYXdEYXRhKGNvbnN0IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7
CisgICAgYXV0byBieXRlcyA9IGFkb3B0R1JlZihnX2J5dGVzX25ldyhkYXRhLCBsZW5ndGgpKTsK
KyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9jaGFubmVsLmdldCgpLCAic2VuZC1kYXRhIiwg
Ynl0ZXMuZ2V0KCkpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6Y2xvc2UoKQoreworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2No
YW5uZWwuZ2V0KCksICJjbG9zZSIpOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcjo6Y2hlY2tTdGF0ZSgpCit7CisgICAgQVNTRVJUKG1fY2xpZW50TG9jay5pc0hlbGQoKSk7
CisKKyAgICBHc3RXZWJSVENEYXRhQ2hhbm5lbFN0YXRlIGNoYW5uZWxTdGF0ZTsKKyAgICBnX29i
amVjdF9nZXQobV9jaGFubmVsLmdldCgpLCAicmVhZHktc3RhdGUiLCAmY2hhbm5lbFN0YXRlLCBu
dWxscHRyKTsKKworICAgIFJUQ0RhdGFDaGFubmVsU3RhdGUgc3RhdGU7CisgICAgc3dpdGNoIChj
aGFubmVsU3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfREFUQV9DSEFOTkVMX1NUQVRFX05F
VzoKKyAgICBjYXNlIEdTVF9XRUJSVENfREFUQV9DSEFOTkVMX1NUQVRFX0NPTk5FQ1RJTkc6Cisg
ICAgICAgIHN0YXRlID0gUlRDRGF0YUNoYW5uZWxTdGF0ZTo6Q29ubmVjdGluZzsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9PUEVOOgorICAg
ICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3RhdGU6Ok9wZW47CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRBX0NIQU5ORUxfU1RBVEVfQ0xPU0lORzoKKyAgICAgICAg
c3RhdGUgPSBSVENEYXRhQ2hhbm5lbFN0YXRlOjpDbG9zaW5nOworICAgICAgICBicmVhazsKKyAg
ICBjYXNlIEdTVF9XRUJSVENfREFUQV9DSEFOTkVMX1NUQVRFX0NMT1NFRDoKKyAgICAgICAgc3Rh
dGUgPSBSVENEYXRhQ2hhbm5lbFN0YXRlOjpDbG9zZWQ7CisgICAgICAgIGJyZWFrOworICAgIH0K
KworICAgIGlmICghbV9oYXNDbGllbnQpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJObyBjbGllbnQg
eWV0LCBxdWV1ZWluZyBzdGF0ZSIpOworICAgICAgICBtX2J1ZmZlcmVkTWVzc2FnZXMuYXBwZW5k
KFN0YXRlQ2hhbmdlIHsgc3RhdGUsIHsgfSB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVRygiRGlz
cGF0Y2hpbmcgc3RhdGUgY2hhbmdlIHRvICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0ZSkpOwor
ICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudCwgc3RhdGVdIHsKKyAgICAgICAgY2xpZW50
LT5kaWRDaGFuZ2VSZWFkeVN0YXRlKHN0YXRlKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFt
ZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnJlYWR5U3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBMb2NrZXIg
bG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisgICAgY2hlY2tTdGF0ZSgpOworfQorCit2b2lkIEdT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlRGF0YShHQnl0ZXMqIGJ5dGVzKQor
eworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKworICAgIGlmICghbV9oYXND
bGllbnQpIHsKKyAgICAgICAgbV9idWZmZXJlZE1lc3NhZ2VzLmFwcGVuZChTaGFyZWRCdWZmZXI6
OmNyZWF0ZShieXRlcykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2Ns
aWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgZ3NpemUgc2l6ZSA9IDA7CisgICAgY29uc3Qg
YXV0byogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGdfYnl0ZXNfZ2V0
X2RhdGEoYnl0ZXMsICZzaXplKSk7CisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50LCBk
YXRhLCBzaXplXSB7CisgICAgICAgIGNsaWVudC0+ZGlkUmVjZWl2ZVJhd0RhdGEoZGF0YSwgc2l6
ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbk1l
c3NhZ2VTdHJpbmcoY2hhciogc3RyaW5nKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVu
dExvY2sgfTsKKworICAgIEdTVF9ERUJVRygiSW5jb21pbmcgc3RyaW5nOiAlcyIsIHN0cmluZyk7
CisgICAgQ1N0cmluZyBidWZmZXIoc3RyaW5nLCBzdHJsZW4oc3RyaW5nKSk7CisgICAgaWYgKCFt
X2hhc0NsaWVudCkgeworICAgICAgICBHU1RfREVCVUcoIk5vIGNsaWVudCB5ZXQsIGtlZXBpbmcg
YXMgYnVmZmVyZWQgbWVzc2FnZSIpOworICAgICAgICBtX2J1ZmZlcmVkTWVzc2FnZXMuYXBwZW5k
KFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoIkRpc3Bh
dGNoaW5nIHBheWxvYWQiKTsKKyAgICBwb3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnQsIGJ1ZmZl
ciA9IFdURk1vdmUoYnVmZmVyKV0geworICAgICAgICBjbGllbnQtPmRpZFJlY2VpdmVTdHJpbmdE
YXRhKFN0cmluZzo6ZnJvbVVURjgoYnVmZmVyKSk7CisgICAgICAgIEdTVF9ERUJVRygiRG9uZSIp
OworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25FcnJv
cihHRXJyb3IqIGVycm9yKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsK
KyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfV0FSTklORygi
R290IGRhdGEtY2hhbm5lbCBlcnJvciAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICBwb3N0VGFz
ayhbY2xpZW50ID0gbV9jbGllbnQsIGVycm9yXSB7CisgICAgICAgIGlmICghY2xpZW50IHx8ICFl
cnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHJ0Y0Vycm9yID0gdG9S
VENFcnJvcihlcnJvcik7CisgICAgICAgIGlmICghcnRjRXJyb3IpCisgICAgICAgICAgICBydGNF
cnJvciA9IFJUQ0Vycm9yOjpjcmVhdGUoUlRDRXJyb3I6OkluaXQgeyBSVENFcnJvckRldGFpbFR5
cGU6OkRhdGFDaGFubmVsRmFpbHVyZSwgeyB9LCB7IH0sIHsgfSwgeyB9IH0sIHsgfSk7CisgICAg
ICAgIGNsaWVudC0+ZGlkRGV0ZWN0RXJyb3IocnRjRXJyb3IucmVsZWFzZU5vbk51bGwoKSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbkJ1ZmZlcmVk
QW1vdW50TG93KCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisgICAg
aWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcG9zdFRhc2soW2NsaWVudCA9
IG1fY2xpZW50XSB7CisgICAgICAgIC8vIEZJWE1FOiBQYXNzIGFtb3VudCB0byBoYW5kbGVyIGlu
c3RlYWQgb2YgMC4KKyAgICAgICAgY2xpZW50LT5idWZmZXJlZEFtb3VudElzRGVjcmVhc2luZygw
KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnBvc3RU
YXNrKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV9jbGllbnRM
b2NrLmlzSGVsZCgpKTsKKworICAgIGlmICghbV9jb250ZXh0SWRlbnRpZmllcikgeworICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpwb3N0VGFza1RvKG1fY29udGV4dElk
ZW50aWZpZXIsIFdURk1vdmUoZnVuY3Rpb24pKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjczMGEwMjY0NDkzZTI3
ZmMwYTQ2N2I3ZjZjYThiYWM3MGM4OTQwNjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXIuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5l
bFN0YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvQ29u
ZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgUlRDRGF0
YUNoYW5uZWxFdmVudDsKK2NsYXNzIFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudDsKK3N0cnVj
dCBSVENEYXRhQ2hhbm5lbEluaXQ7CisKK2NsYXNzIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxl
ciBmaW5hbCA6IHB1YmxpYyBSVENEYXRhQ2hhbm5lbEhhbmRsZXIgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlcihHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmKTsKKyAgICB+R1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyKCk7CisKKyAgICBzdGF0aWMgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1
cmU+IGZyb21SVENEYXRhQ2hhbm5lbEluaXQoY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0Jik7Cisg
ICAgc3RhdGljIFJlZjxSVENEYXRhQ2hhbm5lbEV2ZW50PiBjaGFubmVsRXZlbnQoRG9jdW1lbnQm
LCBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmKTsKKworcHJvdGVjdGVkOgorICAgIHZv
aWQgb25NZXNzYWdlRGF0YShHQnl0ZXMqKTsKKyAgICB2b2lkIG9uTWVzc2FnZVN0cmluZyhjaGFy
Kik7CisgICAgdm9pZCBvbkVycm9yKEdFcnJvciopOworICAgIHZvaWQgb25CdWZmZXJlZEFtb3Vu
dExvdygpOworICAgIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworcHJpdmF0ZToKKyAgICAv
LyBSVENEYXRhQ2hhbm5lbEhhbmRsZXIgQVBJCisgICAgdm9pZCBzZXRDbGllbnQoUlRDRGF0YUNo
YW5uZWxIYW5kbGVyQ2xpZW50JiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIpIGZp
bmFsOworICAgIGJvb2wgc2VuZFN0cmluZ0RhdGEoY29uc3QgQ1N0cmluZyYpIGZpbmFsOworICAg
IGJvb2wgc2VuZFJhd0RhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCkgZmluYWw7CisgICAgdm9p
ZCBjbG9zZSgpIGZpbmFsOworCisgICAgdm9pZCBjaGVja1N0YXRlKCk7CisgICAgdm9pZCBwb3N0
VGFzayhGdW5jdGlvbjx2b2lkKCk+JiYpOworCisgICAgc3RydWN0IFN0YXRlQ2hhbmdlIHsKKyAg
ICAgICAgUlRDRGF0YUNoYW5uZWxTdGF0ZSBzdGF0ZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxH
RXJyb3IqPiBlcnJvcjsKKyAgICB9OworICAgIHVzaW5nIE1lc3NhZ2UgPSBzdGQ6OnZhcmlhbnQ8
U3RhdGVDaGFuZ2UsIFN0cmluZywgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+PjsKKyAgICB1
c2luZyBQZW5kaW5nTWVzc2FnZXMgPSBWZWN0b3I8TWVzc2FnZT47CisKKyAgICBMb2NrIG1fY2xp
ZW50TG9jazsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBtX2NoYW5uZWw7Cisg
ICAgV2Vha1B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQ+IG1fY2xpZW50IFdURl9HVUFS
REVEX0JZX0xPQ0sobV9jbGllbnRMb2NrKSB7IG51bGxwdHIgfTsKKyAgICBib29sIG1faGFzQ2xp
ZW50IFdURl9HVUFSREVEX0JZX0xPQ0sobV9jbGllbnRMb2NrKSB7IGZhbHNlIH07CisgICAgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIgbV9jb250ZXh0SWRlbnRpZmllcjsKKyAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBtX3ByZXZpb3VzQnVmZmVyZWRBbW91bnQ7CisgICAgUGVu
ZGluZ01lc3NhZ2VzIG1fYnVmZmVyZWRNZXNzYWdlcyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fY2xp
ZW50TG9jayk7CisKKyAgICBMb2NrIG1fb3BlbkxvY2s7CisgICAgQ29uZGl0aW9uIG1fb3BlbkNv
bmRpdGlvbiBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fb3BlbkxvY2spOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWIxZmMwMTYwNGFiNDEwNDY0ZGZkNDMxYzc0YjkwMzlhMjQwM2Y0NQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcApAQCAtMCwwICsxLDkzIEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lckljZVRyYW5zcG9y
dEJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUg
PEphdmFTY3JpcHRDb3JlL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1
ZVB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1lckR0bHNUcmFuc3BvcnRC
YWNrZW5kOjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdl
YlJUQ0RUTFNUcmFuc3BvcnQ+JiB0cmFuc3BvcnQpCisgICAgOiBtX2JhY2tlbmQodHJhbnNwb3J0
KQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
Cit9CisKK0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyRHRsc1RyYW5z
cG9ydEJhY2tlbmQoKQoreworICAgIHVucmVnaXN0ZXJDbGllbnQoKTsKK30KKworVW5pcXVlUmVm
PFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQ+IEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpp
Y2VUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHU3RyZWFt
ZXJJY2VUcmFuc3BvcnRCYWNrZW5kPihtX2JhY2tlbmQpOworfQorCit2b2lkIEdTdHJlYW1lckR0
bHNUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNsaWVudChDbGllbnQmIGNsaWVudCkKK3sKKyAg
ICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQobV9iYWNrZW5kLmdldCgpLCAibm90aWZ5OjpzdGF0ZSIsIEdfQ0FM
TEJBQ0soK1tdKEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKiBiYWNrZW5kKSB7CisgICAg
ICAgIGJhY2tlbmQtPnN0YXRlQ2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsKK30KKwordm9pZCBH
U3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNsaWVudCgpCit7CisgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fYmFja2VuZC5nZXQoKSwgdGhp
cyk7CisgICAgbV9jbGllbnQucmVzZXQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJEdGxzVHJhbnNw
b3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKCkKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkQW5kV2Fp
dChbdGhpc10geworICAgICAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gcmVtb3RlQ2VydGlmaWNhdGU7CisgICAgICAg
IEdVbmlxdWVPdXRQdHI8Y2hhcj4gY2VydGlmaWNhdGU7CisgICAgICAgIEdzdFdlYlJUQ0RUTFNU
cmFuc3BvcnRTdGF0ZSBzdGF0ZTsKKworICAgICAgICBnX29iamVjdF9nZXQobV9iYWNrZW5kLmdl
dCgpLCAic3RhdGUiLCAmc3RhdGUsICJyZW1vdGUtY2VydGlmaWNhdGUiLCAmcmVtb3RlQ2VydGlm
aWNhdGUub3V0UHRyKCksICJjZXJ0aWZpY2F0ZSIsICZjZXJ0aWZpY2F0ZS5vdXRQdHIoKSwgbnVs
bHB0cik7CisKKyAgICAgICAgVmVjdG9yPFJlZjxKU0M6OkFycmF5QnVmZmVyPj4gY2VydGlmaWNh
dGVzOworICAgICAgICBjZXJ0aWZpY2F0ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKKyAg
ICAgICAgaWYgKHJlbW90ZUNlcnRpZmljYXRlKSB7CisgICAgICAgICAgICBhdXRvIHJlbW90ZUNl
cnRpZmljYXRlU3RyaW5nID0gbWFrZVN0cmluZyhyZW1vdGVDZXJ0aWZpY2F0ZS5nZXQoKSk7Cisg
ICAgICAgICAgICBhdXRvIGpzUmVtb3RlQ2VydGlmaWNhdGUgPSBKU0M6OkFycmF5QnVmZmVyOjpj
cmVhdGUocmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcuY2hhcmFjdGVyczgoKSwgcmVtb3RlQ2VydGlm
aWNhdGVTdHJpbmcuc2l6ZUluQnl0ZXMoKSk7CisgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuYXBw
ZW5kKFdURk1vdmUoanNSZW1vdGVDZXJ0aWZpY2F0ZSkpOworCisgICAgICAgICAgICBhdXRvIGNl
cnRpZmljYXRlU3RyaW5nID0gbWFrZVN0cmluZyhjZXJ0aWZpY2F0ZS5nZXQoKSk7CisgICAgICAg
ICAgICBhdXRvIGpzQ2VydGlmaWNhdGUgPSBKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGUoY2VydGlm
aWNhdGVTdHJpbmcuY2hhcmFjdGVyczgoKSwgY2VydGlmaWNhdGVTdHJpbmcuc2l6ZUluQnl0ZXMo
KSk7CisgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuYXBwZW5kKFdURk1vdmUoanNDZXJ0aWZpY2F0
ZSkpOworICAgICAgICB9CisgICAgICAgICgqbV9jbGllbnQpLT5vblN0YXRlQ2hhbmdlZCh0b1JU
Q0R0bHNUcmFuc3BvcnRTdGF0ZShzdGF0ZSksIFdURk1vdmUoY2VydGlmaWNhdGVzKSk7CisgICAg
fSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljMjU0YmM4NDdkYTc5MTY3
YjhmYzE5NDliMzA0ZTE3ODdjZWQ1YTAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFj
a2VuZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIg
SWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIlJUQ0R0bHNUcmFuc3BvcnRCYWNr
ZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENE
dGxzVHJhbnNwb3J0QmFja2VuZCwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdTdHJlYW1lckR0bHNU
cmFuc3BvcnRCYWNrZW5kPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZChjb25zdCBHUmVm
UHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+Jik7CisgICAgfkdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kKCk7CisKKyAgICB2b2lkIHN0YXRlQ2hhbmdlZCgpOworCitwcml2YXRlOgorICAg
IC8vIFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kCisgICAgY29uc3Qgdm9pZCogYmFja2VuZCgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorICAgIFVuaXF1ZVJlZjxSVENJ
Y2VUcmFuc3BvcnRCYWNrZW5kPiBpY2VUcmFuc3BvcnRCYWNrZW5kKCkgZmluYWw7CisgICAgdm9p
ZCByZWdpc3RlckNsaWVudChDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHVucmVnaXN0ZXJDbGll
bnQoKSBmaW5hbDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gbV9iYWNr
ZW5kOworICAgIHN0ZDo6b3B0aW9uYWw8V2Vha1B0cjxDbGllbnQ+PiBtX2NsaWVudDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNl
VHJhbnNwb3J0QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMDk0ZTZiMzM3ODIwNDQzYjE4Mzk3OTYx
OGZmOGZhMjNiNjJmNTE3YwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsMTI0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxp
YSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5o
IgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5j
bHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9B
cnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4m
IHRyYW5zcG9ydCkKKyAgICA6IG1fYmFja2VuZCh0cmFuc3BvcnQpCit7CisgICAgQVNTRVJUKG1f
YmFja2VuZCk7CisKKyAgICBpY2VUcmFuc3BvcnRDaGFuZ2VkKCk7CisgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKG1fYmFja2VuZC5nZXQoKSwgIm5vdGlmeTo6dHJhbnNwb3J0IiwgR19DQUxM
QkFDSygrW10oR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAg
ICBiYWNrZW5kLT5pY2VUcmFuc3BvcnRDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworfQorCitH
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZCgpCit7CisgICAgaWYgKEdfSVNfT0JKRUNUKG1faWNlVHJhbnNwb3J0LmdldCgpKSkKKyAgICAg
ICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1faWNlVHJhbnNwb3J0Lmdl
dCgpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9i
YWNrZW5kLmdldCgpLCB0aGlzKTsKK30KKwordm9pZCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNr
ZW5kOjppY2VUcmFuc3BvcnRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoR19JU19PQkpFQ1QobV9pY2VU
cmFuc3BvcnQuZ2V0KCkpKQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2RhdGEobV9pY2VUcmFuc3BvcnQuZ2V0KCksIHRoaXMpOworCisgICAgZ19vYmplY3RfZ2V0KG1f
YmFja2VuZC5nZXQoKSwgInRyYW5zcG9ydCIsICZtX2ljZVRyYW5zcG9ydC5vdXRQdHIoKSwgbnVs
bHB0cik7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9pY2VUcmFuc3BvcnQuZ2V0
KCksICJub3RpZnk6OnN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVySWNlVHJhbnNwb3J0
QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5kLT5zdGF0ZUNoYW5nZWQoKTsKKyAg
ICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1faWNlVHJhbnNwb3J0
LmdldCgpLCAibm90aWZ5OjpnYXRoZXJpbmctc3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFt
ZXJJY2VUcmFuc3BvcnRCYWNrZW5kKiBiYWNrZW5kKSB7CisgICAgICAgIGJhY2tlbmQtPmdhdGhl
cmluZ1N0YXRlQ2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsKK30KKwordm9pZCBHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNsaWVudChDbGllbnQmIGNsaWVudCkKK3sKKyAg
ICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKKworICAgIEdzdFdl
YlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSB0cmFuc3BvcnRTdGF0ZTsKKyAgICBHc3RXZWJSVENJQ0VH
YXRoZXJpbmdTdGF0ZSBnYXRoZXJpbmdTdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV9pY2VUcmFu
c3BvcnQuZ2V0KCksICJzdGF0ZSIsICZ0cmFuc3BvcnRTdGF0ZSwgImdhdGhlcmluZy1zdGF0ZSIs
ICZnYXRoZXJpbmdTdGF0ZSwgbnVsbHB0cik7CisKKyAgICAvLyBXZSBzdGFydCBvYnNlcnZpbmcg
YSBiaXQgbGF0ZSBhbmQgbWlnaHQgbWlzcyB0aGUgY2hlY2tpbmcgc3RhdGUuIFN5bnRoZXNpemUg
aXQgYXMgbmVlZGVkLgorICAgIGlmICh0cmFuc3BvcnRTdGF0ZSA+IEdTVF9XRUJSVENfSUNFX0NP
Tk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkcgJiYgdHJhbnNwb3J0U3RhdGUgIT0gR1NUX1dFQlJUQ19J
Q0VfQ09OTkVDVElPTl9TVEFURV9DTE9TRUQpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChb
cHJvdGVjdGVkVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9XSB7CisgICAgICAgICAgICBpZiAocHJv
dGVjdGVkVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9j
bGllbnQtPm9uU3RhdGVDaGFuZ2VkKFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDaGVja2luZyk7Cisg
ICAgICAgIH0pOworICAgIH0KKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0g
V2Vha1B0ciB7ICp0aGlzIH0sIHRyYW5zcG9ydFN0YXRlLCBnYXRoZXJpbmdTdGF0ZV0geworICAg
ICAgICBpZiAoIXByb3RlY3RlZFRoaXMtPm1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENJY2VU
cmFuc3BvcnRTdGF0ZSh0cmFuc3BvcnRTdGF0ZSkpOworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5t
X2NsaWVudC0+b25HYXRoZXJpbmdTdGF0ZUNoYW5nZWQodG9SVENJY2VHYXRoZXJpbmdTdGF0ZShn
YXRoZXJpbmdTdGF0ZSkpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5zcG9y
dEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQoKQoreworICAgIEFTU0VSVChtX2NsaWVudCk7Cisg
ICAgbV9jbGllbnQuY2xlYXIoKTsKK30KKwordm9pZCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNr
ZW5kOjpzdGF0ZUNoYW5nZWQoKQoreworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSB0cmFuc3BvcnRTdGF0ZTsKKyAg
ICBnX29iamVjdF9nZXQobV9pY2VUcmFuc3BvcnQuZ2V0KCksICJzdGF0ZSIsICZ0cmFuc3BvcnRT
dGF0ZSwgbnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFdl
YWtQdHIgeyAqdGhpcyB9LCB0cmFuc3BvcnRTdGF0ZV0geworICAgICAgICBpZiAoIXByb3RlY3Rl
ZFRoaXMtPm1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwcm90ZWN0ZWRU
aGlzLT5tX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENJY2VUcmFuc3BvcnRTdGF0ZSh0cmFu
c3BvcnRTdGF0ZSkpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5zcG9ydEJh
Y2tlbmQ6OmdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgZ2F0aGVyaW5n
U3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1faWNlVHJhbnNwb3J0LmdldCgpLCAiZ2F0aGVyaW5n
LXN0YXRlIiwgJmdhdGhlcmluZ1N0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFk
KFtwcm90ZWN0ZWRUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH0sIGdhdGhlcmluZ1N0YXRlXSB7Cisg
ICAgICAgIGlmICghcHJvdGVjdGVkVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fY2xpZW50LT5vbkdhdGhlcmluZ1N0YXRlQ2hhbmdl
ZCh0b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKGdhdGhlcmluZ1N0YXRlKSk7CisgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRy
YW5zcG9ydEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZmVhNTIwYmJhOTEwZmQxN2YzMDA3OTg1NTI3
YTk4Njg4ZjRiMDdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oCkBAIC0w
LDAgKzEsNTYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5j
bHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydEJhY2tl
bmQuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDSWNl
VHJhbnNwb3J0QmFja2VuZCwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQ+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgor
ICAgIGV4cGxpY2l0IEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxH
c3RXZWJSVENEVExTVHJhbnNwb3J0PiYpOworICAgIH5HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNr
ZW5kKCk7CisKKyAgICB2b2lkIHN0YXRlQ2hhbmdlZCgpOworICAgIHZvaWQgZ2F0aGVyaW5nU3Rh
dGVDaGFuZ2VkKCk7CisKK3ByaXZhdGU6CisgICAgLy8gUlRDSWNlVHJhbnNwb3J0QmFja2VuZAor
ICAgIGNvbnN0IHZvaWQqIGJhY2tlbmQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmQu
Z2V0KCk7IH0KKworICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoQ2xpZW50JikgZmluYWw7CisgICAg
dm9pZCB1bnJlZ2lzdGVyQ2xpZW50KCkgZmluYWw7CisKKyAgICB2b2lkIGljZVRyYW5zcG9ydENo
YW5nZWQoKTsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gbV9iYWNrZW5k
OworICAgIEdSZWZQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PiBtX2ljZVRyYW5zcG9ydDsKKyAg
ICBXZWFrUHRyPENsaWVudD4gbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM0
NzFjMTE0MjBjZTlmYWFhNmZhYjc0Yjg5NjgxYWY0NjBmMmViZTMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJN
ZWRpYUVuZHBvaW50LmNwcApAQCAtMCwwICsxLDEyNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRp
YUVuZHBvaW50LmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkRv
Y3VtZW50LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCisj
aW5jbHVkZSAiSlNSVENTdGF0c1JlcG9ydC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNs
dWRlICJNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWwuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hh
bm5lbEV2ZW50LmgiCisjaW5jbHVkZSAiUlRDSWNlQ2FuZGlkYXRlLmgiCisjaW5jbHVkZSAiUlRD
T2ZmZXJPcHRpb25zLmgiCisjaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRl
ICJSVENTY3RwVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgIlJUQ1Nlc3Npb25EZXNjcmlw
dGlvbi5oIgorI2luY2x1ZGUgIlJUQ1N0YXRzUmVwb3J0LmgiCisjaW5jbHVkZSAiUlRDVHJhY2tF
dmVudC5oIgorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5o
IgorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorI2lu
Y2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUg
IlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSA8Z3N0
L3NkcC9zZHAuaD4KKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9T
Y29wZS5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1J1bkxvb3BTb3VyY2VQcmlvcml0eS5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KKworR1NUX0RFQlVH
X0NBVEVHT1JZKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FU
X0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0dTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQoR1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBwZWVyQ29ubmVjdGlvbikKKyAgICA6IG1fcGVl
ckNvbm5lY3Rpb25CYWNrZW5kKHBlZXJDb25uZWN0aW9uKQorICAgICwgbV9zdGF0c0NvbGxlY3Rv
cihHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Y3JlYXRlKCkpCisjaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECisgICAgLCBtX3N0YXRzTG9nVGltZXIoKnRoaXMsICZHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpnYXRoZXJTdGF0c0ZvckxvZ2dpbmcpCisgICAgLCBtX2xvZ2dlcihwZWVyQ29ubmVjdGlv
bi5sb2dnZXIoKSkKKyAgICAsIG1fbG9nSWRlbnRpZmllcihwZWVyQ29ubmVjdGlvbi5sb2dJZGVu
dGlmaWVyKCkpCisjZW5kaWYKK3sKKyAgICBlbnN1cmVHU3RyZWFtZXJJbml0aWFsaXplZCgpOwor
CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIGRlYnVnUmVnaXN0ZXJlZEZsYWc7CisgICAgc3Rk
OjpjYWxsX29uY2UoZGVidWdSZWdpc3RlcmVkRmxhZywgW10geworICAgICAgICBHU1RfREVCVUdf
Q0FURUdPUllfSU5JVCh3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnLCAid2Via2l0d2VicnRj
ZW5kcG9pbnQiLCAwLCAiV2ViS2l0IFdlYlJUQyBlbmQtcG9pbnQiKTsKKyAgICB9KTsKK30KKwor
Ym9vbCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWFsaXplUGlwZWxpbmUoKQoreworICAg
IHN0YXRpYyBpbnQgblBpcGVsaW5lID0gMDsKKyAgICBhdXRvIHBpcGVsaW5lTmFtZSA9IG1ha2VT
dHJpbmcoIndlYmtpdC13ZWJydC1waXBlbGluZS0iLCBuUGlwZWxpbmUpOworICAgIG1fcGlwZWxp
bmUgPSBnc3RfcGlwZWxpbmVfbmV3KHBpcGVsaW5lTmFtZS5hc2NpaSgpLmRhdGEoKSk7CisKKyAg
ICBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCksIFt0aGlz
XShHc3RNZXNzYWdlKiBtZXNzYWdlKSB7CisgICAgICAgIGhhbmRsZU1lc3NhZ2UobWVzc2FnZSk7
CisgICAgfSk7CisKKyAgICBhdXRvIGJpbk5hbWUgPSBtYWtlU3RyaW5nKCJ3ZWJraXQtd2VicnRj
YmluLSIsIG5QaXBlbGluZSsrKTsKKyAgICBtX3dlYnJ0Y0JpbiA9IG1ha2VHU3RyZWFtZXJFbGVt
ZW50KCJ3ZWJydGNiaW4iLCBiaW5OYW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBpZiAoIW1fd2Vi
cnRjQmluKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3N0YXRzQ29sbGVjdG9yLT5z
ZXRFbGVtZW50KG1fd2VicnRjQmluLmdldCgpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBw
ZWQobV93ZWJydGNCaW4uZ2V0KCksICJub3RpZnk6OmljZS1jb25uZWN0aW9uLXN0YXRlIiwgR19D
QUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQpIHsKKyAgICAgICAg
ZW5kUG9pbnQtPm9uSWNlQ29ubmVjdGlvbkNoYW5nZSgpOworICAgIH0pLCB0aGlzKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJub3RpZnk6OmljZS1n
YXRoZXJpbmctc3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBl
bmRQb2ludCkgeworICAgICAgICBlbmRQb2ludC0+b25JY2VHYXRoZXJpbmdDaGFuZ2UoKTsKKyAg
ICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdl
dCgpLCAib24tbmVnb3RpYXRpb24tbmVlZGVkIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVk
aWFFbmRwb2ludCogZW5kUG9pbnQpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uTmVnb3RpYXRpb25O
ZWVkZWQoKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1f
d2VicnRjQmluLmdldCgpLCAib24taWNlLWNhbmRpZGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBndWludCBzZHBNTGluZUluZGV4LCBnY2hhcmFy
cmF5IGNhbmRpZGF0ZSkgeworICAgICAgICBlbmRQb2ludC0+b25JY2VDYW5kaWRhdGUoc2RwTUxp
bmVJbmRleCwgY2FuZGlkYXRlKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSygrW10o
R1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQsIEdzdFBhZCogcGFkKSB7CisgICAgICAg
IC8vIElnbm9yZSBvdXRnb2luZyBwYWQgbm90aWZpY2F0aW9ucy4KKyAgICAgICAgaWYgKEdTVF9Q
QURfRElSRUNUSU9OKHBhZCkgIT0gR1NUX1BBRF9TUkMpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKmVu
ZFBvaW50KSwgcGFkXSB7CisgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVk
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5hZGRSZW1vdGVTdHJlYW0ocGFkKTsKKyAgICAgICAgfSk7CisgICAgfSksIHRoaXMpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInBhZC1yZW1vdmVk
IiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQsIEdzdFBh
ZCogcGFkKSB7CisgICAgICAgIC8vIElnbm9yZSBvdXRnb2luZyBwYWQgbm90aWZpY2F0aW9ucy4K
KyAgICAgICAgaWYgKEdTVF9QQURfRElSRUNUSU9OKHBhZCkgIT0gR1NUX1BBRF9TUkMpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgaWYgKGVuZFBvaW50LT5pc1N0b3BwZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgZW5kUG9pbnQtPnJlbW92ZVJlbW90ZVN0cmVhbShw
YWQpOworICAgIH0pLCB0aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dl
YnJ0Y0Jpbi5nZXQoKSwgIm9uLWRhdGEtY2hhbm5lbCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RXZWJSVENEYXRhQ2hhbm5lbCogY2hhbm5lbCkg
eworICAgICAgICBlbmRQb2ludC0+b25EYXRhQ2hhbm5lbChjaGFubmVsKTsKKyAgICB9KSwgdGhp
cyk7CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIG1f
d2VicnRjQmluLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6fkdTdHJlYW1lck1lZGlhRW5kcG9pbnQoKQoreworICAgIGlmIChtX3BpcGVsaW5l
KQorICAgICAgICB0ZWFyZG93blBpcGVsaW5lKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6dGVhcmRvd25QaXBlbGluZSgpCit7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVE
CisgICAgc3RvcExvZ2dpbmdTdGF0cygpOworI2VuZGlmCisgICAgbV9zdGF0c0NvbGxlY3Rvci0+
c2V0RWxlbWVudChudWxscHRyKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZGF0YShtX3BpcGVsaW5lLmdldCgpLCB0aGlzKTsKKyAgICBkaXNjb25uZWN0U2ltcGxlQnVz
TWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisKKyAgICBtX3NvdXJjZXMu
Y2xlYXIoKTsKKyAgICBtX3JlbW90ZU1MaW5lSW5mb3MuY2xlYXIoKTsKKyAgICBtX3JlbW90ZVN0
cmVhbXNCeUlkLmNsZWFyKCk7CisgICAgbV93ZWJydGNCaW4gPSBudWxscHRyOworICAgIG1fcGlw
ZWxpbmUgPSBudWxscHRyOworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmhhbmRs
ZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBzd2l0Y2ggKEdTVF9NRVNTQUdF
X1RZUEUobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAgICAgICAgR1NU
X0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdl
dCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCAiZW9zIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR1NUX01FU1NBR0VfRUxFTUVOVDogeworICAgICAgICBjb25zdCBhdXRvKiBkYXRh
ID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKyAgICAgICAgaWYgKCFnX3N0
cmNtcDAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShkYXRhKSwgIkdzdEJpbkZvcndhcmRlZCIpKSB7
CisgICAgICAgICAgICBHUmVmUHRyPEdzdE1lc3NhZ2U+IHN1Yk1lc3NhZ2U7CisgICAgICAgICAg
ICBnc3Rfc3RydWN0dXJlX2dldChkYXRhLCAibWVzc2FnZSIsIEdTVF9UWVBFX01FU1NBR0UsICZz
dWJNZXNzYWdlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmIChHU1RfTUVTU0FH
RV9UWVBFKHN1Yk1lc3NhZ2UuZ2V0KCkpID09IEdTVF9NRVNTQUdFX0VPUykKKyAgICAgICAgICAg
ICAgICBkaXNwb3NlRWxlbWVudENoYWluKEdTVF9FTEVNRU5UX0NBU1QoR1NUX01FU1NBR0VfU1JD
KHN1Yk1lc3NhZ2UuZ2V0KCkpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4gdHJ1ZTsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpkaXNwb3NlRWxlbWVudENoYWluKEdzdEVs
ZW1lbnQqIGVsZW1lbnQpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgp
LCAiR290IGVsZW1lbnQgRU9TIG1lc3NhZ2UgZnJvbSAlIiBHU1RfUFRSX0ZPUk1BVCwgZWxlbWVu
dCk7CisKKyAgICBhdXRvIHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZChlbGVtZW50LCAic2luayIpKTsKKyAgICBhdXRvIHBlZXIgPSBhZG9wdEdSZWYoZ3N0X3BhZF9n
ZXRfcGVlcihwYWQuZ2V0KCkpKTsKKworICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUo
bV9waXBlbGluZS5nZXQoKSwgdHJ1ZSk7CisgICAgZ3N0X3BhZF91bmxpbmsocGVlci5nZXQoKSwg
cGFkLmdldCgpKTsKKyAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NBU1QobV9waXBlbGluZS5n
ZXQoKSksIGVsZW1lbnQpOworICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQobV93
ZWJydGNCaW4uZ2V0KCksIHBlZXIuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShl
bGVtZW50LCBHU1RfU1RBVEVfTlVMTCk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0
ZShtX3BpcGVsaW5lLmdldCgpLCBmYWxzZSk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYgY29uZmln
dXJhdGlvbikKK3sKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgdGVhcmRvd25QaXBlbGlu
ZSgpOworCisgICAgaWYgKCFpbml0aWFsaXplUGlwZWxpbmUoKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgYXV0byBidW5kbGVQb2xpY3kgPSBidW5kbGVQb2xpY3lGcm9tQ29uZmlndXJh
dGlvbihjb25maWd1cmF0aW9uKTsKKyAgICBhdXRvIGljZVRyYW5zcG9ydFBvbGljeSA9IGljZVRy
YW5zcG9ydFBvbGljeUZyb21Db25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pOworICAgIGdfb2Jq
ZWN0X3NldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImJ1bmRsZS1wb2xpY3kiLCBidW5kbGVQb2xpY3ks
ICJpY2UtdHJhbnNwb3J0LXBvbGljeSIsIGljZVRyYW5zcG9ydFBvbGljeSwgbnVsbHB0cik7CisK
KyAgICBmb3IgKGF1dG8mIHNlcnZlciA6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVycykgeworICAg
ICAgICBib29sIHN0dW5TZXQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiB1cmwgOiBzZXJ2
ZXIudXJscykgeworICAgICAgICAgICAgaWYgKHVybC5wcm90b2NvbCgpLnN0YXJ0c1dpdGgoInR1
cm4iKSkgeworICAgICAgICAgICAgICAgIGF1dG8gdmFsaWQgPSB1cmwuc3RyaW5nKCkuaXNvbGF0
ZWRDb3B5KCkucmVwbGFjZSgidHVybjoiLCAidHVybjovLyIpLnJlcGxhY2UoInR1cm5zOiIsICJ0
dXJuczovLyIpOworICAgICAgICAgICAgICAgIFVSTCB2YWxpZFVSTChVUkwoKSwgdmFsaWQpOwor
ICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBsaWJuaWNlIGN1cnJlbnRseSBkb2Vzbid0IHNlZW0g
dG8gaGFuZGxlIElQdjYgYWRkcmVzc2VzIHZlcnkgd2VsbC4KKyAgICAgICAgICAgICAgICBpZiAo
dmFsaWRVUkwuaG9zdCgpLnN0YXJ0c1dpdGgoJ1snKSkKKyAgICAgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICAgICAgdmFsaWRVUkwuc2V0VXNlcihzZXJ2ZXIudXNlcm5hbWUp
OworICAgICAgICAgICAgICAgIHZhbGlkVVJMLnNldFBhc3N3b3JkKHNlcnZlci5jcmVkZW50aWFs
KTsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZhbHNlOworICAgICAgICAgICAgICAg
IGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImFkZC10dXJuLXNlcnZl
ciIsIHZhbGlkVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksICZyZXN1bHQpOworICAgICAgICAg
ICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAgICAgICBHU1RfV0FSTklORygiVW5h
YmxlIHRvIHVzZSBUVVJOIHNlcnZlcjogJXMiLCB2YWxpZFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0
YSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmICghc3R1blNldCAmJiB1cmwucHJv
dG9jb2woKS5zdGFydHNXaXRoKCJzdHVuIikpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHZhbGlk
ID0gdXJsLnN0cmluZygpLmlzb2xhdGVkQ29weSgpLnJlcGxhY2UoInN0dW46IiwgInN0dW46Ly8i
KTsKKyAgICAgICAgICAgICAgICBVUkwgdmFsaWRVUkwoVVJMKCksIHZhbGlkKTsKKyAgICAgICAg
ICAgICAgICAvLyBGSVhNRTogbGlibmljZSBjdXJyZW50bHkgZG9lc24ndCBzZWVtIHRvIGhhbmRs
ZSBJUHY2IGFkZHJlc3NlcyB2ZXJ5IHdlbGwuCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkVVJM
Lmhvc3QoKS5zdGFydHNXaXRoKCdbJykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgICAgIHZhbGlkVVJMLnNldFVzZXIoc2VydmVyLnVzZXJuYW1lKTsKKyAgICAg
ICAgICAgICAgICB2YWxpZFVSTC5zZXRQYXNzd29yZChzZXJ2ZXIuY3JlZGVudGlhbCk7CisgICAg
ICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fd2VicnRjQmluLmdldCgpLCAic3R1bi1zZXJ2ZXIi
LCB2YWxpZFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBudWxscHRyKTsKKyAgICAgICAgICAg
ICAgICBzdHVuU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKwor
ICAgIC8vIFdJUDogaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3Qt
cGx1Z2lucy1iYWQvLS9tZXJnZV9yZXF1ZXN0cy8zMDIKKyAgICBHU1RfRklYTUUoIiV6dSBjdXN0
b20gY2VydGlmaWNhdGVzIG5vdCBwcm9wYWdhdGVkIHRvIHdlYnJ0Y2JpbiIsIGNvbmZpZ3VyYXRp
b24uY2VydGlmaWNhdGVzLnNpemUoKSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9w
aXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIkVuZC1wb2ludCByZWFkeSIpOworICAgIHJldHVybiB0cnVlOwor
fQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlc3RhcnRJY2UoKQoreworICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgInJlc3RhcnRpbmcgSUNFIik7CisgICAg
Ly8gV0lQIGluIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBs
dWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTg3NworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0
dXJlPiBvcHRpb25zKGdzdF9zdHJ1Y3R1cmVfbmV3KCJ3ZWJydGNiaW4tb2ZmZXItb3B0aW9ucyIs
ICJpY2UtcmVzdGFydCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBudWxscHRyKSk7CisgICAgaW5p
dGlhdGUodHJ1ZSwgV1RGTW92ZShvcHRpb25zKSk7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFs
PHN0ZDo6cGFpcjxSVENTZHBUeXBlLCBTdHJpbmc+PiBmZXRjaERlc2NyaXB0aW9uKEdzdEVsZW1l
bnQqIHdlYnJ0Y0JpbiwgY29uc3QgY2hhciogbmFtZSkKK3sKKyAgICBpZiAoIXdlYnJ0Y0JpbikK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEdVbmlxdWVPdXRQdHI8R3N0V2ViUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbjsKKyAgICBnX29iamVjdF9nZXQod2VicnRjQmluLCBt
YWtlU3RyaW5nKG5hbWUsICItZGVzY3JpcHRpb24iKS51dGY4KCkuZGF0YSgpLCAmZGVzY3JpcHRp
b24ub3V0UHRyKCksIG51bGxwdHIpOworICAgIGlmICghZGVzY3JpcHRpb24pCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHNkcFN0cmluZyhnc3Rfc2RwX21lc3Nh
Z2VfYXNfdGV4dChkZXNjcmlwdGlvbi0+c2RwKSk7CisgICAgR1NUX1RSQUNFX09CSkVDVCh3ZWJy
dGNCaW4sICIlcy1kZXNjcmlwdGlvbiBTRFA6ICVzIiwgbmFtZSwgc2RwU3RyaW5nLmdldCgpKTsK
KyAgICByZXR1cm4geyB7IGZyb21TZXNzaW9uRGVzY3JpcHRpb25UeXBlKGRlc2NyaXB0aW9uLmdl
dCgpKSwgc2RwU3RyaW5nLmdldCgpIH0gfTsKK30KKworc3RhdGljIEdzdFdlYlJUQ1NpZ25hbGlu
Z1N0YXRlIGZldGNoU2lnbmFsaW5nU3RhdGUoR3N0RWxlbWVudCogd2VicnRjQmluKQoreworICAg
IEdzdFdlYlJUQ1NpZ25hbGluZ1N0YXRlIHN0YXRlOworICAgIGdfb2JqZWN0X2dldCh3ZWJydGNC
aW4sICJzaWduYWxpbmctc3RhdGUiLCAmc3RhdGUsIG51bGxwdHIpOworI2lmbmRlZiBHU1RfRElT
QUJMRV9HU1RfREVCVUcKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRlc2MoZ19lbnVtX3RvX3N0cmlu
ZyhHU1RfVFlQRV9XRUJSVENfU0lHTkFMSU5HX1NUQVRFLCBzdGF0ZSkpOworICAgIEdTVF9ERUJV
R19PQkpFQ1Qod2VicnRjQmluLCAiU2lnbmFsaW5nIHN0YXRlIHNldCB0byAlcyIsIGRlc2MuZ2V0
KCkpOworI2VuZGlmCisgICAgcmV0dXJuIHN0YXRlOworfQorCitlbnVtIGNsYXNzIEdhdGhlclNp
Z25hbGluZ1N0YXRlIHsgTm8sIFllcyB9Oworc3RhdGljIHN0ZDo6b3B0aW9uYWw8UGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpEZXNjcmlwdGlvblN0YXRlcz4gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0Jp
bihHc3RFbGVtZW50KiB3ZWJydGNCaW4sIEdhdGhlclNpZ25hbGluZ1N0YXRlIGdhdGhlclNpZ25h
bGluZ1N0YXRlID0gR2F0aGVyU2lnbmFsaW5nU3RhdGU6Ok5vKQoreworICAgIHN0ZDo6b3B0aW9u
YWw8UlRDU2RwVHlwZT4gY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nTG9j
YWxEZXNjcmlwdGlvblNkcFR5cGUsIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvblNkcFR5cGUsIHBl
bmRpbmdSZW1vdGVEZXNjcmlwdGlvblNkcFR5cGU7CisgICAgU3RyaW5nIGN1cnJlbnRMb2NhbERl
c2NyaXB0aW9uU2RwLCBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvblNkcCwgY3VycmVudFJlbW90ZURl
c2NyaXB0aW9uU2RwLCBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHA7CisgICAgaWYgKGF1dG8g
Y3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBmZXRjaERlc2NyaXB0aW9uKHdlYnJ0Y0JpbiwgImN1
cnJlbnQtbG9jYWwiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAq
Y3VycmVudExvY2FsRGVzY3JpcHRpb247CisgICAgICAgIGN1cnJlbnRMb2NhbERlc2NyaXB0aW9u
U2RwVHlwZSA9IHNkcFR5cGU7CisgICAgICAgIGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uU2RwID0g
V1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChhdXRvIHBlbmRpbmdMb2NhbERl
c2NyaXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3ZWJydGNCaW4sICJwZW5kaW5nLWxvY2FsIikp
IHsKKyAgICAgICAgYXV0byBbc2RwVHlwZSwgZGVzY3JpcHRpb25dID0gKnBlbmRpbmdMb2NhbERl
c2NyaXB0aW9uOworICAgICAgICBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvblNkcFR5cGUgPSBzZHBU
eXBlOworICAgICAgICBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvblNkcCA9IFdURk1vdmUoZGVzY3Jp
cHRpb24pOworICAgIH0KKyAgICBpZiAoYXV0byBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gPSBm
ZXRjaERlc2NyaXB0aW9uKHdlYnJ0Y0JpbiwgImN1cnJlbnQtcmVtb3RlIikpIHsKKyAgICAgICAg
YXV0byBbc2RwVHlwZSwgZGVzY3JpcHRpb25dID0gKmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbjsK
KyAgICAgICAgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwVHlwZSA9IHNkcFR5cGU7CisgICAg
ICAgIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvblNkcCA9IFdURk1vdmUoZGVzY3JpcHRpb24pOwor
ICAgIH0KKyAgICBpZiAoYXV0byBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gPSBmZXRjaERlc2Ny
aXB0aW9uKHdlYnJ0Y0JpbiwgInBlbmRpbmctcmVtb3RlIikpIHsKKyAgICAgICAgYXV0byBbc2Rw
VHlwZSwgZGVzY3JpcHRpb25dID0gKnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbjsKKyAgICAgICAg
cGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwVHlwZSA9IHNkcFR5cGU7CisgICAgICAgIHBlbmRp
bmdSZW1vdGVEZXNjcmlwdGlvblNkcCA9IGRlc2NyaXB0aW9uOworICAgIH0KKworICAgIHN0ZDo6
b3B0aW9uYWw8UlRDU2lnbmFsaW5nU3RhdGU+IHNpZ25hbGluZ1N0YXRlOworICAgIGlmIChnYXRo
ZXJTaWduYWxpbmdTdGF0ZSA9PSBHYXRoZXJTaWduYWxpbmdTdGF0ZTo6WWVzKQorICAgICAgICBz
aWduYWxpbmdTdGF0ZSA9IHRvU2lnbmFsaW5nU3RhdGUoZmV0Y2hTaWduYWxpbmdTdGF0ZSh3ZWJy
dGNCaW4pKTsKKworICAgIHJldHVybiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkRlc2NyaXB0aW9u
U3RhdGVzIHsKKyAgICAgICAgc2lnbmFsaW5nU3RhdGUsCisgICAgICAgIGN1cnJlbnRMb2NhbERl
c2NyaXB0aW9uU2RwVHlwZSwgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHAsCisgICAgICAgIHBl
bmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSwgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHAs
CisgICAgICAgIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvblNkcFR5cGUsIGN1cnJlbnRSZW1vdGVE
ZXNjcmlwdGlvblNkcCwKKyAgICAgICAgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwVHlwZSwg
cGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwCisgICAgfTsKK30KKwordm9pZCBHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50Ojpkb1NldExvY2FsRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uKiBkZXNjcmlwdGlvbikKK3sKKyAgICBzZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbiwg
dHJ1ZSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXSB7CisgICAgICAgIGF1dG8gZGVzY3Jp
cHRpb25zID0gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0Jpbihwcm90ZWN0ZWRUaGlzLT5tX3dlYnJ0
Y0Jpbi5nZXQoKSwgR2F0aGVyU2lnbmFsaW5nU3RhdGU6Olllcyk7CisgICAgICAgIEdSZWZQdHI8
R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4gdHJhbnNwb3J0OworICAgICAgICBnX29iamVjdF9nZXQo
cHJvdGVjdGVkVGhpcy0+bV93ZWJydGNCaW4uZ2V0KCksICJzY3RwLXRyYW5zcG9ydCIsICZ0cmFu
c3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5zZXRMb2NhbERlc2NyaXB0aW9uU3VjY2VlZGVkKFdURk1vdmUoZGVz
Y3JpcHRpb25zKSwgdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZD4oV1RGTW92ZSh0cmFuc3BvcnQpKSA6IG51bGxwdHIpOworICAgIH0sIFtwcm90ZWN0
ZWRUaGlzID0gUmVmKCp0aGlzKV0oY29uc3QgR0Vycm9yKiBlcnJvcikgeworICAgICAgICBpZiAo
ZXJyb3IgJiYgZXJyb3ItPmNvZGUgPT0gR1NUX1dFQlJUQ19FUlJPUl9JTlZBTElEX1NUQVRFKQor
ICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuc2V0TG9j
YWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxl
ZCB0byBzZXQgbG9jYWwgYW5zd2VyIHNkcDogbm8gcGVuZGluZyByZW1vdGUgZGVzY3JpcHRpb24u
Il9zIH0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5zZXRMb2NhbERlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9w
ZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFwcGx5IHNlc3Npb24gbG9jYWwgZGVzY3JpcHRpb24i
X3MgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0UmVt
b3RlRGVzY3JpcHRpb25TdWNjZWVkZWQoKQoreworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBl
bGluZS5nZXQoKSwgIkFja2luZyByZW1vdGUgZGVzY3JpcHRpb24iKTsKKyAgICBhdXRvIGRlc2Ny
aXB0aW9ucyA9IGRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCksIEdh
dGhlclNpZ25hbGluZ1N0YXRlOjpZZXMpOworICAgIEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5z
cG9ydD4gdHJhbnNwb3J0OworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInNj
dHAtdHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgbV9wZWVy
Q29ubmVjdGlvbkJhY2tlbmQuc2V0UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQoV1RGTW92ZShk
ZXNjcmlwdGlvbnMpLCB0cmFuc3BvcnQgPyBtYWtlVW5pcXVlPEdTdHJlYW1lclNjdHBUcmFuc3Bv
cnRCYWNrZW5kPihXVEZNb3ZlKHRyYW5zcG9ydCkpIDogbnVsbHB0cik7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBSVENTZXNz
aW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIHNldERlc2NyaXB0aW9uKCZkZXNj
cmlwdGlvbiwgZmFsc2UsIFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKV0geworICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5zZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZCgpOworICAgIH0sIFtw
cm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKV0oY29uc3QgR0Vycm9yKiBlcnJvcikgeworICAgICAg
ICBpZiAoZXJyb3IgJiYgZXJyb3ItPmNvZGUgPT0gR1NUX1dFQlJUQ19FUlJPUl9JTlZBTElEX1NU
QVRFKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQu
c2V0UmVtb3RlRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3Is
ICJGYWlsZWQgdG8gc2V0IHJlbW90ZSBhbnN3ZXIgc2RwIl9zIH0pOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRSZW1v
dGVEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgIlVuYWJsZSB0
byBhcHBseSBzZXNzaW9uIHJlbW90ZSBkZXNjcmlwdGlvbiJfcyB9KTsKKyAgICB9KTsKKyNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzdGFydExvZ2dpbmdTdGF0cygpOworI2VuZGlmCit9
CisKK3N0cnVjdCBTZXREZXNjcmlwdGlvbkNhbGxEYXRhIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURUQ7CisgICAgU2V0RGVzY3JpcHRpb25DYWxsRGF0YShHU3RyZWFtZXJNZWRp
YUVuZHBvaW50JiBlbmRQb2ludCwgRnVuY3Rpb248dm9pZCgpPiYmIHN1Y2Nlc3NDYWxsYmFjaywg
RnVuY3Rpb248dm9pZChjb25zdCBHRXJyb3IqKT4mJiBmYWlsdXJlQ2FsbGJhY2spCisgICAgICAg
IDogc3VjY2Vzc0NhbGxiYWNrKFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSkKKyAgICAgICAgLCBm
YWlsdXJlQ2FsbGJhY2soV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spKQorICAgICAgICAsIGVuZFBv
aW50KGVuZFBvaW50KSB7IH0KKworICAgIEZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNr
OworICAgIEZ1bmN0aW9uPHZvaWQoY29uc3QgR0Vycm9yKik+IGZhaWx1cmVDYWxsYmFjazsKKyAg
ICBHU3RyZWFtZXJNZWRpYUVuZHBvaW50JiBlbmRQb2ludDsKK307CisKK3ZvaWQgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6c2V0RGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
KiBkZXNjcmlwdGlvbiwgYm9vbCBpc0xvY2FsLCBGdW5jdGlvbjx2b2lkKCk+JiYgc3VjY2Vzc0Nh
bGxiYWNrLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEdFcnJvciopPiYmIGZhaWx1cmVDYWxsYmFjaykK
K3sKKyAgICBHc3RTRFBNZXNzYWdlKiBtZXNzYWdlOworICAgIGF1dG8gc2RwVHlwZSA9IFJUQ1Nk
cFR5cGU6Ok9mZmVyOworCisgICAgaWYgKGRlc2NyaXB0aW9uKSB7CisgICAgICAgIGlmIChnc3Rf
c2RwX21lc3NhZ2VfbmV3X2Zyb21fdGV4dChyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihk
ZXNjcmlwdGlvbi0+c2RwKCkuY2hhcmFjdGVyczgoKSksICZtZXNzYWdlKSAhPSBHU1RfU0RQX09L
KSB7CisgICAgICAgICAgICBmYWlsdXJlQ2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgc2RwVHlwZSA9IGRlc2NyaXB0aW9uLT50eXBlKCk7
CisgICAgfSBlbHNlIGlmIChnc3Rfc2RwX21lc3NhZ2VfbmV3KCZtZXNzYWdlKSAhPSBHU1RfU0RQ
X09LKSB7CisgICAgICAgIGZhaWx1cmVDYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghaXNMb2NhbCkKKyAgICAgICAgc3RvcmVSZW1vdGVNTGluZUlu
Zm8obWVzc2FnZSk7CisKKyAgICBhdXRvIHR5cGUgPSB0b1Nlc3Npb25EZXNjcmlwdGlvblR5cGUo
c2RwVHlwZSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ3JlYXRp
bmcgJXMgc2Vzc2lvbiBmb3IgU0RQICVzIiwgaXNMb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwg
Z3N0X3dlYnJ0Y19zZHBfdHlwZV90b19zdHJpbmcodHlwZSkpOworCisgICAgR1VuaXF1ZVB0cjxH
c3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IHNlc3Npb25EZXNjcmlwdGlvbihnc3Rfd2VicnRj
X3Nlc3Npb25fZGVzY3JpcHRpb25fbmV3KHR5cGUsIG1lc3NhZ2UpKTsKKyAgICBhdXRvIHNpZ25h
bE5hbWUgPSBtYWtlU3RyaW5nKCJzZXQtIiwgaXNMb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwg
Ii1kZXNjcmlwdGlvbiIpOworICAgIGF1dG8gZGF0YSA9IG1ha2VVbmlxdWU8U2V0RGVzY3JpcHRp
b25DYWxsRGF0YT4oKnRoaXMsIFdURk1vdmUoc3VjY2Vzc0NhbGxiYWNrKSwgV1RGTW92ZShmYWls
dXJlQ2FsbGJhY2spKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0
KCksIHNpZ25hbE5hbWUuYXNjaWkoKS5kYXRhKCksIHNlc3Npb25EZXNjcmlwdGlvbi5nZXQoKSwg
Z3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcHJvbWlzZSwg
Z3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPFNldERlc2NyaXB0
aW9uQ2FsbERhdGE+IGRhdGEocmVpbnRlcnByZXRfY2FzdDxTZXREZXNjcmlwdGlvbkNhbGxEYXRh
Kj4odXNlckRhdGEpKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBnc3RfcHJvbWlzZV93YWl0KHBy
b21pc2UpOworICAgICAgICBhdXRvIGNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFsmXSB7CisgICAg
ICAgICAgICBnc3RfcHJvbWlzZV91bnJlZihwcm9taXNlKTsKKyAgICAgICAgfSk7CisKKyAgICAg
ICAgY29uc3QgYXV0byogcmVwbHkgPSBnc3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZSk7Cisg
ICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQgfHwgKHJlcGx5
ICYmIGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlcGx5LCAiZXJyb3IiKSkpIHsKKyAgICAgICAg
ICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIGlmIChyZXBseSkg
eworICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJlcGx5LCAiZXJyb3IiLCBHX1RZ
UEVfRVJST1IsICZlcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChkYXRhLT5lbmRQb2ludC5waXBlbGluZSgpLCAiVW5hYmxlIHRvIHNldCBk
ZXNjcmlwdGlvbiwgZXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZXJyb3IgPSBlcnJvci5nZXQoKSwgcHJvdGVj
dGVkVGhpcyA9IFJlZihkYXRhLT5lbmRQb2ludCksIGZhaWx1cmVDYWxsYmFjayA9IFdURk1vdmUo
ZGF0YS0+ZmFpbHVyZUNhbGxiYWNrKV0geworICAgICAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRU
aGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAg
ICAgICAgIGZhaWx1cmVDYWxsYmFjayhlcnJvcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0
ZWRUaGlzID0gUmVmKGRhdGEtPmVuZFBvaW50KSwgc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShk
YXRhLT5zdWNjZXNzQ2FsbGJhY2spXSB7CisgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+
aXNTdG9wcGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc3VjY2Vz
c0NhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAgIH0sIGRhdGEucmVsZWFzZSgpLCBudWxscHRy
KSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcmVSZW1vdGVNTGluZUlu
Zm8oR3N0U0RQTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBtX3JlbW90ZU1MaW5lSW5mb3MuY2xl
YXIoKTsKKyAgICB1bnNpZ25lZCB0b3RhbE1lZGlhcyA9IGdzdF9zZHBfbWVzc2FnZV9tZWRpYXNf
bGVuKG1lc3NhZ2UpOworICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5yZXNlcnZlQ2FwYWNpdHkodG90
YWxNZWRpYXMpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlN0b3Jp
bmcgJXUgcmVtb3RlIHBlbmRpbmcgbWxpbmVzIiwgdG90YWxNZWRpYXMpOworICAgIGZvciAodW5z
aWduZWQgaSA9IDA7IGkgPCB0b3RhbE1lZGlhczsgaSsrKSB7CisgICAgICAgIGNvbnN0IEdzdFNE
UE1lZGlhKiBtZWRpYSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEobWVzc2FnZSwgaSk7Cisg
ICAgICAgIGNvbnN0IGNoYXIqIHR5cCA9IGdzdF9zZHBfbWVkaWFfZ2V0X21lZGlhKG1lZGlhKTsK
KyAgICAgICAgaWYgKCFnX3N0cl9lcXVhbCh0eXAsICJhdWRpbyIpICYmICFnX3N0cl9lcXVhbCh0
eXAsICJ2aWRlbyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyNpZm5kZWYgR1NUX0RJU0FC
TEVfR1NUX0RFQlVHCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbWVkaWFSZXByZXNlbnRhdGlv
bihnc3Rfc2RwX21lZGlhX2FzX3RleHQobWVkaWEpKTsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIlByb2Nlc3NpbmcgbWVkaWE6XG4lcyIsIG1lZGlhUmVwcmVzZW50
YXRpb24uZ2V0KCkpOworI2VuZGlmCisgICAgICAgIGNvbnN0IGNoYXIqIG1pZCA9IGdzdF9zZHBf
bWVkaWFfZ2V0X2F0dHJpYnV0ZV92YWwobWVkaWEsICJtaWQiKTsKKyAgICAgICAgaWYgKCFtaWQp
CisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBib29sIGlzSW5hY3RpdmUgPSBmYWxz
ZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgZ3N0X3NkcF9tZWRpYV9hdHRy
aWJ1dGVzX2xlbihtZWRpYSk7IGlpKyspIHsKKyAgICAgICAgICAgIGNvbnN0IEdzdFNEUEF0dHJp
YnV0ZSogYXR0ciA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZShtZWRpYSwgaWkpOworICAg
ICAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXR0ci0+a2V5LCAiaW5hY3RpdmUiKSkgeworICAgICAg
ICAgICAgICAgIGlzSW5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpc0luYWN0aXZlKSB7CisgICAgICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTa2lwcGluZyBpbmFjdGl2
ZSBtZWRpYSIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBt
X21lZGlhRm9yTWlkLnNldChTdHJpbmcobWlkKSwgZ19zdHJfZXF1YWwodHlwLCAiYXVkaW8iKSA/
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvIDogUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6VmlkZW8pOworCisgICAgICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9y
Zy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTkwNworICAgICAg
ICBpZiAoc2RwTWVkaWFIYXNBdHRyaWJ1dGVLZXkobWVkaWEsICJpY2UtbGl0ZSIpKSB7CisgICAg
ICAgICAgICBHUmVmUHRyPEdPYmplY3Q+IGljZTsKKyAgICAgICAgICAgIGdfb2JqZWN0X2dldCht
X3dlYnJ0Y0Jpbi5nZXQoKSwgImljZS1hZ2VudCIsICZpY2Uub3V0UHRyKCksIG51bGxwdHIpOwor
ICAgICAgICAgICAgZ19vYmplY3Rfc2V0KGljZS5nZXQoKSwgImljZS1saXRlIiwgVFJVRSwgbnVs
bHB0cik7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2Nh
cHNfbmV3X2VtcHR5KCkpOworICAgICAgICBWZWN0b3I8aW50PiBwYXlsb2FkVHlwZXM7CisgICAg
ICAgIHVuc2lnbmVkIHRvdGFsRm9ybWF0cyA9IGdzdF9zZHBfbWVkaWFfZm9ybWF0c19sZW4obWVk
aWEpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJNZWRpYSAl
cyBoYXMgJXUgZm9ybWF0cyIsIHR5cCwgdG90YWxGb3JtYXRzKTsKKyAgICAgICAgZm9yICh1bnNp
Z25lZCBqID0gMDsgaiA8IHRvdGFsRm9ybWF0czsgaisrKSB7CisgICAgICAgICAgICBhdXRvIGZv
cm1hdCA9IFN0cmluZyhnc3Rfc2RwX21lZGlhX2dldF9mb3JtYXQobWVkaWEsIGopKTsKKyAgICAg
ICAgICAgIGF1dG8gcGF5bG9hZFR5cGUgPSBwYXJzZUludGVnZXI8aW50Pihmb3JtYXQpOworICAg
ICAgICAgICAgaWYgKCFwYXlsb2FkVHlwZSB8fCAhKnBheWxvYWRUeXBlKSB7CisgICAgICAgICAg
ICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJJbnZhbGlkIHBheWxv
YWQgdHlwZTogJXMiLCBmb3JtYXQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIGZvcm1hdENhcHMgPSBhZG9w
dEdSZWYoZ3N0X3NkcF9tZWRpYV9nZXRfY2Fwc19mcm9tX21lZGlhKG1lZGlhLCAqcGF5bG9hZFR5
cGUpKTsKKyAgICAgICAgICAgIGlmICghZm9ybWF0Q2FwcykgeworICAgICAgICAgICAgICAgIEdT
VF9XQVJOSU5HX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTm8gY2FwcyBmb3VuZCBmb3IgcGF5
bG9hZCB0eXBlICVkIiwgKnBheWxvYWRUeXBlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVsYXkgU0RQIGF0dHJpYnV0ZXMgdG8g
dGhlIGNhcHMsIHRoaXMgaXMgc3BlY2lhbGx5IHVzZWZ1bCBzbyB0aGF0IGVsZW1lbnRzIGluCisg
ICAgICAgICAgICAvLyB3ZWJydGNiaW4gd2lsbCBiZSBhYmxlIHRvIGVuYWJsZSBSVFAgaGVhZGVy
IGV4dGVuc2lvbnMuCisgICAgICAgICAgICBnc3Rfc2RwX21lZGlhX2F0dHJpYnV0ZXNfdG9fY2Fw
cyhtZWRpYSwgZm9ybWF0Q2Fwcy5nZXQoKSk7CisKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVu
ZChjYXBzLmdldCgpLCBmb3JtYXRDYXBzLmxlYWtSZWYoKSk7CisgICAgICAgICAgICBtX3B0Q291
bnRlciA9IHN0ZDo6bWF4KG1fcHRDb3VudGVyLCAqcGF5bG9hZFR5cGUgKyAxKTsKKyAgICAgICAg
ICAgIHBheWxvYWRUeXBlcy5hcHBlbmQoKnBheWxvYWRUeXBlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHVuc2lnbmVkIHRvdGFsQ2FwcyA9IGdzdF9jYXBzX2dldF9zaXplKGNhcHMuZ2V0KCkpOwor
ICAgICAgICBpZiAodG90YWxDYXBzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAw
OyBqIDwgdG90YWxDYXBzOyBqKyspIHsKKyAgICAgICAgICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgaik7CisgICAgICAg
ICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94
LXJ0cCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiQ2FjaGluZyBwYXlsb2FkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBj
YXBzLmdldCgpKTsKKyAgICAgICAgICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5hcHBlbmQoeyBXVEZN
b3ZlKGNhcHMpLCBmYWxzZSwgV1RGTW92ZShwYXlsb2FkVHlwZXMpIH0pOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNvbmZpZ3VyZUFuZExpbmtT
b3VyY2UoUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyJiBzb3VyY2UpCit7Cisg
ICAgYXV0byBjYXBzID0gc291cmNlLmFsbG93ZWRDYXBzKCk7CisgICAgc3RkOjpvcHRpb25hbDxz
dGQ6OnBhaXI8UGVuZGluZ01MaW5lSW5mbywgR1JlZlB0cjxHc3RDYXBzPj4+IGZvdW5kOworICAg
IGZvciAoYXV0byYgbUxpbmVJbmZvIDogbV9yZW1vdGVNTGluZUluZm9zKSB7CisgICAgICAgIGlm
IChtTGluZUluZm8uaXNVc2VkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplKG1MaW5lSW5mby5jYXBzLmdl
dCgpKTsgaSsrKSB7CisgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRf
c3RydWN0dXJlKG1MaW5lSW5mby5jYXBzLmdldCgpLCBpKTsKKyAgICAgICAgICAgIGF1dG8gY2Fw
czIgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVj
dHVyZSksIG51bGxwdHIpKTsKKyAgICAgICAgICAgIGF1dG8gaW50ZXJzZWN0ZWQgPSBhZG9wdEdS
ZWYoZ3N0X2NhcHNfaW50ZXJzZWN0KGNhcHMuZ2V0KCksIGNhcHMyLmdldCgpKSk7CisgICAgICAg
ICAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5KGludGVyc2VjdGVkLmdldCgpKSkgeworICAgICAg
ICAgICAgICAgIGZvdW5kID0gc3RkOjptYWtlX3BhaXIobUxpbmVJbmZvLCBXVEZNb3ZlKGludGVy
c2VjdGVkKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICAgICAgaWYgKGZvdW5kLmhhc192YWx1ZSgpKQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgfQorCisgICAgYm9vbCBwYXlsb2FkVHlwZVdhc1NldCA9IGZhbHNlOworICAgIGlmIChmb3Vu
ZCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJVbnVzZWQg
YW5kIGNvbXBhdGlibGUgY2FwcyBmb3VuZCBmb3IgJSIgR1NUX1BUUl9GT1JNQVQgIi4uLiAlIiBH
U1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSwgZm91bmQtPnNlY29uZC5nZXQoKSk7CisgICAgICAg
IHBheWxvYWRUeXBlV2FzU2V0ID0gc291cmNlLnNldFBheWxvYWRUeXBlKGZvdW5kLT5zZWNvbmQp
OworICAgICAgICBmb3VuZC0+Zmlyc3QuaXNVc2VkID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAg
ICAgcGF5bG9hZFR5cGVXYXNTZXQgPSBzb3VyY2Uuc2V0UGF5bG9hZFR5cGUoY2Fwcyk7CisKKyAg
ICBpZiAoIXBheWxvYWRUeXBlV2FzU2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNv
dXJjZS5wYWQoKSkgeworICAgICAgICBzb3VyY2Uuc2V0U2lua1BhZChyZXF1ZXN0UGFkKG1fcmVx
dWVzdFBhZENvdW50ZXIsIHNvdXJjZS5hbGxvd2VkQ2FwcygpKSk7CisgICAgICAgIG1fcmVxdWVz
dFBhZENvdW50ZXIrKzsKKyAgICB9CisKKyAgICBhdXRvJiBzaW5rUGFkID0gc291cmNlLnBhZCgp
OworICAgIFJFTEVBU0VfQVNTRVJUKCFnc3RfcGFkX2lzX2xpbmtlZChzaW5rUGFkLmdldCgpKSk7
CisgICAgYXV0byBzb3VyY2VCaW4gPSBzb3VyY2UuYmluKCk7CisgICAgZ3N0X2Jpbl9hZGQoR1NU
X0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBzb3VyY2VCaW4uZ2V0KCkpOworICAgIHNvdXJj
ZS5saW5rKCk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBhZElkKGdzdF9wYWRfZ2V0X25hbWUo
c2lua1BhZC5nZXQoKSkpOworICAgIGF1dG8gZG90RmlsZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9P
QkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwgIi5vdXRnb2luZy0iLCBwYWRJZC5nZXQoKSk7
CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGlu
ZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRh
dGEoKSk7Cit9CisKK0dSZWZQdHI8R3N0UGFkPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXF1
ZXN0UGFkKHVuc2lnbmVkIG1saW5lSW5kZXgsIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGFsbG93
ZWRDYXBzKQoreworICAgIGF1dG8gcGFkSWQgPSBtYWtlU3RyaW5nKCJzaW5rXyIsIG1saW5lSW5k
ZXgpOworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19jb3B5KGFsbG93ZWRDYXBz
LmdldCgpKSk7CisKKyAgICBnc3RfY2Fwc19tYXBfaW5fcGxhY2UoY2Fwcy5nZXQoKSwgW10oR3N0
Q2Fwc0ZlYXR1cmVzKiwgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGdwb2ludGVyIHVzZXJEYXRh
KSAtPiBnYm9vbGVhbiB7CisgICAgICAgIGF1dG8qIGVuZFBvaW50ID0gcmVpbnRlcnByZXRfY2Fz
dDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50Kj4odXNlckRhdGEpOworICAgICAgICBnc3Rfc3RydWN0
dXJlX3NldChzdHJ1Y3R1cmUsICJwYXlsb2FkIiwgR19UWVBFX0lOVCwgZW5kUG9pbnQtPm1fcHRD
b3VudGVyKyssIG51bGxwdHIpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9LCB0aGlzKTsK
KworICAgIC8vIEZJWE1FOiBSZXN0cmljdGluZyBjYXBzIGFuZCBjb2RlYy1wcmVmZXJlbmNlcyBi
cmVha3MgY2FwcyBuZWdvdGlhdGlvbiBvZiBvdXRnb2luZyBzb3VyY2VzIGluCisgICAgLy8gc29t
ZSBjYXNlIChqaXRzaSkuCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAi
UmVxdWVzdGluZyBwYWQgJXMgcmVzdHJpY3RlZCB0byAlIiBHU1RfUFRSX0ZPUk1BVCwgcGFkSWQu
dXRmOCgpLmRhdGEoKSwgY2Fwcy5nZXQoKSk7CisgICAgYXV0byogcGFkVGVtcGxhdGUgPSBnc3Rf
ZWxlbWVudF9nZXRfcGFkX3RlbXBsYXRlKG1fd2VicnRjQmluLmdldCgpLCAic2lua18ldSIpOwor
ICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZChtX3dl
YnJ0Y0Jpbi5nZXQoKSwgcGFkVGVtcGxhdGUsIHBhZElkLnV0ZjgoKS5kYXRhKCksIGNhcHMuZ2V0
KCkpKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiB0cmFuc2NlaXZlcjsK
KyAgICBnX29iamVjdF9nZXQoc2lua1BhZC5nZXQoKSwgInRyYW5zY2VpdmVyIiwgJnRyYW5zY2Vp
dmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9zZXQodHJhbnNjZWl2ZXIuZ2V0
KCksICJjb2RlYy1wcmVmZXJlbmNlcyIsIGNhcHMuZ2V0KCksIG51bGxwdHIpOworICAgIHJldHVy
biBzaW5rUGFkOworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYWNrKEdT
dHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIHNlbmRlciwgTWVkaWFTdHJlYW1UcmFjayYgdHJhY2ss
IGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKQoreworICAgIEdTdHJlYW1lclJ0cFNlbmRlckJh
Y2tlbmQ6OlNvdXJjZSBzb3VyY2U7CisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IHJ0
Y1NlbmRlcjsKKworICAgIGlmICh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNBdWRpbygpKSB7Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyBvdXRnb2lu
ZyBhdWRpbyBzb3VyY2UiKTsKKyAgICAgICAgYXV0byBhdWRpb1NvdXJjZSA9IFJlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsK
KyAgICAgICAgY29uZmlndXJlQW5kTGlua1NvdXJjZShhdWRpb1NvdXJjZSk7CisKKyAgICAgICAg
cnRjU2VuZGVyID0gYXVkaW9Tb3VyY2UtPnNlbmRlcigpOworICAgICAgICBzb3VyY2UgPSBXVEZN
b3ZlKGF1ZGlvU291cmNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0
cmFjay5wcml2YXRlVHJhY2soKS5oYXNWaWRlbygpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIG91dGdvaW5nIHZpZGVvIHNvdXJjZSIpOworICAg
ICAgICBhdXRvIHZpZGVvU291cmNlID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVh
bWVyOjpjcmVhdGUodHJhY2sucHJpdmF0ZVRyYWNrKCkpOworICAgICAgICBjb25maWd1cmVBbmRM
aW5rU291cmNlKHZpZGVvU291cmNlKTsKKworICAgICAgICBydGNTZW5kZXIgPSB2aWRlb1NvdXJj
ZS0+c2VuZGVyKCk7CisgICAgICAgIHNvdXJjZSA9IFdURk1vdmUodmlkZW9Tb3VyY2UpOworICAg
IH0KKworICAgIHNlbmRlci5zZXRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKKworICAgIGlmIChh
dXRvIHJ0cFNlbmRlciA9IHNlbmRlci5ydGNTZW5kZXIoKSkgeworICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBbHJlYWR5IGhhcyBhIHNlbmRlci4iKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc2VuZGVyLnNldFJUQ1NlbmRlcihXVEZNb3Zl
KHJ0Y1NlbmRlcikpOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAi
U2VuZGVyIGNvbmZpZ3VyZWQiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBz
ZW5kZXIpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVtb3Zp
bmcgdHJhY2siKTsKKyAgICBhdXRvIGJpbiA9IHNlbmRlci5zdG9wU291cmNlKCk7CisgICAgaWYg
KGJpbikKKyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0
KCkpLCBiaW4uZ2V0KCkpOworICAgIHNlbmRlci5jbGVhclNvdXJjZSgpOworICAgIG9uTmVnb3Rp
YXRpb25OZWVkZWQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0
ZU9mZmVyKGNvbnN0IFJUQ09mZmVyT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICAvLyBmbHVzaFBl
bmRpbmdTb3VyY2VzKHRydWUpOworCisgICAgLy8gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Au
b3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvLS9tZXJnZV9yZXF1ZXN0cy8xODc3CisgICAg
R1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IG9mZmVyT3B0aW9ucyhnc3Rfc3RydWN0dXJlX25ldygi
d2VicnRjYmluLW9mZmVyLW9wdGlvbnMiLCAiaWNlLXJlc3RhcnQiLCBHX1RZUEVfQk9PTEVBTiwg
b3B0aW9ucy5pY2VSZXN0YXJ0LCBudWxscHRyKSk7CisgICAgLy8gRklYTUU6IFBsdW1iIG9wdGlv
bnMudm9pY2VBY3Rpdml0eURldGVjdGlvbi4KKyAgICBpbml0aWF0ZSh0cnVlLCBXVEZNb3ZlKG9m
ZmVyT3B0aW9ucykpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRl
QW5zd2VyKCkKK3sKKyAgICBpbml0aWF0ZShmYWxzZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6aW5pdGlhdGUoYm9vbCBpc0luaXRpYXRvciwgR1VuaXF1ZVB0
cjxHc3RTdHJ1Y3R1cmU+JiYgb3B0aW9ucykKK3sKKyAgICBtX2lzSW5pdGlhdG9yID0gaXNJbml0
aWF0b3I7CisgICAgY29uc3QgY2hhciogdHlwZSA9IGlzSW5pdGlhdG9yID8gIm9mZmVyIiA6ICJh
bnN3ZXIiOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNyZWF0aW5n
ICVzIiwgdHlwZSk7CisgICAgYXV0byBzaWduYWxOYW1lID0gbWFrZVN0cmluZygiY3JlYXRlLSIs
IHR5cGUpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgc2ln
bmFsTmFtZS5hc2NpaSgpLmRhdGEoKSwgb3B0aW9ucy5yZWxlYXNlKCksIGdzdF9wcm9taXNlX25l
d193aXRoX2NoYW5nZV9mdW5jKFtdKEdzdFByb21pc2UqIHByb21pc2UsIGdwb2ludGVyIHVzZXJE
YXRhKSB7CisgICAgICAgIGF1dG8qIGVuZHBvaW50ID0gcmVpbnRlcnByZXRfY2FzdDxHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Kj4odXNlckRhdGEpOworICAgICAgICBhdXRvIGNsZWFudXAgPSBtYWtl
U2NvcGVFeGl0KFsmXSB7CisgICAgICAgICAgICBnc3RfcHJvbWlzZV91bnJlZihwcm9taXNlKTsK
KyAgICAgICAgfSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZ3N0X3Byb21pc2Vfd2FpdChwcm9t
aXNlKTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBHU1RfUFJPTUlTRV9SRVNVTFRfUkVQTElFRCkg
eworICAgICAgICAgICAgZW5kcG9pbnQtPmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbkZhaWxlZCh7
IH0pOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgYXV0
byogcmVwbHkgPSBnc3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZSk7CisgICAgICAgIFJFTEVB
U0VfQVNTRVJUKHJlcGx5KTsKKyAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJl
cGx5LCAiZXJyb3IiKSkgeworICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJyb3I+IGVycm9y
OworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksICJlcnJvciIsIEdfVFlQRV9F
UlJPUiwgJmVycm9yLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGVuZHBvaW50LT5j
cmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoV1RGTW92ZShlcnJvcikpOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgY2hhciogdHlwZSA9IGVuZHBv
aW50LT5tX2lzSW5pdGlhdG9yID8gIm9mZmVyIiA6ICJhbnN3ZXIiOworICAgICAgICBHVW5pcXVl
T3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVzY3JpcHRpb247CisgICAgICAg
IGdzdF9zdHJ1Y3R1cmVfZ2V0KHJlcGx5LCB0eXBlLCBHU1RfVFlQRV9XRUJSVENfU0VTU0lPTl9E
RVNDUklQVElPTiwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKworI2lmbmRlZiBH
U1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHAoZ3N0X3Nk
cF9tZXNzYWdlX2FzX3RleHQoZGVzY3JpcHRpb24tPnNkcCkpOworICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKGVuZHBvaW50LT5waXBlbGluZSgpLCAiQ3JlYXRlZCAlczogJXMiLCB0eXBlLCBzZHAu
Z2V0KCkpOworI2VuZGlmCisgICAgICAgIGVuZHBvaW50LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRp
b25TdWNjZWVkZWQoV1RGTW92ZShkZXNjcmlwdGlvbikpOworICAgIH0sIHRoaXMsIG51bGxwdHIp
KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnZXRTdGF0cyhHc3RQYWQqIHBh
ZCwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQoreworICAgIG1fc3RhdHNDb2xsZWN0
b3ItPmdldFN0YXRzKFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgcHJvdGVjdGVkVGhpcyA9
IFJlZigqdGhpcyldKGF1dG8mJiByZXBvcnQpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoaXNN
YWluVGhyZWFkKCkpOworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkgfHwg
IXJlcG9ydCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBwcm9taXNlLT5yZXNvbHZl
PElETEludGVyZmFjZTxSVENTdGF0c1JlcG9ydD4+KHJlcG9ydC5yZWxlYXNlTm9uTnVsbCgpKTsK
KyAgICB9LCBwYWQpOworfQorCitNZWRpYVN0cmVhbSYgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
bWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFtKFN0cmluZyBsYWJlbCkKK3sKKyAgICBhdXRvIG1lZGlh
U3RyZWFtID0gbV9yZW1vdGVTdHJlYW1zQnlJZC5lbnN1cmUobGFiZWwsIFtsYWJlbCwgdGhpc10o
KSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
Km1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNvbm5lY3Rpb24oKS5zY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkpOworICAgICAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZShkb2N1bWVudCwgTWVk
aWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoZG9jdW1lbnQubG9nZ2VyKCksIHsgfSwgV1RGTW92ZShs
YWJlbCkpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKm1lZGlhU3RyZWFtLml0ZXJhdG9yLT52YWx1
ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRSZW1vdGVTdHJlYW0oR3N0
UGFkKiBwYWQpCit7CisgICAgbV9wZW5kaW5nSW5jb21pbmdTdHJlYW1zKys7CisKKyAgICBhdXRv
IGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9xdWVyeV9jYXBzKHBhZCwgbnVsbHB0cikpOworICAg
IGNvbnN0IGNoYXIqIG1lZGlhVHlwZSA9IGNhcHNNZWRpYVR5cGUoY2Fwcy5nZXQoKSk7CisgICAg
R1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIHJlbW90ZSAlcyBzdHJl
YW0gdG8gJSIgR1NUX1BUUl9GT1JNQVQgIiAldSBwZW5kaW5nIGluY29taW5nIHN0cmVhbXMsIGNh
cHM6ICUiIEdTVF9QVFJfRk9STUFULCBtZWRpYVR5cGUsIHBhZCwgbV9wZW5kaW5nSW5jb21pbmdT
dHJlYW1zLCBjYXBzLmdldCgpKTsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2
ZXI+IHJ0Y1RyYW5zY2VpdmVyOworICAgIGdfb2JqZWN0X2dldChwYWQsICJ0cmFuc2NlaXZlciIs
ICZydGNUcmFuc2NlaXZlci5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICBhdXRvKiB0cmFuc2Nl
aXZlciA9IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmV4aXN0aW5nVHJhbnNjZWl2ZXIoWyZdKGF1
dG8mIHRyYW5zY2VpdmVyQmFja2VuZCkgeworICAgICAgICByZXR1cm4gcnRjVHJhbnNjZWl2ZXIu
Z2V0KCkgPT0gdHJhbnNjZWl2ZXJCYWNrZW5kLnJ0Y1RyYW5zY2VpdmVyKCk7CisgICAgfSk7Cisg
ICAgaWYgKCF0cmFuc2NlaXZlcikgeworICAgICAgICBhdXRvIHR5cGUgPSBkb0NhcHNIYXZlVHlw
ZShjYXBzLmdldCgpLCAiYXVkaW8iKSA/IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlv
IDogUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW87CisgICAgICAgIHRyYW5zY2VpdmVy
ID0gJm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLm5ld1JlbW90ZVRyYW5zY2VpdmVyKG1ha2VVbmlx
dWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJ0Y1RyYW5zY2VpdmVy
KSksIHR5cGUpOworICAgIH0KKworICAgIEdVbmlxdWVPdXRQdHI8R3N0V2ViUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uPiBkZXNjcmlwdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0
KCksICJyZW1vdGUtZGVzY3JpcHRpb24iLCAmZGVzY3JpcHRpb24ub3V0UHRyKCksIG51bGxwdHIp
OworCisgICAgdW5zaWduZWQgbUxpbmVJbmRleDsKKyAgICBnX29iamVjdF9nZXQocnRjVHJhbnNj
ZWl2ZXIuZ2V0KCksICJtbGluZWluZGV4IiwgJm1MaW5lSW5kZXgsIG51bGxwdHIpOworICAgIGNv
bnN0IGF1dG8qIG1lZGlhID0gZ3N0X3NkcF9tZXNzYWdlX2dldF9tZWRpYShkZXNjcmlwdGlvbi0+
c2RwLCBtTGluZUluZGV4KTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHNkcChnc3Rfc2RwX21lZGlh
X2FzX3RleHQobWVkaWEpKTsKKyAgICBhdXRvIHNkcFN0cmluZyA9IG1ha2VTdHJpbmcoc2RwLmdl
dCgpKTsKKworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IG5hbWUoZ3N0X3BhZF9nZXRfbmFtZShwYWQp
KTsKKyAgICBTdHJpbmcgbGFiZWwobmFtZS5nZXQoKSk7CisgICAgYXV0byBrZXkgPSBtYWtlU3Ry
aW5nKCJtc2lkOiIpOworICAgIGF1dG8gbGluZXMgPSBzZHBTdHJpbmcuc3BsaXQoJ1xuJyk7Cisg
ICAgZm9yIChhdXRvJiBsaW5lIDogbGluZXMpIHsKKyAgICAgICAgYXV0byBpID0gbGluZS5maW5k
KGtleSk7CisgICAgICAgIGlmIChpICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBhdXRvIHRt
cCA9IGxpbmUuc3Vic3RyaW5nKGkgKyBrZXkuYXNjaWkoKS5sZW5ndGgoKSk7CisgICAgICAgICAg
ICBsYWJlbCA9IHRtcC5zdWJzdHJpbmcoMCwgdG1wLmZpbmQoJyAnKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGlu
ZS5nZXQoKSwgIm1zaWQ6ICVzIiwgbGFiZWwuYXNjaWkoKS5kYXRhKCkpOworCisgICAgR3N0RWxl
bWVudCogYmluID0gbnVsbHB0cjsKKyAgICBhdXRvJiB0cmFjayA9IHRyYW5zY2VpdmVyLT5yZWNl
aXZlcigpLnRyYWNrKCk7CisgICAgYXV0byYgc291cmNlID0gdHJhY2sucHJpdmF0ZVRyYWNrKCku
c291cmNlKCk7CisgICAgaWYgKHNvdXJjZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkKKyAgICAg
ICAgYmluID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
Jj4oc291cmNlKS5iaW4oKTsKKyAgICBlbHNlIGlmIChzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291
cmNlKCkpCisgICAgICAgIGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lciY+KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1f
cGlwZWxpbmUuZ2V0KCkpLCBiaW4pOworICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChiaW4sICJzaW5rIikpOworICAgIGdzdF9wYWRfbGluayhw
YWQsIHNpbmtQYWQuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJl
bnQoYmluKTsKKworICAgIHRyYWNrLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgc291cmNlLnNldE11
dGVkKGZhbHNlKTsKKworICAgIGF1dG8mIG1lZGlhU3RyZWFtID0gbWVkaWFTdHJlYW1Gcm9tUlRD
U3RyZWFtKGxhYmVsKTsKKyAgICBtZWRpYVN0cmVhbS5hZGRUcmFja0Zyb21QbGF0Zm9ybSh0cmFj
ayk7CisgICAgbV9wZW5kaW5nU3RyZWFtcy5hcHBlbmQoJm1lZGlhU3RyZWFtKTsKKworICAgIGF1
dG8gZG90RmlsZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdl
dCgpKSwgIi5pbmNvbWluZy0iLCBtZWRpYVR5cGUsICctJywgR1NUX09CSkVDVF9OQU1FKHBhZCkp
OworICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxp
bmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5k
YXRhKCkpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVJlbW90ZVN0
cmVhbShHc3RQYWQqKQoreworICAgIEdTVF9GSVhNRV9PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwg
InJlbW92ZVJlbW90ZVN0cmVhbSIpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6
b3B0aW9uYWw8R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHMoY29uc3QgU3RyaW5nJiBraW5kLCBj
b25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQ6OlNvdXJjZSYmIHNvdXJjZSkKK3sKKyAgICBpZiAoIW1fd2VicnRjQmluKQorICAgICAgICBy
ZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdl
dCgpLCAiJXp1IHN0cmVhbXMgaW4gaW5pdCBkYXRhIiwgaW5pdC5zdHJlYW1zLnNpemUoKSk7CisK
KyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGJ1aWxkIHRoZSBjYXBzIGZyb20gdGhlIGluaXQuc2Vu
ZEVuY29kaW5ncz8gUHJvYmxlbSBpcyB0aGVyZSBpcyBubworICAgIC8vIGVuY29kaW5nTmFtZSBv
ciBjbG9ja1JhdGUgaW4gUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzLgorICAgIFZlY3RvcjxzdGQ6
OnBhaXI8Y29uc3QgY2hhciosIGludD4+IGVuY29kaW5nczsKKyAgICBjb25zdCBjaGFyKiBtZWRp
YSA9IGtpbmQudXRmOCgpLmRhdGEoKTsKKyAgICBpZiAoa2luZCA9PSAidmlkZW8iX3MpIHsKKyAg
ICAgICAgZW5jb2RpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMyk7CisgICAgICAgIGVuY29k
aW5ncy5hcHBlbmQoeyAiVlA4IiwgOTAwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy5hcHBlbmQo
eyAiVlA5IiwgOTAwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy5hcHBlbmQoeyAiSDI2NCIsIDkw
MDAwIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5ncy5yZXNlcnZlSW5pdGlhbENh
cGFjaXR5KDEpOworICAgICAgICBlbmNvZGluZ3MuYXBwZW5kKHsgIk9QVVMiLCA0ODAwMCB9KTsK
KyAgICB9CisKKyAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkp
OworICAgIGZvciAoYXV0byYgW2VuY29kaW5nTmFtZSwgY2xvY2tSYXRlXSA6IGVuY29kaW5ncykg
eworICAgICAgICBnc3RfY2Fwc19hcHBlbmQoY2Fwcy5nZXQoKSwgZ3N0X2NhcHNfbmV3X3NpbXBs
ZSgiYXBwbGljYXRpb24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCBtZWRpYSwgImVu
Y29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBlbmNvZGluZ05hbWUsCisgICAgICAgICAgICAi
cGF5bG9hZCIsIEdfVFlQRV9JTlQsIG1fcHRDb3VudGVyKyssICJjbG9jay1yYXRlIiwgR19UWVBF
X0lOVCwgY2xvY2tSYXRlLCBudWxscHRyKSk7CisgICAgfQorCisgICAgYXV0byBkaXJlY3Rpb24g
PSBmcm9tUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oaW5pdC5kaXJlY3Rpb24pOworI2lmbmRl
ZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRlc2MoZ19lbnVt
X3RvX3N0cmluZyhHU1RfVFlQRV9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTiwgZGly
ZWN0aW9uKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5n
ICVzIHRyYW5zY2VpdmVyIGZvciBwYXlsb2FkICUiIEdTVF9QVFJfRk9STUFULCBkZXNjLmdldCgp
LCBjYXBzLmdldCgpKTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IE5vbmUgb2YgdGhpcyAoZXhj
ZXB0ZWQgZGlyZWN0aW9uKSBpcyBwYXNzZWQgdG8gd2VicnRjYmluIHlldC4KKyAgICBHVW5pcXVl
UHRyPEdzdFN0cnVjdHVyZT4gaW5pdERhdGEoZ3N0X3N0cnVjdHVyZV9uZXcoInRyYW5zY2VpdmVy
LWluaXQtZGF0YSIsICJkaXJlY3Rpb24iLCBHU1RfVFlQRV9XRUJSVENfUlRQX1RSQU5TQ0VJVkVS
X0RJUkVDVElPTiwgZGlyZWN0aW9uLCBudWxscHRyKSk7CisKKyAgICBHVmFsdWUgc3RyZWFtSWRz
VmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgZ192YWx1ZV9pbml0KCZzdHJlYW1JZHNWYWx1ZSwg
R1NUX1RZUEVfTElTVCk7CisgICAgZm9yIChhdXRvJiBzdHJlYW0gOiBpbml0LnN0cmVhbXMpIHsK
KyAgICAgICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOworICAgICAgICBnX3ZhbHVlX2lu
aXQoJnZhbHVlLCBHX1RZUEVfU1RSSU5HKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKCZ2
YWx1ZSwgc3RyZWFtLT5pZCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBnc3RfdmFsdWVfbGlz
dF9hcHBlbmRfdmFsdWUoJnN0cmVhbUlkc1ZhbHVlLCAmdmFsdWUpOworICAgICAgICBnX3ZhbHVl
X3Vuc2V0KCZ2YWx1ZSk7CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZShpbml0
RGF0YS5nZXQoKSwgInN0cmVhbS1pZHMiLCAmc3RyZWFtSWRzVmFsdWUpOworCisgICAgR1ZhbHVl
IGVuY29kaW5nc1ZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgmZW5jb2Rp
bmdzVmFsdWUsIEdTVF9UWVBFX0xJU1QpOworICAgIGlmIChraW5kID09ICJhdWRpbyIpIHsKKyAg
ICAgICAgaWYgKCFpbml0LnNlbmRFbmNvZGluZ3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBh
dXRvIGVuY29kaW5nRGF0YSA9IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoaW5pdC5zZW5kRW5j
b2RpbmdzWzBdKTsKKyAgICAgICAgICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAg
ICAgICAgICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdTVF9UWVBFX1NUUlVDVFVSRSk7CisgICAg
ICAgICAgICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSgmdmFsdWUsIGVuY29kaW5nRGF0YS5nZXQo
KSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUoJmVuY29kaW5nc1Zh
bHVlLCAmdmFsdWUpOworICAgICAgICAgICAgZ192YWx1ZV91bnNldCgmdmFsdWUpOworICAgICAg
ICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbmNvZGluZyA6IGluaXQuc2Vu
ZEVuY29kaW5ncykgeworICAgICAgICAgICAgYXV0byBlbmNvZGluZ0RhdGEgPSBmcm9tUlRDRW5j
b2RpbmdQYXJhbWV0ZXJzKGVuY29kaW5nKTsKKyAgICAgICAgICAgIEdWYWx1ZSB2YWx1ZSA9IEdf
VkFMVUVfSU5JVDsKKyAgICAgICAgICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdTVF9UWVBFX1NU
UlVDVFVSRSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSgmdmFsdWUsIGVu
Y29kaW5nRGF0YS5nZXQoKSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFs
dWUoJmVuY29kaW5nc1ZhbHVlLCAmdmFsdWUpOworICAgICAgICAgICAgZ192YWx1ZV91bnNldCgm
dmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZShp
bml0RGF0YS5nZXQoKSwgImVuY29kaW5ncyIsICZlbmNvZGluZ3NWYWx1ZSk7CisKKyAgICBHUmVm
UHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBydGNUcmFuc2NlaXZlcjsKKyAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJhZGQtdHJhbnNjZWl2ZXIiLCBkaXJl
Y3Rpb24sIGNhcHMuZ2V0KCksICZydGNUcmFuc2NlaXZlci5vdXRQdHIoKSk7CisgICAgaWYgKCFy
dGNUcmFuc2NlaXZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8g
dHJhbnNjZWl2ZXIgPSBtYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4o
V1RGTW92ZShydGNUcmFuc2NlaXZlcikpOworICAgIHJldHVybiBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpCYWNrZW5kcyB7IHRyYW5zY2VpdmVyLT5jcmVhdGVTZW5kZXJCYWNrZW5kKG1fcGVlckNv
bm5lY3Rpb25CYWNrZW5kLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUoaW5pdERhdGEpKSwgdHJh
bnNjZWl2ZXItPmNyZWF0ZVJlY2VpdmVyQmFja2VuZCgpLCBXVEZNb3ZlKHRyYW5zY2VpdmVyKSB9
OworfQorCitzdGQ6Om9wdGlvbmFsPEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkJhY2tlbmRzPiBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcmIHRyYWNr
S2luZCwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiBpbml0KQoreworICAgIHJldHVybiBj
cmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKHRyYWNrS2luZCwgaW5pdCwgbnVsbHB0cik7Cit9CisK
K0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSBHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpjcmVhdGVTb3VyY2VGb3JUcmFjayhNZWRpYVN0cmVhbVRyYWNrJiB0cmFjaykKK3sKKyAgICBp
ZiAodHJhY2sucHJpdmF0ZVRyYWNrKCkuaGFzQXVkaW8oKSkKKyAgICAgICAgcmV0dXJuIFJlYWx0
aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFj
aygpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHRyYWNrLnByaXZhdGVUcmFjaygpLmhhc1ZpZGVv
KCkpOworICAgIHJldHVybiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNy
ZWF0ZSh0cmFjay5wcml2YXRlVHJhY2soKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYW5z
Y2VpdmVyKE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlcklu
aXQmIGluaXQpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHModHJhY2su
a2luZCgpLCBpbml0LCBjcmVhdGVTb3VyY2VGb3JUcmFjayh0cmFjaykpOworfQorCit2b2lkIEdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kJiwgTWVkaWFTdHJlYW1UcmFjayYpCit7CisgICAgR1NUX0ZJWE1FX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAic2V0U2VuZGVyU291cmNlRnJvbVRyYWNrIik7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFRyYW5z
Y2VpdmVyQmFja2VuZD4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dHJhbnNjZWl2ZXJCYWNrZW5k
RnJvbVNlbmRlcihHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBiYWNrZW5kKQoreworICAgIEdS
ZWZQdHI8R0FycmF5PiB0cmFuc2NlaXZlcnM7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1f
d2VicnRjQmluLmdldCgpLCAiZ2V0LXRyYW5zY2VpdmVycyIsICZ0cmFuc2NlaXZlcnMub3V0UHRy
KCkpOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTG9va2luZyBm
b3Igc2VuZGVyICVwIGluICV1IGV4aXN0aW5nIHRyYW5zY2VpdmVycyIsIGJhY2tlbmQucnRjU2Vu
ZGVyKCksIHRyYW5zY2VpdmVycy0+bGVuKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dHJhbnNjZWl2ZXJzLT5sZW47IGkrKykgeworICAgICAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZl
ciogY3VycmVudCA9IGdfYXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdldCgpLCBHc3RXZWJSVENS
VFBUcmFuc2NlaXZlciosIGkpOworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4g
c2VuZGVyOworICAgICAgICBnX29iamVjdF9nZXQoY3VycmVudCwgInNlbmRlciIsICZzZW5kZXIu
b3V0UHRyKCksIG51bGxwdHIpOworCisgICAgICAgIGlmICghc2VuZGVyKQorICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgIGlmIChzZW5kZXIuZ2V0KCkgPT0gYmFja2VuZC5ydGNTZW5kZXIo
KSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kPihjdXJyZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRJY2VDYW5kaWRhdGUoR1N0cmVhbWVy
SWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUsIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2Fu
ZGlkYXRlQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJBZGRpbmcgSUNFIGNhbmRpZGF0ZSAlcyIsIGNhbmRpZGF0ZS5jYW5kaWRh
dGUudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpZiAoIWNhbmRpZGF0ZS5jYW5kaWRhdGUuc3RhcnRz
V2l0aCgiY2FuZGlkYXRlOiIpKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Rhc2sgPSBj
cmVhdGVTaGFyZWRUYXNrPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRlQ2Fs
bGJhY2tGdW5jdGlvbj4oV1RGTW92ZShjYWxsYmFjaykpXSgpIG11dGFibGUgeworICAgICAgICAg
ICAgdGFzay0+cnVuKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiRXhwZWN0IGxpbmU6IGNh
bmRpZGF0ZTo8Y2FuZGlkYXRlLXN0cj4iIH0pOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGF1dG8gcGFyc2VkQ2FuZGlkYXRlID0gcGFyc2VJY2VDYW5kaWRhdGVT
RFAoY2FuZGlkYXRlLmNhbmRpZGF0ZSk7CisgICAgaWYgKCFwYXJzZWRDYW5kaWRhdGUpIHsKKyAg
ICAgICAgY2FsbE9uTWFpblRocmVhZChbdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNh
bGxiYWNrKSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICB0YXNrLT5ydW4oRXhjZXB0aW9uIHsg
T3BlcmF0aW9uRXJyb3IsICJFcnJvciBwcm9jZXNzaW5nIElDRSBjYW5kaWRhdGUiIH0pOworICAg
ICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBpbnZhbGlk
IHNkcE1MaW5lSW5kZXggZXhjZXB0aW9uIG5vdCByZWxheWVkIGZyb20gd2VicnRjYmluLgorICAg
IC8vIEZJWE1FOiBJZGVhbGx5IHRoaXMgc2hvdWxkIHBhc3MgdGhlIHJlc3VsdC9lcnJvciB0byBh
IEdzdFByb21pc2Ugb2JqZWN0LgorICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jp
bi5nZXQoKSwgImFkZC1pY2UtY2FuZGlkYXRlIiwgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgsIGNh
bmRpZGF0ZS5jYW5kaWRhdGUudXRmOCgpLmRhdGEoKSk7CisgICAgY2FsbE9uTWFpblRocmVhZChb
dGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpBZGRJY2VDYW5k
aWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxiYWNrKSksIGRlc2NyaXB0aW9ucyA9
IGRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCkpXSgpIG11dGFibGUg
eworICAgICAgICB0YXNrLT5ydW4oV1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAgICB9KTsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6Y3JlYXRlRGF0YUNoYW5uZWwoY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgUlRD
RGF0YUNoYW5uZWxJbml0JiBvcHRpb25zKQoreworICAgIGlmICghbV93ZWJydGNCaW4pCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbml0ID0gR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyOjpmcm9tUlRDRGF0YUNoYW5uZWxJbml0KG9wdGlvbnMpOworICAgIEdTVF9ERUJV
R19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNyZWF0aW5nIGRhdGEgY2hhbm5lbCBmb3IgaW5p
dCBvcHRpb25zICUiIEdTVF9QVFJfRk9STUFULCBpbml0LmdldCgpKTsKKyAgICBHUmVmUHRyPEdz
dFdlYlJUQ0RhdGFDaGFubmVsPiBjaGFubmVsOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSht
X3dlYnJ0Y0Jpbi5nZXQoKSwgImNyZWF0ZS1kYXRhLWNoYW5uZWwiLCBsYWJlbC51dGY4KCkuZGF0
YSgpLCBpbml0LmdldCgpLCAmY2hhbm5lbC5vdXRQdHIoKSk7CisgICAgaWYgKCFjaGFubmVsKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyPihXVEZNb3ZlKGNoYW5uZWwpKTsKK30KKwordm9pZCBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkRhdGFDaGFubmVsKEdzdFdlYlJUQ0RhdGFDaGFubmVs
KiBkYXRhQ2hhbm5lbCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJJbmNvbWluZyBkYXRhIGNoYW5uZWwiKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFu
bmVsPiBjaGFubmVsID0gZGF0YUNoYW5uZWw7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVj
dGVkVGhpcyA9IFJlZigqdGhpcyksIGRhdGFDaGFubmVsID0gV1RGTW92ZShjaGFubmVsKV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90ZWN0ZWRUaGlzLT5tX3BpcGVs
aW5lLmdldCgpLCAiSW5jb21pbmcgZGF0YSBjaGFubmVsIDEiKTsKKyAgICAgICAgaWYgKHByb3Rl
Y3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKHByb3RlY3RlZFRoaXMtPm1fcGlwZWxpbmUuZ2V0KCksICJJbmNvbWluZyBk
YXRhIGNoYW5uZWwgMiIpOworICAgICAgICBhdXRvJiBjb25uZWN0aW9uID0gcHJvdGVjdGVkVGhp
cy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29ubmVjdGlvbigpOworICAgICAgICBjb25uZWN0
aW9uLmRpc3BhdGNoRXZlbnQoR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGFubmVsRXZl
bnQoKmNvbm5lY3Rpb24uZG9jdW1lbnQoKSwgV1RGTW92ZShkYXRhQ2hhbm5lbCkpKTsKKyAgICB9
KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjbG9zZSgpCit7CisgICAgLy8g
aHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQv
LS9pc3N1ZXMvMTE4MQorICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNs
b3NpbmciKTsKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0
YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9SRUFEWSk7CisKKyNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKKyAgICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKwordm9pZCBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wKCkKK3sKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKKyAgICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKKworICAgIGlmICghbV9waXBlbGlu
ZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdl
dCgpLCAiU3RvcHBpbmciKTsKKyAgICB0ZWFyZG93blBpcGVsaW5lKCk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6c3VzcGVuZCgpCit7CisgICAgaWYgKCFtX3BpcGVsaW5lKQor
ICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJTdXNwZW5kaW5nIik7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0
KCksIEdTVF9TVEFURV9QQVVTRUQpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OnJlc3VtZSgpCit7CisgICAgaWYgKCFtX3BpcGVsaW5lKQorICAgICAgICByZXR1cm47CisKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJSZXN1bWluZyIpOworICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25OZWdvdGlhdGlvbk5lZWRlZCgp
Cit7CisgICAgbV9pc05lZ290aWF0aW9uTmVlZGVkID0gdHJ1ZTsKKworICAgIEdTVF9ERUJVR19P
QkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNoZWNraW5nIG5lZ290aWF0aW9uIHN0YXR1cyIpOwor
CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyldIHsKKyAg
ICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHByb3RlY3RlZFRoaXMtPm1fcGlwZWxpbmUuZ2V0
KCksICJOZWdvdGlhdGlvbiBuZWVkZWQhIik7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVl
ckNvbm5lY3Rpb25CYWNrZW5kLm1hcmtBc05lZWRpbmdOZWdvdGlhdGlvbigwKTsKKyAgICB9KTsK
K30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUNvbm5lY3Rpb25DaGFuZ2Uo
KQoreworICAgIEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZTsKKyAgICBnX29iamVj
dF9nZXQobV93ZWJydGNCaW4uZ2V0KCksICJpY2UtY29ubmVjdGlvbi1zdGF0ZSIsICZzdGF0ZSwg
bnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhp
cyksIGNvbm5lY3Rpb25TdGF0ZSA9IHRvUlRDSWNlQ29ubmVjdGlvblN0YXRlKHN0YXRlKV0gewor
ICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGF1dG8mIGNvbm5lY3Rpb24gPSBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChjb25uZWN0aW9uLmljZUNv
bm5lY3Rpb25TdGF0ZSgpICE9IGNvbm5lY3Rpb25TdGF0ZSkKKyAgICAgICAgICAgIGNvbm5lY3Rp
b24udXBkYXRlSWNlQ29ubmVjdGlvblN0YXRlKGNvbm5lY3Rpb25TdGF0ZSk7CisgICAgfSk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VHYXRoZXJpbmdDaGFuZ2UoKQor
eworICAgIEdzdFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIHN0YXRlOworICAgIGdfb2JqZWN0X2dl
dChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImljZS1nYXRoZXJpbmctc3RhdGUiLCAmc3RhdGUsIG51bGxw
dHIpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCBz
dGF0ZV0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGF1dG8mIGNvbm5lY3Rpb24gPSBwcm90ZWN0ZWRUaGlzLT5t
X3BlZXJDb25uZWN0aW9uQmFja2VuZC5jb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChzdGF0ZSA9
PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfQ09NUExFVEUpCisgICAgICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5kb25lR2F0aGVyaW5nQ2FuZGlk
YXRlcygpOworICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJ
TkdfU1RBVEVfR0FUSEVSSU5HKQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJY2VHYXRo
ZXJpbmdTdGF0ZShSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5nKTsKKyAgICAgICAgZWxz
ZSBpZiAoc3RhdGUgPT0gR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX05FVykKKyAgICAg
ICAgICAgIGNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUoUlRDSWNlR2F0aGVyaW5n
U3RhdGU6Ok5ldyk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
b25JY2VDYW5kaWRhdGUoZ3VpbnQgc2RwTUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5kaWRhdGUp
Cit7CisgICAgLy8gRklYTUU6IEdldCBtaWQgZnJvbSBjYW5kaWRhdGU/CisgICAgR1VuaXF1ZU91
dFB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IGRlc2NyaXB0aW9uOworICAgIGdfb2Jq
ZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImxvY2FsLWRlc2NyaXB0aW9uIiwgJmRlc2NyaXB0
aW9uLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBjb25zdCBHc3RTRFBNZWRpYSogbWVkaWEgPSBnc3Rfc2RwX21lc3NhZ2Vf
Z2V0X21lZGlhKGRlc2NyaXB0aW9uLT5zZHAsIHNkcE1MaW5lSW5kZXgpOworICAgIFN0cmluZyBj
YW5kaWRhdGVNaWQoZ3N0X3NkcF9tZWRpYV9nZXRfYXR0cmlidXRlX3ZhbChtZWRpYSwgIm1pZCIp
KTsKKyAgICBTdHJpbmcgY2FuZGlkYXRlU0RQKGNhbmRpZGF0ZSk7CisgICAgY2FsbE9uTWFpblRo
cmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIG1pZCA9IFdURk1vdmUoY2FuZGlkYXRl
TWlkKSwgc2RwID0gV1RGTW92ZShjYW5kaWRhdGVTRFApLCBzZHBNTGluZUluZGV4LCBkZXNjcmlw
dGlvbnMgPSBkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgpKV0oKSBt
dXRhYmxlIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFj
a2VuZC5uZXdJQ0VDYW5kaWRhdGUoV1RGTW92ZShzZHApLCBXVEZNb3ZlKG1pZCksIHNkcE1MaW5l
SW5kZXgsIHsgfSwgV1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAgICB9KTsKK30KKwordm9pZCBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNjZWVkZWQo
R1VuaXF1ZU91dFB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRpb24p
Cit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIGRl
c2NyaXB0aW9uID0gZGVzY3JpcHRpb24ucmVsZWFzZSgpXSB7CisgICAgICAgIGlmIChwcm90ZWN0
ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBHVW5p
cXVlUHRyPGNoYXI+IHNkcChnc3Rfc2RwX21lc3NhZ2VfYXNfdGV4dChkZXNjcmlwdGlvbi0+c2Rw
KSk7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5tX2lzSW5pdGlhdG9yKQorICAgICAgICAg
ICAgcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3JlYXRlT2ZmZXJTdWNj
ZWVkZWQoc2RwLmdldCgpKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdGVjdGVkVGhp
cy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3JlYXRlQW5zd2VyU3VjY2VlZGVkKHNkcC5nZXQo
KSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlU2Vz
c2lvbkRlc2NyaXB0aW9uRmFpbGVkKEdVbmlxdWVPdXRQdHI8R0Vycm9yPiYmIGVycm9yKQorewor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCBlcnJvciA9
IGVycm9yLnJlbGVhc2UoKV0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVk
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBleGMgPSBFeGNlcHRpb24g
eyBPcGVyYXRpb25FcnJvciwgZXJyb3IgPyBlcnJvci0+bWVzc2FnZSA6ICJVbmtub3duIEVycm9y
IiB9OworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+bV9pc0luaXRpYXRvcikKKyAgICAgICAg
ICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNyZWF0ZU9mZmVyRmFp
bGVkKFdURk1vdmUoZXhjKSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3RlY3RlZFRo
aXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNyZWF0ZUFuc3dlckZhaWxlZChXVEZNb3ZlKGV4
YykpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNvbGxlY3RU
cmFuc2NlaXZlcnMoKQoreworICAgIEdSZWZQdHI8R0FycmF5PiB0cmFuc2NlaXZlcnM7CisgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiZ2V0LXRyYW5zY2VpdmVy
cyIsICZ0cmFuc2NlaXZlcnMub3V0UHRyKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0cmFuc2NlaXZlcnMtPmxlbjsgaSsrKSB7CisgICAgICAgIEdzdFdlYlJUQ1JUUFRyYW5zY2Vp
dmVyKiBjdXJyZW50ID0gZ19hcnJheV9pbmRleCh0cmFuc2NlaXZlcnMuZ2V0KCksIEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyKiwgaSk7CisKKyAgICAgICAgYXV0byogZXhpc3RpbmdUcmFuc2NlaXZl
ciA9IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmV4aXN0aW5nVHJhbnNjZWl2ZXIoWyZdKGF1dG8m
IHRyYW5zY2VpdmVyQmFja2VuZCkgeworICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQgPT0gdHJh
bnNjZWl2ZXJCYWNrZW5kLnJ0Y1RyYW5zY2VpdmVyKCk7CisgICAgICAgIH0pOworICAgICAgICBp
ZiAoZXhpc3RpbmdUcmFuc2NlaXZlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAg
IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IHJlY2VpdmVyOworICAgICAgICBHVW5pcXVl
T3V0UHRyPGNoYXI+IG1pZDsKKyAgICAgICAgZ19vYmplY3RfZ2V0KGN1cnJlbnQsICJyZWNlaXZl
ciIsICZyZWNlaXZlci5vdXRQdHIoKSwgIm1pZCIsICZtaWQub3V0UHRyKCksIG51bGxwdHIpOwor
CisgICAgICAgIGlmICghcmVjZWl2ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAg
ICBpZiAoIW1pZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIG1fcGVlckNvbm5l
Y3Rpb25CYWNrZW5kLm5ld1JlbW90ZVRyYW5zY2VpdmVyKFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFt
ZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KFdURk1vdmUoY3VycmVudCkpLCBtX21lZGlhRm9yTWlk
LmdldChtaWQuZ2V0KCkpKTsKKyAgICB9Cit9CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
K3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyU3RhdHNGb3JMb2dnaW5nKCkKK3sK
KyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJnZXQtc3RhdHMi
LCBudWxscHRyLCBnc3RfcHJvbWlzZV9uZXdfd2l0aF9jaGFuZ2VfZnVuYyhbXShHc3RQcm9taXNl
KiBwcm9taXNlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvIHJlc3VsdCA9IGdz
dF9wcm9taXNlX3dhaXQocHJvbWlzZSk7CisgICAgICAgIGF1dG8gY2xlYW51cCA9IG1ha2VTY29w
ZUV4aXQoWyZdIHsKKyAgICAgICAgICAgIGdzdF9wcm9taXNlX3VucmVmKHByb21pc2UpOworICAg
ICAgICB9KTsKKyAgICAgICAgaWYgKHJlc3VsdCAhPSBHU1RfUFJPTUlTRV9SRVNVTFRfUkVQTElF
RCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjb25zdCBhdXRvKiByZXBseSA9IGdz
dF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVw
bHkpOworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQocmVwbHksICJlcnJvciIp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8qIGVuZFBvaW50ID0gcmVpbnRl
cnByZXRfY2FzdDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50Kj4odXNlckRhdGEpOworICAgICAgICBl
bmRQb2ludC0+b25TdGF0c0RlbGl2ZXJlZChyZXBseSk7CisgICAgfSwgdGhpcywgbnVsbHB0cikp
OworfQorCitjbGFzcyBSVENTdGF0c0xvZ2dlciB7CitwdWJsaWM6CisgICAgZXhwbGljaXQgUlRD
U3RhdHNMb2dnZXIoY29uc3QgR3N0U3RydWN0dXJlKiBzdGF0cykKKyAgICAgICAgOiBtX3N0YXRz
KHN0YXRzKQorICAgIHsgfQorCisgICAgU3RyaW5nIHRvSlNPTlN0cmluZygpIGNvbnN0IHsgcmV0
dXJuIGdzdFN0cnVjdHVyZVRvSlNPTlN0cmluZyhtX3N0YXRzKTsgfQorCitwcml2YXRlOgorICAg
IGNvbnN0IEdzdFN0cnVjdHVyZSogbV9zdGF0czsKK307CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6cHJvY2Vzc1N0YXRzKGNvbnN0IEdWYWx1ZSogdmFsdWUpCit7CisgICAgaWYgKCFH
U1RfVkFMVUVfSE9MRFNfU1RSVUNUVVJFKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfdmFsdWVfZ2V0X3N0cnVjdHVyZSh2
YWx1ZSk7CisgICAgR3N0V2ViUlRDU3RhdHNUeXBlIHN0YXRzVHlwZTsKKyAgICBpZiAoIWdzdF9z
dHJ1Y3R1cmVfZ2V0KHN0cnVjdHVyZSwgInR5cGUiLCBHU1RfVFlQRV9XRUJSVENfU1RBVFNfVFlQ
RSwgJnN0YXRzVHlwZSwgbnVsbHB0cikpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEp1c3Qg
Y2hlY2sgYSBzaW5nbGUgdGltZXN0YW1wLCBpbmJvdW5kIFJUUCBmb3IgaW5zdGFuY2UuCisgICAg
aWYgKCFtX3N0YXRzRmlyc3REZWxpdmVyZWRUaW1lc3RhbXAgJiYgc3RhdHNUeXBlID09IEdTVF9X
RUJSVENfU1RBVFNfSU5CT1VORF9SVFApIHsKKyAgICAgICAgZG91YmxlIHRpbWVzdGFtcDsKKyAg
ICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShzdHJ1Y3R1cmUsICJ0aW1lc3RhbXAi
LCAmdGltZXN0YW1wKSkgeworICAgICAgICAgICAgYXV0byB0cyA9IFNlY29uZHM6OmZyb21NaWxs
aXNlY29uZHModGltZXN0YW1wKTsKKyAgICAgICAgICAgIG1fc3RhdHNGaXJzdERlbGl2ZXJlZFRp
bWVzdGFtcCA9IHRzOworCisgICAgICAgICAgICBpZiAoIWlzU3RvcHBlZCgpICYmIG1fc3RhdHNM
b2dUaW1lci5yZXBlYXRJbnRlcnZhbCgpICE9IHN0YXRzTG9nSW50ZXJ2YWwodHMpKSB7CisgICAg
ICAgICAgICAgICAgbV9zdGF0c0xvZ1RpbWVyLnN0b3AoKTsKKyAgICAgICAgICAgICAgICBtX3N0
YXRzTG9nVGltZXIuc3RhcnRSZXBlYXRpbmcoc3RhdHNMb2dJbnRlcnZhbCh0cykpOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgaWYgKGxvZ2dlcigpLndpbGxMb2cobG9n
Q2hhbm5lbCgpLCBXVEZMb2dMZXZlbDo6RGVidWcpKSB7CisgICAgICAgIC8vIFN0YXRzIGFyZSB2
ZXJ5IHZlcmJvc2UsIGxldCdzIG9ubHkgZGlzcGxheSB0aGVtIGluIGluc3BlY3RvciBjb25zb2xl
IGluIHZlcmJvc2UgbW9kZS4KKyAgICAgICAgbG9nZ2VyKCkuZGVidWcoTG9nV2ViUlRDLAorICAg
ICAgICAgICAgTG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcigiR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dCIsICJvblN0YXRzRGVsaXZlcmVkIiwgbG9nSWRlbnRpZmllcigpKSwKKyAgICAgICAgICAgIFJU
Q1N0YXRzTG9nZ2VyIHsgc3RydWN0dXJlIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGxvZ2dl
cigpLmxvZ0Fsd2F5cyhMb2dXZWJSVENTdGF0cywKKyAgICAgICAgICAgIExvZ2dlcjo6TG9nU2l0
ZUlkZW50aWZpZXIoIkdTdHJlYW1lck1lZGlhRW5kcG9pbnQiLCAib25TdGF0c0RlbGl2ZXJlZCIs
IGxvZ0lkZW50aWZpZXIoKSksCisgICAgICAgICAgICBSVENTdGF0c0xvZ2dlciB7IHN0cnVjdHVy
ZSB9KTsKKyAgICB9Cit9CisKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvblN0YXRz
RGVsaXZlcmVkKGNvbnN0IEdzdFN0cnVjdHVyZSogc3RhdHMpCit7CisgICAgR1VuaXF1ZVB0cjxH
c3RTdHJ1Y3R1cmU+IHN0YXRzQ29weShnc3Rfc3RydWN0dXJlX2NvcHkoc3RhdHMpKTsKKyAgICBj
YWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywgc3RhdHMg
PSBzdGF0c0NvcHkucmVsZWFzZSgpXSB7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaChz
dGF0cywgc3RhdGljX2Nhc3Q8R3N0U3RydWN0dXJlRm9yZWFjaEZ1bmM+KFtdKEdRdWFyaywgY29u
c3QgR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsKKyAgICAg
ICAgICAgIGF1dG8qIGVuZFBvaW50ID0gcmVpbnRlcnByZXRfY2FzdDxHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50Kj4odXNlckRhdGEpOworICAgICAgICAgICAgZW5kUG9pbnQtPnByb2Nlc3NTdGF0cyh2
YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSksIHRoaXMpOworICAg
IH0pOworfQorI2VuZGlmCisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK3ZvaWQgR1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6c3RhcnRMb2dnaW5nU3RhdHMoKQoreworICAgIGlmIChtX3N0YXRz
TG9nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9zdGF0c0xvZ1RpbWVyLnN0b3AoKTsKKyAg
ICBtX3N0YXRzTG9nVGltZXIuc3RhcnRSZXBlYXRpbmcoc3RhdHNMb2dJbnRlcnZhbChTZWNvbmRz
OjpuYW4oKSkpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0b3BMb2dnaW5n
U3RhdHMoKQoreworICAgIG1fc3RhdHNMb2dUaW1lci5zdG9wKCk7Cit9CisKK1dURkxvZ0NoYW5u
ZWwmIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmxvZ0NoYW5uZWwoKSBjb25zdAoreworICAgIHJl
dHVybiBMb2dXZWJSVEM7Cit9CisKK1NlY29uZHMgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3Rh
dHNMb2dJbnRlcnZhbChTZWNvbmRzIHJlcG9ydFRpbWVzdGFtcCkgY29uc3QKK3sKKyAgICBpZiAo
bG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIFdURkxvZ0xldmVsOjpJbmZvKSkKKyAgICAg
ICAgcmV0dXJuIDJfczsKKworICAgIGlmIChyZXBvcnRUaW1lc3RhbXAgLSBtX3N0YXRzRmlyc3RE
ZWxpdmVyZWRUaW1lc3RhbXAgPiAxNV9zKQorICAgICAgICByZXR1cm4gMTBfczsKKworICAgIHJl
dHVybiA0X3M7Cit9CisjZW5kaWYKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnYXRo
ZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0aW9uPHZvaWQoU3RyaW5nJiYpPiYmIGNh
bGxiYWNrKQoreworICAgIC8vIFRPRE86IGNvbGxlY3Qgc3RhdHMgYW5kIGxvb2t1cCBJbmJvdW5k
UnRwICJkZWNvZGVyX2ltcGxlbWVudGF0aW9uIiBmaWVsZC4KKyAgICBjYWxsYmFjayh7IH0pOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
K25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorc3RydWN0IExvZ0Fy
Z3VtZW50OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IExvZ0FyZ3VtZW50PFdlYkNvcmU6OlJUQ1N0
YXRzTG9nZ2VyPiB7CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBXZWJDb3JlOjpS
VENTdGF0c0xvZ2dlciYgbG9nZ2VyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmluZyhsb2dn
ZXIudG9KU09OU3RyaW5nKCkpOworICAgIH0KK307CisKK307IC8vIG5hbWVzcGFjZSBXVEYKKyNl
bmRpZiAvLyAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjc3MDMyYjRjOWUwOGFkOTQ3MTk4ZjczNzA0YTAyZTYxZDQ0MDU5YzgKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50LmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgiCisjaW5jbHVkZSAiR1Vu
aXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFJlY2VpdmVyLmgiCisKKyNpbmNs
dWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3Vu
dGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDsKK2NsYXNzIEdTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDsKK2NsYXNzIE1lZGlhU3RyZWFtVHJhY2s7CitjbGFz
cyBSVENTZXNzaW9uRGVzY3JpcHRpb247CitjbGFzcyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3Vy
Y2VHU3RyZWFtZXI7CisKK2NsYXNzIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQgOiBwdWJsaWMgVGhy
ZWFkU2FmZVJlZkNvdW50ZWQ8R1N0cmVhbWVyTWVkaWFFbmRwb2ludCwgV1RGOjpEZXN0cnVjdGlv
blRocmVhZDo6TWFpbj4KKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAsIHByaXZhdGUg
TG9nZ2VySGVscGVyCisjZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ+IGNyZWF0ZShHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmIHBl
ZXJDb25uZWN0aW9uKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQocGVlckNvbm5lY3Rpb24pKTsgfQorICAgIHZpcnR1YWwgfkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQoKTsKKworICAgIGJvb2wgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJh
dGlvbiYpOworICAgIHZvaWQgcmVzdGFydEljZSgpOworCisgICAgdm9pZCBkb1NldExvY2FsRGVz
Y3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKik7CisgICAgdm9pZCBkb1NldFJl
bW90ZURlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYpOworICAgIHZvaWQg
ZG9DcmVhdGVPZmZlcihjb25zdCBSVENPZmZlck9wdGlvbnMmKTsKKyAgICB2b2lkIGRvQ3JlYXRl
QW5zd2VyKCk7CisKKyAgICB2b2lkIGdldFN0YXRzKEdzdFBhZCosIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gY3Jl
YXRlRGF0YUNoYW5uZWwoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0Jik7
CisgICAgdm9pZCBvbkRhdGFDaGFubmVsKEdzdFdlYlJUQ0RhdGFDaGFubmVsKik7CisKKyAgICB2
b2lkIGFkZEljZUNhbmRpZGF0ZShHU3RyZWFtZXJJY2VDYW5kaWRhdGUmLCBQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrJiYpOworCisgICAgdm9pZCBjbG9zZSgp
OworICAgIHZvaWQgc3RvcCgpOworICAgIGJvb2wgaXNTdG9wcGVkKCkgY29uc3QgeyByZXR1cm4g
IW1fcGlwZWxpbmU7IH0KKworICAgIHZvaWQgc3VzcGVuZCgpOworICAgIHZvaWQgcmVzdW1lKCk7
CisKKyAgICB2b2lkIGdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUoRnVuY3Rpb248dm9p
ZChTdHJpbmcmJik+JiYpOworICAgIGJvb2wgaXNOZWdvdGlhdGlvbk5lZWRlZCgpIGNvbnN0IHsg
cmV0dXJuIG1faXNOZWdvdGlhdGlvbk5lZWRlZDsgfQorCisgICAgdm9pZCBjb25maWd1cmVBbmRM
aW5rU291cmNlKFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciYpOworCisgICAg
Ym9vbCBhZGRUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiwgTWVkaWFTdHJlYW1UcmFj
ayYsIGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKTsKKyAgICB2b2lkIHJlbW92ZVRyYWNrKEdT
dHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmKTsKKworICAgIHN0cnVjdCBCYWNrZW5kcyB7CisgICAg
ICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPiBzZW5kZXJCYWNr
ZW5kOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5k
PiByZWNlaXZlckJhY2tlbmQ7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQ+IHRyYW5zY2VpdmVyQmFja2VuZDsKKyAgICB9OworICAgIHN0ZDo6
b3B0aW9uYWw8QmFja2VuZHM+IGFkZFRyYW5zY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5k
LCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmKTsKKyAgICBzdGQ6Om9wdGlvbmFsPEJhY2tl
bmRzPiBhZGRUcmFuc2NlaXZlcihNZWRpYVN0cmVhbVRyYWNrJiwgY29uc3QgUlRDUnRwVHJhbnNj
ZWl2ZXJJbml0Jik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZD4gdHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNlbmRlcihHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kJik7CisKKyAgICB2b2lkIHNldFNlbmRlclNvdXJjZUZyb21UcmFjayhHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kJiwgTWVkaWFTdHJlYW1UcmFjayYpOworCisgICAgdm9pZCBjb2xsZWN0
VHJhbnNjZWl2ZXJzKCk7CisKKyAgICB2b2lkIGNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvblN1Y2Nl
ZWRlZChHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7CisgICAg
dm9pZCBjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1ZU91dFB0cjxHRXJyb3I+
JiYpOworCisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3BpcGVs
aW5lLmdldCgpOyB9CisgICAgYm9vbCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKworI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHZvaWQgcHJvY2Vzc1N0YXRzKGNvbnN0IEdWYWx1
ZSopOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAg
ICB2b2lkIG9uU3RhdHNEZWxpdmVyZWQoY29uc3QgR3N0U3RydWN0dXJlKik7CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICBHU3RyZWFtZXJNZWRpYUVuZHBvaW50KEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZCYpOworCisgICAgYm9vbCBpbml0aWFsaXplUGlwZWxpbmUoKTsKKyAgICB2b2lk
IHRlYXJkb3duUGlwZWxpbmUoKTsKKyAgICB2b2lkIGRpc3Bvc2VFbGVtZW50Q2hhaW4oR3N0RWxl
bWVudCopOworCisgICAgdm9pZCBzZXREZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3Jp
cHRpb24qLCBib29sIGlzTG9jYWwsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzdWNjZXNzQ2FsbGJhY2ss
IEZ1bmN0aW9uPHZvaWQoY29uc3QgR0Vycm9yKik+JiYgZmFpbHVyZUNhbGxiYWNrKTsKKyAgICB2
b2lkIGluaXRpYXRlKGJvb2wgaXNJbml0aWF0b3IsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYm
KTsKKworICAgIHZvaWQgb25OZWdvdGlhdGlvbk5lZWRlZCgpOworICAgIHZvaWQgb25JY2VDb25u
ZWN0aW9uQ2hhbmdlKCk7CisgICAgdm9pZCBvbkljZUdhdGhlcmluZ0NoYW5nZSgpOworICAgIHZv
aWQgb25JY2VDYW5kaWRhdGUoZ3VpbnQgc2RwTUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5kaWRh
dGUpOworCisgICAgTWVkaWFTdHJlYW0mIG1lZGlhU3RyZWFtRnJvbVJUQ1N0cmVhbShTdHJpbmcg
bGFiZWwpOworCisgICAgdm9pZCBhZGRSZW1vdGVTdHJlYW0oR3N0UGFkKik7CisgICAgdm9pZCBy
ZW1vdmVSZW1vdGVTdHJlYW0oR3N0UGFkKik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJhY2tlbmRz
PiBjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgUlRD
UnRwVHJhbnNjZWl2ZXJJbml0JiwgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiYp
OworICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSBjcmVhdGVTb3VyY2VGb3JU
cmFjayhNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICB2b2lkIHN0b3JlUmVtb3RlTUxpbmVJbmZv
KEdzdFNEUE1lc3NhZ2UqKTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiByZXF1ZXN0UGFkKHVuc2ln
bmVkIG1saW5lSW5kZXgsIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKTsKKworICAgIHZvaWQgc2V0
UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQoKTsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorICAgIHZvaWQgZ2F0aGVyU3RhdHNGb3JMb2dnaW5nKCk7CisgICAgdm9pZCBzdGFydExvZ2dp
bmdTdGF0cygpOworICAgIHZvaWQgc3RvcExvZ2dpbmdTdGF0cygpOworCisgICAgY29uc3QgTG9n
Z2VyJiBsb2dnZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQorICAg
IGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xvZ0lk
ZW50aWZpZXI7IH0KKyAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiR1N0cmVhbWVyTWVkaWFFbmRwb2ludCI7IH0KKyAgICBXVEZMb2dDaGFubmVsJiBs
b2dDaGFubmVsKCkgY29uc3QgZmluYWw7CisKKyAgICBTZWNvbmRzIHN0YXRzTG9nSW50ZXJ2YWwo
U2Vjb25kcykgY29uc3Q7CisjZW5kaWYKKworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlPiBtX21lZGlhRm9yTWlkOworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUgbWVkaWFUeXBlRm9yTWlkKGNvbnN0IGNoYXIqIG1pZCk7CisKKyAgICBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQmIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kOworICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gbV93ZWJydGNCaW47CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3Bp
cGVsaW5lOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVhbT4+IG1fcmVt
b3RlU3RyZWFtc0J5SWQ7CisKKyAgICBzdHJ1Y3QgUGVuZGluZ01MaW5lSW5mbyB7CisgICAgICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAgICAgICAgYm9vbCBpc1VzZWQ7CisgICAgICAgIFZl
Y3RvcjxpbnQ+IHBheWxvYWRUeXBlczsKKyAgICB9OworICAgIFZlY3RvcjxQZW5kaW5nTUxpbmVJ
bmZvPiBtX3JlbW90ZU1MaW5lSW5mb3M7CisKKyAgICBSZWY8R1N0cmVhbWVyU3RhdHNDb2xsZWN0
b3I+IG1fc3RhdHNDb2xsZWN0b3I7CisKKyAgICB1bnNpZ25lZCBtX3JlcXVlc3RQYWRDb3VudGVy
IHsgMCB9OworICAgIGludCBtX3B0Q291bnRlciB7IDk2IH07CisKKyAgICB1bnNpZ25lZCBtX21s
aW5lSW5kZXggeyAwIH07CisKKyAgICBWZWN0b3I8UmVmPFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcj4+IG1fc291cmNlczsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJl
YW0+PiBtX3BlbmRpbmdTdHJlYW1zOworICAgIHVuc2lnbmVkIG1fcGVuZGluZ0luY29taW5nU3Ry
ZWFtcyB7IDAgfTsKKworICAgIGJvb2wgbV9pc0luaXRpYXRvciB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2lzTmVnb3RpYXRpb25OZWVkZWQgeyBmYWxzZSB9OworCisjaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECisgICAgVGltZXIgbV9zdGF0c0xvZ1RpbWVyOworICAgIFNlY29uZHMgbV9zdGF0c0Zp
cnN0RGVsaXZlcmVkVGltZXN0YW1wOworICAgIFJlZjxjb25zdCBMb2dnZXI+IG1fbG9nZ2VyOwor
ICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllcjsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hMzg0ZWNkZGFmNjYyZjQwNjE5NmFjZWVmYjdhNGQ1MzRhNjcyYmE2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApAQCAtMCwwICsxLDM3MyBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorCisjaWYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNv
bW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhRW5kcG9pbnQuaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgi
CisjaW5jbHVkZSAiSWNlQ2FuZGlkYXRlLmgiCisjaW5jbHVkZSAiSlNSVENTdGF0c1JlcG9ydC5o
IgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGUuaCIKKyNpbmNsdWRlICJS
VENQZWVyQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlJUQ1J0cENhcGFiaWxpdGllcy5oIgorI2lu
Y2x1ZGUgIlJUQ1J0cFJlY2VpdmVyLmgiCisjaW5jbHVkZSAiUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNyZWF0
ZUdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNv
bm5lY3Rpb24pCit7CisgICAgZW5zdXJlR1N0cmVhbWVySW5pdGlhbGl6ZWQoKTsKKyAgICBpZiAo
IWlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKCJ3ZWJydGMiKSkgeworICAgICAgICBXVEZMb2dB
bHdheXMoIkdzdFdlYlJUQyBwbHVnaW4gbm90IGZvdW5kLiBNYWtlIHN1cmUgdG8gaW5zdGFsbCBn
c3QtcGx1Z2lucy1iYWQgPj0gMS4yMCB3aXRoIHRoZSB3ZWJydGMgcGx1Z2luIGVuYWJsZWQuIik7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gV1RGOjptYWtlVW5p
cXVlPEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZD4ocGVlckNvbm5lY3Rpb24pOworfQor
CitDcmVhdGVQZWVyQ29ubmVjdGlvbkJhY2tlbmQgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVh
dGUgPSBjcmVhdGVHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ7CisKK3N0ZDo6b3B0aW9u
YWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlY2VpdmVyQ2Fw
YWJpbGl0aWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIGtpbmQpCit7
CisgICAgUlRDUnRwQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICBjYXBhYmlsaXRpZXMu
aGVhZGVyRXh0ZW5zaW9ucy5hcHBlbmQoeyAiaHR0cDovL3d3dy5pZXRmLm9yZy9pZC9kcmFmdC1o
b2xtZXItcm1jYXQtdHJhbnNwb3J0LXdpZGUtY2MtZXh0ZW5zaW9ucy0wMSIgfSk7CisgICAgaWYg
KGtpbmQgPT0gImF1ZGlvIl9zKSB7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5k
KHsgLm1pbWVUeXBlID0gImF1ZGlvL09QVVMiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDQ4
MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMiwKKyAgICAgICAgICAgIC5zZHBGbXRwTGlu
ZSA9ICIiCisgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNhcGFiaWxpdGllcy5o
ZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJ1cm46M2dwcDp2aWRlby1vcmllbnRhdGlvbiIgfSk7
CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVv
L1ZQOCIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2Rw
Rm10cExpbmUgPSAiIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBlbmQoeyAu
bWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwK
KyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlkPTAiIH0pOworICAgICAgICBj
YXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDkiLAorICAg
ICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0g
InByb2ZpbGUtaWQ9MSIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsg
Lm1pbWVUeXBlID0gInZpZGVvL0gyNjQiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAw
LAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7CisgICAgfQorICAgIHJldHVybiBj
YXBhYmlsaXRpZXM7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRlckNhcGFiaWxpdGllcyhTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgU3RyaW5nJiBraW5kKQoreworICAgIFJUQ1J0cENhcGFiaWxpdGllcyBjYXBh
YmlsaXRpZXM7CisgICAgY2FwYWJpbGl0aWVzLmhlYWRlckV4dGVuc2lvbnMuYXBwZW5kKHsgImh0
dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQtaG9sbWVyLXJtY2F0LXRyYW5zcG9ydC13aWRlLWNj
LWV4dGVuc2lvbnMtMDEiIH0pOworICAgIGlmIChraW5kID09ICJhdWRpbyJfcykgeworICAgICAg
ICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJhdWRpby9PUFVTIiwK
KyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA0ODAwMCwKKyAgICAgICAgICAgIC5jaGFubmVscyA9
IDIsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIiB9KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBjYXBhYmlsaXRpZXMuaGVhZGVyRXh0ZW5zaW9ucy5hcHBlbmQoeyAidXJuOjNncHA6dmlk
ZW8tb3JpZW50YXRpb24iIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7
IC5taW1lVHlwZSA9ICJ2aWRlby9WUDgiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAw
LAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGll
cy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL1ZQOSIsCisgICAgICAgICAgICAu
Y2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAicHJvZmlsZS1p
ZD0wIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUg
PSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAg
ICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlkPTEiIH0pOworICAgICAgICBjYXBhYmlsaXRp
ZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9IMjY0IiwKKyAgICAgICAgICAg
IC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOwor
ICAgIH0KKyAgICByZXR1cm4gY2FwYWJpbGl0aWVzOworfQorCitHU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVj
dGlvbiYgcGVlckNvbm5lY3Rpb24pCisgICAgOiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNv
bm5lY3Rpb24pCisgICAgLCBtX2VuZHBvaW50KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0
ZSgqdGhpcykpCit7CisgICAgZGlzYWJsZUlDRUNhbmRpZGF0ZUZpbHRlcmluZygpOworfQorCitH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6On5HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpzdXNwZW5kKCkKK3sKKyAgICBtX2VuZHBvaW50LT5zdXNwZW5kKCk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN1bWUoKQoreworICAgIG1fZW5kcG9pbnQt
PnJlc3VtZSgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVz
dGFydEljZSgpCit7CisgICAgbV9lbmRwb2ludC0+cmVzdGFydEljZSgpOworfQorCitib29sIEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBv
aW50Q29uZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIG1fZW5kcG9p
bnQtPnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHBy
b21pc2UpCit7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9t
aXNlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgYmFj
a2VuZEZyb21SVFBTZW5kZXIoUlRDUnRwU2VuZGVyJiBzZW5kZXIpCit7CisgICAgQVNTRVJUKCFz
ZW5kZXIuaXNTdG9wcGVkKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kJj4oKnNlbmRlci5iYWNrZW5kKCkpOworfQorCit2b2lkIEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwU2VuZGVyJiBzZW5kZXIsIFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBpZiAoIXNlbmRlci5iYWNrZW5kKCkp
IHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNl
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBiYWNrZW5kID0gYmFja2Vu
ZEZyb21SVFBTZW5kZXIoc2VuZGVyKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOworICAgIGlm
IChSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQu
YXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5wYWQoKTsKKyAgICBlbHNlIGlm
IChSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQu
dmlkZW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5wYWQoKTsKKyAgICBtX2VuZHBv
aW50LT5nZXRTdGF0cyhwYWQuZ2V0KCksIFdURk1vdmUocHJvbWlzZSkpOworfQorCit2b2lkIEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwUmVjZWl2ZXImIHJl
Y2VpdmVyLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7CisgICAgaWYgKCFyZWNl
aXZlci5iYWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwg
V1RGTW92ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHc3RFbGVt
ZW50KiBiaW4gPSBudWxscHRyOworICAgIGF1dG8mIHNvdXJjZSA9IHJlY2VpdmVyLnRyYWNrKCku
cHJpdmF0ZVRyYWNrKCkuc291cmNlKCk7CisgICAgaWYgKHNvdXJjZS5pc0luY29taW5nQXVkaW9T
b3VyY2UoKSkKKyAgICAgICAgYmluID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlR1N0cmVhbWVyJj4oc291cmNlKS5iaW4oKTsKKyAgICBlbHNlIGlmIChzb3VyY2UuaXNJ
bmNvbWluZ1ZpZGVvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZQor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgYXV0byBzaW5rUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGJpbiwgInNpbmsiKSk7Cisg
ICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihzaW5rUGFkLmdldCgp
KSk7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMoc3JjUGFkLmdldCgpLCBXVEZNb3ZlKHByb21p
c2UpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0TG9j
YWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQor
eworICAgIG1fZW5kcG9pbnQtPmRvU2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7Cisg
ICAgbV9pc0xvY2FsRGVzY3JpcHRpb25TZXQgPSB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBSVENTZXNz
aW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0UmVt
b3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOworICAgIG1faXNSZW1vdGVEZXNjcmlwdGlvblNl
dCA9IHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0Ny
ZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYmIG9wdGlvbnMpCit7CisgICAgbV9lbmRwb2ludC0+
ZG9DcmVhdGVPZmZlcihvcHRpb25zKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlvbnMmJikKK3sKKyAgICBpZiAo
IW1faXNSZW1vdGVEZXNjcmlwdGlvblNldCkgeworICAgICAgICBjcmVhdGVBbnN3ZXJGYWlsZWQo
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJObyByZW1vdGUgZGVzY3JpcHRpb24gc2V0
IiB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2VuZHBvaW50LT5kb0NyZWF0ZUFu
c3dlcigpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y2xvc2Uo
KQoreworICAgIG1fZW5kcG9pbnQtPmNsb3NlKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpkb1N0b3AoKQoreworICAgIG1fZW5kcG9pbnQtPnN0b3AoKTsKKyAg
ICBtX3BlbmRpbmdSZWNlaXZlcnMuY2xlYXIoKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSYgY2FuZGlk
YXRlLCBBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIHVuc2lnbmVk
IHNkcE1MaW5lSW5kZXggPSBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCgpID8gY2FuZGlkYXRlLnNk
cE1MaW5lSW5kZXgoKS52YWx1ZSgpIDogMDsKKyAgICBhdXRvIHJ0Y0NhbmRpZGF0ZSA9IFdURjo6
bWFrZVVuaXF1ZTxHU3RyZWFtZXJJY2VDYW5kaWRhdGU+KCpuZXcgR1N0cmVhbWVySWNlQ2FuZGlk
YXRlIHsgc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0ZSgpIH0pOworICAgIG1fZW5k
cG9pbnQtPmFkZEljZUNhbmRpZGF0ZSgqcnRjQ2FuZGlkYXRlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
Cit9CisKK1JlZjxSVENSdHBSZWNlaXZlcj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNr
ZW5kPiYmIGJhY2tlbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRy
YWNrSWQpCit7CisgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcGVl
ckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKworICAgIGF1dG8gc291cmNl
ID0gYmFja2VuZC0+Y3JlYXRlU291cmNlKHRyYWNrS2luZCwgdHJhY2tJZCk7CisgICAgLy8gUmVt
b3RlIHNvdXJjZSBpcyBpbml0aWFsbHkgbXV0ZWQgYW5kIHdpbGwgYmUgdW5tdXRlZCB3aGVuIHJl
Y2VpdmluZyB0aGUgZmlyc3QgcGFja2V0LgorICAgIHNvdXJjZS0+c2V0TXV0ZWQodHJ1ZSk7Cisg
ICAgYXV0byB0cmFja0lEID0gc291cmNlLT5wZXJzaXN0ZW50SUQoKTsKKyAgICBhdXRvIHJlbW90
ZVRyYWNrUHJpdmF0ZSA9IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoZG9jdW1lbnQu
bG9nZ2VyKCksIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZSh0cmFja0lEKSk7CisgICAgYXV0byBy
ZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShkb2N1bWVudCwgV1RGTW92ZShy
ZW1vdGVUcmFja1ByaXZhdGUpKTsKKworICAgIHJldHVybiBSVENSdHBSZWNlaXZlcjo6Y3JlYXRl
KCp0aGlzLCBXVEZNb3ZlKHJlbW90ZVRyYWNrKSwgV1RGTW92ZShiYWNrZW5kKSk7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYgbGFiZWws
IGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykKK3sKKyAgICByZXR1cm4gbV9lbmRw
b2ludC0+Y3JlYXRlRGF0YUNoYW5uZWwobGFiZWwsIG9wdGlvbnMpOworfQorCitzdGF0aWMgaW5s
aW5lIFJlZlB0cjxSVENSdHBTZW5kZXI+IGZpbmRFeGlzdGluZ1NlbmRlcihjb25zdCBWZWN0b3I8
UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj4mIHRyYW5zY2VpdmVycywgR1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZCYgc2VuZGVyQmFja2VuZCkKK3sKKyAgICBBU1NFUlQoc2VuZGVyQmFja2VuZC5y
dGNTZW5kZXIoKSk7CisgICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykg
eworICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFuc2NlaXZlci0+c2VuZGVyKCk7CisgICAgICAg
IGlmICghc2VuZGVyLmlzU3RvcHBlZCgpICYmIHNlbmRlckJhY2tlbmQucnRjU2VuZGVyKCkgPT0g
YmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKS5ydGNTZW5kZXIoKSkKKyAgICAgICAgICAgIHJl
dHVybiBSZWYoc2VuZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0V4Y2Vw
dGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OmFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBGaXhlZFZlY3RvcjxTdHJpbmc+JiYg
bWVkaWFTdHJlYW1JZHMpCit7CisgICAgYXV0byBzZW5kZXJCYWNrZW5kID0gV1RGOjptYWtlVW5p
cXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+KCp0aGlzLCBudWxscHRyLCBudWxscHRyKTsK
KyAgICBpZiAoIW1fZW5kcG9pbnQtPmFkZFRyYWNrKCpzZW5kZXJCYWNrZW5kLCB0cmFjaywgbWVk
aWFTdHJlYW1JZHMpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAiVW5h
YmxlIHRvIGFkZCB0cmFjayJfcyB9OworCisgICAgaWYgKGF1dG8gc2VuZGVyID0gZmluZEV4aXN0
aW5nU2VuZGVyKG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5zY2VpdmVycygpLCAqc2VuZGVy
QmFja2VuZCkpIHsKKyAgICAgICAgYmFja2VuZEZyb21SVFBTZW5kZXIoKnNlbmRlcikudGFrZVNv
dXJjZSgqc2VuZGVyQmFja2VuZCk7CisgICAgICAgIHNlbmRlci0+c2V0VHJhY2soUmVmKHRyYWNr
KSk7CisgICAgICAgIHNlbmRlci0+c2V0TWVkaWFTdHJlYW1JZHMoV1RGTW92ZShtZWRpYVN0cmVh
bUlkcykpOworICAgICAgICByZXR1cm4gc2VuZGVyLnJlbGVhc2VOb25OdWxsKCk7CisgICAgfQor
CisgICAgYXV0byB0cmFuc2NlaXZlckJhY2tlbmQgPSBtX2VuZHBvaW50LT50cmFuc2NlaXZlckJh
Y2tlbmRGcm9tU2VuZGVyKCpzZW5kZXJCYWNrZW5kKTsKKworICAgIGF1dG8gc2VuZGVyID0gUlRD
UnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgUmVmKHRyYWNrKSwgV1RGTW92ZShz
ZW5kZXJCYWNrZW5kKSk7CisgICAgc2VuZGVyLT5zZXRNZWRpYVN0cmVhbUlkcyhXVEZNb3ZlKG1l
ZGlhU3RyZWFtSWRzKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKHRyYW5z
Y2VpdmVyQmFja2VuZC0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCksIHRyYWNrLmtpbmQoKSwgdHJh
Y2suaWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVh
dGUoc2VuZGVyLmNvcHlSZWYoKSwgV1RGTW92ZShyZWNlaXZlciksIFdURk1vdmUodHJhbnNjZWl2
ZXJCYWNrZW5kKSk7CisgICAgbV9wZWVyQ29ubmVjdGlvbi5hZGRJbnRlcm5hbFRyYW5zY2VpdmVy
KFdURk1vdmUodHJhbnNjZWl2ZXIpKTsKKyAgICByZXR1cm4gc2VuZGVyOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChU
JiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAg
ICBhdXRvIGJhY2tlbmRzID0gbV9lbmRwb2ludC0+YWRkVHJhbnNjZWl2ZXIodHJhY2tPcktpbmQs
IGluaXQpOworICAgIGlmICghYmFja2VuZHMpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IsICJVbmFibGUgdG8gYWRkIHRyYW5zY2VpdmVyIl9zIH07CisKKyAg
ICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKG1fcGVlckNvbm5lY3Rpb24sIFdU
Rk1vdmUodHJhY2tPcktpbmQpLCBXVEZNb3ZlKGJhY2tlbmRzLT5zZW5kZXJCYWNrZW5kKSk7Cisg
ICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKFdURk1vdmUoYmFja2VuZHMtPnJlY2Vp
dmVyQmFja2VuZCksIHNlbmRlci0+dHJhY2tLaW5kKCksIHNlbmRlci0+dHJhY2tJZCgpKTsKKyAg
ICBhdXRvIHRyYW5zY2VpdmVyID0gUlRDUnRwVHJhbnNjZWl2ZXI6OmNyZWF0ZShXVEZNb3ZlKHNl
bmRlciksIFdURk1vdmUocmVjZWl2ZXIpLCBXVEZNb3ZlKGJhY2tlbmRzLT50cmFuc2NlaXZlckJh
Y2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIodHJh
bnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2ZXI7Cit9CisKK0V4Y2Vw
dGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6YWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0
cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gYWRkVHJhbnNjZWl2ZXJGcm9t
VHJhY2tPcktpbmQoU3RyaW5nIHsgdHJhY2tLaW5kIH0sIGluaXQpOworfQorCitFeGNlcHRpb25P
cjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OmFkZFRyYW5zY2VpdmVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYmIHRyYWNrLCBjb25zdCBSVENS
dHBUcmFuc2NlaXZlckluaXQmIGluaXQpCit7CisgICAgcmV0dXJuIGFkZFRyYW5zY2VpdmVyRnJv
bVRyYWNrT3JLaW5kKFdURk1vdmUodHJhY2spLCBpbml0KTsKK30KKwordm9pZCBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrKQoreworICAg
IG1fZW5kcG9pbnQtPnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhzZW5kZXIsIHRyYWNrKTsKK30K
Kworc3RhdGljIGlubGluZSBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmIGJhY2tlbmRG
cm9tUlRQVHJhbnNjZWl2ZXIoUlRDUnRwVHJhbnNjZWl2ZXImIHRyYW5zY2VpdmVyKQoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmPigqdHJh
bnNjZWl2ZXIuYmFja2VuZCgpKTsKK30KKworUlRDUnRwVHJhbnNjZWl2ZXIqIEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6ZXhpc3RpbmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJv
b2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJik+JiYgbWF0Y2hpbmdGdW5jdGlvbikK
K3sKKyAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV9wZWVyQ29ubmVjdGlvbi5jdXJyZW50
VHJhbnNjZWl2ZXJzKCkpIHsKKyAgICAgICAgaWYgKG1hdGNoaW5nRnVuY3Rpb24oYmFja2VuZEZy
b21SVFBUcmFuc2NlaXZlcigqdHJhbnNjZWl2ZXIpKSkKKyAgICAgICAgICAgIHJldHVybiB0cmFu
c2NlaXZlci5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1JUQ1J0cFRy
YW5zY2VpdmVyJiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6Om5ld1JlbW90ZVRyYW5z
Y2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+JiYg
dHJhbnNjZWl2ZXJCYWNrZW5kLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUpCit7Cisg
ICAgYXV0byB0cmFja0tpbmQgPSB0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1
ZGlvID8gImF1ZGlvIl9zIDogInZpZGVvIl9zOworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2Vu
ZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgdHJhY2tLaW5kLCB0cmFuc2NlaXZlckJhY2tl
bmQtPmNyZWF0ZVNlbmRlckJhY2tlbmQoKnRoaXMsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBh
dXRvIHJlY2VpdmVyID0gY3JlYXRlUmVjZWl2ZXIodHJhbnNjZWl2ZXJCYWNrZW5kLT5jcmVhdGVS
ZWNlaXZlckJhY2tlbmQoKSwgdHJhY2tLaW5kLCBzZW5kZXItPnRyYWNrSWQoKSk7CisgICAgYXV0
byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoV1RGTW92ZShzZW5kZXIp
LCBXVEZNb3ZlKHJlY2VpdmVyKSwgV1RGTW92ZSh0cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBt
X3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJl
ZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAgICBtX2Vu
ZHBvaW50LT5jb2xsZWN0VHJhbnNjZWl2ZXJzKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpyZW1vdmVUcmFjayhSVENSdHBTZW5kZXImIHNlbmRlcikKK3sKKyAg
ICBtX2VuZHBvaW50LT5yZW1vdmVUcmFjayhiYWNrZW5kRnJvbVJUUFNlbmRlcihzZW5kZXIpKTsK
K30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFwcGx5Um90YXRpb25G
b3JPdXRnb2luZ1ZpZGVvU291cmNlcygpCit7CisgICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6
IG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5zY2VpdmVycygpKSB7CisgICAgICAgIGlmICgh
dHJhbnNjZWl2ZXItPnNlbmRlcigpLmlzU3RvcHBlZCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0
byogdmlkZW9Tb3VyY2UgPSBiYWNrZW5kRnJvbVJUUFNlbmRlcih0cmFuc2NlaXZlci0+c2VuZGVy
KCkpLnZpZGVvU291cmNlKCkpCisgICAgICAgICAgICAgICAgdmlkZW9Tb3VyY2UtPnNldEFwcGx5
Um90YXRpb24odHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0
aW9uPHZvaWQoU3RyaW5nJiYpPiYmIGNhbGxiYWNrKQoreworICAgIG1fZW5kcG9pbnQtPmdhdGhl
ckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUoV1RGTW92ZShjYWxsYmFjaykpOworfQorCitib29s
IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6aXNOZWdvdGlhdGlvbk5lZWRlZCh1aW50
MzJfdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lbmRwb2ludC0+aXNOZWdvdGlhdGlvbk5lZWRl
ZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFlYTFhMjYwMTZkNzVmMGJlM2ZkOTgwNjgyOTYwODhi
OWUyYWU1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oCkBAIC0wLDAg
KzEsMTIwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25C
YWNrZW5kLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgPGdz
dC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ7CitjbGFzcyBHU3RyZWFtZXJSdHBSZWNl
aXZlckJhY2tlbmQ7CitjbGFzcyBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOworY2xhc3MgR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOworY2xhc3MgUlRDUnRwUmVjZWl2ZXI7CitjbGFz
cyBSVENSdHBSZWNlaXZlckJhY2tlbmQ7CitjbGFzcyBSVENTZXNzaW9uRGVzY3JpcHRpb247Citj
bGFzcyBSVENTdGF0c1JlcG9ydDsKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcjsKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjsKK2Ns
YXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXI7CisKK3N0cnVjdCBHU3RyZWFtZXJJY2VDYW5kaWRhdGUgeworICAgIFdURl9NQUtF
X1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICB1bnNpZ25lZCBzZHBNTGluZUluZGV4OworICAg
IFN0cmluZyBjYW5kaWRhdGU7Cit9OworCitjbGFzcyBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQgZmluYWwgOiBwdWJsaWMgUGVlckNvbm5lY3Rpb25CYWNrZW5kIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mKTsKKyAgICB+R1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjbG9zZSgpIGZpbmFsOwor
ICAgIHZvaWQgZG9DcmVhdGVPZmZlcihSVENPZmZlck9wdGlvbnMmJikgZmluYWw7CisgICAgdm9p
ZCBkb0NyZWF0ZUFuc3dlcihSVENBbnN3ZXJPcHRpb25zJiYpIGZpbmFsOworICAgIHZvaWQgZG9T
ZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiopIGZpbmFsOwor
ICAgIHZvaWQgZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRp
b24mKSBmaW5hbDsKKyAgICB2b2lkIGRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSYs
IEFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgZG9TdG9wKCkgZmlu
YWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0
YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYp
IGZpbmFsOworICAgIHZvaWQgcmVzdGFydEljZSgpIGZpbmFsOworICAgIGJvb2wgc2V0Q29uZmln
dXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBmaW5hbDsKKyAgICB2b2lkIGdl
dFN0YXRzKFJlZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFsOworICAgIHZvaWQgZ2V0U3RhdHMo
UlRDUnRwU2VuZGVyJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJikgZmluYWw7CisgICAgdm9pZCBn
ZXRTdGF0cyhSVENSdHBSZWNlaXZlciYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFsOwor
CisgICAgdm9pZCBlbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcygpIGZpbmFsOwor
CisgICAgdm9pZCBnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0aW9uPHZvaWQo
U3RyaW5nJiYpPiYmKSBmaW5hbDsKKworICAgIGJvb2wgaXNOZWdvdGlhdGlvbk5lZWRlZCh1aW50
MzJfdCkgY29uc3QgZmluYWw7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGNhblRyaWNrbGVJ
Y2VDYW5kaWRhdGVzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfTsKKworICAgIGZyaWVuZCBjbGFz
cyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OworICAgIGZyaWVuZCBjbGFzcyBHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kOworICAgIFJUQ1BlZXJDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1
cm4gbV9wZWVyQ29ubmVjdGlvbjsgfQorCisgICAgdm9pZCBnZXRTdGF0c1N1Y2NlZWRlZChjb25z
dCBEZWZlcnJlZFByb21pc2UmLCBSZWY8UlRDU3RhdHNSZXBvcnQ+JiYpOworCisgICAgRXhjZXB0
aW9uT3I8UmVmPFJUQ1J0cFNlbmRlcj4+IGFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2smLCBGaXhl
ZFZlY3RvcjxTdHJpbmc+JiYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlVHJhY2soUlRDUnRwU2Vu
ZGVyJikgZmluYWw7CisKKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBh
ZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQm
KSBmaW5hbDsKKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRUcmFu
c2NlaXZlcihSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJ
bml0JikgZmluYWw7CisgICAgdm9pZCBzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soR1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZCYsIE1lZGlhU3RyZWFtVHJhY2smKTsKKworICAgIFJUQ1J0cFRyYW5z
Y2VpdmVyKiBleGlzdGluZ1RyYW5zY2VpdmVyKFdURjo6RnVuY3Rpb248Ym9vbChHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQmKT4mJik7CisgICAgUlRDUnRwVHJhbnNjZWl2ZXImIG5ld1Jl
bW90ZVRyYW5zY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJh
Y2tlbmQ+JiYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpOworCisgICAgdm9pZCBjb2xsZWN0
VHJhbnNjZWl2ZXJzKCkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvY2FsRGVzY3Jp
cHRpb25TZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzTG9jYWxEZXNjcmlwdGlvblNldDsg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRw
VHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChUJiYgdHJhY2tPcktp
bmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpOworCisgICAgUmVmPFJUQ1J0cFJlY2Vp
dmVyPiBjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kPiYmLCBjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lk
KTsKKworICAgIHZvaWQgc3VzcGVuZCgpIGZpbmFsOworICAgIHZvaWQgcmVzdW1lKCkgZmluYWw7
CisKKyAgICBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gbV9lbmRwb2ludDsKKyAgICBib29s
IG1faXNMb2NhbERlc2NyaXB0aW9uU2V0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNSZW1vdGVE
ZXNjcmlwdGlvblNldCB7IGZhbHNlIH07CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdT
dHJlYW1lckljZUNhbmRpZGF0ZT4+IG1fcGVuZGluZ0NhbmRpZGF0ZXM7CisgICAgVmVjdG9yPFJl
ZjxSVENSdHBSZWNlaXZlcj4+IG1fcGVuZGluZ1JlY2VpdmVyczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
UnRwUmVjZWl2ZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWMxMzQzYjEzOWY1YmE5MmY0MTU1ZjNkMDUwNTA1ZDJjZmFmY2Q3NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFJlY2VpdmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
clJ0cFJlY2VpdmVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JUQ1J0
cFBhcmFtZXRlcnMgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJzKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxS
VENSdHBDb250cmlidXRpbmdTb3VyY2U+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0
Q29udHJpYnV0aW5nU291cmNlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4geyB9OworfQorCitWZWN0b3I8UlRDUnRwU3luY2hyb25pemF0aW9uU291cmNlPiBH
U3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFN5bmNocm9uaXphdGlvblNvdXJjZXMoKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworUmVm
PFJlYWx0aW1lTWVkaWFTb3VyY2U+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Y3JlYXRl
U291cmNlKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCit7
CisgICAgaWYgKHRyYWNrS2luZCA9PSAidmlkZW8iX3MpCisgICAgICAgIHJldHVybiBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFja0lkLmlzb2xhdGVkQ29w
eSgpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHRyYWNrS2luZCA9PSAiYXVkaW8iX3MpOworICAg
IHJldHVybiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFj
a0lkLmlzb2xhdGVkQ29weSgpKTsKK30KKworUmVmPFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ+IEdT
dHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6cnRjUnRwVHJhbnNmb3JtQmFja2VuZCgpCit7Cisg
ICAgcmV0dXJuIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6Y3JlYXRlKG1f
cnRjUmVjZWl2ZXIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRHRsc1RyYW5zcG9ydEJhY2tl
bmQ+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQoKQor
eworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJhbnNwb3J0OworICAgIGdf
b2JqZWN0X2dldChtX3J0Y1JlY2VpdmVyLmdldCgpLCAidHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5v
dXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIHRyYW5zcG9ydCA/IG1ha2VVbmlxdWU8R1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ+KHRyYW5zcG9ydCkgOiBudWxscHRyOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2Vp
dmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2M2E3NTk3Yjk4Mjc2NzZkZTAzM2ExOWJjNDNmY2Rh
MmY4MTMzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaApAQCAtMCwwICsx
LDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUg
IkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENSdHBSZWNlaXZlckJhY2tlbmQuaCIK
KyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ1J0
cFJlY2VpdmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kKEdSZWZQdHI8R3N0V2Vi
UlRDUlRQUmVjZWl2ZXI+JiYgcnRjUmVjZWl2ZXIpCisgICAgICAgIDogbV9ydGNSZWNlaXZlcihX
VEZNb3ZlKHJ0Y1JlY2VpdmVyKSkKKyAgICB7CisgICAgfQorCisgICAgR3N0V2ViUlRDUlRQUmVj
ZWl2ZXIqIHJ0Y1JlY2VpdmVyKCkgeyByZXR1cm4gbV9ydGNSZWNlaXZlci5nZXQoKTsgfQorICAg
IFJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGVTb3VyY2UoY29uc3QgU3RyaW5nJiB0cmFj
a0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCk7CisKK3ByaXZhdGU6CisgICAgUlRDUnRwUGFy
YW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkgZmluYWw7CisgICAgVmVjdG9yPFJUQ1J0cENvbnRyaWJ1
dGluZ1NvdXJjZT4gZ2V0Q29udHJpYnV0aW5nU291cmNlcygpIGNvbnN0IGZpbmFsOworICAgIFZl
Y3RvcjxSVENSdHBTeW5jaHJvbml6YXRpb25Tb3VyY2U+IGdldFN5bmNocm9uaXphdGlvblNvdXJj
ZXMoKSBjb25zdCBmaW5hbDsKKyAgICBSZWY8UlRDUnRwVHJhbnNmb3JtQmFja2VuZD4gcnRjUnRw
VHJhbnNmb3JtQmFja2VuZCgpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJh
bnNwb3J0QmFja2VuZD4gZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBmaW5hbDsKKworICAgIEdSZWZQ
dHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IG1fcnRjUmVjZWl2ZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVj
ZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjkwODJmZWNhNGQ0OGE4Mzcw
MzY5NzkxNzY3ZGJhZGFlMzNmOTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zv
cm1CYWNrZW5kLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAy
MS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2
ZXJUcmFuc2Zvcm1CYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1C
YWNrZW5kOjpNZWRpYVR5cGUgbWVkaWFUeXBlRnJvbVJlY2VpdmVyKGNvbnN0IEdzdFdlYlJUQ1JU
UFJlY2VpdmVyJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSVENSdHBU
cmFuc2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGU6OlZpZGVvOworfQorCitHU3RyZWFtZXJSdHBSZWNl
aXZlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2Vu
ZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiYgcnRjUmVjZWl2ZXIpCisgICAg
OiBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKG1lZGlhVHlwZUZyb21SZWNlaXZlcigqcnRj
UmVjZWl2ZXIpLCBTaWRlOjpSZWNlaXZlcikKKyAgICAsIG1fcnRjUmVjZWl2ZXIocnRjUmVjZWl2
ZXIpCit7Cit9CisKK0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJl
YW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCgpCit7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
UnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFj
ayhDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIHNldElucHV0Q2FsbGJhY2soV1RGTW92ZShj
YWxsYmFjaykpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRw
UmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJhbWUoKQoreworICAgIEFTU0VS
VChtZWRpYVR5cGUoKSA9PSBNZWRpYVR5cGU6OlZpZGVvKTsKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9y
bUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ODY2
NzZhMDZiN2FiOWViMGIzMmU3ZGY3YzYzNDgxNWE4Yzk3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBS
ZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2Vu
ZCBmaW5hbCA6IHB1YmxpYyBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZD4gY3Jl
YXRlKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+JiByZWNlaXZlcikgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQocmVj
ZWl2ZXIpKTsgfQorICAgIH5HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQoKTsK
KworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJh
Y2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4mKTsKKworICAgIC8vIFJU
Q1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lkIHNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxi
YWNrKENhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVxdWVzdEtleUZyYW1lKCkgZmluYWw7
CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiBtX3J0Y1JlY2VpdmVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lNjcwYTc1MmIzNzdlM2ZiODdhM2ZjM2Y5NDNm
Yjc5MjM0MjdjNjA0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAKQEAgLTAs
MCArMSwxNDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisKKyNpZiBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJy
ZWQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJUQ1BlZXJDb25u
ZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDUnRwU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVP
dXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2U+CitzdGF0aWMgaW5saW5lIGJvb2wg
dXBkYXRlVHJhY2tTb3VyY2UoU291cmNlJiBzb3VyY2UsIE1lZGlhU3RyZWFtVHJhY2sqIHRyYWNr
KQoreworICAgIGlmICghdHJhY2spIHsKKyAgICAgICAgc291cmNlLnN0b3AoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBzb3VyY2Uuc2V0VHJhY2sodHJhY2stPnBy
aXZhdGVUcmFjaygpKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzdGFy
dFNvdXJjZSgpCit7CisgICAgc3dpdGNoT24obV9zb3VyY2UsIFtdKFJlZjxSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgc291cmNlLT5zdGFy
dCgpOworICAgIH0sIFtdKFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+
JiBzb3VyY2UpIHsKKyAgICAgICAgc291cmNlLT5zdGFydCgpOworICAgIH0sIFtdKHN0ZDo6bnVs
bHB0cl90JikgeworICAgIH0pOworfQorCitHUmVmUHRyPEdzdEVsZW1lbnQ+IEdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQ6OnN0b3BTb3VyY2UoKQoreworICAgIHN3aXRjaE9uKG1fc291cmNlLCBb
XShSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7Cisg
ICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAgICByZXR1cm4gR1JlZlB0cjxHc3RFbGVtZW50
Pihzb3VyY2UtPmJpbigpKTsKKyAgICB9LCBbXShSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7CisgICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAg
ICByZXR1cm4gR1JlZlB0cjxHc3RFbGVtZW50Pihzb3VyY2UtPmJpbigpKTsKKyAgICB9LCBbXShz
dGQ6Om51bGxwdHJfdCYpIHsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8R3N0RWxlbWVudD4obnVs
bHB0cik7CisgICAgfSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgR1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZDo6cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2VuZGVyLCBNZWRp
YVN0cmVhbVRyYWNrKiB0cmFjaykKK3sKKyAgICBpZiAoIXRyYWNrKSB7CisgICAgICAgIHN0b3BT
b3VyY2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHNlbmRlci50
cmFjaygpKSB7CisgICAgICAgIHN3aXRjaE9uKG1fc291cmNlLCBbJl0oUmVmPFJlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICAgICAgQVNTRVJU
KHRyYWNrLT5zb3VyY2UoKS50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVk
aW8pOworICAgICAgICAgICAgc291cmNlLT5zdG9wKCk7CisgICAgICAgICAgICBzb3VyY2UtPnNl
dFNvdXJjZSh0cmFjay0+cHJpdmF0ZVRyYWNrKCkpOworICAgICAgICAgICAgc291cmNlLT5zdGFy
dCgpOworICAgICAgICB9LCBbJl0oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcj4mIHNvdXJjZSkgeworICAgICAgICAgICAgQVNTRVJUKHRyYWNrLT5zb3VyY2UoKS50eXBl
KCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pOworICAgICAgICAgICAgc291
cmNlLT5zdG9wKCk7CisgICAgICAgICAgICBzb3VyY2UtPnNldFNvdXJjZSh0cmFjay0+cHJpdmF0
ZVRyYWNrKCkpOworICAgICAgICAgICAgc291cmNlLT5zdGFydCgpOworICAgICAgICB9LCBbXShz
dGQ6Om51bGxwdHJfdCYpIHsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgbV9wZWVyQ29ubmVj
dGlvbkJhY2tlbmQtPnNldFNlbmRlclNvdXJjZUZyb21UcmFjaygqdGhpcywgKnRyYWNrKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKworUlRDUnRwU2VuZFBhcmFtZXRlcnMgR1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZDo6Z2V0UGFyYW1ldGVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvUlRDUnRw
U2VuZFBhcmFtZXRlcnMobV9pbml0RGF0YS5nZXQoKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRw
U2VuZGVyQmFja2VuZDo6c2V0UGFyYW1ldGVycyhjb25zdCBSVENSdHBTZW5kUGFyYW1ldGVycyYs
IERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCit7CisgICAgaWYgKCFtX3J0Y1Nl
bmRlcikgeworICAgICAgICBwcm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHByb21pc2Uu
cmVzb2x2ZSgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRFRNRlNlbmRlckJhY2tlbmQ+IEdT
dHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmNyZWF0ZURUTUZCYWNrZW5kKCkKK3sKKyAgICByZXR1
cm4gbWFrZVVuaXF1ZTxHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZD4oKTsKK30KKworUmVmPFJU
Q1J0cFRyYW5zZm9ybUJhY2tlbmQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJ0Y1J0cFRy
YW5zZm9ybUJhY2tlbmQoKQoreworICAgIHJldHVybiBHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zv
cm1CYWNrZW5kOjpjcmVhdGUobV9ydGNTZW5kZXIpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNl
bmRlckJhY2tlbmQ6OnNldE1lZGlhU3RyZWFtSWRzKGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4m
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEdGxz
VHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6ZHRsc1RyYW5zcG9y
dEJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJhbnNw
b3J0OworICAgIGdfb2JqZWN0X2dldChtX3J0Y1NlbmRlci5nZXQoKSwgInRyYW5zcG9ydCIsICZ0
cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworICAgIHJldHVybiB0cmFuc3BvcnQgPyBtYWtl
VW5pcXVlPEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kPih0cmFuc3BvcnQpIDogbnVsbHB0
cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiOTk3YTY4NjczZWRhMzA4MGU5ZGJkNGI0
YmEyNjE1NTJhNGZmNjQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgKQEAgLTAs
MCArMSwxMjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5j
bHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1VuaXF1
ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNs
dWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvV2Vh
a1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDsKKworY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCBmaW5hbCA6
IHB1YmxpYyBSVENSdHBTZW5kZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRF
RDsKK3B1YmxpYzoKKyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZCYgYmFja2VuZCwgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYg
cnRjU2VuZGVyLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBpbml0RGF0YSkKKyAgICAgICAg
OiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZChXZWFrUHRyIHsgJmJhY2tlbmQgfSkKKyAgICAgICAg
LCBtX3J0Y1NlbmRlcihXVEZNb3ZlKHJ0Y1NlbmRlcikpCisgICAgICAgICwgbV9pbml0RGF0YShX
VEZNb3ZlKGluaXREYXRhKSkKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgU291cmNlID0gc3Rk
Ojp2YXJpYW50PHN0ZDo6bnVsbHB0cl90LCBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNl
R1N0cmVhbWVyPiwgUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4+Owor
ICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kJiBiYWNrZW5kLCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mJiBydGNTZW5kZXIsIFNv
dXJjZSYmIHNvdXJjZSwgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEpCisgICAg
ICAgIDogbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQoV2Vha1B0ciB7ICZiYWNrZW5kIH0pCisgICAg
ICAgICwgbV9ydGNTZW5kZXIoV1RGTW92ZShydGNTZW5kZXIpKQorICAgICAgICAsIG1fc291cmNl
KFdURk1vdmUoc291cmNlKSkKKyAgICAgICAgLCBtX2luaXREYXRhKFdURk1vdmUoaW5pdERhdGEp
KQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldFJUQ1NlbmRlcihHUmVmUHRyPEdzdFdlYlJU
Q1JUUFNlbmRlcj4mJiBydGNTZW5kZXIpIHsgbV9ydGNTZW5kZXIgPSBXVEZNb3ZlKHJ0Y1NlbmRl
cik7IH0KKyAgICBHc3RXZWJSVENSVFBTZW5kZXIqIHJ0Y1NlbmRlcigpIHsgcmV0dXJuIG1fcnRj
U2VuZGVyLmdldCgpOyB9CisKKyAgICBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXIqIGF1ZGlvU291cmNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1f
c291cmNlLAorICAgICAgICAgICAgW10gKFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI+JiBzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5wdHIoKTsgfSwKKyAgICAgICAgICAg
IFtdIChjb25zdCBhdXRvJikgLT4gUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVy
KiB7IHJldHVybiBudWxscHRyOyB9CisgICAgICAgICk7CisgICAgfQorCisgICAgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKiB2aWRlb1NvdXJjZSgpCisgICAgeworICAgICAg
ICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChSZWY8UmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7IHJldHVybiBzb3Vy
Y2UucHRyKCk7IH0sCisgICAgICAgICAgICBbXSAoY29uc3QgYXV0byYpIC0+IFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciogeyByZXR1cm4gbnVsbHB0cjsgfQorICAgICAgICAp
OworICAgIH0KKworICAgIGJvb2wgaGFzU291cmNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJl
dHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLAorICAgICAgICAgICAgW10gKGNvbnN0IHN0ZDo6
bnVsbHB0cl90JikgeyByZXR1cm4gZmFsc2U7IH0sCisgICAgICAgICAgICBbXSAoY29uc3QgYXV0
byYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFy
U291cmNlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTb3VyY2UoKSk7CisgICAgICAgIG1f
c291cmNlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIHNldFNvdXJjZShTb3VyY2UmJiBz
b3VyY2UpCisgICAgeworICAgICAgICBBU1NFUlQoIWhhc1NvdXJjZSgpKTsKKyAgICAgICAgbV9z
b3VyY2UgPSBXVEZNb3ZlKHNvdXJjZSk7CisgICAgICAgIEFTU0VSVChoYXNTb3VyY2UoKSk7Cisg
ICAgfQorCisgICAgdm9pZCB0YWtlU291cmNlKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIGJh
Y2tlbmQpCisgICAgeworICAgICAgICBBU1NFUlQoYmFja2VuZC5oYXNTb3VyY2UoKSk7CisgICAg
ICAgIHNldFNvdXJjZShXVEZNb3ZlKGJhY2tlbmQubV9zb3VyY2UpKTsKKyAgICB9CisKKyAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IHN0b3BTb3VyY2UoKTsKKworcHJpdmF0ZToKKyAgICBib29sIHJl
cGxhY2VUcmFjayhSVENSdHBTZW5kZXImLCBNZWRpYVN0cmVhbVRyYWNrKikgZmluYWw7CisgICAg
UlRDUnRwU2VuZFBhcmFtZXRlcnMgZ2V0UGFyYW1ldGVycygpIGNvbnN0IGZpbmFsOworICAgIHZv
aWQgc2V0UGFyYW1ldGVycyhjb25zdCBSVENSdHBTZW5kUGFyYW1ldGVycyYsIERPTVByb21pc2VE
ZWZlcnJlZDx2b2lkPiYmKSBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UlRDRFRNRlNlbmRl
ckJhY2tlbmQ+IGNyZWF0ZURUTUZCYWNrZW5kKCkgZmluYWw7CisgICAgUmVmPFJUQ1J0cFRyYW5z
Zm9ybUJhY2tlbmQ+IHJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQoKSBmaW5hbDsKKyAgICB2b2lkIHNl
dE1lZGlhU3RyZWFtSWRzKGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKSBmaW5hbDsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+IGR0bHNUcmFuc3BvcnRCYWNr
ZW5kKCkgZmluYWw7CisKKyAgICB2b2lkIHN0YXJ0U291cmNlKCk7CisKKyAgICBXZWFrUHRyPEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZD4gbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQ7Cisg
ICAgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IG1fcnRjU2VuZGVyOworICAgIFNvdXJjZSBt
X3NvdXJjZTsKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gbV9pbml0RGF0YTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjY2YzRkZWMxYmIw
M2EzMjc3ZDkyYjA2NTQyOWM2NDA3MmJlMTQzZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRy
YW5zZm9ybUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBT
ZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3Jt
QmFja2VuZDo6TWVkaWFUeXBlIG1lZGlhVHlwZUZyb21TZW5kZXIoY29uc3QgR3N0V2ViUlRDUlRQ
U2VuZGVyJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSVENSdHBUcmFu
c2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGU6OlZpZGVvOworfQorCitHU3RyZWFtZXJSdHBTZW5kZXJU
cmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKGNvbnN0
IEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiYgcnRjU2VuZGVyKQorICAgIDogR1N0cmVhbWVy
UnRwVHJhbnNmb3JtQmFja2VuZChtZWRpYVR5cGVGcm9tU2VuZGVyKCpydGNTZW5kZXIpLCBTaWRl
OjpTZW5kZXIpCisgICAgLCBtX3J0Y1NlbmRlcihydGNTZW5kZXIpCit7Cit9CisKK0dTdHJlYW1l
clJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6On5HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1C
YWNrZW5kKCkKK3sKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5k
OjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayhDYWxsYmFjayYmIGNhbGxiYWNrKQorewor
ICAgIHNldElucHV0Q2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpOworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6cmVx
dWVzdEtleUZyYW1lKCkKK3sKKyAgICBBU1NFUlQobWVkaWFUeXBlKCkgPT0gTWVkaWFUeXBlOjpW
aWRlbyk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjZiMGE1NzZkYjEyNjgzZTc1ODk3ODQyZDE0YTc5NThhNDkwZTky
NmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmgKQEAgLTAsMCAr
MSw1MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRl
ICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFj
a2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSA8d3Rm
L0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJTZW5k
ZXJUcmFuc2Zvcm1lcjsKKworY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2Vu
ZCBmaW5hbCA6IHB1YmxpYyBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kIHsKKyAgICBXVEZf
TUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lclJ0
cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JU
UFNlbmRlcj4mIHNlbmRlcikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJSdHBTZW5k
ZXJUcmFuc2Zvcm1CYWNrZW5kKHNlbmRlcikpOyB9CisgICAgfkdTdHJlYW1lclJ0cFNlbmRlclRy
YW5zZm9ybUJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJSdHBT
ZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiYp
OworCisgICAgLy8gUlRDUnRwVHJhbnNmb3JtQmFja2VuZAorICAgIHZvaWQgc2V0VHJhbnNmb3Jt
YWJsZUZyYW1lQ2FsbGJhY2soQ2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCByZXF1ZXN0S2V5
RnJhbWUoKSBmaW5hbDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBtX3J0Y1Nl
bmRlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1ZDEwYTJj
NGFhZWRhOThiYWIyZTA2ZGE0OTQ0MWU1Y2JiNGQxNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTI5IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRw
VHJhbnNjZWl2ZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaCIK
KyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVh
bWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlJUQ1J0cENvZGVjQ2FwYWJpbGl0eS5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIu
aD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2Rl
YnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVi
dWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZChHUmVmUHRyPEdzdFdlYlJUQ1JUUFRy
YW5zY2VpdmVyPiYmIHJ0Y1RyYW5zY2VpdmVyKQorICAgIDogbV9ydGNUcmFuc2NlaXZlcihXVEZN
b3ZlKHJ0Y1RyYW5zY2VpdmVyKSkKK3sKKyAgICBnX29iamVjdF9zZXQobV9ydGNUcmFuc2NlaXZl
ci5nZXQoKSwgImRvLW5hY2siLCB0cnVlLCAiZmVjLXR5cGUiLCBHU1RfV0VCUlRDX0ZFQ19UWVBF
X1VMUF9SRUQsIG51bGxwdHIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVJlY2Vp
dmVyQmFja2VuZCgpCit7CisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gcmVjZWl2
ZXI7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJyZWNlaXZlciIs
ICZyZWNlaXZlci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1
ZTxHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+KFdURk1vdmUocmVjZWl2ZXIpKTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+IEdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZDo6Y3JlYXRlU2VuZGVyQmFja2VuZChHU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQmIGJhY2tlbmQsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYm
IHNvdXJjZSwgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEpCit7CisgICAgR1Jl
ZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IHNlbmRlcjsKKyAgICBnX29iamVjdF9nZXQobV9ydGNU
cmFuc2NlaXZlci5nZXQoKSwgInNlbmRlciIsICZzZW5kZXIub3V0UHRyKCksIG51bGxwdHIpOwor
ICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZD4oYmFj
a2VuZCwgV1RGTW92ZShzZW5kZXIpLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUoaW5pdERhdGEp
KTsKK30KKworUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gR1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kOjpkaXJlY3Rpb24oKSBjb25zdAoreworICAgIEdzdFdlYlJUQ1JUUFRyYW5zY2Vp
dmVyRGlyZWN0aW9uIGdzdERpcmVjdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV9ydGNUcmFuc2Nl
aXZlci5nZXQoKSwgImRpcmVjdGlvbiIsICZnc3REaXJlY3Rpb24sIG51bGxwdHIpOworICAgIHJl
dHVybiB0b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKGdzdERpcmVjdGlvbik7Cit9CisKK3N0
ZDo6b3B0aW9uYWw8UlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24+IEdTdHJlYW1lclJ0cFRyYW5z
Y2VpdmVyQmFja2VuZDo6Y3VycmVudERpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgR3N0V2ViUlRD
UlRQVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZ3N0RGlyZWN0aW9uOworICAgIGdfb2JqZWN0X2dldCht
X3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiY3VycmVudC1kaXJlY3Rpb24iLCAmZ3N0RGlyZWN0aW9u
LCBudWxscHRyKTsKKyAgICBpZiAoIWdzdERpcmVjdGlvbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKyAgICByZXR1cm4gdG9SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihnc3REaXJl
Y3Rpb24pOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c2V0RGly
ZWN0aW9uKFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBnX29i
amVjdF9zZXQobV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgImRpcmVjdGlvbiIsIGZyb21SVENSdHBU
cmFuc2NlaXZlckRpcmVjdGlvbihkaXJlY3Rpb24pLCBudWxscHRyKTsKK30KKworU3RyaW5nIEdT
dHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6bWlkKCkKK3sKKyAgICBHVW5pcXVlT3V0UHRy
PGNoYXI+IG1pZDsKKyAgICBnX29iamVjdF9nZXQobV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgIm1p
ZCIsICZtaWQub3V0UHRyKCksIG51bGxwdHIpOworICAgIHJldHVybiBtaWQuZ2V0KCk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzdG9wKCkKK3sKKyAgICAvLyBG
SVhNRTogd2VicnRjYmluIHRyYW5zY2VpdmVycyBjYW4ndCBiZSBzdG9wcGVkIHlldC4KKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitib29sIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZDo6c3RvcHBlZCgpIGNvbnN0Cit7CisgICAgLy8gRklYTUU6IHdlYnJ0Y2JpbiB0cmFuc2NlaXZl
cnMgY2FuJ3QgYmUgc3RvcHBlZCB5ZXQuCisgICAgcmV0dXJuIGZhbHNlOworfQorCitzdGF0aWMg
aW5saW5lIEV4Y2VwdGlvbk9yPEdzdENhcHMqPiB0b1J0cENvZGVjQ2FwYWJpbGl0eShjb25zdCBS
VENSdHBDb2RlY0NhcGFiaWxpdHkmIGNvZGVjKQoreworICAgIGlmICghY29kZWMubWltZVR5cGUu
c3RhcnRzV2l0aCgidmlkZW8vIikgJiYgIWNvZGVjLm1pbWVUeXBlLnN0YXJ0c1dpdGgoImF1ZGlv
LyIpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE1vZGlmaWNhdGlvbkVycm9y
LCAiUlRDUnRwQ29kZWNDYXBhYmlsaXR5IGJhZCBtaW1lVHlwZSIgfTsKKworICAgIGF1dG8gY29t
cG9uZW50cyA9IGNvZGVjLm1pbWVUeXBlLnNwbGl0KCcvJyk7CisgICAgYXV0byogY2FwcyA9IGdz
dF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0aW9uL3gtcnRwIiwgIm1lZGlhIiwgR19UWVBFX1NU
UklORywgY29tcG9uZW50c1swXS5hc2NpaSgpLmRhdGEoKSwgImVuY29kaW5nLW5hbWUiLCBHX1RZ
UEVfU1RSSU5HLCBjb21wb25lbnRzWzFdLmFzY2lpKCkuZGF0YSgpLCBudWxscHRyKTsKKyAgICBn
c3RfY2Fwc19zZXRfc2ltcGxlKGNhcHMsICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgY29kZWMu
Y2xvY2tSYXRlLCBudWxscHRyKTsKKyAgICBpZiAoY29kZWMuY2hhbm5lbHMpCisgICAgICAgIGdz
dF9jYXBzX3NldF9zaW1wbGUoY2FwcywgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgKmNvZGVjLmNo
YW5uZWxzLCBudWxscHRyKTsKKworICAgIGlmICghY29kZWMuc2RwRm10cExpbmUuaXNFbXB0eSgp
KQorICAgICAgICBHU1RfRklYTUUoIlVucHJvY2Vzc2VkIFNEUCBGbXRwTGluZTogJXMiLCBjb2Rl
Yy5zZHBGbXRwTGluZS51dGY4KCkuZGF0YSgpKTsKKyAgICBHU1RfREVCVUcoIkNvZGVjIGNhcGFi
aWxpdHk6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKyAgICByZXR1cm4gY2FwczsKK30KKwor
RXhjZXB0aW9uT3I8dm9pZD4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXRDb2Rl
Y1ByZWZlcmVuY2VzKGNvbnN0IFZlY3RvcjxSVENSdHBDb2RlY0NhcGFiaWxpdHk+JiBjb2RlY3Mp
Cit7CisgICAgYXV0byBnc3RDb2RlY3MgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkp
OworICAgIGZvciAoYXV0byYgY29kZWMgOiBjb2RlY3MpIHsKKyAgICAgICAgYXV0byByZXN1bHQg
PSB0b1J0cENvZGVjQ2FwYWJpbGl0eShjb2RlYyk7CisgICAgICAgIGlmIChyZXN1bHQuaGFzRXhj
ZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsK
KyAgICAgICAgZ3N0X2NhcHNfYXBwZW5kKGdzdENvZGVjcy5nZXQoKSwgcmVzdWx0LnJlbGVhc2VS
ZXR1cm5WYWx1ZSgpKTsKKyAgICB9CisgICAgZ19vYmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIu
Z2V0KCksICJjb2RlYy1wcmVmZXJlbmNlcyIsIGdzdENvZGVjcy5nZXQoKSwgbnVsbHB0cik7Cisg
ICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJh
bnNjZWl2ZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWE3
NzMwNGIwNmU0MTgwZmM3MDcxNDdmNTQ4ODY5ODU4ODE2YTY5Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRw
VHJhbnNjZWl2ZXJCYWNrZW5kLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ7CisK
K2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENS
dHBUcmFuc2NlaXZlckJhY2tlbmQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZChHUmVmUHRyPEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyPiYmKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBS
ZWNlaXZlckJhY2tlbmQ+IGNyZWF0ZVJlY2VpdmVyQmFja2VuZCgpOworICAgIHN0ZDo6dW5pcXVl
X3B0cjxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPiBjcmVhdGVTZW5kZXJCYWNrZW5kKEdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNv
dXJjZSYmLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJik7CisKKyAgICBHc3RXZWJSVENSVFBU
cmFuc2NlaXZlciogcnRjVHJhbnNjZWl2ZXIoKSB7IHJldHVybiBtX3J0Y1RyYW5zY2VpdmVyLmdl
dCgpOyB9CisKK3ByaXZhdGU6CisgICAgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZGlyZWN0
aW9uKCkgY29uc3QgZmluYWw7CisgICAgc3RkOjpvcHRpb25hbDxSVENSdHBUcmFuc2NlaXZlckRp
cmVjdGlvbj4gY3VycmVudERpcmVjdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0RGly
ZWN0aW9uKFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKSBmaW5hbDsKKyAgICBTdHJpbmcgbWlk
KCkgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisgICAgYm9vbCBzdG9wcGVkKCkgY29u
c3QgZmluYWw7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0Q29kZWNQcmVmZXJlbmNlcyhjb25z
dCBWZWN0b3I8UlRDUnRwQ29kZWNDYXBhYmlsaXR5PiYpIGZpbmFsOworCisgICAgR1JlZlB0cjxH
c3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gbV9ydGNUcmFuc2NlaXZlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3Jt
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTliNGE2YTM3ZTVmYjAzY2U5ODM2MzA2Y2JlZmNkZmQ5
YTVhMGY1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuY3BwCkBAIC0wLDAg
KzEsNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgiCisKKyNpZiBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR1N0cmVhbWVyUnRw
VHJhbnNmb3JtQmFja2VuZDo6c2V0SW5wdXRDYWxsYmFjayhDYWxsYmFjayYmIGNhbGxiYWNrKQor
eworICAgIExvY2tlciBob2xkTG9jayB7IG1faW5wdXRDYWxsYmFja0xvY2sgfTsKKyAgICBtX2lu
cHV0Q2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBU
cmFuc2Zvcm1CYWNrZW5kOjpjbGVhclRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKCkKK3sKKyAg
ICBzZXRJbnB1dENhbGxiYWNrKHsgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNmb3Jt
QmFja2VuZDo6cHJvY2Vzc1RyYW5zZm9ybWVkRnJhbWUoUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1l
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMTk1NDQ4ZmM3ZDMyNjE4Zjc4ZTdlODE1ZmMxNWUxNDk2MTFiMmIzYgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRD
KSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJUQ1J0cFRyYW5zZm9ybUJh
Y2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQgOiBwdWJsaWMgUlRDUnRwVHJhbnNm
b3JtQmFja2VuZCB7Citwcm90ZWN0ZWQ6CisgICAgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2Vu
ZChNZWRpYVR5cGUsIFNpZGUpOworICAgIHZvaWQgc2V0SW5wdXRDYWxsYmFjayhDYWxsYmFjayYm
KTsKKworcHJvdGVjdGVkOgorICAgIE1lZGlhVHlwZSBtZWRpYVR5cGUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX21lZGlhVHlwZTsgfQorCitwcml2YXRlOgorICAgIC8vIFJUQ1J0cFRyYW5zZm9y
bUJhY2tlbmQKKyAgICB2b2lkIHByb2Nlc3NUcmFuc2Zvcm1lZEZyYW1lKFJUQ1J0cFRyYW5zZm9y
bWFibGVGcmFtZSYpIGZpbmFsOworICAgIHZvaWQgY2xlYXJUcmFuc2Zvcm1hYmxlRnJhbWVDYWxs
YmFjaygpIGZpbmFsOworICAgIFNpZGUgc2lkZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2lk
ZTsgfQorCisgICAgTWVkaWFUeXBlIG1fbWVkaWFUeXBlOworICAgIFNpZGUgbV9zaWRlOworCisg
ICAgTG9jayBtX2lucHV0Q2FsbGJhY2tMb2NrOworICAgIENhbGxiYWNrIG1faW5wdXRDYWxsYmFj
azsKKworICAgIExvY2sgbV9vdXRwdXRDYWxsYmFja0xvY2s7Cit9OworCitpbmxpbmUgR1N0cmVh
bWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZChNZWRp
YVR5cGUgbWVkaWFUeXBlLCBTaWRlIHNpZGUpCisgICAgOiBtX21lZGlhVHlwZShtZWRpYVR5cGUp
CisgICAgLCBtX3NpZGUoc2lkZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk0Y2ZlZDczYjc2M2MyMGFmOTA3OTJmMjY0Yzk1ZDMyYjg0NjhlOWIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNw
b3J0QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBSVENTY3RwVHJhbnNwb3J0U3RhdGUgdG9S
VENTY3RwVHJhbnNwb3J0U3RhdGUoR3N0V2ViUlRDU0NUUFRyYW5zcG9ydFN0YXRlIHN0YXRlKQor
eworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0NUUF9UUkFOU1BP
UlRfU1RBVEVfTkVXOgorICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9D
T05ORUNUSU5HOgorICAgICAgICByZXR1cm4gUlRDU2N0cFRyYW5zcG9ydFN0YXRlOjpDb25uZWN0
aW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9DT05ORUNURUQ6
CisgICAgICAgIHJldHVybiBSVENTY3RwVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZDsKKyAgICBj
YXNlIEdTVF9XRUJSVENfU0NUUF9UUkFOU1BPUlRfU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1
cm4gUlRDU2N0cFRyYW5zcG9ydFN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6
OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5z
cG9ydD4mJiB0cmFuc3BvcnQpCisgICAgOiBtX2JhY2tlbmQoV1RGTW92ZSh0cmFuc3BvcnQpKQor
eworICAgIEFTU0VSVChtX2JhY2tlbmQpOworfQorCitHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFj
a2VuZDo6fkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICB1bnJlZ2lzdGVy
Q2xpZW50KCk7Cit9CisKK1VuaXF1ZVJlZjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVh
bWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICBH
UmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICBnX29iamVjdF9n
ZXQobV9iYWNrZW5kLmdldCgpLCAidHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVs
bHB0cik7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQ+KHRyYW5zcG9ydCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tl
bmQ6OnJlZ2lzdGVyQ2xpZW50KENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGll
bnQpOworICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZChtX2JhY2tlbmQuZ2V0KCksICJub3RpZnk6OnN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVh
bWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3Rh
dGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworfQorCit2b2lkIEdTdHJlYW1lclNjdHBUcmFu
c3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2RhdGEobV9iYWNrZW5kLmdldCgpLCB0aGlzKTsKKyAgICBtX2NsaWVu
dC5jbGVhcigpOworfQorCit2b2lkIEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpzdGF0
ZUNoYW5nZWQoKQoreworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnRTdGF0ZSB0cmFuc3BvcnRTdGF0ZTsKKyAgICBndWludDE2
IG1heENoYW5uZWxzOworICAgIHVpbnQ2NF90IG1heE1lc3NhZ2VTaXplOworICAgIGdfb2JqZWN0
X2dldChtX2JhY2tlbmQuZ2V0KCksICJzdGF0ZSIsICZ0cmFuc3BvcnRTdGF0ZSwgIm1heC1tZXNz
YWdlLXNpemUiLCAmbWF4TWVzc2FnZVNpemUsICJtYXgtY2hhbm5lbHMiLCAmbWF4Q2hhbm5lbHMs
IG51bGxwdHIpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHRyYW5zcG9ydFN0YXRlLCBt
YXhDaGFubmVscywgbWF4TWVzc2FnZVNpemVdIHsKKyAgICAgICAgaWYgKCFtX2NsaWVudCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9S
VENTY3RwVHJhbnNwb3J0U3RhdGUodHJhbnNwb3J0U3RhdGUpLCBtYXhNZXNzYWdlU2l6ZSwgbWF4
Q2hhbm5lbHMpOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJT
Y3RwVHJhbnNwb3J0QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40
OTgwZmM4NDk4YzA1YzM5N2RjYjA2YzcwYzQzMzA4YjAyOTBmMDI1Ci0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
U2N0cFRyYW5zcG9ydEJhY2tlbmQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJSVENTY3RwVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENTQ1RQVHJhbnNwb3J0IEdzdFdlYlJUQ1ND
VFBUcmFuc3BvcnQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDU2N0cFRyYW5zcG9ydEJhY2tlbmQs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZD4gewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJl
YW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4m
Jik7CisgICAgfkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKCk7CisKK3Byb3RlY3RlZDoK
KyAgICB2b2lkIHN0YXRlQ2hhbmdlZCgpOworCitwcml2YXRlIDoKKyAgICAvLyBSVENTY3RwVHJh
bnNwb3J0QmFja2VuZAorICAgIGNvbnN0IHZvaWQqIGJhY2tlbmQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKyAgICBVbmlxdWVSZWY8UlRDRHRsc1RyYW5zcG9ydEJh
Y2tlbmQ+IGR0bHNUcmFuc3BvcnRCYWNrZW5kKCkgZmluYWw7CisgICAgdm9pZCByZWdpc3RlckNs
aWVudChDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHVucmVnaXN0ZXJDbGllbnQoKSBmaW5hbDsK
KworICAgIEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4gbV9iYWNrZW5kOworICAgIFdl
YWtQdHI8Q2xpZW50PiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclN0YXRzQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjE5
M2FmNTY5MGExNzg5MGFmZTFlY2Y5NzRmYmNjNjI4Nzk0MWJlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3Rh
dHNDb2xsZWN0b3IuY3BwCkBAIC0wLDAgKzEsMjcwIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU3RhdHND
b2xsZWN0b3IuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJKU0RPTU1h
cExpa2UuaCIKKyNpbmNsdWRlICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisKKyNkZWZpbmUgR1NUX1VT
RV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRlIDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdT
VF9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCitHU1Rf
REVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2Rl
ZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDU3RhdHMoUlRDU3Rh
dHNSZXBvcnQ6OlN0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7
CisgICAgZG91YmxlIHRpbWVzdGFtcDsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91Ymxl
KHN0cnVjdHVyZSwgInRpbWVzdGFtcCIsICZ0aW1lc3RhbXApKQorICAgICAgICBzdGF0cy50aW1l
c3RhbXAgPSB0aW1lc3RhbXA7CisgICAgc3RhdHMuaWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJp
bmcoc3RydWN0dXJlLCAiaWQiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENSVFBT
dHJlYW1TdGF0cyhSVENTdGF0c1JlcG9ydDo6UnRwU3RyZWFtU3RhdHMmIHN0YXRzLCBjb25zdCBH
c3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVj
dHVyZSk7CisKKyAgICBzdGF0cy50cmFuc3BvcnRJZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmlu
ZyhzdHJ1Y3R1cmUsICJ0cmFuc3BvcnQtaWQiKTsKKyAgICBzdGF0cy5jb2RlY0lkID0gZ3N0X3N0
cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImNvZGVjLWlkIik7CisKKyAgICB1bnNpZ25l
ZCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUsICJzc3Jj
IiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuc3NyYyA9IHZhbHVlOworCisgICAgLy8gRklYTUU6
CisgICAgLy8gc3RhdHMudHJhbnNwb3J0SWQKKyAgICAvLyBzdGF0cy5jb2RlY0lkCisgICAgLy8g
c3RhdHMubWVkaWFUeXBlCisgICAgLy8gc3RhdHMua2luZAorfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgZmlsbFJUQ0NvZGVjU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3RhdHMmIHN0YXRzLCBj
b25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMs
IHN0cnVjdHVyZSk7CisKKyAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVy
ZV9nZXRfdWludChzdHJ1Y3R1cmUsICJwYXlsb2FkLXR5cGUiLCAmdmFsdWUpKQorICAgICAgICBz
dGF0cy5wYXlsb2FkVHlwZSA9IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50
KHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5jbG9ja1Jh
dGUgPSB2YWx1ZTsKKworICAgIC8vIEZJWE1FOgorICAgIC8vIHN0YXRzLm1pbWVUeXBlID0KKyAg
ICAvLyBzdGF0cy5jaGFubmVscyA9CisgICAgLy8gc3RhdHMuc2RwRm10cExpbmUgPQorICAgIC8v
IHN0YXRzLmltcGxlbWVudGF0aW9uID0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxJbmJv
dW5kUlRQU3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OkluYm91bmRSdHBTdHJlYW1TdGF0cyYg
c3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZpbGxSVENSVFBT
dHJlYW1TdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIHVpbnQ2NF90IHZhbHVlOworICAg
IGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50NjQoc3RydWN0dXJlLCAicGFja2V0cy1yZWNlaXZl
ZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnBhY2tldHNSZWNlaXZlZCA9IHZhbHVlOworICAg
IGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50NjQoc3RydWN0dXJlLCAiYnl0ZXMtcmVjZWl2ZWQi
LCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5ieXRlc1JlY2VpdmVkID0gdmFsdWU7CisKKyAgICB1
bnNpZ25lZCBwYWNrZXRzTG9zdDsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1
Y3R1cmUsICJwYWNrZXRzLWxvc3QiLCAmcGFja2V0c0xvc3QpKQorICAgICAgICBzdGF0cy5wYWNr
ZXRzTG9zdCA9IHBhY2tldHNMb3N0OworCisgICAgZG91YmxlIGppdHRlcjsKKyAgICBpZiAoZ3N0
X3N0cnVjdHVyZV9nZXRfZG91YmxlKHN0cnVjdHVyZSwgImppdHRlciIsICZqaXR0ZXIpKQorICAg
ICAgICBzdGF0cy5qaXR0ZXIgPSBqaXR0ZXI7CisKKyAgICAvLyBGSVhNRToKKyAgICAvLyBzdGF0
cy5mcmFjdGlvbkxvc3QgPQorICAgIC8vIHN0YXRzLnBhY2tldHNEaXNjYXJkZWQgPQorICAgIC8v
IHN0YXRzLnBhY2tldHNSZXBhaXJlZCA9CisgICAgLy8gc3RhdHMuYnVyc3RQYWNrZXRzTG9zdCA9
CisgICAgLy8gc3RhdHMuYnVyc3RQYWNrZXRzRGlzY2FyZGVkID0KKyAgICAvLyBzdGF0cy5idXJz
dExvc3NDb3VudCA9CisgICAgLy8gc3RhdHMuYnVyc3REaXNjYXJkQ291bnQgPQorICAgIC8vIHN0
YXRzLmJ1cnN0TG9zc1JhdGUgPQorICAgIC8vIHN0YXRzLmJ1cnN0RGlzY2FyZFJhdGUgPQorICAg
IC8vIHN0YXRzLmdhcExvc3NSYXRlID0KKyAgICAvLyBzdGF0cy5nYXBEaXNjYXJkUmF0ZSA9Cisg
ICAgLy8gc3RhdHMuZnJhbWVzRGVjb2RlZCA9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxs
T3V0Ym91bmRSVFBTdHJlYW1TdGF0cyhSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1T
dGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZpbGxS
VENSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIHVpbnQ2NF90IHZhbHVl
OworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50NjQoc3RydWN0dXJlLCAicGFja2V0cy1z
ZW50IiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMucGFja2V0c1NlbnQgPSB2YWx1ZTsKKyAgICBp
ZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgImJ5dGVzLXNlbnQiLCAmdmFs
dWUpKQorICAgICAgICBzdGF0cy5ieXRlc1NlbnQgPSB2YWx1ZTsKKworICAgIC8vIEZJWE1FCisg
ICAgLy8gc3RhdHMudGFyZ2V0Qml0cmF0ZSA9CisgICAgLy8gc3RhdHMuZnJhbWVzRW5jb2RlZCA9
Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDUGVlckNvbm5lY3Rpb25TdGF0cyhSVENT
dGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVy
ZSogc3RydWN0dXJlKQoreworICAgIGZpbGxSVENTdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKwor
ICAgIGludCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwg
ImRhdGEtY2hhbm5lbHMtb3BlbmVkIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuZGF0YUNoYW5u
ZWxzT3BlbmVkID0gdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1
cmUsICJkYXRhLWNoYW5uZWxzLWNsb3NlZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLmRhdGFD
aGFubmVsc0Nsb3NlZCA9IHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1Ry
YW5zcG9ydFN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cyYgc3RhdHMsIGNvbnN0
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZpbGxSVENTdGF0cyhzdGF0cywgc3Ry
dWN0dXJlKTsKKworICAgIC8vIEZJWE1FCit9CisKK3N0YXRpYyBnYm9vbGVhbiBmaWxsUmVwb3J0
Q2FsbGJhY2soR1F1YXJrLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkK
K3sKKyAgICBpZiAoIUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUodmFsdWUpKQorICAgICAgICBy
ZXR1cm4gVFJVRTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3Zh
bHVlX2dldF9zdHJ1Y3R1cmUodmFsdWUpOworICAgIEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5
cGU7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZ
UEVfV0VCUlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1
cm4gVFJVRTsKKworICAgIERPTU1hcEFkYXB0ZXImIHJlcG9ydCA9ICpyZWludGVycHJldF9jYXN0
PERPTU1hcEFkYXB0ZXIqPih1c2VyRGF0YSk7CisKKyAgICBzd2l0Y2ggKHN0YXRzVHlwZSkgewor
ICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DT0RFQzogeworICAgICAgICBSVENTdGF0c1JlcG9y
dDo6Q29kZWNTdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJUQ0NvZGVjU3RhdHMoc3RhdHMsIHN0
cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5
PFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19JTkJPVU5E
X1JUUDogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzIHN0
YXRzOworICAgICAgICBmaWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0
c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19PVVRC
T1VORF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3Rh
dHMgc3RhdHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1
Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxS
VENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3Zl
KHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RB
VFNfUkVNT1RFX0lOQk9VTkRfUlRQOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5k
UnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMo
c3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExE
aWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0cy5p
ZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1Rf
V0VCUlRDX1NUQVRTX1JFTU9URV9PVVRCT1VORF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBv
cnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJU
UFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERP
TVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1T
dGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfQ1NSQzoKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXBy
ZWNhdGVkIHN0YXRzOiBjc3JjIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJU
Q19TVEFUU19QRUVSX0NPTk5FQ1RJT046IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OlBlZXJD
b25uZWN0aW9uU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRz
KHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURM
RGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cz4+KHN0YXRzLmlk
LCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9X
RUJSVENfU1RBVFNfVFJBTlNQT1JUOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3Bv
cnRTdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdHJ1
Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxS
VENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1NUUkVB
TToKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0YXRzOiBzdHJlYW0iKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX0RBVEFfQ0hBTk5FTDoKKyAgICAg
ICAgR1NUX0ZJWE1FKCJNaXNzaW5nIGRhdGEtY2hhbm5lbCBzdGF0cyBzdXBwb3J0Iik7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DQU5ESURBVEVfUEFJUjoKKyAg
ICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfTE9DQUxfQ0FORElEQVRFOgorICAgIGNhc2UgR1NUX1dF
QlJUQ19TVEFUU19SRU1PVEVfQ0FORElEQVRFOgorICAgICAgICBHU1RfRklYTUUoIk1pc3Npbmcg
Y2FuZGlkYXRlIHN0YXRzIHN1cHBvcnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX1NUQVRTX0NFUlRJRklDQVRFOgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2Vy
dGlmaWNhdGUgc3RhdHMgc3VwcG9ydCIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBy
ZXR1cm4gVFJVRTsKK30KKworc3RydWN0IENhbGxiYWNrSG9sZGVyIHsKKyAgICBXVEZfTUFLRV9T
VFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgQ2FsbGJhY2tIb2xkZXIoR1N0cmVhbWVyU3RhdHND
b2xsZWN0b3I6OkNvbGxlY3RvckNhbGxiYWNrJiYgY29sbGVjdG9yQ2FsbGJhY2spCisgICAgICAg
IDogY2FsbGJhY2soV1RGTW92ZShjb2xsZWN0b3JDYWxsYmFjaykpCisgICAgeworICAgIH0KKyAg
ICBHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Q29sbGVjdG9yQ2FsbGJhY2sgY2FsbGJhY2s7Cit9
OworCit2b2lkIEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpnZXRTdGF0cyhDb2xsZWN0b3JDYWxs
YmFjayYmIGNhbGxiYWNrLCBHc3RQYWQqIHBhZCkKK3sKKyAgICBpZiAoIW1fd2VicnRjQmluKSB7
CisgICAgICAgIGNhbGxiYWNrKG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgYXV0byBob2xkZXIgPSBXVEY6Om1ha2VVbmlxdWU8Q2FsbGJhY2tIb2xkZXI+KFdURk1vdmUo
Y2FsbGJhY2spKTsKKyAgICBhdXRvKiBwcm9taXNlID0gZ3N0X3Byb21pc2VfbmV3X3dpdGhfY2hh
bmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcHJvbWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPENhbGxiYWNrSG9sZGVyPiBob2xkZXIocmVpbnRlcnByZXRf
Y2FzdDxDYWxsYmFja0hvbGRlcio+KHVzZXJEYXRhKSk7CisgICAgICAgIGlmIChnc3RfcHJvbWlz
ZV93YWl0KHByb21pc2UpICE9IEdTVF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEKSB7CisgICAgICAg
ICAgICBob2xkZXItPmNhbGxiYWNrKG51bGxwdHIpOworICAgICAgICAgICAgZ3N0X3Byb21pc2Vf
dW5yZWYocHJvbWlzZSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAg
ICBjb25zdCBhdXRvKiBzdGF0cyA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlKTsKKyAg
ICAgICAgaWYgKCFzdGF0cykgeworICAgICAgICAgICAgaG9sZGVyLT5jYWxsYmFjayhudWxscHRy
KTsKKyAgICAgICAgICAgIGdzdF9wcm9taXNlX3VucmVmKHByb21pc2UpOworICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3N0
YXRzLCBwcm9taXNlLCBob2xkZXIgPSBob2xkZXIuZ2V0KCldIHsKKyAgICAgICAgICAgIGhvbGRl
ci0+Y2FsbGJhY2soUlRDU3RhdHNSZXBvcnQ6OmNyZWF0ZShbc3RhdHMsIHByb21pc2VdKGF1dG8m
IG1hcEFkYXB0ZXIpIHsKKyAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2goc3Rh
dHMsIGZpbGxSZXBvcnRDYWxsYmFjaywgJm1hcEFkYXB0ZXIpOworICAgICAgICAgICAgICAgIGdz
dF9wcm9taXNlX3VucmVmKHByb21pc2UpOworICAgICAgICAgICAgfSkpOworICAgICAgICB9KTsK
KyAgICB9LCBob2xkZXIucmVsZWFzZSgpLCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJnZXQtc3RhdHMiLCBwYWQsIHByb21pc2UpOworfQor
Cit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29s
bGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQyNzM1NTNmODI1MTM3MjYxZmE5NDc2YmZlMGFlMTcyYmQw
ODFiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgKQEAgLTAsMCArMSw0OCBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFC
TEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRy
R1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNs
dWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUlRDU3RhdHNSZXBvcnQ7CisKK2NsYXNz
IEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdT
dHJlYW1lclN0YXRzQ29sbGVjdG9yLCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiB7Citw
dWJsaWM6CisgICAgdXNpbmcgQ29sbGVjdG9yQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2
b2lkKFJlZlB0cjxSVENTdGF0c1JlcG9ydD4mJik+OworICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVy
U3RhdHNDb2xsZWN0b3I+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVy
U3RhdHNDb2xsZWN0b3IoKSk7IH0KKworICAgIHZvaWQgc2V0RWxlbWVudChHc3RFbGVtZW50KiBl
bGVtZW50KSB7IG1fd2VicnRjQmluID0gZWxlbWVudDsgfQorICAgIHZvaWQgZ2V0U3RhdHMoQ29s
bGVjdG9yQ2FsbGJhY2smJiwgR3N0UGFkKik7CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RF
bGVtZW50PiBtX3dlYnJ0Y0JpbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
cldlYlJUQ1V0aWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZDJiYTI3ZDMwNmY2
ZDJmZGFkOTJlMDdlZjVmYWZlNDE4NzgzNWIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMu
Y3BwCkBAIC0wLDAgKzEsNDQ4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEln
YWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKworI2luY2x1ZGUg
IlJUQ0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJUQ0ljZVByb3RvY29sLmgiCisKKyNpbmNs
dWRlIDxvcGVuc3NsL2JuLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyNpbmNsdWRlIDxv
cGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJl
ci5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1Rv
SW50ZWdlckNvbnZlcnNpb24uaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRf
d2VicnRjX3V0aWxzX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJy
dGNfdXRpbHNfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIFJU
Q0ljZUNvbXBvbmVudCB0b1JUQ0ljZUNvbXBvbmVudChpbnQgY29tcG9uZW50KQoreworICAgIHJl
dHVybiBjb21wb25lbnQgPT0gMSA/IFJUQ0ljZUNvbXBvbmVudDo6UnRwIDogUlRDSWNlQ29tcG9u
ZW50OjpSdGNwOworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDSWNlUHJvdG9j
b2w+IHRvUlRDSWNlUHJvdG9jb2woY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKK3sKKyAgICBpZiAo
IXByb3RvY29sIHx8IHByb3RvY29sLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICBpZiAocHJvdG9jb2wgPT0gInVkcCIpCisgICAgICAgIHJldHVybiBSVENJY2VQcm90b2NvbDo6
VWRwOworICAgIEFTU0VSVChwcm90b2NvbCA9PSAidGNwIik7CisgICAgcmV0dXJuIFJUQ0ljZVBy
b3RvY29sOjpUY3A7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxSVENJY2VUY3BD
YW5kaWRhdGVUeXBlPiB0b1JUQ0ljZVRjcENhbmRpZGF0ZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBl
KQoreworICAgIGlmICghdHlwZSB8fCB0eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICBpZiAodHlwZSA9PSAiYWN0aXZlIikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRjcENh
bmRpZGF0ZVR5cGU6OkFjdGl2ZTsKKyAgICBpZiAodHlwZSA9PSAicGFzc2l2ZSIpCisgICAgICAg
IHJldHVybiBSVENJY2VUY3BDYW5kaWRhdGVUeXBlOjpQYXNzaXZlOworICAgIEFTU0VSVCh0eXBl
ID09ICJzbyIpOworICAgIHJldHVybiBSVENJY2VUY3BDYW5kaWRhdGVUeXBlOjpTbzsKK30KKwor
c3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0ljZUNhbmRpZGF0ZVR5cGU+IHRvUlRDSWNl
Q2FuZGlkYXRlVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKCF0eXBlIHx8IHR5
cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIGlmICh0eXBlID09ICJob3N0
IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNhbmRpZGF0ZVR5cGU6Okhvc3Q7CisgICAgaWYgKHR5
cGUgPT0gInNyZmx4IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNhbmRpZGF0ZVR5cGU6OlNyZmx4
OworICAgIGlmICh0eXBlID09ICJwcmZseCIpCisgICAgICAgIHJldHVybiBSVENJY2VDYW5kaWRh
dGVUeXBlOjpQcmZseDsKKyAgICBBU1NFUlQodHlwZSA9PSAicmVsYXkiKTsKKyAgICByZXR1cm4g
UlRDSWNlQ2FuZGlkYXRlVHlwZTo6UmVsYXk7Cit9CisKK1JlZlB0cjxSVENFcnJvcj4gdG9SVENF
cnJvcihHRXJyb3IqIHJ0Y0Vycm9yKQoreworICAgIGF1dG8gZGV0YWlsID0gdG9SVENFcnJvckRl
dGFpbFR5cGUoc3RhdGljX2Nhc3Q8R3N0V2ViUlRDRXJyb3I+KHJ0Y0Vycm9yLT5jb2RlKSk7Cisg
ICAgaWYgKCFkZXRhaWwpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBSVENF
cnJvcjo6Y3JlYXRlKCpkZXRhaWwsIHJ0Y0Vycm9yLT5tZXNzYWdlKTsKK30KKworc3RhdGljIGlu
bGluZSBkb3VibGUgdG9XZWJSVENCaXRSYXRlUHJpb3JpdHkoUlRDUHJpb3JpdHlUeXBlIHByaW9y
aXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlw
ZTo6VmVyeUxvdzoKKyAgICAgICAgcmV0dXJuIDAuNTsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlw
ZTo6TG93OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6TWVk
aXVtOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6SGlnaDoK
KyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGZyb21SVENFbmNvZGluZ1BhcmFt
ZXRlcnMoY29uc3QgUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAg
IEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBydGNQYXJhbWV0ZXJzKGdzdF9zdHJ1Y3R1cmVfbmV3
KCJlbmNvZGluZy1wYXJhbWV0ZXJzIiwgImFjdGl2ZSIsIEdfVFlQRV9CT09MRUFOLCBwYXJhbWV0
ZXJzLmFjdGl2ZSwKKyAgICAgICAgInJpZCIsIEdfVFlQRV9TVFJJTkcsIHBhcmFtZXRlcnMucmlk
LnV0ZjgoKS5kYXRhKCksICJiaXRyYXRlLXByaW9yaXR5IiwgR19UWVBFX0RPVUJMRSwgdG9XZWJS
VENCaXRSYXRlUHJpb3JpdHkocGFyYW1ldGVycy5wcmlvcml0eSksIG51bGxwdHIpKTsKKworICAg
IGlmIChwYXJhbWV0ZXJzLnNzcmMpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFt
ZXRlcnMuZ2V0KCksICJzc3JjIiwgR19UWVBFX1VMT05HLCBwYXJhbWV0ZXJzLnNzcmMsIG51bGxw
dHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMubWF4Qml0cmF0ZSkKKyAgICAgICAgZ3N0X3N0cnVj
dHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgIm1heC1iaXRyYXRlIiwgR19UWVBFX1VMT05H
LCBwYXJhbWV0ZXJzLm1heEJpdHJhdGUsIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMu
bWF4RnJhbWVyYXRlKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdl
dCgpLCAibWF4LWZyYW1lcmF0ZSIsIEdfVFlQRV9VTE9ORywgcGFyYW1ldGVycy5tYXhGcmFtZXJh
dGUsIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMuc2NhbGVSZXNvbHV0aW9uRG93bkJ5
KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAic2NhbGUt
cmVzb2x1dGlvbi1kb3duLWJ5IiwgR19UWVBFX0RPVUJMRSwgcGFyYW1ldGVycy5zY2FsZVJlc29s
dXRpb25Eb3duQnksIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMubmV0d29ya1ByaW9y
aXR5KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAibmV0
d29yay1wcmlvcml0eSIsIEdfVFlQRV9JTlQsICpwYXJhbWV0ZXJzLm5ldHdvcmtQcmlvcml0eSwg
bnVsbHB0cik7CisKKyAgICByZXR1cm4gcnRjUGFyYW1ldGVyczsKK30KKworc3RhdGljIGlubGlu
ZSBSVENQcmlvcml0eVR5cGUgZnJvbVdlYlJUQ0JpdFJhdGVQcmlvcml0eShkb3VibGUgcHJpb3Jp
dHkpCit7CisgICAgaWYgKHByaW9yaXR5IDwgMC43KQorICAgICAgICByZXR1cm4gUlRDUHJpb3Jp
dHlUeXBlOjpWZXJ5TG93OworICAgIGlmIChwcmlvcml0eSA8IDEuNSkKKyAgICAgICAgcmV0dXJu
IFJUQ1ByaW9yaXR5VHlwZTo6TG93OworICAgIGlmIChwcmlvcml0eSA8IDIuNSkKKyAgICAgICAg
cmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6TWVkaXVtOworICAgIHJldHVybiBSVENQcmlvcml0eVR5
cGU6OkhpZ2g7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzIHRv
UlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSogcnRjUGFyYW1ldGVycykK
K3sKKyAgICBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKworICAgIHVuc2ln
bmVkIHNzcmM7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocnRjUGFyYW1ldGVycywg
InNzcmMiLCAmc3NyYykpCisgICAgICAgIHBhcmFtZXRlcnMuc3NyYyA9IHNzcmM7CisKKyAgICBn
c3Rfc3RydWN0dXJlX2dldChydGNQYXJhbWV0ZXJzLCAiYWN0aXZlIiwgR19UWVBFX0JPT0xFQU4s
ICYocGFyYW1ldGVycy5hY3RpdmUpLCBudWxscHRyKTsKKworICAgIHVpbnQ2NF90IG1heEJpdHJh
dGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChydGNQYXJhbWV0ZXJzLCAibWF4
LWJpdHJhdGUiLCAmbWF4Qml0cmF0ZSkpCisgICAgICAgIHBhcmFtZXRlcnMubWF4Qml0cmF0ZSA9
IG1heEJpdHJhdGU7CisKKyAgICB1aW50NjRfdCBtYXhGcmFtZXJhdGU7CisgICAgaWYgKGdzdF9z
dHJ1Y3R1cmVfZ2V0X3VpbnQ2NChydGNQYXJhbWV0ZXJzLCAibWF4LWZyYW1lcmF0ZSIsICZtYXhG
cmFtZXJhdGUpKQorICAgICAgICBwYXJhbWV0ZXJzLm1heEZyYW1lcmF0ZSA9IG1heEZyYW1lcmF0
ZTsKKworICAgIHBhcmFtZXRlcnMucmlkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHJ0Y1Bh
cmFtZXRlcnMsICJyaWQiKTsKKworICAgIGRvdWJsZSBzY2FsZVJlc29sdXRpb25Eb3duQnk7Cisg
ICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShydGNQYXJhbWV0ZXJzLCAic2NhbGUtcmVz
b2x1dGlvbi1kb3duLWJ5IiwgJnNjYWxlUmVzb2x1dGlvbkRvd25CeSkpCisgICAgICAgIHBhcmFt
ZXRlcnMuc2NhbGVSZXNvbHV0aW9uRG93bkJ5ID0gc2NhbGVSZXNvbHV0aW9uRG93bkJ5OworCisg
ICAgZG91YmxlIGJpdHJhdGVQcmlvcml0eTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91
YmxlKHJ0Y1BhcmFtZXRlcnMsICJiaXRyYXRlLXByaW9yaXR5IiwgJmJpdHJhdGVQcmlvcml0eSkp
CisgICAgICAgIHBhcmFtZXRlcnMucHJpb3JpdHkgPSBmcm9tV2ViUlRDQml0UmF0ZVByaW9yaXR5
KGJpdHJhdGVQcmlvcml0eSk7CisKKyAgICBpbnQgbmV0d29ya1ByaW9yaXR5OworICAgIGlmIChn
c3Rfc3RydWN0dXJlX2dldF9pbnQocnRjUGFyYW1ldGVycywgIm5ldHdvcmstcHJpb3JpdHkiLCAm
bmV0d29ya1ByaW9yaXR5KSkKKyAgICAgICAgcGFyYW1ldGVycy5uZXR3b3JrUHJpb3JpdHkgPSBz
dGF0aWNfY2FzdDxSVENQcmlvcml0eVR5cGU+KG5ldHdvcmtQcmlvcml0eSk7CisKKyAgICByZXR1
cm4gcGFyYW1ldGVyczsKK30KKworUlRDUnRwU2VuZFBhcmFtZXRlcnMgdG9SVENSdHBTZW5kUGFy
YW1ldGVycyhjb25zdCBHc3RTdHJ1Y3R1cmUqIHJ0Y1BhcmFtZXRlcnMpCit7CisgICAgaWYgKCFy
dGNQYXJhbWV0ZXJzKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgUlRDUnRwU2VuZFBhcmFt
ZXRlcnMgcGFyYW1ldGVyczsKKyAgICBhdXRvKiBlbmNvZGluZ3MgPSBnc3Rfc3RydWN0dXJlX2dl
dF92YWx1ZShydGNQYXJhbWV0ZXJzLCAiZW5jb2RpbmdzIik7CisgICAgdW5zaWduZWQgc2l6ZSA9
IGdzdF92YWx1ZV9saXN0X2dldF9zaXplKGVuY29kaW5ncyk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBjb25zdCBhdXRvKiB2YWx1ZSA9IGdzdF92
YWx1ZV9saXN0X2dldF92YWx1ZShlbmNvZGluZ3MsIGkpOworICAgICAgICBwYXJhbWV0ZXJzLmVu
Y29kaW5ncy5hcHBlbmQodG9SVENFbmNvZGluZ1BhcmFtZXRlcnMoR1NUX1NUUlVDVFVSRV9DQVNU
KHZhbHVlKSkpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBIYW5kbGUgcnRjUGFyYW1ldGVycy5k
ZWdyYWRhdGlvbl9wcmVmZXJlbmNlLgorICAgIHJldHVybiBwYXJhbWV0ZXJzOworfQorCisKK3N0
YXRpYyB2b2lkIGVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpCit7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBb
XSB7CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF93ZWJydGNfdXRpbHNf
ZGVidWcsICJ3ZWJraXR3ZWJydGN1dGlscyIsIDAsICJXZWJLaXQgV2ViUlRDIHV0aWxpdGllcyIp
OworICAgIH0pOworfQorCitzdGQ6Om9wdGlvbmFsPFJUQ0ljZUNhbmRpZGF0ZTo6RmllbGRzPiBw
YXJzZUljZUNhbmRpZGF0ZVNEUChjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAgICBlbnN1cmVEZWJ1
Z0NhdGVnb3J5SW5pdGlhbGl6ZWQoKTsKKyAgICBHU1RfREVCVUcoIlBhcnNpbmcgSUNFIENhbmRp
ZGF0ZTogJXMiLCBzZHAudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKCFzZHAuc3RhcnRzV2l0aCgi
Y2FuZGlkYXRlOiIpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgU3RyaW5nIGZvdW5kYXRp
b247CisgICAgdW5zaWduZWQgY29tcG9uZW50SWQgPSAwOworICAgIFN0cmluZyB0cmFuc3BvcnQ7
CisgICAgdW5zaWduZWQgcHJpb3JpdHkgPSAwOworICAgIFN0cmluZyBhZGRyZXNzOworICAgIHVp
bnQzMl90IHBvcnQgPSAwOworICAgIFN0cmluZyB0eXBlOworICAgIFN0cmluZyB0Y3B0eXBlOwor
ICAgIFN0cmluZyByZWxhdGVkQWRkcmVzczsKKyAgICBndWludDE2IHJlbGF0ZWRQb3J0ID0gMDsK
KyAgICBTdHJpbmcgdXNlcm5hbWVGcmFnbWVudDsKKyAgICBhdXRvIHRva2VucyA9IHNkcC5jb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnN1YnN0cmluZygxMCkuc3BsaXQoJyAnKTsKKworICAgIGZv
ciAoYXV0byBpdCA9IHRva2Vucy5iZWdpbigpOyBpdCAhPSB0b2tlbnMuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgYXV0byBpID0gc3RkOjpkaXN0YW5jZSh0b2tlbnMuYmVnaW4oKSwgaXQpOworICAg
ICAgICBhdXRvIHRva2VuID0gKml0OworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2Fz
ZSAwOgorICAgICAgICAgICAgZm91bmRhdGlvbiA9IHRva2VuOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRl
Z2VyPHVuc2lnbmVkPih0b2tlbikpCisgICAgICAgICAgICAgICAgY29tcG9uZW50SWQgPSAqdmFs
dWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSB0
b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBp
ZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlcjx1bnNpZ25lZD4odG9rZW4pKQorICAgICAgICAg
ICAgICAgIHByaW9yaXR5ID0gKnZhbHVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAg
ICAgICAgICAgYWRkcmVzcyA9IHRva2VuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgNToKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVk
Pih0b2tlbikpCisgICAgICAgICAgICAgICAgcG9ydCA9ICp2YWx1ZTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoaXQgKyAxID09IHRva2Vucy5lbmQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgICAgICBpdCsrOworICAgICAgICAg
ICAgaWYgKHRva2VuID09ICJ0eXAiKQorICAgICAgICAgICAgICAgIHR5cGUgPSAqaXQ7CisgICAg
ICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAicmFkZHIiKQorICAgICAgICAgICAgICAgIHJlbGF0
ZWRBZGRyZXNzID0gKml0OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gPT0gInJwb3J0IikK
KyAgICAgICAgICAgICAgICByZWxhdGVkUG9ydCA9IHBhcnNlSW50ZWdlcjx1bnNpZ25lZD4oKml0
KS52YWx1ZV9vcigwKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJ0Y3B0eXBlIikK
KyAgICAgICAgICAgICAgICB0Y3B0eXBlID0gKml0OworICAgICAgICAgICAgZWxzZSBpZiAodG9r
ZW4gPT0gInVmcmFnIikKKyAgICAgICAgICAgICAgICB1c2VybmFtZUZyYWdtZW50ID0gKml0Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodHlwZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBSVENJY2VDYW5kaWRhdGU6OkZpZWxk
cyBmaWVsZHM7CisgICAgZmllbGRzLmZvdW5kYXRpb24gPSBmb3VuZGF0aW9uOworICAgIGZpZWxk
cy5jb21wb25lbnQgPSB0b1JUQ0ljZUNvbXBvbmVudChjb21wb25lbnRJZCk7CisgICAgZmllbGRz
LnByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgZmllbGRzLnByb3RvY29sID0gdG9SVENJY2VQcm90
b2NvbCh0cmFuc3BvcnQpOworICAgIGlmICghYWRkcmVzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ZmllbGRzLmFkZHJlc3MgPSBhZGRyZXNzOworICAgICAgICBmaWVsZHMucG9ydCA9IHBvcnQ7Cisg
ICAgfQorICAgIGZpZWxkcy50eXBlID0gdG9SVENJY2VDYW5kaWRhdGVUeXBlKHR5cGUpOworICAg
IGZpZWxkcy50Y3BUeXBlID0gdG9SVENJY2VUY3BDYW5kaWRhdGVUeXBlKHRjcHR5cGUpOworICAg
IGlmICghcmVsYXRlZEFkZHJlc3MuaXNFbXB0eSgpKSB7CisgICAgICAgIGZpZWxkcy5yZWxhdGVk
QWRkcmVzcyA9IHJlbGF0ZWRBZGRyZXNzOworICAgICAgICBmaWVsZHMucmVsYXRlZFBvcnQgPSBy
ZWxhdGVkUG9ydDsKKyAgICB9CisgICAgZmllbGRzLnVzZXJuYW1lRnJhZ21lbnQgPSB1c2VybmFt
ZUZyYWdtZW50OworICAgIHJldHVybiBmaWVsZHM7Cit9CisKK3N0YXRpYyBTdHJpbmcgeDUwOVNl
cmlhbGl6ZShYNTA5KiB4NTA5KQoreworICAgIEJJTyogYmlvID0gQklPX25ldyhCSU9fc19tZW0o
KSk7CisgICAgaWYgKCFiaW8pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHNjb3Bl
RXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBCSU9fZnJlZShiaW8pOwor
ICAgIH0pOworCisgICAgaWYgKCFQRU1fd3JpdGVfYmlvX1g1MDkoYmlvLCB4NTA5KSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgYnVmZmVyLnJl
c2VydmVDYXBhY2l0eSg0MDk2KTsKKyAgICBpbnQgbGVuZ3RoID0gQklPX3JlYWQoYmlvLCBidWZm
ZXIuZGF0YSgpLCA0MDk2KTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKK30KKworc3RhdGlj
IFN0cmluZyBwcml2YXRlS2V5U2VyaWFsaXplKEVWUF9QS0VZKiBwcml2YXRlS2V5KQoreworICAg
IEJJTyogYmlvID0gQklPX25ldyhCSU9fc19tZW0oKSk7CisgICAgaWYgKCFiaW8pCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBhdXRvIHNjb3BlRXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChb
Jl0geworICAgICAgICBCSU9fZnJlZShiaW8pOworICAgIH0pOworCisgICAgaWYgKCFQRU1fd3Jp
dGVfYmlvX1ByaXZhdGVLZXkoYmlvLCBwcml2YXRlS2V5LCBudWxscHRyLCBudWxscHRyLCAwLCBu
dWxscHRyLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxjaGFy
PiBidWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eSg0MDk2KTsKKyAgICBpbnQgbGVu
Z3RoID0gQklPX3JlYWQoYmlvLCBidWZmZXIuZGF0YSgpLCA0MDk2KTsKKyAgICBpZiAoIWxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLmRhdGEo
KSwgbGVuZ3RoKTsKK30KKworc3RkOjpvcHRpb25hbDxSZWY8UlRDQ2VydGlmaWNhdGU+PiBnZW5l
cmF0ZUNlcnRpZmljYXRlKFJlZjxTZWN1cml0eU9yaWdpbj4mJiBvcmlnaW4sIGNvbnN0IFBlZXJD
b25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJbmZvcm1hdGlvbiYgaW5mbykKK3sKKyAgICBl
bnN1cmVEZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQoKTsKKyAgICBFVlBfUEtFWSogcHJpdmF0ZUtl
eSA9IEVWUF9QS0VZX25ldygpOworICAgIGlmICghcHJpdmF0ZUtleSkgeworICAgICAgICBHU1Rf
V0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBwcml2YXRlIGtleSIpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIGF1dG8gc2NvcGVFeGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsm
XSB7CisgICAgICAgIEVWUF9QS0VZX2ZyZWUocHJpdmF0ZUtleSk7CisgICAgfSk7CisKKyAgICBz
d2l0Y2ggKGluZm8udHlwZSkgeworICAgIGNhc2UgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0
aWZpY2F0ZUluZm9ybWF0aW9uOjpUeXBlOjpFQ0RTQVAyNTY6IHsKKyAgICAgICAgRUNfS0VZKiBl
Y0tleSA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShOSURfWDlfNjJfcHJpbWUyNTZ2MSk7Cisg
ICAgICAgIC8vIEVuc3VyZSBjdXJ2ZSBuYW1lIGlzIGluY2x1ZGVkIHdoZW4gRUMga2V5IGlzIHNl
cmlhbGl6ZWQuCisgICAgICAgIC8vIFdpdGhvdXQgdGhpcyBjYWxsLCBPcGVuU1NMIHZlcnNpb25z
IGJlZm9yZSAxLjEuMCB3aWxsIGNyZWF0ZQorICAgICAgICAvLyBjZXJ0aWZpY2F0ZXMgdGhhdCBk
b24ndCB3b3JrIGZvciBUTFMuCisgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcCBmb3IgQm9yaW5n
U1NMIGFuZCBPcGVuU1NMIDEuMS4wKworICAgICAgICBFQ19LRVlfc2V0X2FzbjFfZmxhZyhlY0tl
eSwgT1BFTlNTTF9FQ19OQU1FRF9DVVJWRSk7CisgICAgICAgIGlmICghcHJpdmF0ZUtleSB8fCAh
ZWNLZXkgfHwgIUVDX0tFWV9nZW5lcmF0ZV9rZXkoZWNLZXkpIHx8ICFFVlBfUEtFWV9hc3NpZ25f
RUNfS0VZKHByaXZhdGVLZXksIGVjS2V5KSkgeworICAgICAgICAgICAgRUNfS0VZX2ZyZWUoZWNL
ZXkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRlSW5mb3Jt
YXRpb246OlR5cGU6OlJTQVNTQVBLQ1MxdjE1OiB7CisgICAgICAgIFJTQSogcnNhID0gUlNBX25l
dygpOworICAgICAgICBpZiAoIXJzYSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAg
ICAgQklHTlVNKiBleHBvbmVudCA9IEJOX25ldygpOworICAgICAgICBpbnQgcHVibGljRXhwb25l
bnQgPSBpbmZvLnJzYVBhcmFtZXRlcnMgPyBpbmZvLnJzYVBhcmFtZXRlcnMtPnB1YmxpY0V4cG9u
ZW50IDogNjU1Mzc7CisgICAgICAgIGF1dG8gbW9kdWx1c0xlbmd0aCA9IGluZm8ucnNhUGFyYW1l
dGVycyA/IGluZm8ucnNhUGFyYW1ldGVycy0+bW9kdWx1c0xlbmd0aCA6IDIwNDg7CisgICAgICAg
IGlmICghQk5fc2V0X3dvcmQoZXhwb25lbnQsIHB1YmxpY0V4cG9uZW50KSB8fCAhUlNBX2dlbmVy
YXRlX2tleV9leChyc2EsIG1vZHVsdXNMZW5ndGgsIGV4cG9uZW50LCBudWxscHRyKQorICAgICAg
ICAgICAgfHwgIUVWUF9QS0VZX2Fzc2lnbl9SU0EocHJpdmF0ZUtleSwgcnNhKSkgeworICAgICAg
ICAgICAgUlNBX2ZyZWUocnNhKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0K
KyAgICAgICAgQk5fZnJlZShleHBvbmVudCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9
CisKKyAgICBYNTA5KiB4NTA5ID0gWDUwOV9uZXcoKTsKKyAgICBpZiAoIXg1MDkpIHsKKyAgICAg
ICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBjcmVhdGUgY2VydGlmaWNhdGUiKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvIGNlcnRTY29wZUV4aXQgPSBXVEY6Om1ha2VT
Y29wZUV4aXQoWyZdIHsKKyAgICAgICAgWDUwOV9mcmVlKHg1MDkpOworICAgIH0pOworCisgICAg
WDUwOV9zZXRfdmVyc2lvbih4NTA5LCAyKTsKKworICAgIC8vIFNldCBhIHJhbmRvbSA2NCBiaXQg
aW50ZWdlciBhcyBzZXJpYWwgbnVtYmVyLgorICAgIEJJR05VTSogc2VyaWFsTnVtYmVyID0gQk5f
bmV3KCk7CisgICAgQk5fcHNldWRvX3JhbmQoc2VyaWFsTnVtYmVyLCA2NCwgMCwgMCk7CisgICAg
QVNOMV9JTlRFR0VSKiBhc24xU2VyaWFsTnVtYmVyID0gWDUwOV9nZXRfc2VyaWFsTnVtYmVyKHg1
MDkpOworICAgIEJOX3RvX0FTTjFfSU5URUdFUihzZXJpYWxOdW1iZXIsIGFzbjFTZXJpYWxOdW1i
ZXIpOworICAgIEJOX2ZyZWUoc2VyaWFsTnVtYmVyKTsKKworICAgIC8vIFNldCBhIHJhbmRvbSA4
IGJ5dGUgYmFzZTY0IHN0cmluZyBhcyBpc3N1ZXIvc3ViamVjdC4KKyAgICBYNTA5X05BTUUqIG5h
bWUgPSBYNTA5X05BTUVfbmV3KCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBi
dWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg4KTsKKyAgICBXVEY6OmNyeXB0b2dyYXBoaWNh
bGx5UmFuZG9tVmFsdWVzKGJ1ZmZlci5kYXRhKCksIDgpOworICAgIGF1dG8gY29tbW9uTmFtZSA9
IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZlcik7CisgICAgWDUwOV9OQU1FX2FkZF9lbnRyeV9i
eV9OSUQobmFtZSwgTklEX2NvbW1vbk5hbWUsIE1CU1RSSU5HX0FTQywgKGNvbnN0IGd1Y2hhciop
Y29tbW9uTmFtZS5hc2NpaSgpLmRhdGEoKSwgLTEsIC0xLCAwKTsKKyAgICBYNTA5X3NldF9zdWJq
ZWN0X25hbWUoeDUwOSwgbmFtZSk7CisgICAgWDUwOV9zZXRfaXNzdWVyX25hbWUoeDUwOSwgbmFt
ZSk7CisgICAgWDUwOV9OQU1FX2ZyZWUobmFtZSk7CisKKyAgICAvLyBGYWxsYmFjayB0byAzMCBk
YXlzLCBtYXggb3V0IGF0IG9uZSB5ZWFyLgorICAgIHVpbnQ2NF90IGV4cGlyZXMgPSBpbmZvLmV4
cGlyZXMudmFsdWVfb3IoMjU5MjAwMCk7CisgICAgZXhwaXJlcyA9IHN0ZDo6bWluPHVpbnQ2NF90
PihleHBpcmVzLCAzMTUzNjAwMDAwMCk7CisgICAgWDUwOV9nbXRpbWVfYWRqKFg1MDlfZ2V0bV9u
b3RCZWZvcmUoeDUwOSksIDApOworICAgIFg1MDlfZ210aW1lX2FkaihYNTA5X2dldG1fbm90QWZ0
ZXIoeDUwOSksIGV4cGlyZXMpOworICAgIFg1MDlfc2V0X3B1YmtleSh4NTA5LCBwcml2YXRlS2V5
KTsKKworICAgIGlmICghWDUwOV9zaWduKHg1MDksIHByaXZhdGVLZXksIEVWUF9zaGEyNTYoKSkp
IHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBzaWduIGNlcnRpZmljYXRlIik7Cisg
ICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBwZW0gPSB4NTA5U2VyaWFsaXpl
KHg1MDkpOworICAgIEdTVF9ERUJVRygiR2VuZXJhdGVkIGNlcnRpZmljYXRlIFBFTTogJXMiLCBw
ZW0uYXNjaWkoKS5kYXRhKCkpOworICAgIGF1dG8gc2VyaWFsaXplZFByaXZhdGVLZXkgPSBwcml2
YXRlS2V5U2VyaWFsaXplKHByaXZhdGVLZXkpOworICAgIFZlY3RvcjxSVENDZXJ0aWZpY2F0ZTo6
RHRsc0ZpbmdlcnByaW50PiBmaW5nZXJwcmludHM7CisgICAgLy8gRklYTUU6IEZpbGwgZmluZ2Vy
cHJpbnRzLgorICAgIGF1dG8gZXhwaXJhdGlvblRpbWUgPSBXVEY6OldhbGxUaW1lOjpub3coKS5z
ZWNvbmRzU2luY2VFcG9jaCgpICsgV1RGOjpTZWNvbmRzKGV4cGlyZXMpOworICAgIHJldHVybiBS
VENDZXJ0aWZpY2F0ZTo6Y3JlYXRlKFdURk1vdmUob3JpZ2luKSwgZXhwaXJhdGlvblRpbWUubWls
bGlzZWNvbmRzKCksIFdURk1vdmUoZmluZ2VycHJpbnRzKSwgV1RGTW92ZShwZW0pLCBXVEZNb3Zl
KHNlcmlhbGl6ZWRQcml2YXRlS2V5KSk7Cit9CisKK2Jvb2wgc2RwTWVkaWFIYXNBdHRyaWJ1dGVL
ZXkoY29uc3QgR3N0U0RQTWVkaWEqIG1lZGlhLCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgdW5z
aWduZWQgbGVuID0gZ3N0X3NkcF9tZWRpYV9hdHRyaWJ1dGVzX2xlbihtZWRpYSk7CisgICAgZm9y
ICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7CisgICAgICAgIGNvbnN0IGF1dG8qIGF0
dHJpYnV0ZSA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZShtZWRpYSwgaSk7CisgICAgICAg
IGlmICghZ19zdHJjbXAwKGF0dHJpYnV0ZS0+a2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjU4ZDcxMWU2YWE2NmRlYTgzZWE3YTI5NDc0YWIwZjU5ZTQ4NzJmMAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lcldlYlJUQ1V0aWxzLmgKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5o
IgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiUGVl
ckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiUlRDQnVuZGxlUG9saWN5LmgiCisjaW5j
bHVkZSAiUlRDQ2VydGlmaWNhdGUuaCIKKyNpbmNsdWRlICJSVENEdGxzVHJhbnNwb3J0LmgiCisj
aW5jbHVkZSAiUlRDRXJyb3IuaCIKKyNpbmNsdWRlICJSVENJY2VDb25uZWN0aW9uU3RhdGUuaCIK
KyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRQb2xpY3kuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFu
c3BvcnRTdGF0ZS5oIgorI2luY2x1ZGUgIlJUQ1J0cFNlbmRQYXJhbWV0ZXJzLmgiCisjaW5jbHVk
ZSAiUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24uaCIKKyNpbmNsdWRlICJSVENTZHBUeXBlLmgi
CisjaW5jbHVkZSAiUlRDU2lnbmFsaW5nU3RhdGUuaCIKKworI2RlZmluZSBHU1RfVVNFX1VOU1RB
QkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9V
TlNUQUJMRV9BUEkKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgUlRDUnRwVHJhbnNj
ZWl2ZXJEaXJlY3Rpb24gdG9SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihHc3RXZWJSVENSVFBU
cmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24p
IHsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9OT05FOgor
ICAgICAgICAvLyDCr1xfKOODhClfL8KvCisgICAgICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZl
ckRpcmVjdGlvbjo6SW5hY3RpdmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZF
Ul9ESVJFQ1RJT05fSU5BQ1RJVkU6CisgICAgICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRp
cmVjdGlvbjo6SW5hY3RpdmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9E
SVJFQ1RJT05fU0VORE9OTFk6CisgICAgICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVj
dGlvbjo6U2VuZG9ubHk7CisgICAgY2FzZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJF
Q1RJT05fUkVDVk9OTFk6CisgICAgICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlv
bjo6UmVjdm9ubHk7CisgICAgY2FzZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJ
T05fU0VORFJFQ1Y6CisgICAgICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6
U2VuZHJlY3Y7CisgICAgfQorICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKK30KKworaW5saW5l
IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyRGlyZWN0aW9uIGZyb21SVENSdHBUcmFuc2NlaXZlckRp
cmVjdGlvbihSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dp
dGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJ
bmFjdGl2ZToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVD
VElPTl9JTkFDVElWRTsKKyAgICBjYXNlIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5k
b25seToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElP
Tl9TRU5ET05MWTsKKyAgICBjYXNlIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpSZWN2b25s
eToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9S
RUNWT05MWTsKKyAgICBjYXNlIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kcmVjdjoK
KyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5E
UkVDVjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1
cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX05PTkU7Cit9CisKK3N0YXRp
YyBpbmxpbmUgR3N0V2ViUlRDU0RQVHlwZSB0b1Nlc3Npb25EZXNjcmlwdGlvblR5cGUoUlRDU2Rw
VHlwZSBzZHBUeXBlKQoreworICAgIHN3aXRjaCAoc2RwVHlwZSkgeworICAgIGNhc2UgUlRDU2Rw
VHlwZTo6T2ZmZXI6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX09GRkVSOwor
ICAgIGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRD
X1NEUF9UWVBFX1BSQU5TV0VSOworICAgIGNhc2UgUlRDU2RwVHlwZTo6QW5zd2VyOgorICAgICAg
ICByZXR1cm4gR1NUX1dFQlJUQ19TRFBfVFlQRV9BTlNXRVI7CisgICAgY2FzZSBSVENTZHBUeXBl
OjpSb2xsYmFjazoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfU0RQX1RZUEVfUk9MTEJBQ0s7
CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4g
R1NUX1dFQlJUQ19TRFBfVFlQRV9PRkZFUjsKK30KKworc3RhdGljIGlubGluZSBSVENTZHBUeXBl
IGZyb21TZXNzaW9uRGVzY3JpcHRpb25UeXBlKEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiog
ZGVzY3JpcHRpb24pCit7CisgICAgYXV0byB0eXBlID0gZGVzY3JpcHRpb24tPnR5cGU7CisgICAg
aWYgKHR5cGUgPT0gR1NUX1dFQlJUQ19TRFBfVFlQRV9PRkZFUikKKyAgICAgICAgcmV0dXJuIFJU
Q1NkcFR5cGU6Ok9mZmVyOworICAgIGlmICh0eXBlID09IEdTVF9XRUJSVENfU0RQX1RZUEVfQU5T
V0VSKQorICAgICAgICByZXR1cm4gUlRDU2RwVHlwZTo6QW5zd2VyOworICAgIEFTU0VSVCh0eXBl
ID09IEdTVF9XRUJSVENfU0RQX1RZUEVfUFJBTlNXRVIpOworICAgIHJldHVybiBSVENTZHBUeXBl
OjpQcmFuc3dlcjsKK30KKworc3RhdGljIGlubGluZSBSVENTaWduYWxpbmdTdGF0ZSB0b1NpZ25h
bGluZ1N0YXRlKEdzdFdlYlJUQ1NpZ25hbGluZ1N0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAo
c3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NUQVRFX1NUQUJMRToKKyAg
ICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpTdGFibGU7CisgICAgY2FzZSBHU1RfV0VC
UlRDX1NJR05BTElOR19TVEFURV9IQVZFX0xPQ0FMX09GRkVSOgorICAgICAgICByZXR1cm4gUlRD
U2lnbmFsaW5nU3RhdGU6OkhhdmVMb2NhbE9mZmVyOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdO
QUxJTkdfU1RBVEVfSEFWRV9MT0NBTF9QUkFOU1dFUjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25h
bGluZ1N0YXRlOjpIYXZlTG9jYWxQcmFuc3dlcjsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFM
SU5HX1NUQVRFX0hBVkVfUkVNT1RFX09GRkVSOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5n
U3RhdGU6OkhhdmVSZW1vdGVPZmZlcjsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NU
QVRFX0hBVkVfUkVNT1RFX1BSQU5TV0VSOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5nU3Rh
dGU6OkhhdmVSZW1vdGVQcmFuc3dlcjsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NU
QVRFX0NMT1NFRDoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpDbG9zZWQ7Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRD
U2lnbmFsaW5nU3RhdGU6OlN0YWJsZTsKK30KKworc3RhdGljIGlubGluZSBSVENJY2VDb25uZWN0
aW9uU3RhdGUgdG9SVENJY2VDb25uZWN0aW9uU3RhdGUoR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0
YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENf
SUNFX0NPTk5FQ1RJT05fU1RBVEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlv
blN0YXRlOjpOZXc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NI
RUNLSU5HOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDaGVja2luZzsK
KyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ09OTkVDVEVEOgorICAg
ICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDb25uZWN0ZWQ7CisgICAgY2FzZSBH
U1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NPTVBMRVRFRDoKKyAgICAgICAgcmV0dXJu
IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q29tcGxldGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19J
Q0VfQ09OTkVDVElPTl9TVEFURV9GQUlMRUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0
aW9uU3RhdGU6OkZhaWxlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RB
VEVfRElTQ09OTkVDVEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpE
aXNjb25uZWN0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NM
T1NFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q2xvc2VkOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ0lj
ZUNvbm5lY3Rpb25TdGF0ZTo6TmV3OworfQorCitzdGF0aWMgaW5saW5lIFJUQ0R0bHNUcmFuc3Bv
cnRTdGF0ZSB0b1JUQ0R0bHNUcmFuc3BvcnRTdGF0ZShHc3RXZWJSVENEVExTVHJhbnNwb3J0U3Rh
dGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19E
VExTX1RSQU5TUE9SVF9TVEFURV9ORVc6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJhbnNwb3J0
U3RhdGU6Ok5ldzsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVfQ09O
TkVDVElORzoKKyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGlu
ZzsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVfQ09OTkVDVEVEOgor
ICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpDb25uZWN0ZWQ7CisgICAgY2Fz
ZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0NMT1NFRDoKKyAgICAgICAgcmV0dXJu
IFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOworICAgIGNhc2UgR1NUX1dFQlJUQ19EVExT
X1RSQU5TUE9SVF9TVEFURV9GQUlMRUQ6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJhbnNwb3J0
U3RhdGU6OkZhaWxlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworfQorCitzdGF0aWMgaW5saW5lIFJUQ0ljZVRyYW5zcG9ydFN0YXRlIHRvUlRDSWNlVHJhbnNw
b3J0U3RhdGUoR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHN0YXRlKQoreworICAgIC8vIEZJ
WE1FOiBObyBHc3RXZWJSVENJQ0VUcmFuc3BvcnRTdGF0ZSA/CisgICAgc3dpdGNoIChzdGF0ZSkg
eworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ORVc6CisgICAgICAg
IHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6TmV3OworICAgIGNhc2UgR1NUX1dFQlJUQ19J
Q0VfQ09OTkVDVElPTl9TVEFURV9DSEVDS0lORzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5z
cG9ydFN0YXRlOjpDaGVja2luZzsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05f
U1RBVEVfQ09OTkVDVEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNv
bm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ09NUExF
VEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNvbXBsZXRlZDsKKyAg
ICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfRkFJTEVEOgorICAgICAgICBy
ZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkZhaWxlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENf
SUNFX0NPTk5FQ1RJT05fU1RBVEVfRElTQ09OTkVDVEVEOgorICAgICAgICByZXR1cm4gUlRDSWNl
VHJhbnNwb3J0U3RhdGU6OkRpc2Nvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NP
Tk5FQ1RJT05fU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3Rh
dGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6TmV3OworfQorCitzdGF0aWMgaW5saW5l
IFJUQ0ljZUdhdGhlcmluZ1N0YXRlIHRvUlRDSWNlR2F0aGVyaW5nU3RhdGUoR3N0V2ViUlRDSUNF
R2F0aGVyaW5nU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2Ug
R1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0lj
ZUdhdGhlcmluZ1N0YXRlOjpOZXc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdf
U1RBVEVfR0FUSEVSSU5HOgorICAgICAgICByZXR1cm4gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Okdh
dGhlcmluZzsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9DT01QTEVU
RToKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpDb21wbGV0ZTsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitzdGF0aWMgaW5saW5l
IEdzdFdlYlJUQ0J1bmRsZVBvbGljeSBidW5kbGVQb2xpY3lGcm9tQ29uZmlndXJhdGlvbihNZWRp
YUVuZHBvaW50Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24uYnVuZGxlUG9saWN5KSB7CisgICAgY2FzZSBSVENCdW5kbGVQb2xpY3k6OkJh
bGFuY2VkOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19CVU5ETEVfUE9MSUNZX0JBTEFOQ0VE
OworICAgIGNhc2UgUlRDQnVuZGxlUG9saWN5OjpNYXhDb21wYXQ6CisgICAgICAgIHJldHVybiBH
U1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfTUFYX0NPTVBBVDsKKyAgICBjYXNlIFJUQ0J1bmRsZVBv
bGljeTo6TWF4QnVuZGxlOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19CVU5ETEVfUE9MSUNZ
X01BWF9CVU5ETEU7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gR1NUX1dFQlJUQ19CVU5ETEVfUE9MSUNZX05PTkU7Cit9CisKK3N0YXRpYyBp
bmxpbmUgR3N0V2ViUlRDSUNFVHJhbnNwb3J0UG9saWN5IGljZVRyYW5zcG9ydFBvbGljeUZyb21D
b25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQor
eworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbi5pY2VUcmFuc3BvcnRQb2xpY3kpIHsKKyAgICBj
YXNlIFJUQ0ljZVRyYW5zcG9ydFBvbGljeTo6QWxsOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJU
Q19JQ0VfVFJBTlNQT1JUX1BPTElDWV9BTEw7CisgICAgY2FzZSBSVENJY2VUcmFuc3BvcnRQb2xp
Y3k6OlJlbGF5OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19JQ0VfVFJBTlNQT1JUX1BPTElD
WV9SRUxBWTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBHU1RfV0VCUlRDX0lDRV9UUkFOU1BPUlRfUE9MSUNZX0FMTDsKK30KKworc3RhdGlj
IGlubGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0Vycm9yRGV0YWlsVHlwZT4gdG9SVENFcnJvckRldGFp
bFR5cGUoR3N0V2ViUlRDRXJyb3IgY29kZSkKK3sKKyAgICBzd2l0Y2ggKGNvZGUpIHsKKyAgICBj
YXNlIEdTVF9XRUJSVENfRVJST1JfREFUQV9DSEFOTkVMX0ZBSUxVUkU6CisgICAgICAgIHJldHVy
biBSVENFcnJvckRldGFpbFR5cGU6OkRhdGFDaGFubmVsRmFpbHVyZTsKKyAgICBjYXNlIEdTVF9X
RUJSVENfRVJST1JfRFRMU19GQUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRhaWxU
eXBlOjpEdGxzRmFpbHVyZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfRklOR0VSUFJJTlRf
RkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6RmluZ2VycHJpbnRG
YWlsdXJlOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9TQ1RQX0ZBSUxVUkU6CisgICAgICAg
IHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OlNjdHBGYWlsdXJlOworICAgIGNhc2UgR1NUX1dF
QlJUQ19FUlJPUl9TRFBfU1lOVEFYX0VSUk9SOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRh
aWxUeXBlOjpTZHBTeW50YXhFcnJvcjsKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfSEFSRFdB
UkVfRU5DT0RFUl9OT1RfQVZBSUxBQkxFOgorICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9FTkNP
REVSX0VSUk9SOgorICAgICAgICAvLyBGSVhNRQorICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biB7IH07CisgICAgfTsKK30KKworUmVmUHRyPFJUQ0Vycm9yPiB0b1JUQ0Vycm9yKEdFcnJvciop
OworCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZnJvbVJUQ0VuY29kaW5nUGFyYW1ldGVycyhj
b25zdCBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMmKTsKK1JUQ1J0cFNlbmRQYXJhbWV0ZXJzIHRv
UlRDUnRwU2VuZFBhcmFtZXRlcnMoY29uc3QgR3N0U3RydWN0dXJlKik7CisKK3N0ZDo6b3B0aW9u
YWw8UmVmPFJUQ0NlcnRpZmljYXRlPj4gZ2VuZXJhdGVDZXJ0aWZpY2F0ZShSZWY8U2VjdXJpdHlP
cmlnaW4+JiYsIGNvbnN0IFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJbmZvcm1h
dGlvbiYpOworCitib29sIHNkcE1lZGlhSGFzQXR0cmlidXRlS2V5KGNvbnN0IEdzdFNEUE1lZGlh
KiwgY29uc3QgY2hhcioga2V5KTsKKworfQorI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
U3RyZWFtZXIuY21ha2UKaW5kZXggYWI5YzcwOTJlNjVmNTExNTIwMTNjMTJiYTQ4MDI3ZmQ3MGI4
MjRiNC4uODUyNWY0OTUyNGI1OTE2YmQ1YWNjYzU0NTQ1YTA2OTQxMDQyMTU5YiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpAQCAtMSwxMiArMSwyOSBAQAogaWYgKEVO
QUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVf
UFJJVkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICIke1dFQkNPUkVfRElSfS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lciIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lciIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9tc2UiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvZW1lIgogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNv
cmVfU09VUkNFUworICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcAor
ICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBv
aW50LmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5k
LmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwCisg
ICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5jcHAKKyAgICAgICAgTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwCisKICAgICAgICAg
TW9kdWxlcy93ZWJhdWRpby9NZWRpYVN0cmVhbUF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJl
YW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5r
R1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5jcHAKQEAgLTYwLDYgKzc3LDcgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFC
TEVfV0VCX0FVRElPKQogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCisgICAgICAgIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5j
cHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRpc3Bs
YXlDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAogICAgICAgICBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcApA
QCAtNjcsNyArODUsMTMgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQog
ICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNv
ZGVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0
aW1lQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291
cmNlQ2VudGVyR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAgICBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcAogICAgICkKIAogICAgIGxpc3Qo
QVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwpAQCAtMTQ2LDcgKzE3MCw3
IEBAIGlmIChFTkFCTEVfVklERU8pCiAgICAgICAgICkKICAgICBlbmRpZiAoKQogCi0gICAgaWYg
KEVOQUJMRV9NRURJQV9TVFJFQU0gT1IgRU5BQkxFX1dFQl9SVEMpCisgICAgaWYgKFVTRV9MSUJX
RUJSVEMpCiAgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNU
T1JJRVMKICAgICAgICAgICAgICR7R1NUUkVBTUVSX0NPREVDUEFSU0VSU19JTkNMVURFX0RJUlN9
CiAgICAgICAgICkKQEAgLTE1NSw2ICsxNzksMjEgQEAgaWYgKEVOQUJMRV9WSURFTykKICAgICAg
ICAgICAgICAgICAke0dTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfTElCUkFSSUVTfQogICAgICAgICAg
ICAgKQogICAgICAgICBlbmRpZiAoKQorICAgIGVsc2VpZiAoVVNFX0dTVFJFQU1FUl9XRUJSVEMp
CisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMK
KyAgICAgICAgICAgICR7R1NUUkVBTUVSX1JUUF9JTkNMVURFX0RJUlN9CisgICAgICAgICAgICAk
e0dTVFJFQU1FUl9TRFBfSU5DTFVERV9ESVJTfQorICAgICAgICAgICAgJHtHU1RSRUFNRVJfV0VC
UlRDX0lOQ0xVREVfRElSU30KKyAgICAgICAgKQorICAgICAgICBpZiAoTk9UIFVTRV9HU1RSRUFN
RVJfRlVMTCkKKyAgICAgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCisgICAg
ICAgICAgICAgICAgJHtHU1RSRUFNRVJfUlRQX0xJQlJBUklFU30KKyAgICAgICAgICAgICAgICAk
e0dTVFJFQU1FUl9TRFBfTElCUkFSSUVTfQorICAgICAgICAgICAgICAgICR7R1NUUkVBTUVSX1dF
QlJUQ19MSUJSQVJJRVN9CisgICAgICAgICAgICApCisgICAgICAgIGVuZGlmICgpCisKKyAgICAg
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgT3BlblNTTDo6Q3J5cHRvKQogICAgIGVu
ZGlmICgpCiBlbmRpZiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJl
YW1lci5jcHAKaW5kZXggYjRkNWY2NzAzZTkyOWVkZjE3ZjEwOWVmNjQ4MTMwYWNlMDM4Y2FjNC4u
YTFhY2U5NzYxZGEyY2UyYWFkNDY0MjFiOWJlNmRmOGQzYTllNTQ5MSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJH
U3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcApAQCAtMTAwLDEwICsxMDAsNTggQEAg
QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1l
cihNZWRpYVN0cmVhbVRyYWNrUHJpdmEKIAogICAgIG1fYXVkaW9TaW5rQmluID0gZ3N0X3BhcnNl
X2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKCJ0ZWUgbmFtZT1hdWRpb1RlZSIsIHRydWUsIG51bGxwdHIp
OwogCi0gICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSks
IHNyYywgbV9hdWRpb1NpbmtCaW4uZ2V0KCksIG51bGxwdHIpOwotICAgIGdzdF9lbGVtZW50X2xp
bmsoc3JjLCBtX2F1ZGlvU2lua0Jpbi5nZXQoKSk7CisgICAgYXV0byogZGVjb2RlYmluID0gbWFr
ZUdTdHJlYW1lckVsZW1lbnQoImRlY29kZWJpbjMiLCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQoZGVjb2RlYmluLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSygrW10oQXVk
aW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lciogcHJvdmlkZXIsIEdzdFBhZCogcGFkKSB7CisgICAg
ICAgIGF1dG8gcGFkQ2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX3F1ZXJ5X2NhcHMocGFkLCBudWxs
cHRyKSk7CisgICAgICAgIGJvb2wgaXNBdWRpbyA9IGRvQ2Fwc0hhdmVUeXBlKHBhZENhcHMuZ2V0
KCksICJhdWRpbyIpOworICAgICAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE4LCAw
KSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQXVkaW8pOworICAgICAgICBlbHNlIGlm
ICghaXNBdWRpbykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHNpbmtQYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJvdmlkZXItPm1fYXVkaW9T
aW5rQmluLmdldCgpLCAic2luayIpKTsKKyAgICAgICAgZ3N0X3BhZF9saW5rKHBhZCwgc2lua1Bh
ZC5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocHJv
dmlkZXItPm1fYXVkaW9TaW5rQmluLmdldCgpKTsKKyAgICB9KSwgdGhpcyk7CisKKyAgICBnc3Rf
YmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgc3JjLCBkZWNvZGVi
aW4sIG1fYXVkaW9TaW5rQmluLmdldCgpLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9saW5r
KHNyYywgZGVjb2RlYmluKTsKKworICAgIGF1dG8gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGlu
ZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOworICAgIEFTU0VSVChi
dXMpOworCisgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgW10oR3N0QnVz
KiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IEdzdEJ1c1N5bmNS
ZXBseSB7CisgICAgICAgIGF1dG8qIGRlY29kZWJpbiA9IEdTVF9FTEVNRU5UX0NBU1QodXNlckRh
dGEpOworICAgICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSAhPSBHU1RfTUVTU0FH
RV9TVFJFQU1fQ09MTEVDVElPTiB8fCBHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkgIT0gR1NUX09C
SkVDVF9DQVNUKGRlY29kZWJpbikpIHsKKyAgICAgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmKG1l
c3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAgICAgICAgfQorCisg
ICAgICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKKyAgICAgICAg
Z3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb24obWVzc2FnZSwgJmNvbGxlY3Rpb24u
b3V0UHRyKCkpOworICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAgIGdzdF9t
ZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsK
KyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBnc3Rfc3RyZWFtX2NvbGxlY3Rp
b25fZ2V0X3NpemUoY29sbGVjdGlvbi5nZXQoKSk7CisgICAgICAgIEdMaXN0KiBzdHJlYW1zID0g
bnVsbHB0cjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgewor
ICAgICAgICAgICAgYXV0byogc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJl
YW0oY29sbGVjdGlvbi5nZXQoKSwgaSk7CisgICAgICAgICAgICBhdXRvIHN0cmVhbVR5cGUgPSBn
c3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0pOworICAgICAgICAgICAgaWYgKHN0cmVh
bVR5cGUgPT0gR1NUX1NUUkVBTV9UWVBFX0FVRElPKSB7CisgICAgICAgICAgICAgICAgc3RyZWFt
cyA9IGdfbGlzdF9hcHBlbmQoc3RyZWFtcywgY29uc3RfY2FzdDxjaGFyKj4oZ3N0X3N0cmVhbV9n
ZXRfc3RyZWFtX2lkKHN0cmVhbSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RyZWFtcykgeworICAgICAgICAgICAgZ3N0
X2VsZW1lbnRfc2VuZF9ldmVudChkZWNvZGViaW4sIGdzdF9ldmVudF9uZXdfc2VsZWN0X3N0cmVh
bXMoc3RyZWFtcykpOworICAgICAgICAgICAgZ19saXN0X2ZyZWUoc3RyZWFtcyk7CisgICAgICAg
IH0KIAotICAgIGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5nZXQo
KSk7CisgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgICAgICByZXR1cm4g
R1NUX0JVU19EUk9QOworICAgIH0sIGdzdF9vYmplY3RfcmVmKGRlY29kZWJpbiksIGdzdF9vYmpl
Y3RfdW5yZWYpOwogfQogI2VuZGlmCiAKQEAgLTEyMCwxMCArMTY4LDggQEAgQXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lcjo6fkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIoKQogCiAgICAg
c2V0Q2xpZW50KG51bGxwdHIpOwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgaWYgKG1f
cGlwZWxpbmUpIHsKLSAgICAgICAgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayht
X3BpcGVsaW5lLmdldCgpKTsKKyAgICBpZiAobV9waXBlbGluZSkKICAgICAgICAgZ3N0X2VsZW1l
bnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICB9CiAj
ZW5kaWYKIH0KIApAQCAtMzQ1LDcgKzM5MSw2IEBAIHZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckdT
dHJlYW1lcjo6aGFuZGxlTmV3RGVpbnRlcmxlYXZlUGFkKEdzdFBhZCogcGFkKQogCiAgICAgR1F1
YXJrIHF1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoInBlZXIiKTsKICAgICBnX29i
amVjdF9zZXRfcWRhdGEoR19PQkpFQ1QocGFkKSwgcXVhcmssIHNpbmtQYWQuZ2V0KCkpOwotCiAg
ICAgbV9kZWludGVybGVhdmVTb3VyY2VQYWRzKys7CiAgICAgR1F1YXJrIGNoYW5uZWxJZFF1YXJr
ID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoImNoYW5uZWwtaWQiKTsKICAgICBnX29iamVj
dF9zZXRfcWRhdGEoR19PQkpFQ1Qoc2luayksIGNoYW5uZWxJZFF1YXJrLCBHSU5UX1RPX1BPSU5U
RVIobV9kZWludGVybGVhdmVTb3VyY2VQYWRzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAppbmRleCA2ZjI4ODcyYWZiMTE3NmU1MTNkMmJkZjU1YTYy
MjFkNGY2ZmIwYWU3Li5kZDMxM2IzMTQyNDA2Y2FmNTc5NGVhYzdjYzJhZjhkNjRlNTQ1YWEyIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKQEAgLTMy
LDE5ICszMiwxNiBAQCBjbGFzcyBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGZpbmFs
OiBwdWJsaWMgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7CiBwdWJsaWM6CiAgICAgR1N0cmVhbWVy
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbihHc3RBdWRpb0luZm8mJiBpbmZvKQogICAgICAgICA6IG1f
aW5mbyhXVEZNb3ZlKGluZm8pKQotICAgICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlv
X2luZm9fdG9fY2FwcygmbV9pbmZvKSkpCiAgICAgewogICAgIH0KIAogICAgIEdTdHJlYW1lckF1
ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3QgR3N0QXVkaW9JbmZvJiBpbmZvKQogICAgICAgICA6
IG1faW5mbyhpbmZvKQotICAgICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9f
dG9fY2FwcygmbV9pbmZvKSkpCiAgICAgewogICAgIH0KIAogICAgIEdTdHJlYW1lckF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24oR3N0QXVkaW9JbmZvKiBpbmZvKQogICAgICAgICA6IG1faW5mbygqaW5m
bykKLSAgICAgICAgLCBtX2NhcHMoYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1f
aW5mbykpKQogICAgIHsKICAgICB9CiAKQEAgLTk5LDcgKzk2LDEyIEBAIHB1YmxpYzoKICAgICBi
b29sIG9wZXJhdG9yPT0oY29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3Ro
ZXIpIHsgcmV0dXJuIGdzdF9hdWRpb19pbmZvX2lzX2VxdWFsKCZtX2luZm8sICZvdGhlci5tX2lu
Zm8pOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24mIG90aGVyKSB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsgfQogCi0gICAg
Y29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwczsgfQor
ICAgIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGNhcHMoKQorICAgIHsKKyAgICAgICAgaWYgKCFt
X2NhcHMpCisgICAgICAgICAgICBtX2NhcHMgPSBhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9f
Y2FwcygmbV9pbmZvKSk7CisgICAgICAgIHJldHVybiBtX2NhcHM7CisgICAgfQogICAgIGNvbnN0
IEdzdEF1ZGlvSW5mbyYgZ2V0SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQogCiBwcml2
YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCmluZGV4IDIzYWMxMjU3NjYyMTk3ZmE0
ZWFjOTdhOTk3Y2I1ZDBmZWVlNzQzOTAuLjlmNmY3NjE1YTc2MTgxOGNhNGJkOWZjZThjODdmMjIy
MzQzOTQ0OWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKQEAgLTI3LDYgKzI3LDEy
IEBACiAjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3RlZ2xpbWFnZS5oPgogI2VuZGlmCiAKKyNpZiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNs
dWRlIDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RNaW5pT2Jq
ZWN0PiBhZG9wdEdSZWYoR3N0TWluaU9iamVjdCogcHRyKQpAQCAtNTY5LDYgKzU3NSwxMjQgQEAg
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0RUdMSW1hZ2U+KEdzdEVHTEltYWdlKiBwdHIp
CiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX0dMKQogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IGFkb3B0R1Jl
ZihHc3RXZWJSVENSVFBSZWNlaXZlciogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdl
YlJUQ1JUUFJlY2VpdmVyPihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdz
dFdlYlJUQ1JUUFJlY2VpdmVyKiByZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPihHc3RXZWJS
VENSVFBSZWNlaXZlciogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3Rf
cmVmKEdTVF9PQkpFQ1QocHRyKSk7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8
PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4oR3N0V2ViUlRDUlRQUmVjZWl2
ZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7
Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBhZG9wdEdSZWYo
R3N0V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRD
UlRQU2VuZGVyPihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJU
Q1JUUFNlbmRlciogcmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KEdzdFdlYlJUQ1JUUFNlbmRl
ciogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpF
Q1QocHRyKSk7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVm
R1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KEdzdFdlYlJUQ1JUUFNlbmRlciogcHRyKQoreworICAg
IGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KKwordGVtcGxhdGUg
PD4gR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JU
UFRyYW5zY2VpdmVyKiBwdHIpCit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJh
bnNjZWl2ZXI+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRD
UlRQVHJhbnNjZWl2ZXIqIHJlZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVj
dF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRl
IDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBU
cmFuc2NlaXZlciogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5y
ZWYocHRyKTsKK30KKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4g
YWRvcHRHUmVmKEdzdFdlYlJUQ0RhdGFDaGFubmVsKiBwdHIpCit7CisgICAgcmV0dXJuIEdSZWZQ
dHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxh
dGUgPD4gR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+
KEdzdFdlYlJUQ0RhdGFDaGFubmVsKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19v
YmplY3RfcmVmKEdfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxh
dGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+KEdzdFdlYlJUQ0RhdGFD
aGFubmVsKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19vYmplY3RfdW5yZWYocHRy
KTsKK30KKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiBhZG9w
dEdSZWYoR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRy
PEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxh
dGUgPD4gR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNw
b3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAg
ICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9
CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdz
dFdlYlJUQ0RUTFNUcmFuc3BvcnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rf
b2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDSUNF
VHJhbnNwb3J0PiBhZG9wdEdSZWYoR3N0V2ViUlRDSUNFVHJhbnNwb3J0KiBwdHIpCit7CisgICAg
cmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihwdHIsIEdSZWZQdHJBZG9wdCk7
Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCogcmVmR1B0cjxHc3RXZWJS
VENJQ0VUcmFuc3BvcnQ+KEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCogcHRyKQoreworICAgIGlmIChw
dHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpFQ1QocHRyKSk7CisKKyAgICByZXR1
cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFu
c3BvcnQ+KEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAg
ICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShHU1RSRUFNRVIp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1JlZlB0ckdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaAppbmRleCAwNzhkM2M1NjM5NzRmNmEyYjNhZjFlYjgz
OTg2NDk4Nzk0NWZhN2Q4Li44N2ZmMDZmNGU1MDNkNDU1MWZiNDBjYjdmNDU5MjgwNzFhY2NiOGVk
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1JlZlB0ckdTdHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKQEAgLTMzLDYgKzMzLDE1IEBAIHR5cGVkZWYg
c3RydWN0IF9Hc3RHTENvbnRleHQgR3N0R0xDb250ZXh0OwogdHlwZWRlZiBzdHJ1Y3QgX0dzdEVH
TEltYWdlIEdzdEVHTEltYWdlOwogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
K3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENEYXRhQ2hhbm5lbCBHc3RXZWJSVENEYXRhQ2hhbm5l
bDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENSVFBSZWNlaXZlciBHc3RXZWJSVENSVFBSZWNl
aXZlcjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENSVFBTZW5kZXIgR3N0V2ViUlRDUlRQU2Vu
ZGVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyIEdzdFdlYlJUQ1JU
UFRyYW5zY2VpdmVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ0RUTFNUcmFuc3BvcnQgR3N0
V2ViUlRDRFRMU1RyYW5zcG9ydDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENJQ0VUcmFuc3Bv
cnQgR3N0V2ViUlRDSUNFVHJhbnNwb3J0OworI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiB0
ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0UGx1Z2luPiBhZG9wdEdSZWYoR3N0UGx1Z2luKiBwdHIpOwpA
QCAtMTQ2LDYgKzE1NSwzMyBAQCB0ZW1wbGF0ZTw+IEdzdEVHTEltYWdlKiByZWZHUHRyPEdzdEVH
TEltYWdlPihHc3RFR0xJbWFnZSogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0
RUdMSW1hZ2U+KEdzdEVHTEltYWdlKiBwdHIpOwogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IGFkb3B0
R1JlZihHc3RXZWJSVENSVFBSZWNlaXZlciopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQUmVj
ZWl2ZXIqIHJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVy
Kik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4oR3N0
V2ViUlRDUlRQUmVjZWl2ZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENSVFBT
ZW5kZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBTZW5kZXIqKTsKK3RlbXBsYXRlIDw+IEdzdFdl
YlJUQ1JUUFNlbmRlciogcmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KEdzdFdlYlJUQ1JUUFNl
bmRlciopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPihH
c3RXZWJSVENSVFBTZW5kZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENSVFBU
cmFuc2NlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKik7Cit0ZW1wbGF0
ZSA8PiBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2Nl
aXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZH
UHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciopOwor
Cit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBhZG9wdEdSZWYoR3N0
V2ViUlRDRGF0YUNoYW5uZWwqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RhdGFDaGFubmVsKiBy
ZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCopOwordGVt
cGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+KEdzdFdlYlJUQ0Rh
dGFDaGFubmVsKik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9y
dD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+IEdzdFdl
YlJUQ0RUTFNUcmFuc3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2Vi
UlRDRFRMU1RyYW5zcG9ydCopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRD
RFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCopOworCit0ZW1wbGF0ZSA8PiBH
UmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0lDRVRyYW5z
cG9ydCopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDSUNFVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdl
YlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7Cit0ZW1wbGF0ZSA8PiB2
b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KEdzdFdlYlJUQ0lDRVRyYW5zcG9y
dCopOworCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoR1NU
UkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAppbmRleCA5ZjQ5NWRkZjkwMmRmNGZm
ZGY1M2FmZThjMGY2NzRmNTZjYmY1ZmUxLi5hOGNiZTVjNzJlMjMwMjFjZmU0N2M4MmFhMWRlY2Mz
OGUzNjQyNjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtMTg5LDYgKzE4OSw5
IEBAIGNvbnN0IGNoYXIqIGNhcHNNZWRpYVR5cGUoY29uc3QgR3N0Q2FwcyogY2FwcykKICAgICBp
ZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LWNlbmMi
KSB8fCBnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtY2Jj
cyIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC13
ZWJtLWVuYyIpKQogICAgICAgICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVj
dHVyZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKTsKICNlbmRpZgorICAgIGlmIChnc3Rfc3RydWN0
dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtcnRwIikpCisgICAgICAgIHJl
dHVybiBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAibWVkaWEiKTsKKwogICAg
IHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0cnVjdHVyZSk7CiB9CiAKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HVW5pcXVlUHRy
R1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1VuaXF1ZVB0ckdTdHJlYW1lci5oCmluZGV4IGJmNzRlY2YwMmNjMjJmNjA2ZWJjYjlmZTg1YzAz
NGIyNmM0MDY0NDEuLmU1MjQ3MWNhN2VhNjJhMzE1OGM1MjMzMzYwNjM1MmVjNjMxNTJhMzcgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HVW5p
cXVlUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaApAQCAtMzAsNiArMzAsMTIgQEAKICNpbmNs
dWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+
CiAKKyNpZiBkZWZpbmVkKEJVSUxESU5HX1dlYkNvcmUpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQorI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJydGMvd2Vi
cnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNlbmRpZgorCiAjaWYgVVNFKFdQ
RV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRikKICNpbmNsdWRlIDx3cGUvZXh0ZW5zaW9ucy92
aWRlby1wbGFuZS1kaXNwbGF5LWRtYWJ1Zi5oPgogI2VuZGlmCkBAIC00OSw2ICs1NSwxMCBAQCBX
VEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RCeXRlUmVhZGVyLCBnc3RfYnl0ZV9yZWFkZXJfZnJl
ZSkKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdFZpZGVvQ29udmVydGVyLCBnc3RfdmlkZW9f
Y29udmVydGVyX2ZyZWUpCiBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RBdWRpb0NvbnZlcnRl
ciwgZ3N0X2F1ZGlvX2NvbnZlcnRlcl9mcmVlKQogCisjaWYgZGVmaW5lZChCVUlMRElOR19XZWJD
b3JlKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKK1dURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdz
dFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiwgZ3N0X3dlYnJ0Y19zZXNzaW9uX2Rlc2NyaXB0aW9u
X2ZyZWUpCisjZW5kaWYKKwogI2lmIFVTRShXUEVfVklERU9fUExBTkVfRElTUExBWV9ETUFCVUYp
CiBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihzdHJ1Y3Qgd3BlX3ZpZGVvX3BsYW5lX2Rpc3BsYXlf
ZG1hYnVmX3NvdXJjZSwgd3BlX3ZpZGVvX3BsYW5lX2Rpc3BsYXlfZG1hYnVmX3NvdXJjZV9kZXN0
cm95KQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKaW5kZXggZWMzMmJhODVj
Y2Y4NDcyNTM4MzUyNjgxODU5YzQwNzdlYmQ0OTkyZC4uMTgyNjZmMTIyYzRiMTg2NzRhMWY3OWJh
YjkxZjA1NDk2N2ZjYjcwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcApAQCAtMzgs
NyArMzgsNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1U
cmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5oIgotI2VsaWYgRU5BQkxFKFdFQl9BVURJTykg
JiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1F
UikKKyNlbGlmIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVT
RShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5oIgog
I2Vsc2UKICNpbmNsdWRlICJXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCkBAIC0xOTksNyArMTk5
LDcgQEAgUmVmUHRyPFdlYkF1ZGlvU291cmNlUHJvdmlkZXI+IE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpjcmVhdGVBdWRpb1NvdXJjZVByb3ZpZGUKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAg
IHJldHVybiBNZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VQcm92aWRlckNvY29hOjpjcmVhdGUo
KnRoaXMpOwotI2VsaWYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNlbGlmIFVT
RShHU1RSRUFNRVIpCiAgICAgcmV0dXJuIEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OmNy
ZWF0ZSgqdGhpcyk7CiAjZWxzZQogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlv
Q2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCmluZGV4IDI2ZWU0MjYzYjlkYjg3ODFkYmFl
NjFlMWEzMDEyZWY3ZGM3MDk3MjUuLjM1ZTY1YzBlYjBiZDQ4MWQzZjg1YTlkZDA1YjY2YmY5NTY5
MGU3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAK
QEAgLTI5LDI5ICsyOSw0NiBAQAogI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvRm9ybWF0LmgiCiAj
ZW5kaWYKIAotI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgotCiBuYW1lc3BhY2UgV2Vi
Q29yZSB7CiAKICNpZiBVU0UoTElCV0VCUlRDKQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgQXVk
aW9DYXB0dXJlU2FtcGxlUmF0ZSA9IExpYldlYlJUQ0F1ZGlvRm9ybWF0OjpzYW1wbGVSYXRlOwor
c3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gTGliV2Vi
UlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGU7CiAjZWxzZQotc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IDQ4MDAwOworc3RhdGljIGNvbnN0ZXhwciBzaXpl
X3Qgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gNDgwMDA7CiAjZW5kaWYKIAogR1N0cmVhbWVy
QXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcihHU3RyZWFtZXJDYXB0dXJlRGV2
aWNlIGRldmljZSkKLSAgICA6IEdTdHJlYW1lckNhcHR1cmVyKGRldmljZSwgYWRvcHRHUmVmKGdz
dF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBBdWRp
b0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSkpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcihk
ZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRl
IiwgR19UWVBFX0lOVCwgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSkpCiB7CiB9
CiAKIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIoKQotICAg
IDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2lt
cGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgQXVkaW9DYXB0dXJlU2FtcGxl
UmF0ZSwgbnVsbHB0cikpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNyb3Bob25lKQor
ICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdf
c2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgc19hdWRpb0NhcHR1cmVT
YW1wbGVSYXRlLCBudWxscHRyKSksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhv
bmUpCiB7CiB9CiAKIEdzdEVsZW1lbnQqIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OmNyZWF0ZUNv
bnZlcnRlcigpCiB7Ci0gICAgcmV0dXJuIG1ha2VHU3RyZWFtZXJCaW4oImF1ZGlvY29udmVydCAh
IGF1ZGlvcmVzYW1wbGUiLCB0cnVlKTsKKyAgICBhdXRvKiBiaW4gPSBnc3RfYmluX25ldyhudWxs
cHRyKTsKKyAgICBhdXRvKiBhdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
ImF1ZGlvY29udmVydCIsIG51bGxwdHIpOworICAgIGF1dG8qIGF1ZGlvcmVzYW1wbGUgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvcmVzYW1wbGUiLCBudWxscHRyKTsKKyAgICBnc3Rf
YmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChiaW4pLCBhdWRpb2NvbnZlcnQsIGF1ZGlvcmVzYW1w
bGUsIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmsoYXVkaW9jb252ZXJ0LCBhdWRpb3Jl
c2FtcGxlKTsKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorICAgIGlmIChhdXRvKiB3ZWJy
dGNkc3AgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgid2VicnRjZHNwIiwgbnVsbHB0cikpIHsKKyAg
ICAgICAgZ19vYmplY3Rfc2V0KHdlYnJ0Y2RzcCwgImVjaG8tY2FuY2VsIiwgZmFsc2UsICJ2b2lj
ZS1kZXRlY3Rpb24iLCB0cnVlLCBudWxscHRyKTsKKyAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJ
Tl9DQVNUKGJpbiksIHdlYnJ0Y2RzcCk7CisgICAgICAgIGdzdF9lbGVtZW50X2xpbmsod2VicnRj
ZHNwLCBhdWRpb2NvbnZlcnQpOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKGF1dG8gcGFkID0g
YWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQoR1NUX0JJTl9DQVNUKGJpbiksIEdT
VF9QQURfU1JDKSkpCisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VMRU1FTlRfQ0FT
VChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgcGFkLmdldCgpKSk7CisgICAgaWYgKGF1
dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQoR1NUX0JJTl9DQVNU
KGJpbiksIEdTVF9QQURfU0lOSykpKQorICAgICAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9F
TEVNRU5UX0NBU1QoYmluKSwgZ3N0X2dob3N0X3BhZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsK
KworICAgIHJldHVybiBiaW47CiB9CiAKIGJvb2wgR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6c2V0
U2FtcGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVy
ZXIuY3BwCmluZGV4IGM5ZTBkNWViNjBlMmJjMzhlZjNhOWE1ZDUzMmM0Mzg4MDEwOTZmNGUuLjA5
ODM0YTY1OGMxMjQwMzIwNDQ1NTg0ZTIxOTQxNWE4NWUxMzcwYjggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJl
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckNhcHR1cmVyLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIEdzdEVsZW1lbnQqIEdT
dHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UoKQogICAgICAgICBtX3NyYyA9IG1ha2VFbGVt
ZW50KG1fc291cmNlRmFjdG9yeSk7CiAgICAgICAgIEFTU0VSVChtX3NyYyk7CiAgICAgICAgIGlm
IChHU1RfSVNfQVBQX1NSQyhtX3NyYy5nZXQoKSkpCi0gICAgICAgICAgICBnX29iamVjdF9zZXQo
bV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwg
bnVsbHB0cik7CisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9zcmMuZ2V0KCksICJpcy1saXZl
IiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgImRvLXRpbWVzdGFtcCIsIHRydWUs
IG51bGxwdHIpOwogCiAgICAgICAgIGF1dG8gc3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50
X2dldF9zdGF0aWNfcGFkKG1fc3JjLmdldCgpLCAic3JjIikpOwogICAgICAgICBpZiAobV9kZXZp
Y2VUeXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNhbWVyYSkgewpAQCAtMTM4LDYg
KzEzOCw3IEBAIEdzdEVsZW1lbnQqIEdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UoKQog
ICAgIG1fc3JjID0gZ3N0X2RldmljZV9jcmVhdGVfZWxlbWVudChtX2RldmljZS5nZXQoKSwgc291
cmNlTmFtZS5nZXQoKSk7CiAgICAgQVNTRVJUKG1fc3JjKTsKIAorICAgIC8vIGdfb2JqZWN0X3Nl
dChtX3NyYy5nZXQoKSwgImlvLW1vZGUiLCAyLCBudWxscHRyKTsKICAgICByZXR1cm4gbV9zcmMu
Z2V0KCk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJh
Y2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMWRlNTJiZDU4MTk0YzczNzZhNmExYTRmM2ZmZTRkZWRj
MWE3MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEs
NzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiTm90SW1wbGVt
ZW50ZWQuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFj
a2VuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworR1N0cmVhbWVyRFRNRlNlbmRl
ckJhY2tlbmQ6On5HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworYm9vbCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6Y2FuSW5zZXJ0
RFRNRigpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OnBsYXlUb25lKGNvbnN0IFN0cmluZyYs
IHNpemVfdCwgc2l6ZV90KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBH
U3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6dG9uZXMoKSBjb25zdAoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworc2l6ZV90IEdTdHJlYW1lckRUTUZTZW5k
ZXJCYWNrZW5kOjpkdXJhdGlvbigpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gMDsKK30KKworc2l6ZV90IEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjppbnRl
clRvbmVHYXAoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6Om9uVG9uZVBsYXllZChGdW5j
dGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIG9uVG9uZVBsYXllZCkKK3sKKyAgICBtX29uVG9u
ZVBsYXllZCA9IFdURk1vdmUob25Ub25lUGxheWVkKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jNTc5NzA1MGNlYzliNGIwYWE2ZDllZmU5ODA4YWU1YzkwODhmYjMzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJSVENEVE1GU2VuZGVyQmFj
a2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworLy8gVXNlIGVhZ2VyIGluaXRpYWxpemF0aW9uIGZvciB0aGUgV2Vha1B0ckZhY3Rvcnkgc2lu
Y2Ugd2UgY2FsbCBtYWtlV2Vha1B0cigpIGZyb20gYW5vdGhlciB0aHJlYWQuCitjbGFzcyBHU3Ry
ZWFtZXJEVE1GU2VuZGVyQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENEVE1GU2VuZGVyQmFja2Vu
ZCwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLCBXZWFr
UHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5k
KCk7CisgICAgfkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCk7CisKK3ByaXZhdGU6CisgICAg
Ly8gUlRDRFRNRlNlbmRlckJhY2tlbmQKKyAgICBib29sIGNhbkluc2VydERUTUYoKSBmaW5hbDsK
KyAgICB2b2lkIHBsYXlUb25lKGNvbnN0IFN0cmluZyYgdG9uZSwgc2l6ZV90IGR1cmF0aW9uLCBz
aXplX3QgaW50ZXJUb25lR2FwKSBmaW5hbDsKKyAgICB2b2lkIG9uVG9uZVBsYXllZChGdW5jdGlv
bjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKSBmaW5hbDsKKyAgICBTdHJpbmcgdG9uZXMoKSBjb25z
dCBmaW5hbDsKKyAgICBzaXplX3QgZHVyYXRpb24oKSBjb25zdCBmaW5hbDsKKyAgICBzaXplX3Qg
aW50ZXJUb25lR2FwKCkgY29uc3QgZmluYWw7CisKKyAgICBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0
cmluZyYpPiBtX29uVG9uZVBsYXllZDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCmluZGV4IDk5
NTRmYTY1ODMxM2E5YTQ1YTUyZTNjZjc2MWYxMDFmMzRkOWFhZDUuLjA1YmEyMGY3MDRmZTdiNmMy
MjZhZjc3MGFhYWExMTAxOTNjNTI4ZWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lck1lZGlhU3RyZWFtU291cmNlLmNwcApAQCAtMzQsMTcgKzM0LDIzIEBACiAjaW5jbHVkZSAi
VmlkZW9GcmFtZU1ldGFkYXRhR1N0cmVhbWVyLmgiCiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZh
dGVNZWRpYVN0cmVhbS5oIgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAi
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPGdz
dC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVkZSA8Z3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmg+
CiAjaW5jbHVkZSA8d3RmL1VVSUQuaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgog
CiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRl
IHZpZGVvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgidmlkZW9fc3JjJXUi
LCBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTKCJ2
aWRlby94LXJhdzt2aWRlby94LWgyNjQ7dmlkZW8veC12cDgiKSk7CisgICAgR1NUX1NUQVRJQ19D
QVBTKCJ2aWRlby94LXJhdzt2aWRlby94LWgyNjQ7dmlkZW8veC12cDg7dmlkZW8veC12cDk7YXBw
bGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpdmlkZW8iKSk7CiAKIHN0YXRpYyBHc3RTdGF0
aWNQYWRUZW1wbGF0ZSBhdWRpb1NyY1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUo
ImF1ZGlvX3NyYyV1IiwgR1NUX1BBRF9TUkMsIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9T
VEFUSUNfQ0FQUygiYXVkaW8veC1yYXcoQU5ZKTsiKSk7CisgICAgR1NUX1NUQVRJQ19DQVBTKCJh
dWRpby94LXJhdyhBTlkpO2FwcGxpY2F0aW9uL3gtcnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvIikp
OwogCiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElDKHdlYmtpdE1lZGlhU3RyZWFtU3JjRGVidWcp
OwogI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0TWVkaWFTdHJlYW1TcmNEZWJ1ZwpAQCAt
MjIxLDcgKzIyNyw3IEBAIHB1YmxpYzoKIAogICAgICAgICBpZiAoZHJvcCkgewogICAgICAgICAg
ICAgbV9uZWVkc0Rpc2NvbnQgPSB0cnVlOwotICAgICAgICAgICAgR1NUX0lORk9fT0JKRUNUKG1f
c3JjLmdldCgpLCAiJXMgcXVldWUgZnVsbCBhbHJlYWR5Li4uIG5vdCBwdXNoaW5nIiwgbV90cmFj
ay5oYXNWaWRlbygpID8gIlZpZGVvIiA6ICJBdWRpbyIpOworICAgICAgICAgICAgR1NUX1RSQUNF
X09CSkVDVChtX3NyYy5nZXQoKSwgIiVzIHF1ZXVlIGZ1bGwgYWxyZWFkeS4uLiBub3QgcHVzaGlu
ZyIsIG1fdHJhY2suaGFzVmlkZW8oKSA/ICJWaWRlbyIgOiAiQXVkaW8iKTsKICAgICAgICAgICAg
IHJldHVybjsKICAgICAgICAgfQogCkBAIC02NTIsNiArNjU4LDcgQEAgdm9pZCB3ZWJraXRNZWRp
YVN0cmVhbVNyY0FkZFRyYWNrKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmVh
bVRyYWNrUHIKICAgICBjb25zdCBjaGFyKiBzb3VyY2VUeXBlOwogICAgIHVuc2lnbmVkIGNvdW50
ZXI7CiAgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUqIHBhZFRlbXBsYXRlOworCiAgICAgaWYgKHRy
YWNrLT5oYXNBdWRpbygpKSB7CiAgICAgICAgIHBhZFRlbXBsYXRlID0gJmF1ZGlvU3JjVGVtcGxh
dGU7CiAgICAgICAgIHNvdXJjZVR5cGUgPSAiYXVkaW8iOwpAQCAtNjYzLDkgKzY3MCwxOSBAQCB2
b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkVHJhY2soV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNl
bGYsIE1lZGlhU3RyZWFtVHJhY2tQcgogICAgICAgICBjb3VudGVyID0gc2VsZi0+cHJpdi0+dmlk
ZW9QYWRDb3VudGVyLmV4Y2hhbmdlQWRkKDEpOwogICAgIH0KIAotICAgIGF1dG8gcGFkTmFtZSA9
IG1ha2VTdHJpbmcoc291cmNlVHlwZSwgIl9zcmMiLCBjb3VudGVyKTsKKyNpZiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKKyAgICBpZiAodHJhY2stPnNvdXJjZSgpLmlzSW5jb21pbmdBdWRpb1NvdXJj
ZSgpKSB7CisgICAgICAgIGF1dG8mIHNvdXJjZSA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lciY+KHRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgIHNvdXJj
ZS5yZWdpc3RlckNsaWVudCgpOworICAgIH0gZWxzZSBpZiAodHJhY2stPnNvdXJjZSgpLmlzSW5j
b21pbmdWaWRlb1NvdXJjZSgpKSB7CisgICAgICAgIGF1dG8mIHNvdXJjZSA9IHN0YXRpY19jYXN0
PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciY+KHRyYWNrLT5zb3VyY2UoKSk7
CisgICAgICAgIHNvdXJjZS5yZWdpc3RlckNsaWVudCgpOworICAgIH0KKyNlbmRpZgorCiAgICAg
R1NUX0RFQlVHX09CSkVDVChzZWxmLCAiU2V0dXAgJXMgc291cmNlIGZvciB0cmFjayAlcywgb25s
eSB0cmFjazogJXMiLCBzb3VyY2VUeXBlLCB0cmFjay0+aWQoKS51dGY4KCkuZGF0YSgpLCBib29s
Rm9yUHJpbnRpbmcob25seVRyYWNrKSk7CiAKKyAgICBhdXRvIHBhZE5hbWUgPSBtYWtlU3RyaW5n
KHNvdXJjZVR5cGUsICJfc3JjIiwgY291bnRlcik7CiAgICAgYXV0byBzb3VyY2UgPSBtYWtlVW5p
cXVlPEludGVybmFsU291cmNlPihHU1RfRUxFTUVOVF9DQVNUKHNlbGYpLCAqdHJhY2ssIHBhZE5h
bWUpOwogICAgIGF1dG8qIGVsZW1lbnQgPSBzb3VyY2UtPmdldCgpOwogICAgIGdzdF9iaW5fYWRk
KEdTVF9CSU5fQ0FTVChzZWxmKSwgZWxlbWVudCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJWaWRlb0VuY29kZXIuY3BwCmluZGV4IGZhYzQ3MDVmYjhhN2NmMmRjMjNlYTUxMWIxNWZjZjQ4
NTUyY2YzM2EuLmE3NmVmMWVmZmQxNmZhMjZiNmRlMzU3NGY0NjRmNWQyMzNjOTVlZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJWaWRlb0VuY29kZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwCkBAIC0yOTcsOSArMjk3
LDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJydGNfdmlkZW9fZW5jb2Rlcl9jbGFzc19pbml0
KFdlYktpdFdlYnJ0Y1ZpZGVvRW5jb2RlckNsYXNzCiAgICAgICAgICAgICBnX29iamVjdF9zZXQo
c2VsZi0+cHJpdi0+cGFyc2VyLmdldCgpLCAiY29uZmlnLWludGVydmFsIiwgMSwgbnVsbHB0cik7
CiAgICAgICAgIH0sICJ0YXJnZXQtYml0cmF0ZSIsIHNldEJpdHJhdGVCaXRQZXJTZWMsICJpbnRl
cnZhbC1pbnRyYWZyYW1lcyIpOwogICAgIEVuY29kZXJzOjpyZWdpc3RlckVuY29kZXIoWDI2NCwg
IngyNjRlbmMiLCAiaDI2NHBhcnNlIiwgInZpZGVvL3gtaDI2NCIsCi0gICAgICAgICJ2aWRlby94
LWgyNjQsYWxpZ25tZW50PWF1LHN0cmVhbS1mb3JtYXQ9Ynl0ZS1zdHJlYW0scHJvZmlsZT1iYXNl
bGluZSIsCisgICAgICAgICJ2aWRlby94LWgyNjQsYWxpZ25tZW50PWF1LHN0cmVhbS1mb3JtYXQ9
Ynl0ZS1zdHJlYW0scHJvZmlsZT1jb25zdHJhaW5lZC1iYXNlbGluZSIsCiAgICAgICAgIFtdKFdl
YktpdFdlYnJ0Y1ZpZGVvRW5jb2Rlciogc2VsZikgewogICAgICAgICAgICAgZ3N0X3V0aWxfc2V0
X29iamVjdF9hcmcoR19PQkpFQ1Qoc2VsZi0+cHJpdi0+ZW5jb2Rlci5nZXQoKSksICJ0dW5lIiwg
Inplcm9sYXRlbmN5Iik7CisgICAgICAgICAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09C
SkVDVChzZWxmLT5wcml2LT5lbmNvZGVyLmdldCgpKSwgInNwZWVkLXByZXNldCIsICJ1bHRyYWZh
c3QiKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChHX09CSkVDVChzZWxmLT5wcml2LT5lbmNv
ZGVyLmdldCgpKSwgImtleS1pbnQtbWF4IiwgMTUsIE5VTEwpOwogICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KHNlbGYtPnByaXYtPnBhcnNlci5nZXQoKSwgImNvbmZpZy1pbnRlcnZhbCIsIDEsIG51
bGxwdHIpOwogICAgICAgICB9LCAiYml0cmF0ZSIsIHNldEJpdHJhdGVLYml0UGVyU2VjLCAia2V5
LWludC1tYXgiKTsKICAgICBFbmNvZGVyczo6cmVnaXN0ZXJFbmNvZGVyKE9wZW5IMjY0LCAib3Bl
bmgyNjRlbmMiLCAiaDI2NHBhcnNlIiwgInZpZGVvL3gtaDI2NCIsCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWlu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg2ODA1NmE4NTg4ZTVmZGE3NTk3N2QxODEyMDAzOGFlYWViYzdiY2MKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsx
LDczIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJSZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvRGF0
YS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6
OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcihTdHJpbmcmJiBhdWRpb1RyYWNr
SWQpCisgICAgOiBSZWFsdGltZU1lZGlhU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6
OkF1ZGlvLCBXVEZNb3ZlKGF1ZGlvVHJhY2tJZCkpCisgICAgLCBSZWFsdGltZUluY29taW5nU291
cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBzdGFydCgpOworfQorCitSZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXI6On5SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIo
KQoreworICAgIHN0b3AoKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgcmVsZWFzZVZhbHZlKCk7Cit9
CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzdG9wUHJvZHVj
aW5nRGF0YSgpCit7CisgICAgbG9ja1ZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6
Y2FwYWJpbGl0aWVzKCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdz
KCkKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisKK3ZvaWQgUmVhbHRpbWVJ
bmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBsZShHUmVmUHRyPEdzdFNh
bXBsZT4mJiBnc3RTYW1wbGUpCit7CisgICAgYXV0byogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRf
YnVmZmVyKGdzdFNhbXBsZS5nZXQoKSk7CisgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbjsKKyAgICBHU3RyZWFtZXJBdWRpb0RhdGEgZnJhbWVzKFdURk1vdmUo
Z3N0U2FtcGxlKSwgZGVzY3JpcHRpb24uZ2V0SW5mbygpKTsKKworICAgIGF1ZGlvU2FtcGxlc0F2
YWlsYWJsZShNZWRpYVRpbWUoR1NUX1RJTUVfQVNfVVNFQ09ORFMoR1NUX0JVRkZFUl9QVFMoYnVm
ZmVyKSksIEdfVVNFQ19QRVJfU0VDKSwgZnJhbWVzLCBkZXNjcmlwdGlvbiwgMCk7Cit9CisKK30K
KworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmJkZjZkYTNiNzFmNWZlZTU5NmYyNTZmMjE1ZGRjZGY3Njk4ODRlYTQKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyIDogcHVi
bGljIFJlYWx0aW1lTWVkaWFTb3VyY2UsIHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcj4gY3JlYXRlKFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZShh
dWRpb1RyYWNrSWQpKSk7IH0KKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcihTdHJpbmcmJik7CisgICAgflJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcigpOworCitwcml2YXRlOgorICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2Ug
QVBJCisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQ
cm9kdWNpbmdEYXRhKCkgIGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFT
b3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBmaW5hbDsKKyAgICBib29sIGlzSW5jb21pbmdBdWRp
b1NvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKworICAgIC8vIFJlYWx0aW1l
SW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgQVBJCisgICAgdm9pZCBkaXNwYXRjaFNhbXBsZShHUmVm
UHRyPEdzdFNhbXBsZT4mJikgZmluYWw7CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MgbV9jdXJyZW50U2V0dGluZ3M7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlR1N0cmVhbWVyKQorICAgIHN0YXRpYyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpS
ZWFsdGltZU1lZGlhU291cmNlJiBzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5pc0luY29taW5nQXVk
aW9Tb3VyY2UoKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTE5NmYyNWQ5ZDJkMDVi
YzJiYjJiMWQyYzFlZTZkNjEyYjY5OTQ3OAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNl
R1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDk0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRl
ICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgorCitHU1RfREVCVUdfQ0FURUdPUllf
RVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RF
RkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdTb3Vy
Y2VHU3RyZWFtZXIoKQoreworICAgIG1fYmluID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7CisgICAg
bV92YWx2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmFsdmUiLCBudWxscHRyKTsKKyAg
ICBtX3RlZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidGVlIiwgbnVsbHB0cik7CisgICAg
Z19vYmplY3Rfc2V0KG1fdGVlLmdldCgpLCAiYWxsb3ctbm90LWxpbmtlZCIsIHRydWUsIG51bGxw
dHIpOworCisgICAgYXV0byogcXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1ZXVl
IiwgbnVsbHB0cik7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0
KCkpLCBtX3ZhbHZlLmdldCgpLCBxdWV1ZSwgbV90ZWUuZ2V0KCksIG51bGxwdHIpOworCisgICAg
Z3N0X2VsZW1lbnRfbGlua19tYW55KG1fdmFsdmUuZ2V0KCksIHF1ZXVlLCBtX3RlZS5nZXQoKSwg
bnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChtX3ZhbHZl
LmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KHF1ZXVlKTsK
KyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fdGVlLmdldCgpKTsKKwor
ICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCht
X3ZhbHZlLmdldCgpLCAic2luayIpKTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKG1fYmluLmdl
dCgpLCBnc3RfZ2hvc3RfcGFkX25ldygic2luayIsIHNpbmtQYWQuZ2V0KCkpKTsKK30KKwordm9p
ZCBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpsb2NrVmFsdmUoKSBjb25zdAorewor
ICAgIGlmIChtX3ZhbHZlKQorICAgICAgICBnX29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRy
b3AiLCB0cnVlLCBudWxscHRyKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyOjpyZWxlYXNlVmFsdmUoKSBjb25zdAoreworICAgIGlmIChtX3ZhbHZlKQorICAgICAg
ICBnX29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3AiLCBmYWxzZSwgbnVsbHB0cik7Cit9
CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVnaXN0ZXJDbGllbnQo
KQoreworICAgIEdTVF9ERUJVRygiUmVnaXN0ZXJpbmcgbmV3IGNsaWVudCIpOworICAgIGF1dG8q
IHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAg
IGF1dG8qIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsiLCBudWxscHRy
KTsKKyAgICBnX29iamVjdF9zZXQoc2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAi
ZW1pdC1zaWduYWxzIiwgVFJVRSwgIm1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7CisgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKHNpbmssICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSygrW10o
UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciogc2VsZiwgR3N0RWxlbWVudCogc2luaykg
LT4gR3N0Rmxvd1JldHVybiB7CisgICAgICAgIGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9h
cHBfc2lua19wdWxsX3NhbXBsZShHU1RfQVBQX1NJTksoc2luaykpKTsKKyAgICAgICAgc2VsZi0+
ZGlzcGF0Y2hTYW1wbGUoV1RGTW92ZShzYW1wbGUpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9X
X09LOworICAgIH0pLCB0aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChzaW5r
LCAibmV3LXByZXJvbGwiLCBHX0NBTExCQUNLKCtbXShSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyKiBzZWxmLCBHc3RFbGVtZW50KiBzaW5rKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAg
ICAgYXV0byBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1Rf
QVBQX1NJTksoc2luaykpKTsKKyAgICAgICAgc2VsZi0+ZGlzcGF0Y2hTYW1wbGUoV1RGTW92ZShz
YW1wbGUpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0pLCB0aGlzKTsKKwor
ICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgcXVldWUsIHNp
bmssIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX3RlZS5nZXQoKSwgcXVl
dWUsIHNpbmssIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJl
bnQocXVldWUpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc2luayk7
CisKKyAgICBhdXRvIGRvdEZpbGVOYW1lID0gbWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUobV9i
aW4uZ2V0KCkpLCAiLmluY29taW5nIik7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9X
SVRIX1RTKEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FM
TCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdT
b3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTY3
NGM0YjkwMjk0MjZjYjVkMmMxOWFhNTY3YTljNWFlZGEyNzFlYQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUlu
Y29taW5nU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAg
ICBHc3RFbGVtZW50KiBiaW4oKSB7IHJldHVybiBtX2Jpbi5nZXQoKTsgfQorICAgIHZvaWQgcmVn
aXN0ZXJDbGllbnQoKTsKKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXIoKTsKKworICAgIHZvaWQgbG9ja1ZhbHZlKCkgY29uc3Q7CisgICAgdm9pZCByZWxl
YXNlVmFsdmUoKSBjb25zdDsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92YWx2ZTsKKwor
cHJpdmF0ZToKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1w
bGU+JiYpIHsgfQorCisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2JpbjsKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fdGVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjE1ZjA4MDc2MmJjMjU2ZWQ3ZWM5ZjFmOGU5OTU0YmMxMmI0MTgwZjgKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgorI2lu
Y2x1ZGUgIlZpZGVvRnJhbWVNZXRhZGF0YUdTdHJlYW1lci5oIgorI2luY2x1ZGUgPGdzdC9ydHAv
cnRwLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoU3RyaW5n
JiYgdmlkZW9UcmFja0lkKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlOjpWaWRlbywgV1RGTW92ZSh2aWRlb1RyYWNrSWQpKQorICAgICwgUmVhbHRp
bWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcigpCit7CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1
cHBvcnRlZENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBv
cnRzV2lkdGgodHJ1ZSk7CisgICAgY29uc3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7
CisgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgeyB9
OworICAgIG1fY3VycmVudFNldHRpbmdzLT5zZXRTdXBwb3J0ZWRDb25zdHJhaW50cyhXVEZNb3Zl
KGNvbnN0cmFpbnRzKSk7CisKKyAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1l
bnRfZ2V0X3N0YXRpY19wYWQobV92YWx2ZS5nZXQoKSwgInNpbmsiKSk7CisgICAgZ3N0X3BhZF9h
ZGRfcHJvYmUoc2lua1BhZC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0UGFkUHJvYmVUeXBlPihHU1Rf
UEFEX1BST0JFX1RZUEVfQlVGRkVSKSwgW10oR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZv
LCBncG9pbnRlcikgLT4gR3N0UGFkUHJvYmVSZXR1cm4geworICAgICAgICBhdXRvIHZpZGVvU2Ft
cGxlTWV0YWRhdGEgPSBzdGQ6Om1ha2Vfb3B0aW9uYWw8VmlkZW9TYW1wbGVNZXRhZGF0YT4oeyB9
KTsKKyAgICAgICAgdmlkZW9TYW1wbGVNZXRhZGF0YS0+cmVjZWl2ZVRpbWUgPSBNb25vdG9uaWNU
aW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpOworCisgICAgICAgIGF1dG8qIGJ1ZmZlciA9
IEdTVF9CVUZGRVJfQ0FTVChHU1RfUEFEX1BST0JFX0lORk9fREFUQShpbmZvKSk7CisgICAgICAg
IEdzdFJUUEJ1ZmZlciBydHBCdWZmZXIgR1NUX1JUUF9CVUZGRVJfSU5JVDsKKyAgICAgICAgaWYg
KGdzdF9ydHBfYnVmZmVyX21hcChidWZmZXIsIEdTVF9NQVBfUkVBRCwgJnJ0cEJ1ZmZlcikpIHsK
KyAgICAgICAgICAgIHZpZGVvU2FtcGxlTWV0YWRhdGEtPnJ0cFRpbWVzdGFtcCA9IGdzdF9ydHBf
YnVmZmVyX2dldF90aW1lc3RhbXAoJnJ0cEJ1ZmZlcik7CisgICAgICAgICAgICBnc3RfcnRwX2J1
ZmZlcl91bm1hcCgmcnRwQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIgPSB3ZWJr
aXRHc3RCdWZmZXJTZXRWaWRlb1NhbXBsZU1ldGFkYXRhKGJ1ZmZlciwgV1RGTW92ZSh2aWRlb1Nh
bXBsZU1ldGFkYXRhKSk7CisgICAgICAgIEdTVF9QQURfUFJPQkVfSU5GT19EQVRBKGluZm8pID0g
YnVmZmVyOworICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAgICB9LCBudWxscHRy
LCBudWxscHRyKTsKKworICAgIHN0YXJ0KCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyOjpzdGFydFByb2R1Y2luZ0RhdGEoKQoreworICAgIHJlbGVhc2VW
YWx2ZSgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6
c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAgIGxvY2tWYWx2ZSgpOworfQorCitjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXI6OmNhcGFiaWxpdGllcygpCit7CisgICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDYXBhYmlsaXRpZXM6OmVtcHR5Q2FwYWJpbGl0aWVzKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5ncyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVy
OjpzZXR0aW5ncygpCit7CisgICAgaWYgKG1fY3VycmVudFNldHRpbmdzKQorICAgICAgICByZXR1
cm4gbV9jdXJyZW50U2V0dGluZ3MudmFsdWUoKTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VT
dXBwb3J0ZWRDb25zdHJhaW50cyBjb25zdHJhaW50czsKKyAgICBjb25zdHJhaW50cy5zZXRTdXBw
b3J0c1dpZHRoKHRydWUpOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0KHRydWUp
OworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHNldHRpbmdzOworICAgIGF1dG8m
IHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgc2V0dGluZ3Muc2V0V2lkdGgoc2l6ZS53aWR0aCgp
KTsKKyAgICBzZXR0aW5ncy5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSk7CisgICAgc2V0dGluZ3Mu
c2V0U3VwcG9ydGVkQ29uc3RyYWludHMoY29uc3RyYWludHMpOworCisgICAgbV9jdXJyZW50U2V0
dGluZ3MgPSBXVEZNb3ZlKHNldHRpbmdzKTsKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3Mu
dmFsdWUoKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6
OnNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6
OkZsYWc+IHNldHRpbmdzKQoreworICAgIGlmIChzZXR0aW5ncy5jb250YWluc0FueSh7IFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6V2lkdGgsIFJlYWx0aW1lTWVkaWFTb3VyY2VT
ZXR0aW5nczo6RmxhZzo6SGVpZ2h0IH0pKQorICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IHN0
ZDo6bnVsbG9wdDsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXI6OmRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmIGdzdFNhbXBsZSkKK3sKKyAg
ICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUdTdHJlYW1lcjo6Y3JlYXRlV3JhcHBl
ZFNhbXBsZShnc3RTYW1wbGUpLCB7IH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5hOWJjMzAwNjljZDMzMjA5MjMxOGJiZjc3OGFiOTNkOTE4NDgzMWZiCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciA6IHB1Ymxp
YyBSZWFsdGltZU1lZGlhU291cmNlLCBwdWJsaWMgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJl
YW1lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXI+IGNyZWF0ZShTdHJpbmcmJiB2aWRlb1RyYWNrSWQpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFdURk1vdmUodmlk
ZW9UcmFja0lkKSkpOyB9CisgICAgflJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cigpID0gZGVmYXVsdDsKKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcihTdHJpbmcmJik7CisKK3ByaXZhdGU6CisgICAgLy8gUmVhbHRpbWVNZWRp
YVNvdXJjZSBBUEkKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIHZv
aWQgc3RvcFByb2R1Y2luZ0RhdGEoKSAgZmluYWw7CisgICAgdm9pZCBzZXR0aW5nc0RpZENoYW5n
ZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPikgZmluYWw7Cisg
ICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkg
ZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygp
IGZpbmFsOworICAgIGJvb2wgaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciBB
UEkKKyAgICB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmKSBmaW5hbDsK
KworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2N1cnJl
bnRTZXR0aW5nczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVk
aWFTb3VyY2UmIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmlzSW5jb21pbmdWaWRlb1NvdXJjZSgp
OyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYjgwNTM5MTkzMzYxM2Fi
YzhhNzc1Y2VmNzk3NDRkMjcyMmIwZGE4NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
CisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSA8d3Rm
L3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgorCitHU1RfREVCVUdfQ0FURUdPUllf
RVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RF
RkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2lu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBzb3Vy
Y2UpCisgICAgOiBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQoreworICAg
IG1fYWxsb3dlZENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXBwbGljYXRp
b24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAiYXVkaW8iLAorICAgICAgICAiZW5j
b2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsICJPUFVTIiwgImNsb2NrLXJhdGUiLCBHX1RZUEVf
SU5ULCA0ODAwMCwgbnVsbHB0cikpOworCisgICAgbV9hdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVu
dF9mYWN0b3J5X21ha2UoImF1ZGlvY29udmVydCIsIG51bGxwdHIpOworICAgIG1fYXVkaW9yZXNh
bXBsZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9yZXNhbXBsZSIsIG51bGxwdHIp
OworCisgICAgbV9lbmNvZGVyID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoIm9wdXNlbmMiLCBudWxs
cHRyKTsKKyAgICBpZiAoIW1fZW5jb2RlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklY
TUU6IEVuYWJsZSBkdHggdG9vPworICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdfT0JKRUNU
KG1fZW5jb2Rlci5nZXQoKSksICJhdWRpby10eXBlIiwgInZvaWNlIik7CisKKyAgICBtX3BheWxv
YWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJydHBvcHVzcGF5IiwgbnVsbHB0cik7CisgICAg
aWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgcmV0dXJuOworCisgICAgZ19vYmplY3Rfc2V0KG1f
cGF5bG9hZGVyLmdldCgpLCAiYXV0by1oZWFkZXItZXh0ZW5zaW9uIiwgRkFMU0UsIG51bGxwdHIp
OworCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX2F1
ZGlvY29udmVydC5nZXQoKSwgbV9hdWRpb3Jlc2FtcGxlLmdldCgpLCBtX2VuY29kZXIuZ2V0KCks
IG1fcGF5bG9hZGVyLmdldCgpLCBudWxscHRyKTsKKyAgICBzZXRTb3VyY2UoV1RGTW92ZShzb3Vy
Y2UpKTsKK30KKworYm9vbCBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNl
dFBheWxvYWRUeXBlKEdSZWZQdHI8R3N0Q2Fwcz4mIGNhcHMpCit7CisgICAgR1NUX0RFQlVHX09C
SkVDVChtX2Jpbi5nZXQoKSwgIk91dGdvaW5nIGF1ZGlvIHNvdXJjZSBwYXlsb2FkIGNhcHM6ICUi
IEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKKyAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBnc3Rf
Y2Fwc19nZXRfc3RydWN0dXJlKGNhcHMuZ2V0KCksIDApOworICAgIGlmIChjb25zdCBjaGFyKiBl
bmNvZGluZ05hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiZW5jb2Rp
bmctbmFtZSIpKSB7CisgICAgICAgIGlmICghZXF1YWwoZW5jb2RpbmdOYW1lLCAiT1BVUyIpKSB7
CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1fYmluLmdldCgpLCAiVW5zdXBwb3J0ZWQg
b3V0Z29pbmcgYXVkaW8gZW5jb2Rpbmc6ICVzIiwgZW5jb2RpbmdOYW1lKTsKKyAgICAgICAgICAg
IHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9FUlJP
Ul9PQkpFQ1QobV9iaW4uZ2V0KCksICJlbmNvZGluZy1uYW1lIG5vdCBmb3VuZCIpOworICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKGNvbnN0IGNoYXIqIHVzZUluYmFuZEZl
YyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJ1c2VpbmJhbmRmZWMiKSkg
eworICAgICAgICBpZiAoIXN0cmNtcCh1c2VJbmJhbmRGZWMsICIxIikpCisgICAgICAgICAgICBn
X29iamVjdF9zZXQobV9lbmNvZGVyLmdldCgpLCAiaW5iYW5kLWZlYyIsIHRydWUsIG51bGxwdHIp
OworICAgIH0KKworICAgIGlmIChjb25zdCBjaGFyKiBtaW5QVGltZSA9IGdzdF9zdHJ1Y3R1cmVf
Z2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJtaW5wdGltZSIpKSB7CisgICAgICAgIFN0cmluZyB0aW1l
KG1pblBUaW1lKTsKKyAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZUludGVnZXJBbGxvd2lu
Z1RyYWlsaW5nSnVuazxpbnQ2NF90Pih0aW1lKSkKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldCht
X3BheWxvYWRlci5nZXQoKSwgIm1pbi1wdGltZSIsICp2YWx1ZSAqIEdTVF9NU0VDT05ELCBudWxs
cHRyKTsKKyAgICB9CisKKyAgICBpbnQgcGF5bG9hZFR5cGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1
cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJwYXlsb2FkIiwgJnBheWxvYWRUeXBlKSkKKyAgICAgICAg
Z19vYmplY3Rfc2V0KG1fcGF5bG9hZGVyLmdldCgpLCAicHQiLCBwYXlsb2FkVHlwZSwgbnVsbHB0
cik7CisKKyAgICBnX29iamVjdF9zZXQobV9jYXBzRmlsdGVyLmdldCgpLCAiY2FwcyIsIGNhcHMu
Z2V0KCksIG51bGxwdHIpOworCisgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KG1fb3V0Z29pbmdT
b3VyY2UuZ2V0KCksIG1fdmFsdmUuZ2V0KCksIG1fYXVkaW9jb252ZXJ0LmdldCgpLCBtX2F1ZGlv
cmVzYW1wbGUuZ2V0KCksIG1fcHJlRW5jb2RlclF1ZXVlLmdldCgpLCBtX2VuY29kZXIuZ2V0KCks
IG1fcGF5bG9hZGVyLmdldCgpLCBtX3Bvc3RFbmNvZGVyUXVldWUuZ2V0KCksIG51bGxwdHIpOwor
ICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOWU4MWU1
YmM3ZWMzMDA0ZjQyMDBiM2VhNDBhODZkMjhiYjZmYjI2Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIgZmluYWwgOiBwdWJsaWMgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcj4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBhdWRp
b1NvdXJjZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIoV1RGTW92ZShhdWRpb1NvdXJjZSkpKTsgfQorCisgICAgYm9vbCBzZXRQYXls
b2FkVHlwZShHUmVmUHRyPEdzdENhcHM+JikgZmluYWw7CisKK3Byb3RlY3RlZDoKKyAgICBleHBs
aWNpdCBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoUmVmPE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlPiYmKTsKKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1f
YXVkaW9jb252ZXJ0OworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9hdWRpb3Jlc2FtcGxlOwor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjIyNjcyMGIyYjRiYzA4ODI3MjU4
M2MwNWU4MzIyMjI0MjI1ZjZhY2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDE0OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNp
bmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVN0cmVh
bVNvdXJjZS5oIgorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0
L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorCitHU1RfREVC
VUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmlu
ZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6UmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBtX2JpbiA9IGdzdF9i
aW5fbmV3KG51bGxwdHIpOworCisgICAgbV92YWx2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFr
ZSgidmFsdmUiLCBudWxscHRyKTsKKyAgICBtX3ByZUVuY29kZXJRdWV1ZSA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxscHRyKTsKKyAgICBtX3Bvc3RFbmNvZGVyUXVldWUg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1ZXVlIiwgbnVsbHB0cik7CisgICAgbV9jYXBz
RmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJjYXBzZmlsdGVyIiwgbnVsbHB0cik7
CisKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fdmFs
dmUuZ2V0KCksIG1fcHJlRW5jb2RlclF1ZXVlLmdldCgpLAorICAgICAgICBtX3Bvc3RFbmNvZGVy
UXVldWUuZ2V0KCksIG1fY2Fwc0ZpbHRlci5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBhdXRvIHNy
Y1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2NhcHNGaWx0ZXIu
Z2V0KCksICJzcmMiKSk7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChtX2Jpbi5nZXQoKSwgZ3N0
X2dob3N0X3BhZF9uZXcoInNyYyIsIHNyY1BhZC5nZXQoKSkpOworfQorCitSZWFsdGltZU91dGdv
aW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6On5SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXIoKQoreworICAgIHN0b3AoKTsKKworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX2Jp
bi5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgIGlmIChhdXRvIHBpcGVsaW5lID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9wYXJlbnQobV9iaW4uZ2V0KCkpKSkKKyAgICAgICAgZ3N0X2Jp
bl9yZW1vdmUoR1NUX0JJTl9DQVNUKHBpcGVsaW5lLmdldCgpKSwgbV9iaW4uZ2V0KCkpOworfQor
Cit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2V0U291cmNlKFJl
ZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBuZXdTb3VyY2UpCit7CisgICAgaWYgKG1fc291
cmNlICYmICFtX2luaXRpYWxTZXR0aW5ncykKKyAgICAgICAgbV9pbml0aWFsU2V0dGluZ3MgPSBt
X3NvdXJjZS52YWx1ZSgpLT5zZXR0aW5ncygpOworCisgICAgaWYgKG1fc291cmNlKQorICAgICAg
ICBtX3NvdXJjZS52YWx1ZSgpLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CisgICAgbV9zb3VyY2Ug
PSBXVEZNb3ZlKG5ld1NvdXJjZSk7CisgICAgaW5pdGlhbGl6ZUZyb21UcmFjaygpOworfQorCit2
b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c3RhcnQoKQoreworICAg
IG1fc291cmNlLnZhbHVlKCktPmFkZE9ic2VydmVyKCp0aGlzKTsKKyAgICBtX2lzU3RvcHBlZCA9
IGZhbHNlOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6
c3RvcCgpCit7CisgICAgaWYgKG1fc291cmNlKSB7CisgICAgICAgIG1fc291cmNlLnZhbHVlKCkt
PnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudCht
X291dGdvaW5nU291cmNlLmdldCgpLCBnc3RfZXZlbnRfbmV3X2VvcygpKTsKKworICAgICAgICBn
c3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fYmluLmdldCgpLCB0cnVlKTsKKyAgICAgICAg
Z3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIEdTVF9TVEFURV9O
VUxMKTsKKworICAgICAgICBpZiAobV93ZWJydGNTaW5rUGFkKSB7CisgICAgICAgICAgICBhdXRv
IHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2Jpbi5nZXQo
KSwgInNyYyIpKTsKKyAgICAgICAgICAgIGdzdF9wYWRfdW5saW5rKHNyY1BhZC5nZXQoKSwgbV93
ZWJydGNTaW5rUGFkLmdldCgpKTsKKworICAgICAgICAgICAgYXV0byBwYXJlbnQgPSBhZG9wdEdS
ZWYoZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1lbnQobV93ZWJydGNTaW5rUGFkLmdldCgpKSk7Cisg
ICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhcmVudC5nZXQoKSwgIlJlbW92aW5nIHBhZCAl
IiBHU1RfUFRSX0ZPUk1BVCwgbV93ZWJydGNTaW5rUGFkLmdldCgpKTsKKyAgICAgICAgICAgIGdz
dF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9wYWQocGFyZW50LmdldCgpLCBtX3dlYnJ0Y1NpbmtQ
YWQuZ2V0KCkpOworICAgICAgICB9CisKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9z
dGF0ZShtX2Jpbi5nZXQoKSwgZmFsc2UpOworICAgICAgICBtX3NvdXJjZS5yZXNldCgpOworICAg
IH0KKyAgICBtX2lzU3RvcHBlZCA9IHRydWU7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2VNdXRlZENoYW5nZWQoKQoreworICAgIGlmICghbV9z
b3VyY2UpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9tdXRlZCAhPSBtX3NvdXJjZS52
YWx1ZSgpLT5tdXRlZCgpKTsKKyAgICBtX211dGVkID0gbV9zb3VyY2UudmFsdWUoKS0+bXV0ZWQo
KTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJj
ZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX2VuYWJsZWQgPSBtX3NvdXJjZS52YWx1ZSgpLT5lbmFibGVkKCk7CisgICAgaWYg
KG1fdmFsdmUpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3ZhbHZlLmdldCgpLCAiZHJvcCIsICFt
X2VuYWJsZWQsIG51bGxwdHIpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJj
ZUdTdHJlYW1lcjo6aW5pdGlhbGl6ZUZyb21UcmFjaygpCit7CisgICAgbV9tdXRlZCA9IG1fc291
cmNlLnZhbHVlKCktPm11dGVkKCk7CisgICAgbV9lbmFibGVkID0gbV9zb3VyY2UudmFsdWUoKS0+
ZW5hYmxlZCgpOworICAgIG1fb3V0Z29pbmdTb3VyY2UgPSB3ZWJraXRNZWRpYVN0cmVhbVNyY05l
dygpOworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fb3V0Z29p
bmdTb3VyY2UuZ2V0KCkpOworICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkVHJhY2soV0VCS0lU
X01FRElBX1NUUkVBTV9TUkMobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSksIG1fc291cmNlLT5wdHIo
KSwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
OjpsaW5rKCkKK3sKKyAgICBnc3RfZWxlbWVudF9saW5rKG1fcG9zdEVuY29kZXJRdWV1ZS5nZXQo
KSwgbV9jYXBzRmlsdGVyLmdldCgpKTsKKworICAgIGF1dG8gc3JjUGFkID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYmluLmdldCgpLCAic3JjIikpOworICAgIGdzdF9w
YWRfbGluayhzcmNQYWQuZ2V0KCksIG1fd2VicnRjU2lua1BhZC5nZXQoKSk7CisgICAgZ3N0X2Vs
ZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChtX2Jpbi5nZXQoKSk7Cit9CisKK3ZvaWQgUmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTaW5rUGFkKGNvbnN0IEdSZWZQ
dHI8R3N0UGFkPiYgcGFkKQoreworICAgIG1fd2VicnRjU2lua1BhZCA9IHBhZDsKKyAgICBHUmVm
UHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiB0cmFuc2NlaXZlcjsKKyAgICBnX29iamVjdF9n
ZXQobV93ZWJydGNTaW5rUGFkLmdldCgpLCAidHJhbnNjZWl2ZXIiLCAmdHJhbnNjZWl2ZXIub3V0
UHRyKCksIG51bGxwdHIpOworICAgIGdfb2JqZWN0X2dldCh0cmFuc2NlaXZlci5nZXQoKSwgInNl
bmRlciIsICZtX3NlbmRlci5vdXRQdHIoKSwgbnVsbHB0cik7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY1ZTBiYzVhOTVmNWI3NGE1OTNhMmJkZmExMzU3MjMxOWFiODRiNTYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw4
NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9UaHJl
YWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI+LCBwdWJsaWMgTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIHsKK3B1YmxpYzoKKyAgICB+UmVhbHRpbWVPdXRn
b2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCk7CisKKyAgICB2b2lkIHN0YXJ0KCk7CisgICAgdm9p
ZCBzdG9wKCk7CisgICAgdm9pZCBzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
PiYmKTsKKyAgICBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYgc291cmNlKCkgY29uc3QgeyByZXR1
cm4gbV9zb3VyY2UtPmdldCgpOyB9CisKKyAgICBHUmVmUHRyPEdzdENhcHM+IGFsbG93ZWRDYXBz
KCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd2VkQ2FwczsgfQorCisgICAgdm9pZCBsaW5rKCk7Cisg
ICAgY29uc3QgR1JlZlB0cjxHc3RQYWQ+JiBwYWQoKSBjb25zdCB7IHJldHVybiBtX3dlYnJ0Y1Np
bmtQYWQ7IH0KKyAgICB2b2lkIHNldFNpbmtQYWQoY29uc3QgR1JlZlB0cjxHc3RQYWQ+Jik7CisK
KyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVyKCkgY29uc3QgeyByZXR1cm4g
bV9zZW5kZXI7IH0KKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGJpbigpIGNvbnN0IHsgcmV0dXJu
IG1fYmluOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2V0UGF5bG9hZFR5cGUoR1JlZlB0cjxHc3RD
YXBzPiYpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFs
dGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6
ZUZyb21UcmFjaygpOworCisgICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07CisgICAgYm9vbCBt
X211dGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBz
dGQ6Om9wdGlvbmFsPFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IG1fc291cmNlOworICAg
IHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2luaXRpYWxTZXR0
aW5nczsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYmluOworICAgIEdSZWZQdHI8R3N0RWxl
bWVudD4gbV9vdXRnb2luZ1NvdXJjZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmFsdmU7
CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ByZUVuY29kZXJRdWV1ZTsKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fZW5jb2RlcjsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGF5bG9h
ZGVyOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9wb3N0RW5jb2RlclF1ZXVlOworICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gbV9jYXBzRmlsdGVyOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9h
bGxvd2VkQ2FwczsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9zZW5kZXI7Cisg
ICAgR1JlZlB0cjxHc3RQYWQ+IG1fd2VicnRjU2lua1BhZDsKKworcHJpdmF0ZToKKyAgICB2b2lk
IHNvdXJjZU11dGVkQ2hhbmdlZCgpOworICAgIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKTsK
KworICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBBUEkKKyAgICB2b2lk
IHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgb3ZlcnJpZGUgeyBz
b3VyY2VNdXRlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgc291cmNlRW5hYmxlZENoYW5nZWQoKTsg
fQorICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUm
KSBvdmVycmlkZSB7IGluaXRpYWxpemVGcm9tVHJhY2soKTsgfQorICAgIHZvaWQgdHJhY2tFbmRl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgfQorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLmVjYzMzMDEwMDNkODlmOTI3Y2JlNzkzNDAzOGYwNjk3NWU3
ODA3M2MKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApA
QCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEg
Uy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFt
ZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJr
aXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtp
dF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNlKQorICAgIDog
UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICByZWdpc3Rlcldl
YktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CisKKyAgICBtX3ZpZGVvQ29udmVydCA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252ZXJ0IiwgbnVsbHB0cik7CisgICAgbV9lbmNvZGVy
ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3ZWJydGN2aWRlb2VuY29kZXIiLCBudWxscHRy
KTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fdmlk
ZW9Db252ZXJ0LmdldCgpLCBtX2VuY29kZXIuZ2V0KCksIG51bGxwdHIpOworCisgICAgYXV0byog
cGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9nZXRfcGFkX3RlbXBsYXRlKG1fZW5jb2Rlci5nZXQo
KSwgInNyYyIpOworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX3RlbXBsYXRlX2dl
dF9jYXBzKHBhZFRlbXBsYXRlKSk7CisgICAgbV9hbGxvd2VkQ2FwcyA9IGFkb3B0R1JlZihnc3Rf
Y2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZ3N0X2NhcHNfZm9yZWFjaChjYXBzLmdldCgpLCByZWlu
dGVycHJldF9jYXN0PEdzdENhcHNGb3JlYWNoRnVuYz4oK1tdKEdzdENhcHNGZWF0dXJlcyosIEdz
dFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBhdXRv
KiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGdzdF9zdHJ1
Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKKyAgICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdO
YW1lID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LXZwOCIpKQor
ICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIlZQOCI7CisgICAgICAgIGVsc2UgaWYgKGVxdWFs
KG5hbWUsICJ2aWRlby94LXZwOSIpKQorICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIlZQOSI7
CisgICAgICAgIGVsc2UgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LWgyNjQiKSkKKyAgICAgICAg
ICAgIGVuY29kaW5nTmFtZSA9ICJIMjY0IjsKKyAgICAgICAgaWYgKGVuY29kaW5nTmFtZSkKKyAg
ICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUoc291cmNlLT5tX2FsbG93ZWRDYXBz
LmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGljYXRpb24veC1ydHAiLCAibWVkaWEiLCBH
X1RZUEVfU1RSSU5HLCAidmlkZW8iLCAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGVu
Y29kaW5nTmFtZSwgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCA5MDAwMCwgbnVsbHB0cikpOwor
ICAgIH0pLCB0aGlzKTsKKworICAgIHNldFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkpOworfQorCiti
b29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUo
R1JlZlB0cjxHc3RDYXBzPiYgY2FwcykKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fYmluLmdl
dCgpLCAiT3V0Z29pbmcgdmlkZW8gc291cmNlIHBheWxvYWQgY2FwczogJSIgR1NUX1BUUl9GT1JN
QVQsIGNhcHMuZ2V0KCkpOworICAgIGF1dG8qIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1
Y3R1cmUoY2Fwcy5nZXQoKSwgMCk7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBlbmNvZGVyQ2FwczsK
KyAgICBpZiAoY29uc3QgY2hhciogZW5jb2RpbmdOYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3Ry
aW5nKHN0cnVjdHVyZSwgImVuY29kaW5nLW5hbWUiKSkgeworICAgICAgICBpZiAoZXF1YWwoZW5j
b2RpbmdOYW1lLCAiVlA4IikpIHsKKyAgICAgICAgICAgIGVuY29kZXJDYXBzID0gYWRvcHRHUmVm
KGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtdnA4IikpOworICAgICAgICAgICAg
bV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwdnA4cGF5IiwgbnVsbHB0cik7
CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiVlA5IikpIHsKKyAgICAg
ICAgICAgIGVuY29kZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUo
InZpZGVvL3gtdnA5IikpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVy
RWxlbWVudCgicnRwdnA5cGF5IiwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwo
ZW5jb2RpbmdOYW1lLCAiSDI2NCIpKSB7CisgICAgICAgICAgICBlbmNvZGVyQ2FwcyA9IGFkb3B0
R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LWgyNjQiKSk7CisgICAgICAg
ICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJydHBoMjY0cGF5IiwgbnVs
bHB0cik7CisgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Au
b3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1nb29kLy0vaXNzdWVzLzg5MworICAgICAgICAgICAg
Ly8gZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1QobV9wYXlsb2FkZXIuZ2V0KCkpLCAi
YWdncmVnYXRlLW1vZGUiLCAiemVyby1sYXRlbmN5Iik7CisgICAgICAgICAgICAvLyBnX29iamVj
dF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwiLCAtMSwgbnVsbHB0cik7
CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1fYmluLmdl
dCgpLCAiVW5zdXBwb3J0ZWQgb3V0Z29pbmcgdmlkZW8gZW5jb2Rpbmc6ICVzIiwgZW5jb2RpbmdO
YW1lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJlbmNvZGluZy1uYW1lIG5v
dCBmb3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX3Bh
eWxvYWRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFJlLWVuYWJs
ZSB0aGlzLiBDdXJyZW50bHkgdHJpZ2dlcnMgY2FwcyBuZWdvdGlhdGlvbiBlcnJvci4KKyAgICBn
X29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJhdXRvLWhlYWRlci1leHRlbnNpb24iLCBG
QUxTRSwgbnVsbHB0cik7CisKKyAgICBnX29iamVjdF9zZXQobV9lbmNvZGVyLmdldCgpLCAiZm9y
bWF0IiwgZW5jb2RlckNhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgaW50IHBheWxvYWRUeXBl
OworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAicGF5bG9hZCIsICZw
YXlsb2FkVHlwZSkpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwgInB0
IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIpOworCisgICAgYXV0byBmaWx0ZXJlZENhcHMgPSBhZG9w
dEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSksIG51
bGxwdHIpKTsKKyAgICBnX29iamVjdF9zZXQobV9jYXBzRmlsdGVyLmdldCgpLCAiY2FwcyIsIGZp
bHRlcmVkQ2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NB
U1QobV9iaW4uZ2V0KCkpLCBtX3BheWxvYWRlci5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfbGlu
a19tYW55KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIG1fdmFsdmUuZ2V0KCksIG1fdmlkZW9Db252
ZXJ0LmdldCgpLCBtX3ByZUVuY29kZXJRdWV1ZS5nZXQoKSwKKyAgICAgICAgbV9lbmNvZGVyLmdl
dCgpLCBtX3BheWxvYWRlci5nZXQoKSwgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBudWxscHRy
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
R1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjZk
NGNiZTY5NTQzOTA2Yjc5NDAxM2FjNmM4M2M5ZjFjNmZjZDlmOQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlR1N0cmVhbWVyIGZpbmFsIDogcHVibGljIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJj
ZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXI+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYg
c291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lcihXVEZNb3ZlKHNvdXJjZSkpKTsgfQorCisgICAgdm9pZCBzZXRBcHBseVJvdGF0
aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSBz
aG91bGRBcHBseVJvdGF0aW9uOyB9CisKKyAgICBib29sIHNldFBheWxvYWRUeXBlKEdSZWZQdHI8
R3N0Q2Fwcz4mKSBmaW5hbDsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYp
OworCisgICAgYm9vbCBtX3Nob3VsZEFwcGx5Um90YXRpb24geyBmYWxzZSB9OworCitwcml2YXRl
OgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92aWRlb0NvbnZlcnQ7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCBhN2YwYzFhMWRjYmZmYWQ0OTliYjhkNDVl
YmMxNDIyZWY4YmEzMmQwLi40MzRiZWI4Y2Y1ZWU1ZDU1MjZhYjVjYzc5MjVkNDc5OWM3ZDAwOGIx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC01OTYsNiArNTk2LDkgQEAg
dm9pZCBJbnRlcm5hbHM6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoUGFnZSYgcGFnZSkKICAgICBy
dGNQcm92aWRlci5zZXRIMjY1U3VwcG9ydCh0cnVlKTsKICAgICBydGNQcm92aWRlci5zZXRWUDlT
dXBwb3J0KHRydWUsIHRydWUpOwogICAgIHJ0Y1Byb3ZpZGVyLmNsZWFyRmFjdG9yeSgpOworI2Vs
aWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisgICAgcGFnZS5zZXR0aW5ncygpLnNldFdlYlJUQ0Vu
Y3J5cHRpb25FbmFibGVkKHRydWUpOworICAgIHBhZ2Uuc2V0dGluZ3MoKS5zZXRQZWVyQ29ubmVj
dGlvbkVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYKIAogICAgIHBhZ2Uuc2V0RnVsbHNjcmVlbkF1dG9I
aWRlRHVyYXRpb24oMF9zKTsKQEAgLTE2MDksNiArMTYxMiw3IEBAIHZvaWQgSW50ZXJuYWxzOjph
cHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoUlRDUGVlckNvbm5lY3Rpb24mIGNv
bm5lY3RpCiB7CiAgICAgY29ubmVjdGlvbi5hcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1Nv
dXJjZXMoKTsKIH0KKwogdm9pZCBJbnRlcm5hbHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KGJvb2wg
dmFsdWUpCiB7CiAjaWYgVVNFKExJQldFQlJUQykKQEAgLTE2MTYsNiArMTYyMCw4IEBAIHZvaWQg
SW50ZXJuYWxzOjpzZXRXZWJSVENIMjY1U3VwcG9ydChib29sIHZhbHVlKQogICAgICAgICBwYWdl
LT5saWJXZWJSVENQcm92aWRlcigpLnNldEgyNjVTdXBwb3J0KHZhbHVlKTsKICAgICAgICAgcGFn
ZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KIApAQCAtMTYyNiw2ICsxNjMyLDkgQEAg
dm9pZCBJbnRlcm5hbHM6OnNldFdlYlJUQ1ZQOVN1cHBvcnQoYm9vbCBzdXBwb3J0VlA5UHJvZmls
ZTAsIGJvb2wgc3VwcG9ydFZQOVByb2YKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIo
KS5zZXRWUDlTdXBwb3J0KHN1cHBvcnRWUDlQcm9maWxlMCwgc3VwcG9ydFZQOVByb2ZpbGUyKTsK
ICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdXBwb3J0VlA5UHJvZmlsZTApOworICAgIFVOVVNF
RF9QQVJBTShzdXBwb3J0VlA5UHJvZmlsZTIpOwogI2VuZGlmCiB9CiAKQEAgLTE2MzYsNiArMTY0
NSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRXZWJSVENWUDlWVEJTdXBwb3J0KGJvb2wgdmFsdWUp
CiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0VlA5VlRCU3VwcG9ydCh2YWx1
ZSk7CiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2
NzYsNiArMTY4Nyw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRFbmFibGVXZWJSVENFbmNyeXB0aW9u
KGJvb2wgdmFsdWUpCiAjaWYgVVNFKExJQldFQlJUQykKICAgICBpZiAoYXV0byogcGFnZSA9IGNv
bnRleHREb2N1bWVudCgpLT5wYWdlKCkpCiAgICAgICAgIHBhZ2UtPnNldHRpbmdzKCkuc2V0V2Vi
UlRDRW5jcnlwdGlvbkVuYWJsZWQodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2ODYsNiArMTY5OSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpz
ZXRVc2VEVExTMTAoYm9vbCB1c2VEVExTMTApCiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1l
bnQtPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGRvY3VtZW50LT5wYWdlKCktPmxpYldl
YlJUQ1Byb3ZpZGVyKCkuc2V0VXNlRFRMUzEwKHVzZURUTFMxMCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTSh1c2VEVExTMTApOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFr
ZS9GaW5kR1N0cmVhbWVyLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UK
aW5kZXggOWQ5N2E0YjUwY2IwZjk4MGY1Yjg0MDU3YzJiYWVlODk5Nzk5ZGY2Ni4uNDg2MjU1N2E5
OWIzNTkyZTAwMTllNzZiMjhhZTU1MWFjZDg5NDVmMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtl
L0ZpbmRHU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21h
a2UKQEAgLTI2LDYgKzI2LDkgQEAKICMgIGdzdHJlYW1lci12aWRlbzogICAgICBHU1RSRUFNRVJf
VklERU9fSU5DTFVERV9ESVJTIGFuZCBHU1RSRUFNRVJfVklERU9fTElCUkFSSUVTCiAjICBnc3Ry
ZWFtZXItY29kZWNwYXJzZXI6R1NUUkVBTUVSX0NPREVDUEFSU0VSU19JTkNMVURFX0RJUlMgYW5k
IEdTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfTElCUkFSSUVTCiAjICBnc3RyZWFtZXItZnVsbDogICAg
ICAgR1NUUkVBTUVSX0ZVTExfSU5DTFVERV9ESVJTIGFuZCBHU1RSRUFNRVJfRlVMTF9MSUJSQVJJ
RVMKKyMgIGdzdHJlYW1lci1ydHA6ICAgICAgICBHU1RSRUFNRVJfUlRQX0lOQ0xVREVfRElSUyBh
bmQgR1NUUkVBTUVSX1JUUF9MSUJSQVJJRVMKKyMgIGdzdHJlYW1lci1zZHA6ICAgICAgICBHU1RS
RUFNRVJfU0RQX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1NEUF9MSUJSQVJJRVMKKyMgIGdz
dHJlYW1lci13ZWJydGM6ICAgICBHU1RSRUFNRVJfV0VCUlRDX0lOQ0xVREVfRElSUyBhbmQgR1NU
UkVBTUVSX1dFQlJUQ19MSUJSQVJJRVMKICMKICMgQ29weXJpZ2h0IChDKSAyMDEyIFJhcGhhZWwg
S3VibyBkYSBDb3N0YSA8cmFrdWNvQHdlYmtpdC5vcmc+CiAjCkBAIC0xMDYsNiArMTA5LDkgQEAg
RklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9QQlVUSUxTIGdzdHJlYW1lci1wYnV0
aWxzLTEuMCBnc3RwYnV0aWxzLTEuMCkKIEZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFN
RVJfVEFHIGdzdHJlYW1lci10YWctMS4wIGdzdHRhZy0xLjApCiBGSU5EX0dTVFJFQU1FUl9DT01Q
T05FTlQoR1NUUkVBTUVSX1ZJREVPIGdzdHJlYW1lci12aWRlby0xLjAgZ3N0dmlkZW8tMS4wKQog
RklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9DT0RFQ1BBUlNFUlMgZ3N0cmVhbWVy
LWNvZGVjcGFyc2Vycy0xLjAgZ3N0Y29kZWNwYXJzZXJzLTEuMCkKK0ZJTkRfR1NUUkVBTUVSX0NP
TVBPTkVOVChHU1RSRUFNRVJfUlRQIGdzdHJlYW1lci1ydHAtMS4wIGdzdHJ0cC0xLjApCitGSU5E
X0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX1NEUCBnc3RyZWFtZXItc2RwLTEuMCBnc3Rz
ZHAtMS4wKQorRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9XRUJSVEMgZ3N0cmVh
bWVyLXdlYnJ0Yy0xLjAgZ3N0d2VicnRjLTEuMCkKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMgMy4gUHJvY2VzcyB0aGUgQ09NUE9ORU5UUyBw
YXNzZWQgdG8gRklORF9QQUNLQUdFCkBAIC0xNDgsNCArMTU0LDYgQEAgbWFya19hc19hZHZhbmNl
ZCgKICAgICBHU1RSRUFNRVJfQ09ERUNQQVJTRVJTX0xJQlJBUklFUwogICAgIEdTVFJFQU1FUl9G
VUxMX0lOQ0xVREVfRElSUwogICAgIEdTVFJFQU1FUl9GVUxMX0xJQlJBUklFUworICAgIEdTVFJF
QU1FUl9XRUJSVENfSU5DTFVERV9ESVJTCisgICAgR1NUUkVBTUVSX1dFQlJUQ19MSUJSQVJJRVMK
ICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UgYi9Tb3Vy
Y2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlCmluZGV4IDc3ZTk1ODQ1ZTk5MTNhNTk3OGRh
ZDEwY2ZjNDMwMDkzYjQzYzdhYTMuLmM4ZDBmYWZiMjNmYjE4ZmM1OWI5MWUwY2UwNGMxNGVlNDU5
YjI0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UKKysr
IGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZQpAQCAtMjgsNiArMjgsMTAgQEAg
aWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgICAgICAgICAgICBsaXN0
KEFQUEVORCBHU1RSRUFNRVJfQ09NUE9ORU5UUyBhdWRpbyBmZnQpCiAgICAgICAgICAgZW5kaWYg
KCkKIAorICAgICAgICAgIGlmIChVU0VfR1NUUkVBTUVSX1dFQl9SVEMpCisgICAgICAgICAgICAg
IGxpc3QoQVBQRU5EIEdTVFJFQU1FUl9DT01QT05FTlRTIHdlYnJ0YykKKyAgICAgICAgICBlbmRp
ZiAoKQorCiAgICAgICAgICAgZmluZF9wYWNrYWdlKEdTdHJlYW1lciAxLjE0LjAgUkVRVUlSRUQg
Q09NUE9ORU5UUyAke0dTVFJFQU1FUl9DT01QT05FTlRTfSkKIAogICAgICAgICAgIGlmIChFTkFC
TEVfV0VCX0FVRElPKQpAQCAtNDksMTEgKzUzLDIxIEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5B
QkxFX1dFQl9BVURJTykKICAgICAgICAgICBpZiAoVVNFX0dTVFJFQU1FUl9HTCBBTkQgTk9UIFBD
X0dTVFJFQU1FUl9HTF9GT1VORCkKICAgICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAi
R1N0cmVhbWVyR0wgaXMgbmVlZGVkIGZvciBVU0VfR1NUUkVBTUVSX0dMLiIpCiAgICAgICAgICAg
ZW5kaWYgKCkKKworICAgICAgICAgIGlmIChVU0VfR1NUUkVBTUVSX1dFQlJUQyBBTkQgKFBDX0dT
VFJFQU1FUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAiMS4yMCIgT1IgTk9UIFBDX0dTVFJFQU1FUl9X
RUJSVENfRk9VTkQpKQorICAgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJHU3RyZWFt
ZXJXZWJSVEMgPj0gMS4yMCBpcyBuZWVkZWQgZm9yIFVTRV9HU1RSRUFNRVJfV0VCUlRDLiIpCisg
ICAgICAgICAgZW5kaWYgKCkKICAgICAgIGVuZGlmICgpCiBlbmRpZiAoKQogCiBpZiAoRU5BQkxF
X01FRElBX1NUUkVBTSBBTkQgRU5BQkxFX1dFQl9SVEMpCi0gICAgU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoVVNFX0xJQldFQlJUQyBUUlVFKQorICAgIGlmIChVU0VfR1NUUkVBTUVSX1dFQlJUQykK
KyAgICAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0xJQldFQlJUQyBGQUxTRSkKKwor
ICAgICAgICBmaW5kX3BhY2thZ2UoT3BlblNTTCBSRVFVSVJFRCkKKyAgICBlbHNlICgpCisgICAg
ICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJSVEMgVFJVRSkKKyAgICBlbmRp
ZiAoKQogZWxzZSAoKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJSVEMg
RkFMU0UpCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmlu
aXRpb25zLmNtYWtlIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlCmlu
ZGV4IDFmMWEyMTNjMjEwMTBkMzJhY2MxN2ZiOTFjYjUyMGMxYmQyMzhlYWIuLjJmMzAwYTA3MDY0
ODkxZjY3NmVjYWM1ZDJlYWZkN2NjODU2ODkyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9H
U3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVm
aW5pdGlvbnMuY21ha2UKQEAgLTEwLDMgKzEwLDQgQEAgV0VCS0lUX09QVElPTl9ERUZJTkUoVVNF
X0dTVFJFQU1FUl9GVUxMICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBzdGF0aWMgR1MK
IFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJfTkFUSVZFX1ZJREVPICJUb2dnbGUg
bmF0aXZlIHZpZGVvIHN1cHBvcnQgaW4gR1N0cmVhbWVyIG1lZGlhIHBsYXllciIgUFJJVkFURSBP
RkYpCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX05BVElWRV9BVURJTyAiVG9n
Z2xlIG5hdGl2ZSBhdWRpbyBzdXBwb3J0IGluIEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIiIFBSSVZB
VEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9URVhUX1NJTksgIlRv
Z2dsZSB0ZXh0IHNpbmsgc3VwcG9ydCBpbiBHU3RyZWFtZXIgbWVkaWEgcGxheWVyIiBQUklWQVRF
IE9OKQorV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9XRUJSVEMgIldoZXRoZXIg
dG8gZW5hYmxlIHN1cHBvcnQgZm9yIFdlYlJUQyIgUFJJVkFURSBPTikKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0
cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlCmluZGV4IGY0MmM3ZTcwNjk3N2JmMTZjOWYyOWJmM2Rl
MzA4YzVlOTY4MDI5OTYuLjA5YjZjMjVlOGQ1OTJkNTg4NGU4OTQ2YmE2YWY1OGQyZmRiMTYxOWQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2UKKysr
IGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVuZGVuY2llcy5jbWFrZQpAQCAtMSwzICsxLDQg
QEAKIFdFQktJVF9PUFRJT05fREVQRU5EKFVTRV9HU1RSRUFNRVJfR0wgRU5BQkxFX1ZJREVPKQog
V0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX0dTVFJFQU1FUl9NUEVHVFMgRU5BQkxFX1ZJREVPKQog
V0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX1dQRV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRiBV
U0VfR1NUUkVBTUVSX0dMKQorV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX0dTVFJFQU1FUl9XRUJS
VEMgRU5BQkxFX1dFQl9SVEMpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9D
aGFuZ2VMb2cKaW5kZXggOWIzZTA4YmQ5ODM3NDhkYzIxNjFhZGNhOTc4YzAyNjA3Y2NjMmMzMy4u
ZmIyMmFhNTY5MGQ3M2Y3M2M3ZjBjNWYxNTQ5M2FmZDNlMzZhZmY0ZiAxMDA2NDQKLS0tIGEvVG9v
bHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIy
LTAyLTEyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAg
ICBbR1N0cmVhbWVyXSBJbml0aWFsIGltcG9ydCBvZiB0aGUgR3N0V2ViUlRDIGJhY2tlbmQKKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU0MAorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmxhdHBhay9m
bGF0cGFrdXRpbHMucHk6CisgICAgICAgIChXZWJraXRGbGF0cGFrLnJ1bl9pbl9zYW5kYm94KTog
QWxsb3cgbGlibmljZSBkZWJ1ZyBsb2cgZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gcnVudGltZSBz
YW5kYm94LgorCiAyMDIyLTAyLTEyICBKb25hdGhhbiBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNv
bT4KIAogICAgICAgICBbcnVuLXdlYmtpdC10ZXN0c10gRG8gbm90IHRyeSBhbmQgcmVhZCBmcm9t
IC9kZXYvbnVsbApkaWZmIC0tZ2l0IGEvVG9vbHMvZmxhdHBhay9mbGF0cGFrdXRpbHMucHkgYi9U
b29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQppbmRleCAwNzU2YjA5ZWNlNWVmYmIxY2E3YjU5
YTMyYTZiODc3NGNjYTczYTRkLi5hYjU3YjUzOTQzYmQ4ZTViNmIzMGE5YjU2MDM1NDIwNTE0NzU4
ODVkIDEwMDY0NAotLS0gYS9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQorKysgYi9Ub29s
cy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQpAQCAtODM4LDYgKzgzOCw3IEBAIGNsYXNzIFdlYmtp
dEZsYXRwYWs6CiAgICAgICAgICAgICAiTUVTQSIsCiAgICAgICAgICAgICAiTElCR0wiLAogICAg
ICAgICAgICAgIlBJUEVXSVJFIiwKKyAgICAgICAgICAgICJOSUNFIiwKICAgICAgICAgICAgICJS
VVNUIiwKICAgICAgICAgICAgICJTQ0NBQ0hFIiwKICAgICAgICAgICAgICJTUEEiLApkaWZmIC0t
Z2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDNiZTA3MjQ1ZDFlZmVmYTA0Y2QxY2RlNDk5OGMwNjRlYmNkNWFjMDguLjIyOTlmZDA3YzI0ZTgw
Y2Q2ZWIyYjdhZDM0MTQ2MTM1YTdjNTFlZDkgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5n
ZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMi0w
Mi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNrZW5kCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2ds
aWIvVGVzdEV4cGVjdGF0aW9uczogRmxhZyBtb3N0IFdlYlJUQyBhcyBmYWlsaW5nLiBEdXJpbmcg
dGhpcyBmaXJzdCBkZXZlbG9wbWVudAorICAgICAgICBjeWNsZSBJIGZvY3VzZWQgbW9zdGx5IG9u
IGZpeGluZyBjcmFzaGVzIGFuZCBvbmx5IGZpeGVkIGEgZmV3IGZhaWx1cmVzLiBUaGUgcmVtYWlu
aW5nIG9uZXMKKyAgICAgICAgd2lsbCBiZSBhZHJlc3NlZCBpbiBmb2xsb3ctdXAgcGF0Y2hlcy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVEZXNjcmlw
dGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9t
ZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1l
eHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAy
Mi0wMi0xMiAgVGltIE5ndXllbiAgPG50aW1AYXBwbGUuY29tPgogCiAgICAgICAgIFNraXAgaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy91cmwvdG9hc2NpaS53aW5kb3cuaHRtbCBvbiBD
YXRhbGluYS9CaWcgU3VyCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rl
c3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlv
bnMKaW5kZXggNzQ2NTQzY2JiOTMyYmE4ZjRkZThkYTQ4NDc4ZTMwNGVhN2Q3ODZiYS4uZmVmN2M3
NDVjOTQ1YjNjMzQyNzJkOWMzYjA5OGQ1ZTk3ZmZhNTA2MyAxMDA2NDQKLS0tIGEvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtODU0LDcgKzg1NCw3IEBAIHdlYmtpdC5vcmcv
Yi8yMzE4MTEgbWVkaWEvdmlkZW8tY29uY3VycmVudC1wbGF5YmFjay5odG1sIFsgRmFpbHVyZSBd
CiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLWludGVycnVwdGlvbi13aXRoLXJlc3Vt
ZS1ub3QtYWxsb3dpbmctcGxheS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMxODEx
IG1lZGlhL3ZpZGVvLW11bHRpcGxlLWNvbmN1cnJlbnQtcGxheWJhY2suaHRtbCBbIEZhaWx1cmUg
XQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS93ZWJhdWRpby1iYWNrZ3JvdW5kLXBsYXliYWNr
Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMzE4MTEgd2VicnRjL2NvbmN1cnJlbnRW
aWRlb1BsYXliYWNrMi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxODExIHdlYmtp
dC5vcmcvYi8yMzU4ODUgd2VicnRjL2NvbmN1cnJlbnRWaWRlb1BsYXliYWNrMi5odG1sIFsgRmFp
bHVyZSBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvbWVkaWEtc2Vzc2lvbi9j
YWxsQWN0aW9uSGFuZGxlci5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1l
ZGlhL21lZGlhLXNlc3Npb24vcGxheS1hZnRlci1zZWVrLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtp
dC5vcmcvYi8yMzE4MTEgbWVkaWEvcmVtb3RlLWNvbnRyb2wtY29tbWFuZC1pcy11c2VyLWdlc3R1
cmUuaHRtbCBbIFRpbWVvdXQgXQpAQCAtODY3LDEwICs4NjcsMTAgQEAgd2Via2l0Lm9yZy9iLzIz
MTgxMSBtZWRpYS92aWRlby1zeXN0ZW0tc2xlZXAuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9y
Zy9iLzIzMTgxMSB3ZWJhdWRpby9hdWRpb2NvbnRleHQtc3RhdGUtaW50ZXJydXB0ZWQuaHRtbCBb
IFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSB3ZWJhdWRpby9zdXNwZW5kLWNvbnRleHQt
d2hpbGUtaW50ZXJydXB0ZWQuaHRtbCBbIFRpbWVvdXQgXQogCisjIHJ2ZmMgcmVsYXRlZCBmYWls
dXJlcwogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1ydmZjIFsgUGFzcyBd
CiBmYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS1ydmZjLmh0bWwgWyBQYXNzIEZhaWx1cmUg
XQogd2VicnRjL3BlZXJDb25uZWN0aW9uLXJ2ZmMuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL2Nh
bnZhcy10by1wZWVyLWNvbm5lY3Rpb24uaHRtbCBbIEZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy92aWRlby1ydmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2st
d2VicnRjLmh0dHBzLmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvdmlkZW8tcnZmYy9yZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWJlZm9yZS14ci1zZXNz
aW9uLmh0dHBzLmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
dmlkZW8tcnZmYy9yZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWR1cmluZy14ci1zZXNzaW9u
Lmh0dHBzLmh0bWwgWyBTa2lwIF0KQEAgLTg4OCw2ICs4ODgsOTUgQEAgd2Via2l0Lm9yZy9iLzIz
NDA4NCBtZWRpYS90cmFjay9hdWRpby10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJl
IF0KICMgYml0cmF0ZSBlc3RpbWF0aW9uLgogd2Via2l0Lm9yZy9iLzIzNDA4NCBtZWRpYS90cmFj
ay92aWRlby10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIAorIyBEYXRhQ2hh
bm5lbCBHc3RXZWJSVEMgaW1wbGVtZW50YXRpb24gaW5jb21wbGV0ZQord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvZGF0YWNoYW5uZWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0
cC93cHQvd2VicnRjL3RyYW5zZmVyLWRhdGFjaGFubmVsLXNlcnZpY2Utd29ya2VyLmh0dHBzLmh0
bWwgWyBTa2lwIF0KKworIyBUaGUgR3N0V2ViUlRDIGJhY2tlbmQgZG9lc24ndCBzdXBwb3J0IHRy
YW5zZm9ybXMgeWV0Lgord2Via2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93ZWJydGMvYXVkaW92
aWRlby1zY3JpcHQtdHJhbnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
aHR0cC93cHQvd2VicnRjL3ZpZGVvLXNjcmlwdC10cmFuc2Zvcm0ta2V5ZnJhbWUtb25seS5odG1s
IFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy92aWRlby1zY3Jp
cHQtdHJhbnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2NyaXB0LWF1
ZGlvLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3JtL3Nj
cmlwdC1jaGFuZ2UtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8y
MzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFu
c2Zvcm0vc2NyaXB0LW1ldGFkYXRhLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVu
Y29kZWQtdHJhbnNmb3JtL3NjcmlwdC10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1l
bmNvZGVkLXRyYW5zZm9ybS9zY3JpcHQtd3JpdGUtdHdpY2UtdHJhbnNmb3JtLmh0dHBzLmh0bWwg
WyBTa2lwIF0KKword2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLWFkZEljZUNhbmRpZGF0ZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tYWRkVHJhY2stcmV1c2Ut
c2VuZGVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLWxvY2FsLW9mZmVyLmh0bWwgWyBDcmFzaCBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taGF2
ZS1sb2NhbC1wcmFuc3dlci5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhhdmUtcmVtb3RlLW9mZmVyLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi1oYXZlLXJlbW90ZS1wcmFuc3dlci5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9i
LzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWljZWNhbmRpZGF0ZS1l
dmVudC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1hbnN3ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3Bl
Y3Qtb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLWNhbGxiYWNrcy1zaW5nbGUtZGlh
bG9nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9nLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi1tZWRpYS1zZXR1cC10d28tZGlhbG9ncy5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9i
LzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXBhZ2UtY2FjaGUuaHRt
bCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1yZW1vdGVseS1hc3NpZ25lZC10cmFuc2NlaXZlci1taWQuaHRtbCBbIFRpbWVv
dXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLXNldExvY2FsRGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRzU2VsZWN0
b3IuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFt
L2NoYW5nZS10cmFja3MtbWVkaWEtc3RyZWFtLWJlaW5nLXBsYXllZC5odG1sIFsgVGltZW91dCBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy90aGlyZC1wYXJ0eS1mcmFtZS1p
Y2UtY2FuZGlkYXRlLWZpbHRlcmluZy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWV4dGVuc2lvbnMvUlRD
UnRwUGFyYW1ldGVycy1tYXhGcmFtZXJhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1leHRlbnNpb25z
L1JUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZS1jYXB0dXJlVGltZXN0YW1wLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJydGMtcHJpb3JpdHkvUlRDUnRwUGFyYW1ldGVycy1lbmNvZGluZ3MuaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbnNwZWN0b3IvcGFnZS9vdmVycmlkZVNldHRpbmct
SUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtY2FwYWJpbGl0
aWVzL2RlY29kaW5nSW5mby53ZWJydGMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLWNhcGFiaWxpdGllcy9l
bmNvZGluZ0luZm8ud2VicnRjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL2FkZFRyYW5zY2VpdmVyLXRoZW4tYWRkVHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tbXV0ZWQtc3RhdHMuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0aW9uLWc3MjIu
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVlci1j
b25uZWN0aW9uLXdlYmF1ZGlvLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL2F1ZGlvLXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvYXVkaW8tc2FtcGxlcmF0ZS1jaGFuZ2UuaHRtbCBbIENyYXNoIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2F1ZGlvLXZpZGVvLWVsZW1lbnQtcGxheWluZy5odG1s
IFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jYW5kaWRhdGUtc3RhdHMu
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FudmFzLXRvLXBl
ZXItY29ubmVjdGlvbi5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy9jbG9uZS1hdWRpby10cmFjay5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IHdlYnJ0Yy9jbG9zaW5nLXBlZXJjb25uZWN0aW9uLmh0bWwgWyBUaW1lb3V0IF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2RpcmVjdGlvbi1jaGFuZ2UuaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGlzYWJsZS1lbmNyeXB0aW9uLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2VwaGVtZXJhbC1jZXJ0aWZp
Y2F0ZXMtYW5kLWNuYW1lcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1hZnRlci1yZWxvYWQuaHRtbCBbIFRpbWVvdXQg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvaDI2NC1wYWNrZXRpemF0aW9uLW1vZGUuaHRt
bCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvbGlid2VicnRjL3NldExv
Y2FsRGVzY3JpcHRpb25DcmFzaC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy9tdWx0aS12aWRlby5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy9uby1wb3J0LXplcm8taW4tdXBkLWNhbmRpZGF0ZXMuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLWF1ZGlvLW11dGUuaHRt
bCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9u
LWF1ZGlvLW11dGUyLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3BlZXItY29ubmVjdGlvbi1hdWRpby11bm11dGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLWNyZWF0ZU1lZGlhU3RyZWFtRGVzdGlu
YXRpb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1j
b25uZWN0aW9uLXJlbW90ZS1hdWRpby1tdXRlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0ZTIuaHRtbCBb
IFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLXRy
YWNrLWVuZC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVy
Y29ubmVjdGlvbi1wYWdlLWNhY2hlLWxvbmcuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvcGVlcmNvbm5lY3Rpb24tcGFnZS1jYWNoZS5odG1sIFsgVGltZW91dCBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZWNlaXZlci10cmFjay1zaG91bGQtc3RheS1s
aXZlLWV2ZW4taWYtcmVjZWl2ZXItaXMtaW5hY3RpdmUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcmVsZWFzZS1hZnRlci1nZXR0aW5nLXRyYWNrLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3JlbW90ZUF1ZGlvLW5ldmVyLXBs
YXllZC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZW1vdmUt
dHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdXRmOC1z
ZHAuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tYWRk
VHJhbnNjZWl2ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMv
dmlkZW8tYXV0b3BsYXkuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJy
dGMvdmlkZW8tZ2V0UGFyYW1ldGVycy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy92aWRlby1tZWRpYXN0cmVhbXRyYWNrLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW11dGUtdnA4Lmh0bWwgWyBUaW1lb3V0
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW11dGUuaHRtbCBbIFRpbWVvdXQg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVjZWl2ZXJzLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlcGxhY2UtdHJhY2stdG8t
bnVsbC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1y
ZXBsYWNlLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3ZpZGVvLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3ZpZGVvLXVubXV0ZS5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMv
dmlkZW8tdnA4LXZpZGVvcmFuZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSB3ZWJydGMvdmlkZW8uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJy
dGMvdnA4LXRoZW4taDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy92cDktc3ZjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3ZwOS5odG1sIFsgRmFpbHVyZSBdCisKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CiAjIEVuZCBvZiBHU3RyZWFtZXItcmVsYXRlZCBidWdzCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLwpAQCAtMTQxMywxNCArMTUwMiwxNCBAQCB3ZWJraXQub3JnL2IvNzkyMDMgd2Vi
a2l0Lm9yZy9iLzE4NjY3OCBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1l
bgogCiBmYXN0L21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy1hZGRFdmVudExpc3RlbmVyLmh0bWwg
WyBEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgXQogCi13ZWJraXQub3JnL2IvMTkxMDA2IHdlYnJ0
Yy9zaW11bGNhc3QtaDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTkxMDA2IHdl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3NpbXVsY2FzdC1oMjY0Lmh0bWwgWyBGYWlsdXJlIFRp
bWVvdXQgXQogCiB3ZWJraXQub3JnL2IvMTkzNjQxIHdlYnJ0Yy92aWRlby1zZXREaXJlY3Rpb24u
aHRtbCBbIEZhaWx1cmUgUGFzcyBdCiAKIHdlYmtpdC5vcmcvYi8xOTQ2MTEgaHR0cC93cHQvd2Vi
cnRjL2dldFVzZXJNZWRpYS1wcm9jZXNzU3dhcHBpbmcuaHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJr
aXQub3JnL2IvMjAxMjY3IFsgUmVsZWFzZSBdIHdlYnJ0Yy92aWRlby1oMjY0Lmh0bWwgWyBUaW1l
b3V0IEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIyMjU4NSBbIERlYnVnIF0gd2VicnRjL3ZpZGVv
LWgyNjQuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMjI1ODUgd2Via2l0Lm9yZy9iLzIz
NTg4NSBbIERlYnVnIF0gd2VicnRjL3ZpZGVvLWgyNjQuaHRtbCBbIENyYXNoIEZhaWx1cmUgXQog
CiB3ZWJraXQub3JnL2IvMjEwMjcyIHdlYnJ0Yy9kYXRhY2hhbm5lbC9tdWx0aXBsZS1jb25uZWN0
aW9ucy5odG1sIFsgVGltZW91dCBQYXNzIF0KIApAQCAtMTQzMSw3ICsxNTIwLDcgQEAgd2Via2l0
Lm9yZy9iLzIxNTAwNyBbIERlYnVnIF0gd2VicnRjL2gyNjQtaGlnaC5odG1sIFsgU2xvdyBGYWls
dXJlIF0KIAogd2Via2l0Lm9yZy9iLzIxNjUzOCB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMt
c29mdHdhcmUtaDI2NC1iYXNlbGluZS5odG1sIFsgU2xvdyBGYWlsdXJlIF0KIAotd2Via2l0Lm9y
Zy9iLzIxNjc2MyB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMtc29mdHdhcmUtaDI2NC1oaWdo
Lmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMTY3NjMgd2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMtc29mdHdhcmUtaDI2NC1oaWdoLmh0
bWwgWyBDcmFzaCBGYWlsdXJlIFRpbWVvdXQgXQogCiB3ZWJraXQub3JnL2IvMjE4MjIxIHdlYnJ0
Yy92cDktcHJvZmlsZTIuaHRtbCBbIFRpbWVvdXQgRmFpbHVyZSBdCiAKQEAgLTIyMTksMTMgKzIz
MDgsMTMgQEAgd2Via2l0Lm9yZy9iLzE4NjEwMCBjc3MzL2NvbG9yLWZpbHRlcnMvY29sb3ItZmls
dGVyLWNvbG9yLXByb3BlcnR5LWxpc3QtaXRlbS5odG0KIHdlYmtpdC5vcmcvYi8xODYxMDAgZmFz
dC9oaWRwaS9maWx0ZXJzLXR1cmJ1bGVuY2UuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Vi
a2l0Lm9yZy9iLzE4NzA0NCB3ZWJhbmltYXRpb25zL29wYWNpdHktYW5pbWF0aW9uLXlpZWxkcy1j
b21wb3NpdGluZy1zcGFuLmh0bWwgWyBGYWlsdXJlIF0KIAotd2Via2l0Lm9yZy9iLzE4NzA2NCB3
ZWJydGMvZGF0YWNoYW5uZWwvbWRucy1pY2UtY2FuZGlkYXRlcy5odG1sIFsgVGltZW91dCBdCit3
ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2RhdGFjaGFubmVs
L21kbnMtaWNlLWNhbmRpZGF0ZXMuaHRtbCBbIFRpbWVvdXQgRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1hZGRUcmFjay5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQu
b3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1kaXNhYmxlZC1ibGFjay5odG1sIFsgQ3Jhc2ggXQot
d2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcmVtb3RlLW11dGUuaHRtbCBbIENyYXNo
IF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJlcGxhY2UtbXV0ZWQtdHJhY2su
aHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy92aWRlby1yZXBsYWNlLW11dGVkLXRyYWNrLmh0bWwgWyBUaW1lb3V0IEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1k
aXNhYmxlZC1ibGFjay5odG1sIFsgQ3Jhc2ggVGltZW91dCBdCit3ZWJraXQub3JnL2IvMTg3MDY0
IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlbW90ZS1tdXRlLmh0bWwgWyBDcmFz
aCBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJvdGF0aW9uLmh0
bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJvdGF0aW9u
LW5vLWN2by5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJvdGF0aW9uLW5vLWN2by5odG1sIFsgRmFpbHVyZSBDcmFz
aCBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby13aXRoLWRhdGEtY2hhbm5lbC5o
dG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWdldFN0YXRzLmh0dHBzLmh0bWwg
WyBGYWlsdXJlIFBhc3MgXQogCkBAIC0yNTIwLDcgKzI2MDksNyBAQCBtZWRpYS92aWRlby1yZW1v
dGUtY29udHJvbC1wbGF5cGF1c2UuaHRtbCBbIFNraXAgXQogCiB3ZWJraXQub3JnL2IvMjA3MDYy
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNl
LXJlcGxheS5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAotd2Via2l0Lm9yZy9iLzIyOTM0NiB3ZWJy
dGMvbXVsdGktYXVkaW8uaHRtbCBbIFRpbWVvdXQgUGFzcyBdCit3ZWJraXQub3JnL2IvMjI5MzQ2
IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL211bHRpLWF1ZGlvLmh0bWwgWyBUaW1lb3V0IFBh
c3MgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMjk3MTUgWyBEZWJ1ZyBdIGZhc3QvbWVkaWFz
dHJlYW0vZ2V0RGlzcGxheU1lZGlhLW1heC1jb25zdHJhaW50czMuaHRtbCBbIFRpbWVvdXQgXQog
d2Via2l0Lm9yZy9iLzIyOTcxNSBbIERlYnVnIF0gZmFzdC9tZWRpYXN0cmVhbS9zY3JlZW5jYXB0
dXJlLXVzZXItZ2VzdHVyZS5odG1sIFsgVGltZW91dCBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxE
ZXNjcmlwdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50
eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYzk1YTliNjE5MDA5YTc0MzJhMTI5MzZhN2M2YTgxODkwODRkMmM3Zgot
LS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApAQCAt
MCwwICsxLDE5IEBACitUZXN0cyBSVENQZWVyQ29ubmVjdGlvbiBsb2NhbERlc2NyaXB0aW9uLgor
CitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBm
b2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0
aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgcmVxdWVzdEZh
aWxlZDEpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdFN1Y2NlZWRlZCB3
YXMgY2FsbGVkLgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlv
bikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgcmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdEZhaWxlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5sb2Nh
bERlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNk
cCBzaG91bGQgYmUgbG9jYWwuIFdhcyB0PTAgMAorLgorUEFTUyBwYy5sb2NhbERlc2NyaXB0aW9u
LnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUg
bG9jYWwuIFdhcyB0PTAgMAorLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3Rl
ZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24tcmVtb3RlRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjlk
NTNlYzVjMjE2MGQwMzI3M2MxOTgxZjhlZDlmYTE4Mzg0ZmQwNzUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24tcmVtb3RlRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTkgQEAKK1Rl
c3RzIFJUQ1BlZXJDb25uZWN0aW9uIHJlbW90ZURlc2NyaXB0aW9uLgorCitPbiBzdWNjZXNzLCB5
b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVT
VCBDT01QTEVURSIuCisKKworUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVz
Y3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDEsIHJlcXVlc3RGYWlsZWQxKTsgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHJlcXVlc3RTdWNjZWVkZWQgd2FzIGNhbGxlZC4KK1BB
U1MgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKHJlcXVl
c3RTdWNjZWVkZWQyLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgor
UEFTUyByZXF1ZXN0RmFpbGVkIHdhcyBjYWxsZWQuCitQQVNTIHBjLnJlbW90ZURlc2NyaXB0aW9u
LnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJl
IHJlbW90ZS4gV2FzIHQ9MCAwCisuCitQQVNTIHBjLnJlbW90ZURlc2NyaXB0aW9uLnR5cGUgaXMg
Im9mZmVyIgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIHJlbW90ZS4g
V2FzIHQ9MCAwCisuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09N
UExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZmNjNDE4MTBiOGRlMTkxZGRlZTU5YTBlYzU5YzM1MTk5MWJlN2ZiYgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQK
QEAgLTAsMCArMSwzOSBAQAorVGVzdCBSVENQZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNjcmlw
dGlvbiBjYWxsZWQgd2l0aCBhbiBSVENTZXNzaW9uRGVzY3JpcHRpb24gb2YgdHlwZSAnb2ZmZXIn
CisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMs
IGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisqKiogQ3JlYXRlIChyZW1vdGUpIG9m
ZmVyIHdpdGggYXVkaW8gKHJlbW90ZU9mZmVyMSkKKyoqKiBEb25lLCBzdGFydCB0ZXN0aW5nIHdp
dGggcmVtb3RlT2ZmZXIxCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICdzdGFibGUnCitQQVNT
IHBjLnJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGMucGVuZGluZ1JlbW90ZURlc2Ny
aXB0aW9uIGlzIG51bGwKK1BBU1MgcGMuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwK
KworUEFTUyByZW1vdGVPZmZlcjEgc2V0IGFzIHJlbW90ZSBkZXNjcmlwdGlvbgorUEFTUyBwYy5z
aWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1vdGUtb2ZmZXInCitGQUlMIHBjLnJlbW90ZURlc2Ny
aXB0aW9uIHNob3VsZCBiZSBbb2JqZWN0IE9iamVjdF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbl0uCitGQUlMIHBjLnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUg
W29iamVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgorUEFT
UyBwYy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorCitQQVNTIHJlbW90ZU9mZmVy
MSBzZXQgYXMgcmVtb3RlIGRlc2NyaXB0aW9uIChhZ2FpbikKK1BBU1MgcGMuc2lnbmFsaW5nU3Rh
dGUgaXMgJ2hhdmUtcmVtb3RlLW9mZmVyJworCisqKiogVHJ5IHNldHRpbmcgbG9jYWwgZGVzY3Jp
cHRpb25zIHdpdGggYmFkIHR5cGVzIGZvciB0aGUgY3VycmVudCBzdGF0ZQorUEFTUyBwcm9taXNl
IHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHt0eXBlOidhbnN3ZXInLCBzZHA6cmVtb3RlT2ZmZXIx
LnNkcH0pOyByZWplY3RlZCB3aXRoIE9wZXJhdGlvbkVycm9yOiBVbmFibGUgdG8gYXBwbHkgc2Vz
c2lvbiByZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcHJvbWlzZSBwYy5zZXRSZW1vdGVEZXNjcmlw
dGlvbih7dHlwZToncHJhbnN3ZXInLCBzZHA6cmVtb3RlT2ZmZXIxLnNkcH0pOyByZWplY3RlZCB3
aXRoIE9wZXJhdGlvbkVycm9yOiBVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiByZW1vdGUgZGVzY3Jp
cHRpb24KKworKioqIENyZWF0ZSAocmVtb3RlKSBvZmZlciB3aXRoIHZpZGVvIChyZW1vdGVPZmZl
cjIpCisqKiogRG9uZSwgc3RhcnQgdGVzdGluZyB3aXRoIHJlbW90ZU9mZmVyMgorUEFTUyBwYy5z
aWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1vdGUtb2ZmZXInCisKK1BBU1MgcmVtb3RlT2ZmZXIy
IHNldCBhcyByZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hh
dmUtcmVtb3RlLW9mZmVyJworRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUgW29i
amVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgorRkFJTCBw
Yy5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2Fz
IFtvYmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uXS4KK1BBU1MgcGMuY3VycmVudFJlbW90ZURl
c2NyaXB0aW9uIGlzIG51bGwKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0IGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LXN0YWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAxNjZkY2E1NjNlY2U0N2Y0OGMwNzIy
Y2MwODdhM2UyZjk2NmM0ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQu
dHh0CkBAIC0wLDAgKzEsNTEgQEAKK1Rlc3RzIFJUQ1BlZXJDb25uZWN0aW9uIGluIHN0YWJsZSBz
dGF0ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNz
YWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcGMuc2lnbmFsaW5n
U3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVz
Y3JpcHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQxKTsgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldExvY2FsRGVzY3JpcHRpb24gZmFpbGVkLgorRkFJ
TCBlcnJvclJlYXNvbi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9uRXJy
b3IuIFdhcyBPcGVyYXRpb25FcnJvci4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQg
dGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24g
c2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0
YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2Ny
aXB0aW9uKS50aGVuKGZpbmlzaElmU3VjY2VlZGVkLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRMb2NhbERlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwg
ZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9y
LiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRo
cm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNo
b3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0
ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3Jp
cHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQzKTsgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwg
ZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9y
LiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRo
cm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNo
b3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0
ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3Jp
cHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQ0KTsgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwg
ZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9y
LiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRo
cm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNo
b3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0
ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlw
dGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgZmluaXNoSWZGYWlsZWQpOyBkaWQgbm90IHRo
cm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0TG9jYWxEZXNjcmlwdGlvbiBzdWNjZWVkZWQuCitQQVNT
IHBjLmxvY2FsRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVzY3Jp
cHRpb24uc2RwIHNob3VsZCBiZSBsb2NhbC4gV2FzIHQ9MCAwCisuCitGQUlMIHBjLnJlbW90ZURl
c2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5z
aWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1sb2NhbC1vZmZlciIKK0ZBSUwgcGMubG9jYWxEZXNjcmlw
dGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3Rl
RGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBj
LnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9u
KHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgZmluaXNoSWZGYWls
ZWQpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0UmVtb3RlRGVzY3JpcHRpb24g
c3VjY2VlZGVkLgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNl
cHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZl
ciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSByZW1vdGUuIFdhcyB0
PTAgMAorLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1yZW1vdGUtb2ZmZXIiCitQ
QVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0t
Z2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDgwNDkzNTVmNGNiNjFmYWE5ZGNiZjlm
OGQ2NjNjMjM1M2VhYzFkMWMuLmMzMWEzYTgyNTg0MWYxZWIyMTY0MTViMTE5NzRlN2IwYjEwYjk3
ZWUgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBA
QAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNr
ZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1
NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFi
bGUgR3N0V2ViUlRDIGJ5IGRlZmF1bHQgaWYgYSByZWNlbnQtZW5vdWdoICg+PSAxLjIwKSB2ZXJz
aW9uIGlzIGF2YWlsYWJsZS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVy
LmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2U6Cisg
ICAgICAgICogU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2U6CisKIDIwMjItMDIt
MTEgIERvbiBPbG1zdGVhZCAgPGRvbi5vbG1zdGVhZEBzb255LmNvbT4KIAogICAgICAgICBbQ01h
a2VdIENoZWNrIGZvciBNQVBfQUxJR05FRCBzdXBwb3J0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452541</attachid>
            <date>2022-02-18 10:45:38 -0800</date>
            <delta_ts>2022-02-18 10:49:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220218104536.patch</filename>
            <type>text/plain</type>
            <size>326528</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDJlMmI5YWU2MjQ5YWMyM2U3YjEzZGRj
ZmUxODY3MzJjYjI3YWQyMTMuLmMyMTRkZDNhZWMyN2U4MmJkM2U3MjY4NjcxOGFjY2Q5MGVjNzQ3
ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAyLTE3ICBNYXR0IFdvb2Ryb3cgIDxtYXR0
d29vZHJvd0BhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIHN1YmdyaWQgYnkgZGVmYXVsdC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMTYwZDA5M2RjMzE3NzRmNTMzMTNjMTY0NWQ1YmI5OGE4N2M0YTQwLi4w
MDYzMzY4ZjVhMzZlYzJkYTIzZDg2NWFiY2RjZDg0YTNhYjdhY2VjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzc0IEBACisyMDIyLTAyLTEyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBJbml0aWFsIGltcG9ydCBvZiB0aGUgR3N0
V2ViUlRDIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNjU0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEluaXRpYWwgR3N0V2ViUlRDIGJhY2tlbmQuIEEgbG90IG9mIGZlYXR1cmVzIHVuaW1w
bGVtZW50ZWQgc3RpbGwsIGJ1dCB3ZSB3aWxsIGluY3JlbWVudGFsbHkKKyAgICAgICAgaW1wcm92
ZSB0aGUgbGF5b3V0IHRlc3QgY292ZXJhZ2UgaW4gZm9sbG93LXVwIHBhdGNoZXMuIE1vc3Qgbm90
YWJsZSBzaG9ydC1jb21pbmdzIGN1cnJlbnRseToKKworICAgICAgICAtIERhdGFDaGFubmVsIHN1
cHBvcnQgaXMgaW5jb21wbGV0ZSAoYnVnIDIzNTg3OSkKKyAgICAgICAgLSBOZXR3b3JrIHRyYWZm
aWMgbm90IHJvdXRlZCB0aHJvdWdoIE5ldHdvcmsgcHJvY2VzcyB5ZXQKKyAgICAgICAgLSBTdGF0
cyBzdXBwb3J0IGluY29tcGxldGUKKyAgICAgICAgLSBEVE1GIHN1cHBvcnQgdW5pbXBsZW1lbnRl
ZAorICAgICAgICAtIElDRSByZXN0YXJ0cyBub3Qgc3VwcG9ydGVkIHlldAorICAgICAgICAtIFJl
LW5lZ290aWF0aW9uIHVubGlrZWx5IHRvIHdvcmsKKyAgICAgICAgLSBTaW11bGNhc3Qgbm90IGhh
bmRsZWQgeWV0CisgICAgICAgIC0gQmFsYW5jZWQgYnVuZGxlIG5vdCBzdXBwb3J0ZWQKKyAgICAg
ICAgLSBSVFggYW5kIEZFQyB1bi10ZXN0ZWQsIGJ1dCBzaG91bGRuJ3QgYmUgaGFyZCB0byBmaXgK
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcDoKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdlbmVyYXRlQ2VydGlmaWNhdGUp
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6OmZyb21SVENEYXRhQ2hhbm5lbEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyOjpjaGFubmVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjp+R1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFu
bmVsSGFuZGxlcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6c2VuZFN0cmluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kUmF3RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2hlY2tTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnJlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uTWVzc2Fn
ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6
Om9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
OjpvbkJ1ZmZlcmVkQW1vdW50TG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6cG9zdFRhc2spOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFj
a2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQ6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQ6OmljZVRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFu
c3BvcnRCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZDo6fkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp1bnJl
Z2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJh
Y2tlbmQ6OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFu
c3BvcnRCYWNrZW5kOjpnYXRoZXJpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVk
aWFFbmRwb2ludC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWFsaXplUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6fkdTdHJlYW1lck1lZGlhRW5kcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dGVhcmRvd25QaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpoYW5kbGVNZXNzYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRpc3Bvc2VFbGVt
ZW50Q2hhaW4pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0
Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpyZXN0YXJ0SWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmZldGNoRGVzY3JpcHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6ZmV0Y2hTaWduYWxpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb1NldFJlbW90ZURlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNldERlc2NyaXB0aW9uQ2FsbERhdGE6OlNldERl
c2NyaXB0aW9uQ2FsbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6c2V0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6c3RvcmVSZW1vdGVNTGluZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6Y29uZmlndXJlQW5kTGlua1NvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXF1ZXN0UGFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlT2ZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVBbnN3ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aW5pdGlhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2V0U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6bWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFJlbW90ZVN0cmVhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVSZW1vdGVTdHJl
YW0pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlVHJh
bnNjZWl2ZXJCYWNrZW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjphZGRUcmFuc2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpjcmVhdGVTb3VyY2VGb3JUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNlbmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRJY2VDYW5k
aWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRl
RGF0YUNoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
b25EYXRhQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN1c3BlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVzdW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uTmVnb3RpYXRpb25OZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDb25uZWN0
aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9u
SWNlR2F0aGVyaW5nQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6Om9uSWNlQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvblN1Y2NlZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25G
YWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y29sbGVj
dFRyYW5zY2VpdmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpnYXRoZXJTdGF0c0ZvckxvZ2dpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UlRDU3RhdHNMb2dn
ZXI6OlJUQ1N0YXRzTG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyOjp0
b0pTT05TdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6cHJvY2Vzc1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6Om9uU3RhdHNEZWxpdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6c3RhcnRMb2dnaW5nU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6c3RvcExvZ2dpbmdTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpsb2dDaGFubmVsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0YXRzTG9nSW50ZXJ2YWwgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyRGVjb2RlckltcGxl
bWVudGF0aW9uTmFtZSk6CisgICAgICAgIChXVEY6OkxvZ0FyZ3VtZW50PFdlYkNvcmU6OlJUQ1N0
YXRzTG9nZ2VyPjo6dG9TdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6aXNTdG9wcGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmlzTmVnb3RpYXRpb25OZWVkZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cGlwZWxpbmUgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uQmFja2VuZDo6cmVjZWl2ZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpzZW5kZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6cmVzdGFydEljZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OnNldENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyk6CisgICAgICAgIChXZWJD
b3JlOjpiYWNrZW5kRnJvbVJUUFNlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0UmVtb3RlRGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
Ojpkb0NyZWF0ZU9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6ZG9DcmVhdGVBbnN3ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVh
dGVEYXRhQ2hhbm5lbEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEV4aXN0aW5nU2Vu
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
YWRkVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjphZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2VpdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0U2VuZGVyU291cmNl
RnJvbVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmJhY2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpleGlz
dGluZ1RyYW5zY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6bmV3UmVtb3RlVHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJhbnNjZWl2ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVtb3ZlVHJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphcHBs
eVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25O
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
aXNOZWdvdGlhdGlvbk5lZWRlZCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVy
QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0
cFJlY2VpdmVyQmFja2VuZDo6Z2V0Q29udHJpYnV0aW5nU291cmNlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFN5bmNocm9uaXphdGlv
blNvdXJjZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kOjpjcmVhdGVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVy
QmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Om1lZGlhVHlwZUZyb21SZWNlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFJlY2VpdmVy
VHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZl
clRyYW5zZm9ybUJhY2tlbmQ6On5HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5k
OjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJU
cmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnVwZGF0ZVRyYWNrU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ6OnN0YXJ0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0b3BTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6cmVwbGFjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c2V0UGFyYW1ldGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpjcmVhdGVEVE1GQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpydGNS
dHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ6OnNldE1lZGlhU3RyZWFtSWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0
cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1l
ZGlhVHlwZUZyb21TZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVy
VHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0
cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNr
ZW5kOjpyZXF1ZXN0S2V5RnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQ6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVJlY2VpdmVy
QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ6OmNyZWF0ZVNlbmRlckJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRw
VHJhbnNjZWl2ZXJCYWNrZW5kOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjdXJyZW50RGlyZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c2V0RGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZDo6bWlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZDo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ6OnN0b3BwZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kOjpzZXRDb2RlY1ByZWZlcmVuY2VzKToKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRw
VHJhbnNmb3JtQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UnRwVHJhbnNmb3JtQmFja2VuZDo6c2V0SW5wdXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpjbGVhclRyYW5zZm9ybWFibGVGcmFtZUNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6
OnByb2Nlc3NUcmFuc2Zvcm1lZEZyYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJh
bnNmb3JtQmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OnRvUlRDU2N0cFRyYW5zcG9ydFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBU
cmFuc3BvcnRCYWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnN0
YXRlQ2hhbmdlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxs
UlRDUlRQU3RyZWFtU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJUQ0NvZGVjU3RhdHMp
OgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEluYm91bmRSVFBTdHJlYW1TdGF0cyk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsT3V0Ym91bmRSVFBTdHJlYW1TdGF0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpmaWxsUlRDUGVlckNvbm5lY3Rpb25TdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUlRD
VHJhbnNwb3J0U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJlcG9ydENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbGxiYWNrSG9sZGVyOjpDYWxsYmFja0hvbGRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Z2V0U3RhdHMpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9y
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6c2V0RWxl
bWVudCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
V2ViUlRDVXRpbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlQ29tcG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlUHJvdG9jb2wpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9SVENJY2VUY3BDYW5kaWRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRD
SWNlQ2FuZGlkYXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0Vycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvV2ViUlRDQml0UmF0ZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OmZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVdlYlJU
Q0JpdFJhdGVQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0VuY29kaW5nUGFyYW1l
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCk6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUljZUNhbmRpZGF0ZVNEUCk6CisgICAgICAgIChXZWJDb3JlOjp4NTA5U2Vy
aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnByaXZhdGVLZXlTZXJpYWxpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZHBN
ZWRpYUhhc0F0dHJpYnV0ZUtleSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0
b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZyb21SVENS
dHBUcmFuc2NlaXZlckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0b1Nlc3Npb25EZXNj
cmlwdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9TaWduYWxpbmdTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjp0b1JUQ0ljZUNvbm5lY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0R0
bHNUcmFuc3BvcnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZVRyYW5zcG9ydFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlR2F0aGVyaW5nU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6YnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6aWNlVHJhbnNwb3J0UG9saWN5RnJvbUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6dG9SVENFcnJvckRldGFpbFR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1l
ci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3Zp
ZGVyR1N0cmVhbWVyOjpBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6On5BdWRpb1NvdXJjZVByb3ZpZGVy
R1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFt
ZXI6OmhhbmRsZU5ld0RlaW50ZXJsZWF2ZVBhZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXVEY6OmFkb3B0R1JlZik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDUlRQUmVj
ZWl2ZXI+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPik6
CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPik6CisgICAgICAgIChX
VEY6OmRlcmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KToKKyAgICAgICAgKFdURjo6cmVmR1B0
cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0
V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENE
YXRhQ2hhbm5lbD4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5u
ZWw+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0Pik6Cisg
ICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0Pik6CisgICAgICAg
IChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0Pik6CisgICAgICAgIChXVEY6OmRl
cmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y2Fwc01lZGlhVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dV
bmlxdWVQdHJHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZTo6Y3JlYXRlQXVkaW9Tb3VyY2VQcm92aWRlcik6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0
dXJlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpjcmVhdGVD
b252ZXJ0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDYXB0dXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJDYXB0dXJlcjo6
Y3JlYXRlU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6fkdTdHJlYW1l
ckRUTUZTZW5kZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5k
ZXJCYWNrZW5kOjpjYW5JbnNlcnREVE1GKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRU
TUZTZW5kZXJCYWNrZW5kOjpwbGF5VG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJE
VE1GU2VuZGVyQmFja2VuZDo6dG9uZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyRFRNRlNlbmRlckJhY2tlbmQ6OmR1cmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjppbnRlclRvbmVHYXAgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6Om9uVG9uZVBsYXllZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5k
ZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHA6CisgICAgICAgICh3ZWJraXRNZWRp
YVN0cmVhbVNyY0FkZFRyYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJydGNf
dmlkZW9fZW5jb2Rlcl9jbGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXI6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6On5SZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzdGFydFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzdG9wUHJvZHVj
aW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI6OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5n
U291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmxvY2tW
YWx2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyOjpyZWxlYXNlVmFsdmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJl
YW1lcjo6YmluKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6
OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXI6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXR0aW5n
c0RpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyOjpjcmVhdGUpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxv
YWRUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6
flJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1l
cjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXI6OnNvdXJjZU11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6aW5p
dGlhbGl6ZUZyb21UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXI6OmxpbmspOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRn
b2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTaW5rUGFkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291
cmNlR1N0cmVhbWVyOjpzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjphbGxvd2VkQ2FwcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnBhZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXI6OnNlbmRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXI6OmJpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5h
bHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6
c2V0V2ViUlRDVlA5U3VwcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFdl
YlJUQ1ZQOVZUQlN1cHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbmFi
bGVXZWJSVENFbmNyeXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0VXNl
RFRMUzEwKToKKwogMjAyMi0wMi0xOCAgUGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgog
CiAgICAgICAgIFtpT1NdW01vZGVybiBNZWRpYSBDb250cm9sc10gQWRkIGFuIGFsdGVybmF0aXZl
IG92ZXJmbG93IGljb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNl
cy9XZWJQcmVmZXJlbmNlcy55YW1sIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dl
YlByZWZlcmVuY2VzLnlhbWwKaW5kZXggNGFhNjdhMzEyOTgwNGRhOWZmOGU2YTQ0OTQ1OTZjNDY2
MWZmOWUxNi4uYjY2Yzc0MGU4MDcyY2M1OWM1YmEyN2M1ZWU0MzM2NDE2ZjlmMWNmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlhbWwK
KysrIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlhbWwK
QEAgLTE3MjIsNyArMTcyMiw5IEBAIFBlZXJDb25uZWN0aW9uRW5hYmxlZDoKICAgICBXZWJLaXRM
ZWdhY3k6CiAgICAgICBkZWZhdWx0OiB0cnVlCiAgICAgV2ViS2l0OgotICAgICAgZGVmYXVsdDog
V2ViQ29yZTo6TGliV2ViUlRDUHJvdmlkZXI6OndlYlJUQ0F2YWlsYWJsZSgpCisgICAgICAiVVNF
KExJQldFQlJUQykiOiBXZWJDb3JlOjpMaWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxl
KCkKKyAgICAgICJVU0UoR1NUUkVBTUVSX1dFQlJUQykiOiB0cnVlCisgICAgICBkZWZhdWx0OiBm
YWxzZQogICAgIFdlYkNvcmU6CiAgICAgICBkZWZhdWx0OiB0cnVlCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55
YW1sIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJp
bWVudGFsLnlhbWwKaW5kZXggMmQyYzJiMzlkNjZlMmZjOWY3OGJkYmE0NTBkOTg4ZTI2MjZlMzc4
Yy4uZWJhYjE3M2E4MzNlNWEwZDY1ZGE4NGFlYTc2ZDZiZmE1ZGE1NzYxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFs
LnlhbWwKKysrIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2Vz
RXhwZXJpbWVudGFsLnlhbWwKQEAgLTE2ODMsOSArMTY4MywxMSBAQCBXZWJSVENFbmNvZGVkVHJh
bnNmb3JtRW5hYmxlZDoKICAgICBXZWJLaXRMZWdhY3k6CiAgICAgICBkZWZhdWx0OiBmYWxzZQog
ICAgIFdlYktpdDoKLSAgICAgIGRlZmF1bHQ6IHRydWUKKyAgICAgICJVU0UoTElCV0VCUlRDKSI6
IHRydWUKKyAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgV2ViQ29yZToKLSAgICAgIGRlZmF1bHQ6
IHRydWUKKyAgICAgICJVU0UoTElCV0VCUlRDKSI6IHRydWUKKyAgICAgIGRlZmF1bHQ6IGZhbHNl
CiAKICMgRklYTUU6IElzIHRoaXMgaW1wbGVtZW50ZWQgZm9yIFdlYktpdExlZ2FjeT8gSWYgbm90
LCB0aGlzIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIFdlYktpdExlZ2FjeSBlbnRpcmVseS4KIFdl
YlJUQ0gyNjRMb3dMYXRlbmN5RW5jb2RlckVuYWJsZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9nbGliL0dSZWZQdHIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNwcApp
bmRleCAxYjlhZGUzZjkzNmVlNTY0ZDM4MmMwN2VmOTY2NTc2YWI2NjE5YjQxLi45MzEyYTNlODk0
YmQ4YTBkN2ExMWE2YTQ1Y2NiZDM2ODczZjhjNTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAK
QEAgLTIyMyw2ICsyMjMsMjIgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1VyaSogcHRy
KQogfQogI2VuZGlmCiAKK3RlbXBsYXRlIDw+CitHQXJyYXkqIHJlZkdQdHIoR0FycmF5KiBwdHIp
Cit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19hcnJheV9yZWYocHRyKTsKKworICAgIHJldHVy
biBwdHI7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIGRlcmVmR1B0cihHQXJyYXkqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnX2FycmF5X3VucmVmKHB0cik7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdMSUIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9nbGliL0dSZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCmluZGV4
IGU3MjFmZDU1ZjQyYWMzZDc2YjQwMTc2MGUwYTE5Yjk5ZmUzZTBmOGIuLjY2NzM2MDc4N2FjNWY2
NDk2MGJlMWQ1NDYyZGRlNTlkNzM1NWY2YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2ds
aWIvR1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCkBAIC0yNTAs
NiArMjUwLDggQEAgdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdEYXRlVGltZSogcmVm
R1B0cihHRGF0ZVRpbWUqIHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkZXJlZkdQdHIoR0RhdGVUaW1lKiBwdHIpOwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklW
QVRFIEdEQnVzTm9kZUluZm8qIHJlZkdQdHIoR0RCdXNOb2RlSW5mbyogcHRyKTsKIHRlbXBsYXRl
IDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHREJ1c05vZGVJbmZvKiBwdHIp
OwordGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdBcnJheSogcmVmR1B0cihHQXJyYXkq
KTsKK3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHQXJyYXkq
KTsKIAogI2lmIEhBVkUoR1VSSSkKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHVXJp
KiByZWZHUHRyKEdVcmkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKaW5kZXggZGZiOWJk
YWM1NjZiNzk2NWJhYWNmZTBjZmVlNzA2MTQzOGIxOTViMi4uOGM3NDRmY2QxMzc3MDA2ZmJiOTA3
NjZlYmIzYmM0Yzg0ZThkY2NiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKQEAgLTE4
MCw3ICsxODAsNyBAQCBzdGF0aWMgdm9pZCBnYXRoZXJEZWNvZGluZ0luZm8oRG9jdW1lbnQmIGRv
Y3VtZW50LCBNZWRpYURlY29kaW5nQ29uZmlndXJhdGlvbiYmCiAgICAgY29uZmlndXJhdGlvbi5j
YW5FeHBvc2VWUDkgPSBkb2N1bWVudC5zZXR0aW5ncygpLnZwOURlY29kZXJFbmFibGVkKCk7CiAj
ZW5kaWYKIAotI2lmIEVOQUJMRShXRUJfUlRDKQorI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
TElCV0VCUlRDKQogICAgIGlmIChjb25maWd1cmF0aW9uLnR5cGUgPT0gTWVkaWFEZWNvZGluZ1R5
cGU6OldlYlJUQykgewogICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkK
ICAgICAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuY3JlYXRlRGVjb2RpbmdDb25m
aWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlvbiksIFdURk1vdmUoZGVjb2RpbmdDYWxsYmFj
aykpOwpAQCAtMjAwLDcgKzIwMCw3IEBAIHN0YXRpYyB2b2lkIGdhdGhlckVuY29kaW5nSW5mbyhE
b2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhRW5jb2RpbmdDb25maWd1cmF0aW9uJiYKICAgICAgICAg
Y2FsbGJhY2soV1RGTW92ZShyZXN1bHQpKTsKICAgICB9OwogCi0jaWYgRU5BQkxFKFdFQl9SVEMp
CisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGNvbmZpZ3Vy
YXRpb24udHlwZSA9PSBNZWRpYUVuY29kaW5nVHlwZTo6V2ViUlRDKSB7CiAgICAgICAgIGlmIChh
dXRvKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+bGliV2ViUlRD
UHJvdmlkZXIoKS5jcmVhdGVFbmNvZGluZ0NvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0
aW9uKSwgV1RGTW92ZShlbmNvZGluZ0NhbGxiYWNrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKaW5kZXggNTA2ZjMzNzRiN2U2
ZDc2ZDU5OGY0OTUzZDg0OWMzOGVhYWM3MjdlOS4uN2I5YjViNjZkYTUxNTMyNGU2NjZjZjRiMWJh
M2Y1Y2QyZmFlMGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYURldmljZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFEZXZpY2VzLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU01lZGlh
RGV2aWNlSW5mby5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVRyYWNr
U3VwcG9ydGVkQ29uc3RyYWludHMuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCmlu
ZGV4IDg2ZDc1NzM5OTJmNGQ1YmQ0YzM1M2RjYjYwOTcyNjRlOTg1ZDU3ZTguLjBlNzAxYmZkNDdl
OTI4NGJhMTc4MTY0MWQ5MjI3YTNhZjg1OWQ1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAK
QEAgLTUzLDkgKzUzLDE0IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCisjaWYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiAhVVNFKExJQldFQlJUQykKKyNpZiAh
VVNFKExJQldFQlJUQykgJiYgIVVTRShHU1RSRUFNRVJfV0VCUlRDKQorCiBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3JlYXRlTm9QZWVyQ29ubmVjdGlvbkJh
Y2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mKQogewogICAgIHJldHVybiBudWxscHRyOwpAQCAtNDM3
LDEzICs0NDIsMTkgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdlbmVyYXRlQ2VydGlm
aWNhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBDZXJ0aWYKICAgICAgICAgcHJvbWlzZS5y
ZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCiAgICAg
TGliV2ViUlRDQ2VydGlmaWNhdGVHZW5lcmF0b3I6OmdlbmVyYXRlQ2VydGlmaWNhdGUoZG9jdW1l
bnQuc2VjdXJpdHlPcmlnaW4oKSwgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKSwgaW5mbywgW3By
b21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAg
ICAgcHJvbWlzZS5zZXR0bGUoV1RGTW92ZShyZXN1bHQpKTsKICAgICB9KTsKKyNlbGlmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQorICAgIGF1dG8gY2VydGlmaWNhdGUgPSA6OldlYkNvcmU6OmdlbmVy
YXRlQ2VydGlmaWNhdGUoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwgaW5mbyk7CisgICAgaWYg
KGNlcnRpZmljYXRlLmhhc192YWx1ZSgpKQorICAgICAgICBwcm9taXNlLnJlc29sdmUoKmNlcnRp
ZmljYXRlKTsKKyAgICBlbHNlCisgICAgICAgIHByb21pc2UucmVqZWN0KE5vdFN1cHBvcnRlZEVy
cm9yKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKLSAgICBVTlVTRURfUEFS
QU0oZXhwaXJlcyk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShp
bmZvKTsKICAgICBwcm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7CiAjZW5kaWYKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi5jcHAKaW5kZXggNWJkZGZlYzdlNGRmYzlkOWMwMjk5YzllMjdjYTlkYzIyZGY2
NDEwNC4uOTBkZTYzOTkzNGVkNjFjNWMwYjEwMTJjMGFhNTM5N2RkMGQ4YjMyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJUQ1BlZXJDb25uZWN0
aW9uPj4gUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQKICAgICBp
ZiAoIXBlZXJDb25uZWN0aW9uLT5pc0Nsb3NlZCgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwYWdl
ID0gZG9jdW1lbnQucGFnZSgpKSB7CiAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi0+cmVnaXN0
ZXJUb0NvbnRyb2xsZXIocGFnZS0+cnRjQ29udHJvbGxlcigpKTsKLSNpZiAhTE9HX0RJU0FCTEVE
IHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorI2lmIFVTRShMSUJXRUJSVEMpICYmICghTE9HX0RJ
U0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRCkKICAgICAgICAgICAgIGlmICghcGFnZS0+
c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgICAgICAgICBwYWdlLT5saWJXZWJS
VENQcm92aWRlcigpLnNldExvZ2dpbmdMZXZlbChMb2dXZWJSVEMubGV2ZWwpOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jMzM1Y2NhZTFiMTMzM2Y4NDY5MGY1Y2I5ZDJhOGZiN2FkOTIyMjNmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcApAQCAtMCwwICsxLDMwMSBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRD
VXRpbHMuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbC5oIgorI2luY2x1ZGUgIlJUQ0RhdGFD
aGFubmVsRXZlbnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgorI2luY2x1ZGUgIlJUQ1ByaW9y
aXR5VHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworR1NUX0RFQlVHX0NB
VEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NU
X0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gR1N0cmVhbWVyRGF0YUNoYW5uZWxI
YW5kbGVyOjpmcm9tUlRDRGF0YUNoYW5uZWxJbml0KGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYg
b3B0aW9ucykKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaW5pdChnc3Rfc3RydWN0
dXJlX25ldygib3B0aW9ucyIsICJwcm90b2NvbCIsIEdfVFlQRV9TVFJJTkcsIG9wdGlvbnMucHJv
dG9jb2wudXRmOCgpLmRhdGEoKSwgbnVsbHB0cikpOworCisgICAgaWYgKG9wdGlvbnMub3JkZXJl
ZCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgIm9yZGVyZWQiLCBHX1RZ
UEVfQk9PTEVBTiwgKm9wdGlvbnMub3JkZXJlZCwgbnVsbHB0cik7CisgICAgaWYgKG9wdGlvbnMu
bWF4UGFja2V0TGlmZVRpbWUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCks
ICJtYXgtcGFja2V0LWxpZmV0aW1lIiwgR19UWVBFX0lOVCwgKm9wdGlvbnMubWF4UGFja2V0TGlm
ZVRpbWUsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25zLm1heFJldHJhbnNtaXRzKQorICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAibWF4LXJldHJhbnNtaXRzIiwgR19UWVBF
X0lOVCwgKm9wdGlvbnMubWF4UmV0cmFuc21pdHMsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25z
Lm5lZ290aWF0ZWQpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJuZWdv
dGlhdGVkIiwgR19UWVBFX0JPT0xFQU4sICpvcHRpb25zLm5lZ290aWF0ZWQsIG51bGxwdHIpOwor
ICAgIGlmIChvcHRpb25zLmlkKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgp
LCAiaWQiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5pZCwgbnVsbHB0cik7CisKKyAgICBHc3RXZWJS
VENQcmlvcml0eVR5cGUgcHJpb3JpdHlUeXBlOworICAgIHN3aXRjaCAob3B0aW9ucy5wcmlvcml0
eSkgeworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93OgorICAgICAgICBwcmlvcml0
eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfVkVSWV9MT1c7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpMb3c6CisgICAgICAgIHByaW9yaXR5VHlwZSA9
IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9MT1c7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UlRDUHJpb3JpdHlUeXBlOjpNZWRpdW06CisgICAgICAgIHByaW9yaXR5VHlwZSA9IEdTVF9XRUJS
VENfUFJJT1JJVFlfVFlQRV9NRURJVU07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlRDUHJp
b3JpdHlUeXBlOjpIaWdoOgorICAgICAgICBwcmlvcml0eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9S
SVRZX1RZUEVfSElHSDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVf
c2V0KGluaXQuZ2V0KCksICJwcmlvcml0eSIsIEdTVF9UWVBFX1dFQlJUQ19QUklPUklUWV9UWVBF
LCBwcmlvcml0eVR5cGUsIG51bGxwdHIpOworCisgICAgcmV0dXJuIGluaXQ7Cit9CisKK1JlZjxS
VENEYXRhQ2hhbm5lbEV2ZW50PiBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNoYW5uZWxF
dmVudChEb2N1bWVudCYgZG9jdW1lbnQsIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+JiYg
ZGF0YUNoYW5uZWwpCit7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBsYWJlbDsKKyAgICBHVW5p
cXVlT3V0UHRyPGNoYXI+IHByb3RvY29sOworICAgIGdib29sZWFuIG9yZGVyZWQsIG5lZ290aWF0
ZWQ7CisgICAgZ2ludCBtYXhQYWNrZXRMaWZlVGltZSwgbWF4UmV0cmFuc21pdHMsIGlkOworICAg
IGdfb2JqZWN0X2dldChkYXRhQ2hhbm5lbC5nZXQoKSwgIm9yZGVyZWQiLCAmb3JkZXJlZCwgImxh
YmVsIiwgJmxhYmVsLm91dFB0cigpLAorICAgICAgICAibWF4LXBhY2tldC1saWZldGltZSIsICZt
YXhQYWNrZXRMaWZlVGltZSwgIm1heC1yZXRyYW5zbWl0cyIsICZtYXhSZXRyYW5zbWl0cywKKyAg
ICAgICAgInByb3RvY29sIiwgJnByb3RvY29sLm91dFB0cigpLCAibmVnb3RpYXRlZCIsICZuZWdv
dGlhdGVkLCAiaWQiLCAmaWQsIG51bGxwdHIpOworCisgICAgUlRDRGF0YUNoYW5uZWxJbml0IGlu
aXQ7CisgICAgaW5pdC5vcmRlcmVkID0gb3JkZXJlZDsKKyAgICBpbml0Lm1heFBhY2tldExpZmVU
aW1lID0gbWF4UGFja2V0TGlmZVRpbWU7CisgICAgaW5pdC5tYXhSZXRyYW5zbWl0cyA9IG1heFJl
dHJhbnNtaXRzOworICAgIGluaXQucHJvdG9jb2wgPSBTdHJpbmcocHJvdG9jb2wuZ2V0KCkpOwor
ICAgIGluaXQubmVnb3RpYXRlZCA9IG5lZ290aWF0ZWQ7CisgICAgaW5pdC5pZCA9IGlkOworCisg
ICAgYXV0byBoYW5kbGVyID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcj4oV1RGTW92ZShkYXRhQ2hhbm5lbCkpOworICAgIGF1dG8gY2hhbm5lbCA9IFJUQ0RhdGFD
aGFubmVsOjpjcmVhdGUoZG9jdW1lbnQsIFdURk1vdmUoaGFuZGxlciksIFN0cmluZyhsYWJlbC5n
ZXQoKSksIFdURk1vdmUoaW5pdCkpOworICAgIHJldHVybiBSVENEYXRhQ2hhbm5lbEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLmRhdGFjaGFubmVsRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5v
LCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObywgV1RGTW92ZShjaGFubmVsKSk7Cit9CisKK0dTdHJl
YW1lckRhdGFDaGFubmVsSGFuZGxlcjo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKEdSZWZQ
dHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+JiYgY2hhbm5lbCkKKyAgICA6IG1fY2hhbm5lbChXVEZN
b3ZlKGNoYW5uZWwpKQoreworICAgIEFTU0VSVChtX2NoYW5uZWwpOworCisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm5vdGlmeTo6cmVhZHktc3RhdGUiLCBH
X0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIpIHsKKyAg
ICAgICAgaGFuZGxlci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7CisgICAg
Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLW1lc3NhZ2UtZGF0
YSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlciwg
R0J5dGVzKiBieXRlcykgeworICAgICAgICBoYW5kbGVyLT5vbk1lc3NhZ2VEYXRhKGJ5dGVzKTsK
KyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5n
ZXQoKSwgIm9uLW1lc3NhZ2Utc3RyaW5nIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRGF0YUNo
YW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBjaGFyKiBtZXNzYWdlKSB7CisgICAgICAgIGhhbmRsZXIt
Pm9uTWVzc2FnZVN0cmluZyhtZXNzYWdlKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLWVycm9yIiwgR19DQUxMQkFDSygr
W10oR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBHRXJyb3IqIGVycm9yKSB7
CisgICAgICAgIGhhbmRsZXItPm9uRXJyb3IoZXJyb3IpOworICAgIH0pLCB0aGlzKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tYnVmZmVyZWQtYW1v
dW50LWxvdyIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFu
ZGxlcikgeworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgdGhlIGFtb3VudCBkZWx0
YSBmcm9tIHdlYnJ0Y2JpbiB0byB0aGUgV2ViQ29yZSBoYW5kbGVyLgorICAgICAgICBoYW5kbGVy
LT5vbkJ1ZmZlcmVkQW1vdW50TG93KCk7CisgICAgfSksIHRoaXMpOworfQorCitHU3RyZWFtZXJE
YXRhQ2hhbm5lbEhhbmRsZXI6On5HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoKQoreworICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2NoYW5uZWwuZ2V0KCksIHRo
aXMpOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2V0Q2xpZW50KFJU
Q0RhdGFDaGFubmVsSGFuZGxlckNsaWVudCYgY2xpZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0
SWRlbnRpZmllciBjb250ZXh0SWRlbnRpZmllcikKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9j
bGllbnRMb2NrIH07CisgICAgQVNTRVJUKCFtX2hhc0NsaWVudCk7CisgICAgbV9oYXNDbGllbnQg
PSB0cnVlOworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0gJmNsaWVudDsK
KyAgICBtX2NvbnRleHRJZGVudGlmaWVyID0gY29udGV4dElkZW50aWZpZXI7CisKKyAgICBmb3Ig
KGF1dG8mIG1lc3NhZ2UgOiBtX2J1ZmZlcmVkTWVzc2FnZXMpIHsKKyAgICAgICAgc3dpdGNoT24o
bWVzc2FnZSwgWyZdKFJlZjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiYgZGF0YSkgeworICAgICAg
ICAgICAgR1NUX0RFQlVHKCJOb3RpZnlpbmcgcXVldWVkIHJhdyBkYXRhIChzaXplOiAlenUpIiwg
ZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgICAgIGNsaWVudC5kaWRSZWNlaXZlUmF3RGF0YShkYXRh
LT5tYWtlQ29udGlndW91cygpLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgICAgIH0sIFsm
XShTdHJpbmcmIHRleHQpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiTm90aWZ5aW5nIHF1ZXVl
ZCBzdHJpbmcgJXMiLCB0ZXh0LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNsaWVudC5k
aWRSZWNlaXZlU3RyaW5nRGF0YSh0ZXh0KTsKKyAgICAgICAgfSwgWyZdKFN0YXRlQ2hhbmdlIHN0
YXRlQ2hhbmdlKSB7CisgICAgICAgICAgICBpZiAoc3RhdGVDaGFuZ2UuZXJyb3IpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoYXV0byBydGNFcnJvciA9IHRvUlRDRXJyb3IoKnN0YXRlQ2hhbmdlLmVy
cm9yKSkKKyAgICAgICAgICAgICAgICAgICAgY2xpZW50LmRpZERldGVjdEVycm9yKHJ0Y0Vycm9y
LnJlbGVhc2VOb25OdWxsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgR1NUX0RFQlVH
KCJEaXNwYXRjaGluZyBzdGF0ZSBjaGFuZ2UgdG8gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRl
Q2hhbmdlLnN0YXRlKSk7CisgICAgICAgICAgICBjbGllbnQuZGlkQ2hhbmdlUmVhZHlTdGF0ZShz
dGF0ZUNoYW5nZS5zdGF0ZSk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBtX2J1ZmZlcmVkTWVz
c2FnZXMuY2xlYXIoKTsKK30KKworYm9vbCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnNl
bmRTdHJpbmdEYXRhKGNvbnN0IENTdHJpbmcmIHRleHQpCit7CisgICAgR1NUX0RFQlVHKCJTZW5k
aW5nIHN0cmluZyAlcyIsIHRleHQuZGF0YSgpKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9jaGFubmVsLmdldCgpLCAic2VuZC1zdHJpbmciLCB0ZXh0LmRhdGEoKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK2Jvb2wgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kUmF3RGF0
YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGF1dG8gYnl0ZXMg
PSBhZG9wdEdSZWYoZ19ieXRlc19uZXcoZGF0YSwgbGVuZ3RoKSk7CisgICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKG1fY2hhbm5lbC5nZXQoKSwgInNlbmQtZGF0YSIsIGJ5dGVzLmdldCgpKTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNs
b3NlKCkKK3sKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9jaGFubmVsLmdldCgpLCAiY2xv
c2UiKTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNoZWNrU3RhdGUo
KQoreworICAgIEFTU0VSVChtX2NsaWVudExvY2suaXNIZWxkKCkpOworCisgICAgR3N0V2ViUlRD
RGF0YUNoYW5uZWxTdGF0ZSBjaGFubmVsU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1fY2hhbm5l
bC5nZXQoKSwgInJlYWR5LXN0YXRlIiwgJmNoYW5uZWxTdGF0ZSwgbnVsbHB0cik7CisKKyAgICBS
VENEYXRhQ2hhbm5lbFN0YXRlIHN0YXRlOworICAgIHN3aXRjaCAoY2hhbm5lbFN0YXRlKSB7Cisg
ICAgY2FzZSBHU1RfV0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9ORVc6CisgICAgY2FzZSBHU1Rf
V0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9DT05ORUNUSU5HOgorICAgICAgICBzdGF0ZSA9IFJU
Q0RhdGFDaGFubmVsU3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
R1NUX1dFQlJUQ19EQVRBX0NIQU5ORUxfU1RBVEVfT1BFTjoKKyAgICAgICAgc3RhdGUgPSBSVENE
YXRhQ2hhbm5lbFN0YXRlOjpPcGVuOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9XRUJS
VENfREFUQV9DSEFOTkVMX1NUQVRFX0NMT1NJTkc6CisgICAgICAgIHN0YXRlID0gUlRDRGF0YUNo
YW5uZWxTdGF0ZTo6Q2xvc2luZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRD
X0RBVEFfQ0hBTk5FTF9TVEFURV9DTE9TRUQ6CisgICAgICAgIHN0YXRlID0gUlRDRGF0YUNoYW5u
ZWxTdGF0ZTo6Q2xvc2VkOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBpZiAoIW1faGFz
Q2xpZW50KSB7CisgICAgICAgIEdTVF9ERUJVRygiTm8gY2xpZW50IHlldCwgcXVldWVpbmcgc3Rh
dGUiKTsKKyAgICAgICAgbV9idWZmZXJlZE1lc3NhZ2VzLmFwcGVuZChTdGF0ZUNoYW5nZSB7IHN0
YXRlLCB7IH0gfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fY2xpZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoIkRpc3BhdGNoaW5nIHN0YXRlIGNo
YW5nZSB0byAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdGUpKTsKKyAgICBwb3N0VGFzayhbY2xp
ZW50ID0gbV9jbGllbnQsIHN0YXRlXSB7CisgICAgICAgIGNsaWVudC0+ZGlkQ2hhbmdlUmVhZHlT
dGF0ZShzdGF0ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyOjpyZWFkeVN0YXRlQ2hhbmdlZCgpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50
TG9jayB9OworICAgIGNoZWNrU3RhdGUoKTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXI6Om9uTWVzc2FnZURhdGEoR0J5dGVzKiBieXRlcykKK3sKKyAgICBMb2NrZXIgbG9j
a2VyIHsgbV9jbGllbnRMb2NrIH07CisKKyAgICBpZiAoIW1faGFzQ2xpZW50KSB7CisgICAgICAg
IG1fYnVmZmVyZWRNZXNzYWdlcy5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoYnl0ZXMpKTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIGdzaXplIHNpemUgPSAwOworICAgIGNvbnN0IGF1dG8qIGRhdGEgPSByZWlu
dGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGJ5dGVzLCAmc2l6
ZSkpOworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudCwgZGF0YSwgc2l6ZV0geworICAg
ICAgICBjbGllbnQtPmRpZFJlY2VpdmVSYXdEYXRhKGRhdGEsIHNpemUpOworICAgIH0pOworfQor
Cit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlU3RyaW5nKGNoYXIq
IHN0cmluZykKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisKKyAgICBH
U1RfREVCVUcoIkluY29taW5nIHN0cmluZzogJXMiLCBzdHJpbmcpOworICAgIENTdHJpbmcgYnVm
ZmVyKHN0cmluZywgc3RybGVuKHN0cmluZykpOworICAgIGlmICghbV9oYXNDbGllbnQpIHsKKyAg
ICAgICAgR1NUX0RFQlVHKCJObyBjbGllbnQgeWV0LCBrZWVwaW5nIGFzIGJ1ZmZlcmVkIG1lc3Nh
Z2UiKTsKKyAgICAgICAgbV9idWZmZXJlZE1lc3NhZ2VzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4
KGJ1ZmZlcikpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2NsaWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHKCJEaXNwYXRjaGluZyBwYXlsb2FkIik7
CisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50LCBidWZmZXIgPSBXVEZNb3ZlKGJ1ZmZl
cildIHsKKyAgICAgICAgY2xpZW50LT5kaWRSZWNlaXZlU3RyaW5nRGF0YShTdHJpbmc6OmZyb21V
VEY4KGJ1ZmZlcikpOworICAgICAgICBHU1RfREVCVUcoIkRvbmUiKTsKKyAgICB9KTsKK30KKwor
dm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uRXJyb3IoR0Vycm9yKiBlcnJvcikK
K3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisgICAgaWYgKCFtX2NsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX1dBUk5JTkcoIkdvdCBkYXRhLWNoYW5uZWwg
ZXJyb3IgJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xp
ZW50LCBlcnJvcl0geworICAgICAgICBpZiAoIWNsaWVudCB8fCAhZXJyb3IpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgYXV0byBydGNFcnJvciA9IHRvUlRDRXJyb3IoZXJyb3IpOwor
ICAgICAgICBpZiAoIXJ0Y0Vycm9yKQorICAgICAgICAgICAgcnRjRXJyb3IgPSBSVENFcnJvcjo6
Y3JlYXRlKFJUQ0Vycm9yOjpJbml0IHsgUlRDRXJyb3JEZXRhaWxUeXBlOjpEYXRhQ2hhbm5lbEZh
aWx1cmUsIHsgfSwgeyB9LCB7IH0sIHsgfSB9LCB7IH0pOworICAgICAgICBjbGllbnQtPmRpZERl
dGVjdEVycm9yKHJ0Y0Vycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0pOworfQorCit2b2lk
IEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25CdWZmZXJlZEFtb3VudExvdygpCit7Cisg
ICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9OworICAgIGlmICghbV9jbGllbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudF0geworICAg
ICAgICAvLyBGSVhNRTogUGFzcyBhbW91bnQgdG8gaGFuZGxlciBpbnN0ZWFkIG9mIDAuCisgICAg
ICAgIGNsaWVudC0+YnVmZmVyZWRBbW91bnRJc0RlY3JlYXNpbmcoMCk7CisgICAgfSk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpwb3N0VGFzayhGdW5jdGlvbjx2b2lk
KCk+JiYgZnVuY3Rpb24pCit7CisgICAgQVNTRVJUKG1fY2xpZW50TG9jay5pc0hlbGQoKSk7CisK
KyAgICBpZiAoIW1fY29udGV4dElkZW50aWZpZXIpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVh
ZChXVEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dDo6cG9zdFRhc2tUbyhtX2NvbnRleHRJZGVudGlmaWVyLCBXVEZNb3Zl
KGZ1bmN0aW9uKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hh
bm5lbEhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MzBhMDI2NDQ5M2UyN2ZjMGE0NjdiN2Y2Y2E4YmFj
NzBjODk0MDYwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgKQEAgLTAsMCAr
MSw4OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNo
YW5uZWxIYW5kbGVyLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxTdGF0ZS5oIgorI2luY2x1
ZGUgIlNoYXJlZEJ1ZmZlci5oIgorCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFJUQ0RhdGFDaGFubmVsRXZlbnQ7Citj
bGFzcyBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQ7CitzdHJ1Y3QgUlRDRGF0YUNoYW5uZWxJ
bml0OworCitjbGFzcyBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIgZmluYWwgOiBwdWJsaWMg
UlRDRGF0YUNoYW5uZWxIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoR1JlZlB0cjxH
c3RXZWJSVENEYXRhQ2hhbm5lbD4mJik7CisgICAgfkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxl
cigpOworCisgICAgc3RhdGljIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBmcm9tUlRDRGF0YUNo
YW5uZWxJbml0KGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpOworICAgIHN0YXRpYyBSZWY8UlRD
RGF0YUNoYW5uZWxFdmVudD4gY2hhbm5lbEV2ZW50KERvY3VtZW50JiwgR1JlZlB0cjxHc3RXZWJS
VENEYXRhQ2hhbm5lbD4mJik7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIG9uTWVzc2FnZURhdGEo
R0J5dGVzKik7CisgICAgdm9pZCBvbk1lc3NhZ2VTdHJpbmcoY2hhciopOworICAgIHZvaWQgb25F
cnJvcihHRXJyb3IqKTsKKyAgICB2b2lkIG9uQnVmZmVyZWRBbW91bnRMb3coKTsKKyAgICB2b2lk
IHJlYWR5U3RhdGVDaGFuZ2VkKCk7CisKK3ByaXZhdGU6CisgICAgLy8gUlRDRGF0YUNoYW5uZWxI
YW5kbGVyIEFQSQorICAgIHZvaWQgc2V0Q2xpZW50KFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVu
dCYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyKSBmaW5hbDsKKyAgICBib29sIHNl
bmRTdHJpbmdEYXRhKGNvbnN0IENTdHJpbmcmKSBmaW5hbDsKKyAgICBib29sIHNlbmRSYXdEYXRh
KGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpIGZpbmFsOworICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsK
KworICAgIHZvaWQgY2hlY2tTdGF0ZSgpOworICAgIHZvaWQgcG9zdFRhc2soRnVuY3Rpb248dm9p
ZCgpPiYmKTsKKworICAgIHN0cnVjdCBTdGF0ZUNoYW5nZSB7CisgICAgICAgIFJUQ0RhdGFDaGFu
bmVsU3RhdGUgc3RhdGU7CisgICAgICAgIHN0ZDo6b3B0aW9uYWw8R0Vycm9yKj4gZXJyb3I7Cisg
ICAgfTsKKyAgICB1c2luZyBNZXNzYWdlID0gc3RkOjp2YXJpYW50PFN0YXRlQ2hhbmdlLCBTdHJp
bmcsIFJlZjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj47CisgICAgdXNpbmcgUGVuZGluZ01lc3Nh
Z2VzID0gVmVjdG9yPE1lc3NhZ2U+OworCisgICAgTG9jayBtX2NsaWVudExvY2s7CisgICAgR1Jl
ZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4gbV9jaGFubmVsOworICAgIFdlYWtQdHI8UlRDRGF0
YUNoYW5uZWxIYW5kbGVyQ2xpZW50PiBtX2NsaWVudCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fY2xp
ZW50TG9jaykgeyBudWxscHRyIH07CisgICAgYm9vbCBtX2hhc0NsaWVudCBXVEZfR1VBUkRFRF9C
WV9MT0NLKG1fY2xpZW50TG9jaykgeyBmYWxzZSB9OworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRl
eHRJZGVudGlmaWVyIG1fY29udGV4dElkZW50aWZpZXI7CisgICAgc3RkOjpvcHRpb25hbDx1aW50
NjRfdD4gbV9wcmV2aW91c0J1ZmZlcmVkQW1vdW50OworICAgIFBlbmRpbmdNZXNzYWdlcyBtX2J1
ZmZlcmVkTWVzc2FnZXMgV1RGX0dVQVJERURfQllfTE9DSyhtX2NsaWVudExvY2spOworCisgICAg
TG9jayBtX29wZW5Mb2NrOworICAgIENvbmRpdGlvbiBtX29wZW5Db25kaXRpb24gV1RGX0dVQVJE
RURfQllfTE9DSyhtX29wZW5Mb2NrKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjFiMWZjMDE2MDRh
YjQxMDQ2NGRmZDQzMWM3NGI5MDM5YTI0MDNmNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNw
b3J0QmFja2VuZC5jcHAKQEAgLTAsMCArMSw5MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckR0bHNUcmFu
c3BvcnRCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9B
cnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVy
RHRsc1RyYW5zcG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0
PiYgdHJhbnNwb3J0KQorICAgIDogbV9iYWNrZW5kKHRyYW5zcG9ydCkKK3sKKyAgICBBU1NFUlQo
bV9iYWNrZW5kKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworfQorCitHU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKCkKK3sK
KyAgICB1bnJlZ2lzdGVyQ2xpZW50KCk7Cit9CisKK1VuaXF1ZVJlZjxSVENJY2VUcmFuc3BvcnRC
YWNrZW5kPiBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0QmFja2Vu
ZCgpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZD4obV9iYWNrZW5kKTsKK30KKwordm9pZCBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2Vu
ZDo6cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2NsaWVu
dCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fYmFja2VuZC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFt
ZXJEdGxzVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5kLT5zdGF0
ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1RyYW5z
cG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJz
X2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2JhY2tlbmQuZ2V0KCksIHRoaXMpOworICAgIG1fY2xpZW50
LnJlc2V0KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnN0YXRl
Q2hhbmdlZCgpCit7CisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3RoaXNdIHsKKyAgICAg
ICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBHVW5pcXVl
T3V0UHRyPGNoYXI+IHJlbW90ZUNlcnRpZmljYXRlOworICAgICAgICBHVW5pcXVlT3V0UHRyPGNo
YXI+IGNlcnRpZmljYXRlOworICAgICAgICBHc3RXZWJSVENEVExTVHJhbnNwb3J0U3RhdGUgc3Rh
dGU7CisKKyAgICAgICAgZ19vYmplY3RfZ2V0KG1fYmFja2VuZC5nZXQoKSwgInN0YXRlIiwgJnN0
YXRlLCAicmVtb3RlLWNlcnRpZmljYXRlIiwgJnJlbW90ZUNlcnRpZmljYXRlLm91dFB0cigpLCAi
Y2VydGlmaWNhdGUiLCAmY2VydGlmaWNhdGUub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgICAg
IFZlY3RvcjxSZWY8SlNDOjpBcnJheUJ1ZmZlcj4+IGNlcnRpZmljYXRlczsKKyAgICAgICAgY2Vy
dGlmaWNhdGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisgICAgICAgIGlmIChyZW1vdGVD
ZXJ0aWZpY2F0ZSkgeworICAgICAgICAgICAgYXV0byByZW1vdGVDZXJ0aWZpY2F0ZVN0cmluZyA9
IG1ha2VTdHJpbmcocmVtb3RlQ2VydGlmaWNhdGUuZ2V0KCkpOworICAgICAgICAgICAgYXV0byBq
c1JlbW90ZUNlcnRpZmljYXRlID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKHJlbW90ZUNlcnRp
ZmljYXRlU3RyaW5nLmNoYXJhY3RlcnM4KCksIHJlbW90ZUNlcnRpZmljYXRlU3RyaW5nLnNpemVJ
bkJ5dGVzKCkpOworICAgICAgICAgICAgY2VydGlmaWNhdGVzLmFwcGVuZChXVEZNb3ZlKGpzUmVt
b3RlQ2VydGlmaWNhdGUpKTsKKworICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZVN0cmluZyA9
IG1ha2VTdHJpbmcoY2VydGlmaWNhdGUuZ2V0KCkpOworICAgICAgICAgICAgYXV0byBqc0NlcnRp
ZmljYXRlID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNlcnRpZmljYXRlU3RyaW5nLmNoYXJh
Y3RlcnM4KCksIGNlcnRpZmljYXRlU3RyaW5nLnNpemVJbkJ5dGVzKCkpOworICAgICAgICAgICAg
Y2VydGlmaWNhdGVzLmFwcGVuZChXVEZNb3ZlKGpzQ2VydGlmaWNhdGUpKTsKKyAgICAgICAgfQor
ICAgICAgICAoKm1fY2xpZW50KS0+b25TdGF0ZUNoYW5nZWQodG9SVENEdGxzVHJhbnNwb3J0U3Rh
dGUoc3RhdGUpLCBXVEZNb3ZlKGNlcnRpZmljYXRlcykpOworICAgIH0pOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzI1NGJjODQ3ZGE3OTE2N2I4ZmMxOTQ5YjMwNGUxNzg3
Y2VkNWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaApAQCAtMCwwICsx
LDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUg
IkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJSVENEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUg
PHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVy
RHRsc1RyYW5zcG9ydEJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDRHRsc1RyYW5zcG9ydEJhY2tl
bmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4g
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgZXhwbGljaXQg
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENEVExT
VHJhbnNwb3J0PiYpOworICAgIH5HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCgpOworCisg
ICAgdm9pZCBzdGF0ZUNoYW5nZWQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENEdGxzVHJhbnNw
b3J0QmFja2VuZAorICAgIGNvbnN0IHZvaWQqIGJhY2tlbmQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2JhY2tlbmQuZ2V0KCk7IH0KKyAgICBVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0QmFja2Vu
ZD4gaWNlVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQo
Q2xpZW50JikgZmluYWw7CisgICAgdm9pZCB1bnJlZ2lzdGVyQ2xpZW50KCkgZmluYWw7CisKKyAg
ICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IG1fYmFja2VuZDsKKyAgICBzdGQ6Om9w
dGlvbmFsPFdlYWtQdHI8Q2xpZW50Pj4gbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjA5NGU2YjMzNzgyMDQ0M2IxODM5Nzk2MThmZjhmYTIzYjYyZjUxN2MK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEyNCBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lcldl
YlJUQ1V0aWxzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KKyNp
bmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+JiB0cmFuc3BvcnQpCisgICAg
OiBtX2JhY2tlbmQodHJhbnNwb3J0KQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOworCisgICAg
aWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2Jh
Y2tlbmQuZ2V0KCksICJub3RpZnk6OnRyYW5zcG9ydCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1l
ckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+aWNlVHJh
bnNwb3J0Q2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsKK30KKworR1N0cmVhbWVySWNlVHJhbnNw
b3J0QmFja2VuZDo6fkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIGlmIChH
X0lTX09CSkVDVChtX2ljZVRyYW5zcG9ydC5nZXQoKSkpCisgICAgICAgIGdfc2lnbmFsX2hhbmRs
ZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2ljZVRyYW5zcG9ydC5nZXQoKSwgdGhpcyk7CisgICAg
Z19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fYmFja2VuZC5nZXQoKSwgdGhp
cyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0
Q2hhbmdlZCgpCit7CisgICAgaWYgKEdfSVNfT0JKRUNUKG1faWNlVHJhbnNwb3J0LmdldCgpKSkK
KyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1faWNlVHJhbnNw
b3J0LmdldCgpLCB0aGlzKTsKKworICAgIGdfb2JqZWN0X2dldChtX2JhY2tlbmQuZ2V0KCksICJ0
cmFuc3BvcnQiLCAmbV9pY2VUcmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1faWNlVHJhbnNwb3J0LmdldCgpLCAibm90aWZ5OjpzdGF0
ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQp
IHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgIm5vdGlmeTo6
Z2F0aGVyaW5nLXN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5kLT5nYXRoZXJpbmdTdGF0ZUNoYW5nZWQo
KTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZDo6cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2NsaWVu
dCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBHc3RXZWJSVENJQ0VDb25uZWN0aW9u
U3RhdGUgdHJhbnNwb3J0U3RhdGU7CisgICAgR3N0V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgZ2F0
aGVyaW5nU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1faWNlVHJhbnNwb3J0LmdldCgpLCAic3Rh
dGUiLCAmdHJhbnNwb3J0U3RhdGUsICJnYXRoZXJpbmctc3RhdGUiLCAmZ2F0aGVyaW5nU3RhdGUs
IG51bGxwdHIpOworCisgICAgLy8gV2Ugc3RhcnQgb2JzZXJ2aW5nIGEgYml0IGxhdGUgYW5kIG1p
Z2h0IG1pc3MgdGhlIGNoZWNraW5nIHN0YXRlLiBTeW50aGVzaXplIGl0IGFzIG5lZWRlZC4KKyAg
ICBpZiAodHJhbnNwb3J0U3RhdGUgPiBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NI
RUNLSU5HICYmIHRyYW5zcG9ydFN0YXRlICE9IEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RB
VEVfQ0xPU0VEKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBX
ZWFrUHRyIHsgKnRoaXMgfV0geworICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1fY2xp
ZW50KQorICAgICAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fY2xpZW50LT5vblN0YXRlQ2hh
bmdlZChSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmcpOworICAgICAgICB9KTsKKyAgICB9
CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9
LCB0cmFuc3BvcnRTdGF0ZSwgZ2F0aGVyaW5nU3RhdGVdIHsKKyAgICAgICAgaWYgKCFwcm90ZWN0
ZWRUaGlzLT5tX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJvdGVjdGVk
VGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDSWNlVHJhbnNwb3J0U3RhdGUodHJh
bnNwb3J0U3RhdGUpKTsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9jbGllbnQtPm9uR2F0aGVy
aW5nU3RhdGVDaGFuZ2VkKHRvUlRDSWNlR2F0aGVyaW5nU3RhdGUoZ2F0aGVyaW5nU3RhdGUpKTsK
KyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lz
dGVyQ2xpZW50KCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50LmNsZWFy
KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2Vk
KCkKK3sKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBHc3RXZWJS
VENJQ0VDb25uZWN0aW9uU3RhdGUgdHJhbnNwb3J0U3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1f
aWNlVHJhbnNwb3J0LmdldCgpLCAic3RhdGUiLCAmdHJhbnNwb3J0U3RhdGUsIG51bGxwdHIpOwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfSwg
dHJhbnNwb3J0U3RhdGVdIHsKKyAgICAgICAgaWYgKCFwcm90ZWN0ZWRUaGlzLT5tX2NsaWVudCkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9jbGllbnQtPm9u
U3RhdGVDaGFuZ2VkKHRvUlRDSWNlVHJhbnNwb3J0U3RhdGUodHJhbnNwb3J0U3RhdGUpKTsKKyAg
ICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpnYXRoZXJpbmdT
dGF0ZUNoYW5nZWQoKQoreworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKwor
ICAgIEdzdFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIGdhdGhlcmluZ1N0YXRlOworICAgIGdfb2Jq
ZWN0X2dldChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgImdhdGhlcmluZy1zdGF0ZSIsICZnYXRoZXJp
bmdTdGF0ZSwgbnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9
IFdlYWtQdHIgeyAqdGhpcyB9LCBnYXRoZXJpbmdTdGF0ZV0geworICAgICAgICBpZiAoIXByb3Rl
Y3RlZFRoaXMtPm1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5tX2NsaWVudC0+b25HYXRoZXJpbmdTdGF0ZUNoYW5nZWQodG9SVENJY2VHYXRoZXJp
bmdTdGF0ZShnYXRoZXJpbmdTdGF0ZSkpOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNmZlYTUyMGJiYTkxMGZkMTdmMzAwNzk4NTUyN2E5ODY4OGY0YjA3ZAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaApAQCAtMCwwICsxLDU2IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSA8
d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kPiB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3Ry
ZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5z
cG9ydD4mKTsKKyAgICB+R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCgpOworCisgICAgdm9p
ZCBzdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lkIGdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpOworCitw
cml2YXRlOgorICAgIC8vIFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQKKyAgICBjb25zdCB2b2lkKiBi
YWNrZW5kKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICB2
b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAgIHZvaWQgdW5yZWdpc3RlckNs
aWVudCgpIGZpbmFsOworCisgICAgdm9pZCBpY2VUcmFuc3BvcnRDaGFuZ2VkKCk7CisKKyAgICBH
UmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IG1fYmFja2VuZDsKKyAgICBHUmVmUHRyPEdz
dFdlYlJUQ0lDRVRyYW5zcG9ydD4gbV9pY2VUcmFuc3BvcnQ7CisgICAgV2Vha1B0cjxDbGllbnQ+
IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRw
b2ludC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNDcxYzExNDIwY2U5ZmFhYTZm
YWI3NGI4OTY4MWFmNDYwZjJlYmUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAK
QEAgLTAsMCArMSwxMjQ3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxp
YSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oIgorCisj
aWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMu
aCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIkpTUlRDU3Rh
dHNSZXBvcnQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2lu
dENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUg
IlJUQ0RhdGFDaGFubmVsLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxFdmVudC5oIgorI2lu
Y2x1ZGUgIlJUQ0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJUQ09mZmVyT3B0aW9ucy5oIgor
I2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDU2N0cFRyYW5zcG9y
dEJhY2tlbmQuaCIKKyNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRl
ICJSVENTdGF0c1JlcG9ydC5oIgorI2luY2x1ZGUgIlJUQ1RyYWNrRXZlbnQuaCIKKyNpbmNsdWRl
ICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdzdC9zZHAvc2RwLmg+CisjaW5j
bHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRl
IDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9T
dHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRf
d2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93
ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50KEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZCYgcGVlckNvbm5lY3Rpb24pCisgICAgOiBtX3BlZXJDb25uZWN0aW9uQmFja2Vu
ZChwZWVyQ29ubmVjdGlvbikKKyAgICAsIG1fc3RhdHNDb2xsZWN0b3IoR1N0cmVhbWVyU3RhdHND
b2xsZWN0b3I6OmNyZWF0ZSgpKQorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICwgbV9z
dGF0c0xvZ1RpbWVyKCp0aGlzLCAmR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyU3RhdHNG
b3JMb2dnaW5nKQorICAgICwgbV9sb2dnZXIocGVlckNvbm5lY3Rpb24ubG9nZ2VyKCkpCisgICAg
LCBtX2xvZ0lkZW50aWZpZXIocGVlckNvbm5lY3Rpb24ubG9nSWRlbnRpZmllcigpKQorI2VuZGlm
Cit7CisgICAgZW5zdXJlR1N0cmVhbWVySW5pdGlhbGl6ZWQoKTsKKworICAgIHN0YXRpYyBzdGQ6
Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVn
UmVnaXN0ZXJlZEZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Vi
a2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZywgIndlYmtpdHdlYnJ0Y2VuZHBvaW50IiwgMCwgIldl
YktpdCBXZWJSVEMgZW5kLXBvaW50Iik7CisgICAgfSk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6aW5pdGlhbGl6ZVBpcGVsaW5lKCkKK3sKKyAgICBzdGF0aWMgaW50IG5QaXBl
bGluZSA9IDA7CisgICAgYXV0byBwaXBlbGluZU5hbWUgPSBtYWtlU3RyaW5nKCJ3ZWJraXQtd2Vi
cnQtcGlwZWxpbmUtIiwgblBpcGVsaW5lKTsKKyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5l
X25ldyhwaXBlbGluZU5hbWUuYXNjaWkoKS5kYXRhKCkpOworCisgICAgY29ubmVjdFNpbXBsZUJ1
c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdldCgpLCBbdGhpc10oR3N0TWVzc2FnZSogbWVz
c2FnZSkgeworICAgICAgICBoYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOworICAgIH0pOworCisgICAg
YXV0byBiaW5OYW1lID0gbWFrZVN0cmluZygid2Via2l0LXdlYnJ0Y2Jpbi0iLCBuUGlwZWxpbmUr
Kyk7CisgICAgbV93ZWJydGNCaW4gPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgid2VicnRjYmluIiwg
YmluTmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgbV9zdGF0c0NvbGxlY3Rvci0+c2V0RWxlbWVudChtX3dlYnJ0
Y0Jpbi5nZXQoKSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdl
dCgpLCAibm90aWZ5OjppY2UtY29ubmVjdGlvbi1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50KSB7CisgICAgICAgIGVuZFBvaW50LT5vbkljZUNv
bm5lY3Rpb25DaGFuZ2UoKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAibm90aWZ5OjppY2UtZ2F0aGVyaW5nLXN0YXRlIiwg
R19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQpIHsKKyAgICAg
ICAgZW5kUG9pbnQtPm9uSWNlR2F0aGVyaW5nQ2hhbmdlKCk7CisgICAgfSksIHRoaXMpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLW5lZ290aWF0
aW9uLW5lZWRlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBv
aW50KSB7CisgICAgICAgIGVuZFBvaW50LT5vbk5lZ290aWF0aW9uTmVlZGVkKCk7CisgICAgfSks
IHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwg
Im9uLWljZS1jYW5kaWRhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50
KiBlbmRQb2ludCwgZ3VpbnQgc2RwTUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5kaWRhdGUpIHsK
KyAgICAgICAgZW5kUG9pbnQtPm9uSWNlQ2FuZGlkYXRlKHNkcE1MaW5lSW5kZXgsIGNhbmRpZGF0
ZSk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0
Y0Jpbi5nZXQoKSwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQqIGVuZFBvaW50LCBHc3RQYWQqIHBhZCkgeworICAgICAgICAvLyBJZ25vcmUgb3V0Z29p
bmcgcGFkIG5vdGlmaWNhdGlvbnMuCisgICAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTihwYWQp
ICE9IEdTVF9QQURfU1JDKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWRBbmRXYWl0KFtwcm90ZWN0ZWRUaGlzID0gUmVmKCplbmRQb2ludCksIHBhZF0gewor
ICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+YWRkUmVtb3RlU3RyZWFt
KHBhZCk7CisgICAgICAgIH0pOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJwYWQtcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soK1td
KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RQYWQqIHBhZCkgeworICAgICAg
ICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5vdGlmaWNhdGlvbnMuCisgICAgICAgIGlmIChHU1Rf
UEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9QQURfU1JDKQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIGlmIChlbmRQb2ludC0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGVuZFBvaW50LT5yZW1vdmVSZW1vdGVTdHJlYW0ocGFkKTsKKyAgICB9KSwgdGhp
cyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJv
bi1kYXRhLWNoYW5uZWwiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBl
bmRQb2ludCwgR3N0V2ViUlRDRGF0YUNoYW5uZWwqIGNoYW5uZWwpIHsKKyAgICAgICAgZW5kUG9p
bnQtPm9uRGF0YUNoYW5uZWwoY2hhbm5lbCk7CisgICAgfSksIHRoaXMpOworCisgICAgZ3N0X2Jp
bl9hZGQoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX3dlYnJ0Y0Jpbi5nZXQoKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dTdHJlYW1lck1lZGlhRW5kcG9pbnQ6On5HU3RyZWFt
ZXJNZWRpYUVuZHBvaW50KCkKK3sKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgdGVhcmRv
d25QaXBlbGluZSgpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRlYXJkb3du
UGlwZWxpbmUoKQoreworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0b3BMb2dnaW5n
U3RhdHMoKTsKKyNlbmRpZgorICAgIG1fc3RhdHNDb2xsZWN0b3ItPnNldEVsZW1lbnQobnVsbHB0
cik7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9waXBlbGlu
ZS5nZXQoKSwgdGhpcyk7CisgICAgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayht
X3BpcGVsaW5lLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5n
ZXQoKSwgR1NUX1NUQVRFX05VTEwpOworCisgICAgbV9zb3VyY2VzLmNsZWFyKCk7CisgICAgbV9y
ZW1vdGVNTGluZUluZm9zLmNsZWFyKCk7CisgICAgbV9yZW1vdGVTdHJlYW1zQnlJZC5jbGVhcigp
OworICAgIG1fd2VicnRjQmluID0gbnVsbHB0cjsKKyAgICBtX3BpcGVsaW5lID0gbnVsbHB0cjsK
K30KKworYm9vbCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3Nh
Z2UqIG1lc3NhZ2UpCit7CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7
CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9U
X0ZJTEVfV0lUSF9UUyhHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19H
UkFQSF9TSE9XX0FMTCwgImVvcyIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9NRVNT
QUdFX0VMRU1FTlQ6IHsKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGdzdF9tZXNzYWdlX2dl
dF9zdHJ1Y3R1cmUobWVzc2FnZSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKGdzdF9zdHJ1Y3R1
cmVfZ2V0X25hbWUoZGF0YSksICJHc3RCaW5Gb3J3YXJkZWQiKSkgeworICAgICAgICAgICAgR1Jl
ZlB0cjxHc3RNZXNzYWdlPiBzdWJNZXNzYWdlOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9n
ZXQoZGF0YSwgIm1lc3NhZ2UiLCBHU1RfVFlQRV9NRVNTQUdFLCAmc3ViTWVzc2FnZS5vdXRQdHIo
KSwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShzdWJNZXNzYWdl
LmdldCgpKSA9PSBHU1RfTUVTU0FHRV9FT1MpCisgICAgICAgICAgICAgICAgZGlzcG9zZUVsZW1l
bnRDaGFpbihHU1RfRUxFTUVOVF9DQVNUKEdTVF9NRVNTQUdFX1NSQyhzdWJNZXNzYWdlLmdldCgp
KSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6ZGlzcG9zZUVsZW1lbnRDaGFpbihHc3RFbGVtZW50KiBlbGVtZW50KQor
eworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkdvdCBlbGVtZW50IEVP
UyBtZXNzYWdlIGZyb20gJSIgR1NUX1BUUl9GT1JNQVQsIGVsZW1lbnQpOworCisgICAgYXV0byBw
YWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZWxlbWVudCwgInNpbmsi
KSk7CisgICAgYXV0byBwZWVyID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIocGFkLmdldCgp
KSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
IHRydWUpOworICAgIGdzdF9wYWRfdW5saW5rKHBlZXIuZ2V0KCksIHBhZC5nZXQoKSk7CisgICAg
Z3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBlbGVtZW50KTsK
KyAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKG1fd2VicnRjQmluLmdldCgpLCBw
ZWVyLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoZWxlbWVudCwgR1NUX1NUQVRF
X05VTEwpOworICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9waXBlbGluZS5nZXQo
KSwgZmFsc2UpOworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3Vy
YXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAg
aWYgKG1fcGlwZWxpbmUpCisgICAgICAgIHRlYXJkb3duUGlwZWxpbmUoKTsKKworICAgIGlmICgh
aW5pdGlhbGl6ZVBpcGVsaW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8g
YnVuZGxlUG9saWN5ID0gYnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlv
bik7CisgICAgYXV0byBpY2VUcmFuc3BvcnRQb2xpY3kgPSBpY2VUcmFuc3BvcnRQb2xpY3lGcm9t
Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKKyAgICBnX29iamVjdF9zZXQobV93ZWJydGNC
aW4uZ2V0KCksICJidW5kbGUtcG9saWN5IiwgYnVuZGxlUG9saWN5LCAiaWNlLXRyYW5zcG9ydC1w
b2xpY3kiLCBpY2VUcmFuc3BvcnRQb2xpY3ksIG51bGxwdHIpOworCisgICAgZm9yIChhdXRvJiBz
ZXJ2ZXIgOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHsKKyAgICAgICAgYm9vbCBzdHVuU2V0
ID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgdXJsIDogc2VydmVyLnVybHMpIHsKKyAgICAg
ICAgICAgIGlmICh1cmwucHJvdG9jb2woKS5zdGFydHNXaXRoKCJ0dXJuIikpIHsKKyAgICAgICAg
ICAgICAgICBhdXRvIHZhbGlkID0gdXJsLnN0cmluZygpLmlzb2xhdGVkQ29weSgpLnJlcGxhY2Uo
InR1cm46IiwgInR1cm46Ly8iKS5yZXBsYWNlKCJ0dXJuczoiLCAidHVybnM6Ly8iKTsKKyAgICAg
ICAgICAgICAgICBVUkwgdmFsaWRVUkwoVVJMKCksIHZhbGlkKTsKKyAgICAgICAgICAgICAgICAv
LyBGSVhNRTogbGlibmljZSBjdXJyZW50bHkgZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBJUHY2IGFk
ZHJlc3NlcyB2ZXJ5IHdlbGwuCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkVVJMLmhvc3QoKS5z
dGFydHNXaXRoKCdbJykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgICAgIHZhbGlkVVJMLnNldFVzZXIoc2VydmVyLnVzZXJuYW1lKTsKKyAgICAgICAgICAgICAg
ICB2YWxpZFVSTC5zZXRQYXNzd29yZChzZXJ2ZXIuY3JlZGVudGlhbCk7CisgICAgICAgICAgICAg
ICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJhZGQtdHVybi1zZXJ2ZXIiLCB2YWxpZFVSTC5zdHJp
bmcoKS51dGY4KCkuZGF0YSgpLCAmcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3Vs
dCkKKyAgICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVuYWJsZSB0byB1c2UgVFVSTiBz
ZXJ2ZXI6ICVzIiwgdmFsaWRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICBpZiAoIXN0dW5TZXQgJiYgdXJsLnByb3RvY29sKCkuc3RhcnRzV2l0
aCgic3R1biIpKSB7CisgICAgICAgICAgICAgICAgYXV0byB2YWxpZCA9IHVybC5zdHJpbmcoKS5p
c29sYXRlZENvcHkoKS5yZXBsYWNlKCJzdHVuOiIsICJzdHVuOi8vIik7CisgICAgICAgICAgICAg
ICAgVVJMIHZhbGlkVVJMKFVSTCgpLCB2YWxpZCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IGxpYm5pY2UgY3VycmVudGx5IGRvZXNuJ3Qgc2VlbSB0byBoYW5kbGUgSVB2NiBhZGRyZXNzZXMg
dmVyeSB3ZWxsLgorICAgICAgICAgICAgICAgIGlmICh2YWxpZFVSTC5ob3N0KCkuc3RhcnRzV2l0
aCgnWycpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB2
YWxpZFVSTC5zZXRVc2VyKHNlcnZlci51c2VybmFtZSk7CisgICAgICAgICAgICAgICAgdmFsaWRV
Ukwuc2V0UGFzc3dvcmQoc2VydmVyLmNyZWRlbnRpYWwpOworICAgICAgICAgICAgICAgIGdfb2Jq
ZWN0X3NldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInN0dW4tc2VydmVyIiwgdmFsaWRVUkwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgc3R1blNldCA9IHRy
dWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXSVA6IGh0dHBz
Oi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVy
Z2VfcmVxdWVzdHMvMzAyCisgICAgR1NUX0ZJWE1FKCIlenUgY3VzdG9tIGNlcnRpZmljYXRlcyBu
b3QgcHJvcGFnYXRlZCB0byB3ZWJydGNiaW4iLCBjb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5z
aXplKCkpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdT
VF9TVEFURV9QTEFZSU5HKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJFbmQtcG9pbnQgcmVhZHkiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpyZXN0YXJ0SWNlKCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJyZXN0YXJ0aW5nIElDRSIpOworICAgIC8vIFdJUCBpbiBodHRwczov
L2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdl
X3JlcXVlc3RzLzE4NzcKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gb3B0aW9ucyhnc3Rf
c3RydWN0dXJlX25ldygid2VicnRjYmluLW9mZmVyLW9wdGlvbnMiLCAiaWNlLXJlc3RhcnQiLCBH
X1RZUEVfQk9PTEVBTiwgVFJVRSwgbnVsbHB0cikpOworICAgIGluaXRpYXRlKHRydWUsIFdURk1v
dmUob3B0aW9ucykpOworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UlRDU2Rw
VHlwZSwgU3RyaW5nPj4gZmV0Y2hEZXNjcmlwdGlvbihHc3RFbGVtZW50KiB3ZWJydGNCaW4sIGNv
bnN0IGNoYXIqIG5hbWUpCit7CisgICAgaWYgKCF3ZWJydGNCaW4pCisgICAgICAgIHJldHVybiB7
IH07CisKKyAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVz
Y3JpcHRpb247CisgICAgZ19vYmplY3RfZ2V0KHdlYnJ0Y0JpbiwgbWFrZVN0cmluZyhuYW1lLCAi
LWRlc2NyaXB0aW9uIikudXRmOCgpLmRhdGEoKSwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxs
cHRyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
R1VuaXF1ZVB0cjxjaGFyPiBzZHBTdHJpbmcoZ3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoZGVzY3Jp
cHRpb24tPnNkcCkpOworICAgIEdTVF9UUkFDRV9PQkpFQ1Qod2VicnRjQmluLCAiJXMtZGVzY3Jp
cHRpb24gU0RQOiAlcyIsIG5hbWUsIHNkcFN0cmluZy5nZXQoKSk7CisgICAgcmV0dXJuIHsgeyBm
cm9tU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShkZXNjcmlwdGlvbi5nZXQoKSksIHNkcFN0cmluZy5n
ZXQoKSB9IH07Cit9CisKK3N0YXRpYyBHc3RXZWJSVENTaWduYWxpbmdTdGF0ZSBmZXRjaFNpZ25h
bGluZ1N0YXRlKEdzdEVsZW1lbnQqIHdlYnJ0Y0JpbikKK3sKKyAgICBHc3RXZWJSVENTaWduYWxp
bmdTdGF0ZSBzdGF0ZTsKKyAgICBnX29iamVjdF9nZXQod2VicnRjQmluLCAic2lnbmFsaW5nLXN0
YXRlIiwgJnN0YXRlLCBudWxscHRyKTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBkZXNjKGdfZW51bV90b19zdHJpbmcoR1NUX1RZUEVfV0VCUlRD
X1NJR05BTElOR19TVEFURSwgc3RhdGUpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHdlYnJ0Y0Jp
biwgIlNpZ25hbGluZyBzdGF0ZSBzZXQgdG8gJXMiLCBkZXNjLmdldCgpKTsKKyNlbmRpZgorICAg
IHJldHVybiBzdGF0ZTsKK30KKworZW51bSBjbGFzcyBHYXRoZXJTaWduYWxpbmdTdGF0ZSB7IE5v
LCBZZXMgfTsKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6RGVz
Y3JpcHRpb25TdGF0ZXM+IGRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4oR3N0RWxlbWVudCogd2Vi
cnRjQmluLCBHYXRoZXJTaWduYWxpbmdTdGF0ZSBnYXRoZXJTaWduYWxpbmdTdGF0ZSA9IEdhdGhl
clNpZ25hbGluZ1N0YXRlOjpObykKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJUQ1NkcFR5cGU+IGN1
cnJlbnRMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSwgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHBU
eXBlLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nUmVtb3RlRGVzY3Jp
cHRpb25TZHBUeXBlOworICAgIFN0cmluZyBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcCwgcGVu
ZGluZ0xvY2FsRGVzY3JpcHRpb25TZHAsIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvblNkcCwgcGVu
ZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwOworICAgIGlmIChhdXRvIGN1cnJlbnRMb2NhbERlc2Ny
aXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3ZWJydGNCaW4sICJjdXJyZW50LWxvY2FsIikpIHsK
KyAgICAgICAgYXV0byBbc2RwVHlwZSwgZGVzY3JpcHRpb25dID0gKmN1cnJlbnRMb2NhbERlc2Ny
aXB0aW9uOworICAgICAgICBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcFR5cGUgPSBzZHBUeXBl
OworICAgICAgICBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcCA9IFdURk1vdmUoZGVzY3JpcHRp
b24pOworICAgIH0KKyAgICBpZiAoYXV0byBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiA9IGZldGNo
RGVzY3JpcHRpb24od2VicnRjQmluLCAicGVuZGluZy1sb2NhbCIpKSB7CisgICAgICAgIGF1dG8g
W3NkcFR5cGUsIGRlc2NyaXB0aW9uXSA9ICpwZW5kaW5nTG9jYWxEZXNjcmlwdGlvbjsKKyAgICAg
ICAgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgcGVu
ZGluZ0xvY2FsRGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9Cisg
ICAgaWYgKGF1dG8gY3VycmVudFJlbW90ZURlc2NyaXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3
ZWJydGNCaW4sICJjdXJyZW50LXJlbW90ZSIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5cGUsIGRl
c2NyaXB0aW9uXSA9ICpjdXJyZW50UmVtb3RlRGVzY3JpcHRpb247CisgICAgICAgIGN1cnJlbnRS
ZW1vdGVEZXNjcmlwdGlvblNkcFR5cGUgPSBzZHBUeXBlOworICAgICAgICBjdXJyZW50UmVtb3Rl
RGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAgaWYgKGF1
dG8gcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3ZWJydGNCaW4s
ICJwZW5kaW5nLXJlbW90ZSIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5cGUsIGRlc2NyaXB0aW9u
XSA9ICpwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb247CisgICAgICAgIHBlbmRpbmdSZW1vdGVEZXNj
cmlwdGlvblNkcFR5cGUgPSBzZHBUeXBlOworICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3JpcHRp
b25TZHAgPSBkZXNjcmlwdGlvbjsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFJUQ1NpZ25h
bGluZ1N0YXRlPiBzaWduYWxpbmdTdGF0ZTsKKyAgICBpZiAoZ2F0aGVyU2lnbmFsaW5nU3RhdGUg
PT0gR2F0aGVyU2lnbmFsaW5nU3RhdGU6OlllcykKKyAgICAgICAgc2lnbmFsaW5nU3RhdGUgPSB0
b1NpZ25hbGluZ1N0YXRlKGZldGNoU2lnbmFsaW5nU3RhdGUod2VicnRjQmluKSk7CisKKyAgICBy
ZXR1cm4gUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpEZXNjcmlwdGlvblN0YXRlcyB7CisgICAgICAg
IHNpZ25hbGluZ1N0YXRlLAorICAgICAgICBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcFR5cGUs
IGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uU2RwLAorICAgICAgICBwZW5kaW5nTG9jYWxEZXNjcmlw
dGlvblNkcFR5cGUsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwLAorICAgICAgICBjdXJyZW50
UmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHAsCisg
ICAgICAgIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvblNkcFR5cGUsIHBlbmRpbmdSZW1vdGVEZXNj
cmlwdGlvblNkcAorICAgIH07Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9T
ZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiogZGVzY3JpcHRp
b24pCit7CisgICAgc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb24sIHRydWUsIFtwcm90ZWN0ZWRU
aGlzID0gUmVmKCp0aGlzKV0geworICAgICAgICBhdXRvIGRlc2NyaXB0aW9ucyA9IGRlc2NyaXB0
aW9uc0Zyb21XZWJSVENCaW4ocHJvdGVjdGVkVGhpcy0+bV93ZWJydGNCaW4uZ2V0KCksIEdhdGhl
clNpZ25hbGluZ1N0YXRlOjpZZXMpOworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1NDVFBUcmFu
c3BvcnQ+IHRyYW5zcG9ydDsKKyAgICAgICAgZ19vYmplY3RfZ2V0KHByb3RlY3RlZFRoaXMtPm1f
d2VicnRjQmluLmdldCgpLCAic2N0cC10cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBu
dWxscHRyKTsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQu
c2V0TG9jYWxEZXNjcmlwdGlvblN1Y2NlZWRlZChXVEZNb3ZlKGRlc2NyaXB0aW9ucyksIHRyYW5z
cG9ydCA/IG1ha2VVbmlxdWU8R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ+KFdURk1vdmUo
dHJhbnNwb3J0KSkgOiBudWxscHRyKTsKKyAgICB9LCBbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhp
cyldKGNvbnN0IEdFcnJvciogZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLT5j
b2RlID09IEdTVF9XRUJSVENfRVJST1JfSU5WQUxJRF9TVEFURSkKKyAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRpb25GYWls
ZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gc2V0IGxvY2FsIGFu
c3dlciBzZHA6IG5vIHBlbmRpbmcgcmVtb3RlIGRlc2NyaXB0aW9uLiJfcyB9KTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQu
c2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgIlVu
YWJsZSB0byBhcHBseSBzZXNzaW9uIGxvY2FsIGRlc2NyaXB0aW9uIl9zIH0pOworICAgIH0pOwor
fQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldFJlbW90ZURlc2NyaXB0aW9uU3Vj
Y2VlZGVkKCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBY2tp
bmcgcmVtb3RlIGRlc2NyaXB0aW9uIik7CisgICAgYXV0byBkZXNjcmlwdGlvbnMgPSBkZXNjcmlw
dGlvbnNGcm9tV2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgpLCBHYXRoZXJTaWduYWxpbmdTdGF0
ZTo6WWVzKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ+IHRyYW5zcG9ydDsK
KyAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCksICJzY3RwLXRyYW5zcG9ydCIsICZ0
cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5k
LnNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKFdURk1vdmUoZGVzY3JpcHRpb25zKSwgdHJh
bnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZD4oV1RGTW92
ZSh0cmFuc3BvcnQpKSA6IG51bGxwdHIpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmRvU2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKK3sKKyAgICBzZXREZXNjcmlwdGlvbigmZGVzY3JpcHRpb24sIGZhbHNlLCBb
cHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyldIHsKKyAgICAgICAgcHJvdGVjdGVkVGhpcy0+c2V0
UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQoKTsKKyAgICB9LCBbcHJvdGVjdGVkVGhpcyA9IFJl
ZigqdGhpcyldKGNvbnN0IEdFcnJvciogZXJyb3IpIHsKKyAgICAgICAgaWYgKGVycm9yICYmIGVy
cm9yLT5jb2RlID09IEdTVF9XRUJSVENfRVJST1JfSU5WQUxJRF9TVEFURSkKKyAgICAgICAgICAg
IHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldFJlbW90ZURlc2NyaXB0
aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIHNldCBy
ZW1vdGUgYW5zd2VyIHNkcCJfcyB9KTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgcHJvdGVj
dGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuc2V0UmVtb3RlRGVzY3JpcHRpb25GYWls
ZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiBy
ZW1vdGUgZGVzY3JpcHRpb24iX3MgfSk7CisgICAgfSk7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECisgICAgc3RhcnRMb2dnaW5nU3RhdHMoKTsKKyNlbmRpZgorfQorCitzdHJ1Y3QgU2V0RGVz
Y3JpcHRpb25DYWxsRGF0YSB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOwor
ICAgIFNldERlc2NyaXB0aW9uQ2FsbERhdGEoR1N0cmVhbWVyTWVkaWFFbmRwb2ludCYgZW5kUG9p
bnQsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzdWNjZXNzQ2FsbGJhY2ssIEZ1bmN0aW9uPHZvaWQoY29u
c3QgR0Vycm9yKik+JiYgZmFpbHVyZUNhbGxiYWNrKQorICAgICAgICA6IHN1Y2Nlc3NDYWxsYmFj
ayhXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjaykpCisgICAgICAgICwgZmFpbHVyZUNhbGxiYWNrKFdU
Rk1vdmUoZmFpbHVyZUNhbGxiYWNrKSkKKyAgICAgICAgLCBlbmRQb2ludChlbmRQb2ludCkgeyB9
CisKKyAgICBGdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjazsKKyAgICBGdW5jdGlvbjx2
b2lkKGNvbnN0IEdFcnJvciopPiBmYWlsdXJlQ2FsbGJhY2s7CisgICAgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludCYgZW5kUG9pbnQ7Cit9OworCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNl
dERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiogZGVzY3JpcHRpb24sIGJv
b2wgaXNMb2NhbCwgRnVuY3Rpb248dm9pZCgpPiYmIHN1Y2Nlc3NDYWxsYmFjaywgRnVuY3Rpb248
dm9pZChjb25zdCBHRXJyb3IqKT4mJiBmYWlsdXJlQ2FsbGJhY2spCit7CisgICAgR3N0U0RQTWVz
c2FnZSogbWVzc2FnZTsKKyAgICBhdXRvIHNkcFR5cGUgPSBSVENTZHBUeXBlOjpPZmZlcjsKKwor
ICAgIGlmIChkZXNjcmlwdGlvbikgeworICAgICAgICBpZiAoZ3N0X3NkcF9tZXNzYWdlX25ld19m
cm9tX3RleHQocmVpbnRlcnByZXRfY2FzdDxjb25zdCBjaGFyKj4oZGVzY3JpcHRpb24tPnNkcCgp
LmNoYXJhY3RlcnM4KCkpLCAmbWVzc2FnZSkgIT0gR1NUX1NEUF9PSykgeworICAgICAgICAgICAg
ZmFpbHVyZUNhbGxiYWNrKG51bGxwdHIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9
CisgICAgICAgIHNkcFR5cGUgPSBkZXNjcmlwdGlvbi0+dHlwZSgpOworICAgIH0gZWxzZSBpZiAo
Z3N0X3NkcF9tZXNzYWdlX25ldygmbWVzc2FnZSkgIT0gR1NUX1NEUF9PSykgeworICAgICAgICBm
YWlsdXJlQ2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBp
ZiAoIWlzTG9jYWwpCisgICAgICAgIHN0b3JlUmVtb3RlTUxpbmVJbmZvKG1lc3NhZ2UpOworCisg
ICAgYXV0byB0eXBlID0gdG9TZXNzaW9uRGVzY3JpcHRpb25UeXBlKHNkcFR5cGUpOworICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNyZWF0aW5nICVzIHNlc3Npb24gZm9y
IFNEUCAlcyIsIGlzTG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsIGdzdF93ZWJydGNfc2RwX3R5
cGVfdG9fc3RyaW5nKHR5cGUpKTsKKworICAgIEdVbmlxdWVQdHI8R3N0V2ViUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uPiBzZXNzaW9uRGVzY3JpcHRpb24oZ3N0X3dlYnJ0Y19zZXNzaW9uX2Rlc2NyaXB0
aW9uX25ldyh0eXBlLCBtZXNzYWdlKSk7CisgICAgYXV0byBzaWduYWxOYW1lID0gbWFrZVN0cmlu
Zygic2V0LSIsIGlzTG9jYWwgPyAibG9jYWwiIDogInJlbW90ZSIsICItZGVzY3JpcHRpb24iKTsK
KyAgICBhdXRvIGRhdGEgPSBtYWtlVW5pcXVlPFNldERlc2NyaXB0aW9uQ2FsbERhdGE+KCp0aGlz
LCBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayksIFdURk1vdmUoZmFpbHVyZUNhbGxiYWNrKSk7Cisg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCBzaWduYWxOYW1lLmFz
Y2lpKCkuZGF0YSgpLCBzZXNzaW9uRGVzY3JpcHRpb24uZ2V0KCksIGdzdF9wcm9taXNlX25ld193
aXRoX2NoYW5nZV9mdW5jKFtdKEdzdFByb21pc2UqIHByb21pc2UsIGdwb2ludGVyIHVzZXJEYXRh
KSB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxTZXREZXNjcmlwdGlvbkNhbGxEYXRhPiBkYXRh
KHJlaW50ZXJwcmV0X2Nhc3Q8U2V0RGVzY3JpcHRpb25DYWxsRGF0YSo+KHVzZXJEYXRhKSk7Cisg
ICAgICAgIGF1dG8gcmVzdWx0ID0gZ3N0X3Byb21pc2Vfd2FpdChwcm9taXNlKTsKKyAgICAgICAg
YXV0byBjbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICAgICAgZ3N0X3Byb21p
c2VfdW5yZWYocHJvbWlzZSk7CisgICAgICAgIH0pOworCisgICAgICAgIGNvbnN0IGF1dG8qIHJl
cGx5ID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UpOworICAgICAgICBpZiAocmVzdWx0
ICE9IEdTVF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEIHx8IChyZXBseSAmJiBnc3Rfc3RydWN0dXJl
X2hhc19maWVsZChyZXBseSwgImVycm9yIikpKSB7CisgICAgICAgICAgICBHVW5pcXVlT3V0UHRy
PEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAgICBpZiAocmVwbHkpIHsKKyAgICAgICAgICAgICAg
ICBnc3Rfc3RydWN0dXJlX2dldChyZXBseSwgImVycm9yIiwgR19UWVBFX0VSUk9SLCAmZXJyb3Iu
b3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QoZGF0
YS0+ZW5kUG9pbnQucGlwZWxpbmUoKSwgIlVuYWJsZSB0byBzZXQgZGVzY3JpcHRpb24sIGVycm9y
OiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoW2Vycm9yID0gZXJyb3IuZ2V0KCksIHByb3RlY3RlZFRoaXMgPSBSZWYoZGF0
YS0+ZW5kUG9pbnQpLCBmYWlsdXJlQ2FsbGJhY2sgPSBXVEZNb3ZlKGRhdGEtPmZhaWx1cmVDYWxs
YmFjayldIHsKKyAgICAgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkp
CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICBmYWlsdXJlQ2Fs
bGJhY2soZXJyb3IpOworICAgICAgICAgICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZihkYXRh
LT5lbmRQb2ludCksIHN1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUoZGF0YS0+c3VjY2Vzc0NhbGxi
YWNrKV0geworICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjaygpOworICAg
ICAgICB9KTsKKyAgICB9LCBkYXRhLnJlbGVhc2UoKSwgbnVsbHB0cikpOworfQorCit2b2lkIEdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0b3JlUmVtb3RlTUxpbmVJbmZvKEdzdFNEUE1lc3NhZ2Uq
IG1lc3NhZ2UpCit7CisgICAgbV9yZW1vdGVNTGluZUluZm9zLmNsZWFyKCk7CisgICAgdW5zaWdu
ZWQgdG90YWxNZWRpYXMgPSBnc3Rfc2RwX21lc3NhZ2VfbWVkaWFzX2xlbihtZXNzYWdlKTsKKyAg
ICBtX3JlbW90ZU1MaW5lSW5mb3MucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsTWVkaWFzKTsKKyAgICBH
U1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTdG9yaW5nICV1IHJlbW90ZSBwZW5k
aW5nIG1saW5lcyIsIHRvdGFsTWVkaWFzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dG90YWxNZWRpYXM7IGkrKykgeworICAgICAgICBjb25zdCBHc3RTRFBNZWRpYSogbWVkaWEgPSBn
c3Rfc2RwX21lc3NhZ2VfZ2V0X21lZGlhKG1lc3NhZ2UsIGkpOworICAgICAgICBjb25zdCBjaGFy
KiB0eXAgPSBnc3Rfc2RwX21lZGlhX2dldF9tZWRpYShtZWRpYSk7CisgICAgICAgIGlmICghZ19z
dHJfZXF1YWwodHlwLCAiYXVkaW8iKSAmJiAhZ19zdHJfZXF1YWwodHlwLCAidmlkZW8iKSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAg
ICAgICBHVW5pcXVlUHRyPGNoYXI+IG1lZGlhUmVwcmVzZW50YXRpb24oZ3N0X3NkcF9tZWRpYV9h
c190ZXh0KG1lZGlhKSk7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJQcm9jZXNzaW5nIG1lZGlhOlxuJXMiLCBtZWRpYVJlcHJlc2VudGF0aW9uLmdldCgpKTsKKyNl
bmRpZgorICAgICAgICBjb25zdCBjaGFyKiBtaWQgPSBnc3Rfc2RwX21lZGlhX2dldF9hdHRyaWJ1
dGVfdmFsKG1lZGlhLCAibWlkIik7CisgICAgICAgIGlmICghbWlkKQorICAgICAgICAgICAgY29u
dGludWU7CisKKyAgICAgICAgYm9vbCBpc0luYWN0aXZlID0gZmFsc2U7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaWkgPSAwOyBpaSA8IGdzdF9zZHBfbWVkaWFfYXR0cmlidXRlc19sZW4obWVkaWEp
OyBpaSsrKSB7CisgICAgICAgICAgICBjb25zdCBHc3RTRFBBdHRyaWJ1dGUqIGF0dHIgPSBnc3Rf
c2RwX21lZGlhX2dldF9hdHRyaWJ1dGUobWVkaWEsIGlpKTsKKyAgICAgICAgICAgIGlmICghZ19z
dHJjbXAwKGF0dHItPmtleSwgImluYWN0aXZlIikpIHsKKyAgICAgICAgICAgICAgICBpc0luYWN0
aXZlID0gdHJ1ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoaXNJbmFjdGl2ZSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU2tpcHBpbmcgaW5hY3RpdmUgbWVkaWEiKTsKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisKKyAgICAgICAgbV9tZWRpYUZvck1pZC5zZXQo
U3RyaW5nKG1pZCksIGdfc3RyX2VxdWFsKHR5cCwgImF1ZGlvIikgPyBSZWFsdGltZU1lZGlhU291
cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKTsKKwor
ICAgICAgICAvLyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1w
bHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3RzLzE5MDcKKyAgICAgICAgaWYgKHNkcE1lZGlhSGFz
QXR0cmlidXRlS2V5KG1lZGlhLCAiaWNlLWxpdGUiKSkgeworICAgICAgICAgICAgR1JlZlB0cjxH
T2JqZWN0PiBpY2U7CisgICAgICAgICAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCks
ICJpY2UtYWdlbnQiLCAmaWNlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGdfb2Jq
ZWN0X3NldChpY2UuZ2V0KCksICJpY2UtbGl0ZSIsIFRSVUUsIG51bGxwdHIpOworICAgICAgICB9
CisKKyAgICAgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsK
KyAgICAgICAgVmVjdG9yPGludD4gcGF5bG9hZFR5cGVzOworICAgICAgICB1bnNpZ25lZCB0b3Rh
bEZvcm1hdHMgPSBnc3Rfc2RwX21lZGlhX2Zvcm1hdHNfbGVuKG1lZGlhKTsKKyAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTWVkaWEgJXMgaGFzICV1IGZvcm1hdHMi
LCB0eXAsIHRvdGFsRm9ybWF0cyk7CisgICAgICAgIGZvciAodW5zaWduZWQgaiA9IDA7IGogPCB0
b3RhbEZvcm1hdHM7IGorKykgeworICAgICAgICAgICAgYXV0byBmb3JtYXQgPSBTdHJpbmcoZ3N0
X3NkcF9tZWRpYV9nZXRfZm9ybWF0KG1lZGlhLCBqKSk7CisgICAgICAgICAgICBhdXRvIHBheWxv
YWRUeXBlID0gcGFyc2VJbnRlZ2VyPGludD4oZm9ybWF0KTsKKyAgICAgICAgICAgIGlmICghcGF5
bG9hZFR5cGUgfHwgISpwYXlsb2FkVHlwZSkgeworICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5H
X09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiSW52YWxpZCBwYXlsb2FkIHR5cGU6ICVzIiwgZm9y
bWF0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYXV0byBmb3JtYXRDYXBzID0gYWRvcHRHUmVmKGdzdF9zZHBfbWVk
aWFfZ2V0X2NhcHNfZnJvbV9tZWRpYShtZWRpYSwgKnBheWxvYWRUeXBlKSk7CisgICAgICAgICAg
ICBpZiAoIWZvcm1hdENhcHMpIHsKKyAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIk5vIGNhcHMgZm91bmQgZm9yIHBheWxvYWQgdHlwZSAlZCIsICpw
YXlsb2FkVHlwZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFJlbGF5IFNEUCBhdHRyaWJ1dGVzIHRvIHRoZSBjYXBzLCB0aGlzIGlz
IHNwZWNpYWxseSB1c2VmdWwgc28gdGhhdCBlbGVtZW50cyBpbgorICAgICAgICAgICAgLy8gd2Vi
cnRjYmluIHdpbGwgYmUgYWJsZSB0byBlbmFibGUgUlRQIGhlYWRlciBleHRlbnNpb25zLgorICAg
ICAgICAgICAgZ3N0X3NkcF9tZWRpYV9hdHRyaWJ1dGVzX3RvX2NhcHMobWVkaWEsIGZvcm1hdENh
cHMuZ2V0KCkpOworCisgICAgICAgICAgICBnc3RfY2Fwc19hcHBlbmQoY2Fwcy5nZXQoKSwgZm9y
bWF0Q2Fwcy5sZWFrUmVmKCkpOworICAgICAgICAgICAgbV9wdENvdW50ZXIgPSBzdGQ6Om1heCht
X3B0Q291bnRlciwgKnBheWxvYWRUeXBlICsgMSk7CisgICAgICAgICAgICBwYXlsb2FkVHlwZXMu
YXBwZW5kKCpwYXlsb2FkVHlwZSk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0b3Rh
bENhcHMgPSBnc3RfY2Fwc19nZXRfc2l6ZShjYXBzLmdldCgpKTsKKyAgICAgICAgaWYgKHRvdGFs
Q2FwcykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHRvdGFsQ2Fwczsg
aisrKSB7CisgICAgICAgICAgICAgICAgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fw
c19nZXRfc3RydWN0dXJlKGNhcHMuZ2V0KCksIGopOworICAgICAgICAgICAgICAgIGdzdF9zdHJ1
Y3R1cmVfc2V0X25hbWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1ydHAiKTsKKyAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNh
Y2hpbmcgcGF5bG9hZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSk7CisgICAg
ICAgICAgICBtX3JlbW90ZU1MaW5lSW5mb3MuYXBwZW5kKHsgV1RGTW92ZShjYXBzKSwgZmFsc2Us
IFdURk1vdmUocGF5bG9hZFR5cGVzKSB9KTsKKyAgICAgICAgfQorICAgIH0KK30KKwordm9pZCBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb25maWd1cmVBbmRMaW5rU291cmNlKFJlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciYgc291cmNlKQoreworICAgIGF1dG8gY2FwcyA9IHNv
dXJjZS5hbGxvd2VkQ2FwcygpOworICAgIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFBlbmRpbmdN
TGluZUluZm8sIEdSZWZQdHI8R3N0Q2Fwcz4+PiBmb3VuZDsKKyAgICBmb3IgKGF1dG8mIG1MaW5l
SW5mbyA6IG1fcmVtb3RlTUxpbmVJbmZvcykgeworICAgICAgICBpZiAobUxpbmVJbmZvLmlzVXNl
ZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBnc3RfY2Fwc19nZXRfc2l6ZShtTGluZUluZm8uY2Fwcy5nZXQoKSk7IGkrKykgeworICAg
ICAgICAgICAgYXV0byogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShtTGluZUlu
Zm8uY2Fwcy5nZXQoKSwgaSk7CisgICAgICAgICAgICBhdXRvIGNhcHMyID0gYWRvcHRHUmVmKGdz
dF9jYXBzX25ld19mdWxsKGdzdF9zdHJ1Y3R1cmVfY29weShzdHJ1Y3R1cmUpLCBudWxscHRyKSk7
CisgICAgICAgICAgICBhdXRvIGludGVyc2VjdGVkID0gYWRvcHRHUmVmKGdzdF9jYXBzX2ludGVy
c2VjdChjYXBzLmdldCgpLCBjYXBzMi5nZXQoKSkpOworICAgICAgICAgICAgaWYgKCFnc3RfY2Fw
c19pc19lbXB0eShpbnRlcnNlY3RlZC5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9
IHN0ZDo6bWFrZV9wYWlyKG1MaW5lSW5mbywgV1RGTW92ZShpbnRlcnNlY3RlZCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChm
b3VuZC5oYXNfdmFsdWUoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGJvb2wg
cGF5bG9hZFR5cGVXYXNTZXQgPSBmYWxzZTsKKyAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiVW51c2VkIGFuZCBjb21wYXRpYmxlIGNh
cHMgZm91bmQgZm9yICUiIEdTVF9QVFJfRk9STUFUICIuLi4gJSIgR1NUX1BUUl9GT1JNQVQsIGNh
cHMuZ2V0KCksIGZvdW5kLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBwYXlsb2FkVHlwZVdhc1Nl
dCA9IHNvdXJjZS5zZXRQYXlsb2FkVHlwZShmb3VuZC0+c2Vjb25kKTsKKyAgICAgICAgZm91bmQt
PmZpcnN0LmlzVXNlZCA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIHBheWxvYWRUeXBlV2Fz
U2V0ID0gc291cmNlLnNldFBheWxvYWRUeXBlKGNhcHMpOworCisgICAgaWYgKCFwYXlsb2FkVHlw
ZVdhc1NldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzb3VyY2UucGFkKCkpIHsKKyAg
ICAgICAgc291cmNlLnNldFNpbmtQYWQocmVxdWVzdFBhZChtX3JlcXVlc3RQYWRDb3VudGVyLCBz
b3VyY2UuYWxsb3dlZENhcHMoKSkpOworICAgICAgICBtX3JlcXVlc3RQYWRDb3VudGVyKys7Cisg
ICAgfQorCisgICAgYXV0byYgc2lua1BhZCA9IHNvdXJjZS5wYWQoKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghZ3N0X3BhZF9pc19saW5rZWQoc2lua1BhZC5nZXQoKSkpOworICAgIGF1dG8gc291cmNl
QmluID0gc291cmNlLmJpbigpOworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX3BpcGVs
aW5lLmdldCgpKSwgc291cmNlQmluLmdldCgpKTsKKyAgICBzb3VyY2UubGluaygpOworCisgICAg
R1VuaXF1ZVB0cjxjaGFyPiBwYWRJZChnc3RfcGFkX2dldF9uYW1lKHNpbmtQYWQuZ2V0KCkpKTsK
KyAgICBhdXRvIGRvdEZpbGVOYW1lID0gbWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUobV9waXBl
bGluZS5nZXQoKSksICIub3V0Z29pbmctIiwgcGFkSWQuZ2V0KCkpOworICAgIEdTVF9ERUJVR19C
SU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVC
VUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitHUmVm
UHRyPEdzdFBhZD4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVxdWVzdFBhZCh1bnNpZ25lZCBt
bGluZUluZGV4LCBjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBhbGxvd2VkQ2FwcykKK3sKKyAgICBh
dXRvIHBhZElkID0gbWFrZVN0cmluZygic2lua18iLCBtbGluZUluZGV4KTsKKyAgICBhdXRvIGNh
cHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfY29weShhbGxvd2VkQ2Fwcy5nZXQoKSkpOworCisgICAg
Z3N0X2NhcHNfbWFwX2luX3BsYWNlKGNhcHMuZ2V0KCksIFtdKEdzdENhcHNGZWF0dXJlcyosIEdz
dFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewor
ICAgICAgICBhdXRvKiBlbmRQb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVyTWVkaWFF
bmRwb2ludCo+KHVzZXJEYXRhKTsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJl
LCAicGF5bG9hZCIsIEdfVFlQRV9JTlQsIGVuZFBvaW50LT5tX3B0Q291bnRlcisrLCBudWxscHRy
KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfSwgdGhpcyk7CisKKyAgICAvLyBGSVhNRTog
UmVzdHJpY3RpbmcgY2FwcyBhbmQgY29kZWMtcHJlZmVyZW5jZXMgYnJlYWtzIGNhcHMgbmVnb3Rp
YXRpb24gb2Ygb3V0Z29pbmcgc291cmNlcyBpbgorICAgIC8vIHNvbWUgY2FzZSAoaml0c2kpLgor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlJlcXVlc3RpbmcgcGFkICVz
IHJlc3RyaWN0ZWQgdG8gJSIgR1NUX1BUUl9GT1JNQVQsIHBhZElkLnV0ZjgoKS5kYXRhKCksIGNh
cHMuZ2V0KCkpOworICAgIGF1dG8qIHBhZFRlbXBsYXRlID0gZ3N0X2VsZW1lbnRfZ2V0X3BhZF90
ZW1wbGF0ZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgInNpbmtfJXUiKTsKKyAgICBhdXRvIHNpbmtQYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQobV93ZWJydGNCaW4uZ2V0KCksIHBh
ZFRlbXBsYXRlLCBwYWRJZC51dGY4KCkuZGF0YSgpLCBjYXBzLmdldCgpKSk7CisgICAgR1JlZlB0
cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gdHJhbnNjZWl2ZXI7CisgICAgZ19vYmplY3RfZ2V0
KHNpbmtQYWQuZ2V0KCksICJ0cmFuc2NlaXZlciIsICZ0cmFuc2NlaXZlci5vdXRQdHIoKSwgbnVs
bHB0cik7CisgICAgZ19vYmplY3Rfc2V0KHRyYW5zY2VpdmVyLmdldCgpLCAiY29kZWMtcHJlZmVy
ZW5jZXMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gc2lua1BhZDsKK30KKwor
Ym9vbCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBjb25zdCBGaXhlZFZlY3Rv
cjxTdHJpbmc+JikKK3sKKyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2Ugc291
cmNlOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBydGNTZW5kZXI7CisKKyAgICBp
ZiAodHJhY2sucHJpdmF0ZVRyYWNrKCkuaGFzQXVkaW8oKSkgeworICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBZGRpbmcgb3V0Z29pbmcgYXVkaW8gc291cmNlIik7
CisgICAgICAgIGF1dG8gYXVkaW9Tb3VyY2UgPSBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI6OmNyZWF0ZSh0cmFjay5wcml2YXRlVHJhY2soKSk7CisgICAgICAgIGNvbmZpZ3Vy
ZUFuZExpbmtTb3VyY2UoYXVkaW9Tb3VyY2UpOworCisgICAgICAgIHJ0Y1NlbmRlciA9IGF1ZGlv
U291cmNlLT5zZW5kZXIoKTsKKyAgICAgICAgc291cmNlID0gV1RGTW92ZShhdWRpb1NvdXJjZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJhY2sucHJpdmF0ZVRyYWNr
KCkuaGFzVmlkZW8oKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIkFkZGluZyBvdXRnb2luZyB2aWRlbyBzb3VyY2UiKTsKKyAgICAgICAgYXV0byB2aWRlb1Nv
dXJjZSA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNr
LnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAgY29uZmlndXJlQW5kTGlua1NvdXJjZSh2aWRlb1Nv
dXJjZSk7CisKKyAgICAgICAgcnRjU2VuZGVyID0gdmlkZW9Tb3VyY2UtPnNlbmRlcigpOworICAg
ICAgICBzb3VyY2UgPSBXVEZNb3ZlKHZpZGVvU291cmNlKTsKKyAgICB9CisKKyAgICBzZW5kZXIu
c2V0U291cmNlKFdURk1vdmUoc291cmNlKSk7CisKKyAgICBpZiAoYXV0byBydHBTZW5kZXIgPSBz
ZW5kZXIucnRjU2VuZGVyKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5l
LmdldCgpLCAiQWxyZWFkeSBoYXMgYSBzZW5kZXIuIik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHNlbmRlci5zZXRSVENTZW5kZXIoV1RGTW92ZShydGNTZW5kZXIpKTsKKwor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlNlbmRlciBjb25maWd1cmVk
Iik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
cmVtb3ZlVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgc2VuZGVyKQoreworICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlJlbW92aW5nIHRyYWNrIik7CisgICAg
YXV0byBiaW4gPSBzZW5kZXIuc3RvcFNvdXJjZSgpOworICAgIGlmIChiaW4pCisgICAgICAgIGdz
dF9iaW5fcmVtb3ZlKEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgYmluLmdldCgpKTsK
KyAgICBzZW5kZXIuY2xlYXJTb3VyY2UoKTsKKyAgICBvbk5lZ290aWF0aW9uTmVlZGVkKCk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVPZmZlcihjb25zdCBSVENP
ZmZlck9wdGlvbnMmIG9wdGlvbnMpCit7CisgICAgLy8gZmx1c2hQZW5kaW5nU291cmNlcyh0cnVl
KTsKKworICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0
LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTg3NworICAgIEdVbmlxdWVQdHI8R3N0U3Ry
dWN0dXJlPiBvZmZlck9wdGlvbnMoZ3N0X3N0cnVjdHVyZV9uZXcoIndlYnJ0Y2Jpbi1vZmZlci1v
cHRpb25zIiwgImljZS1yZXN0YXJ0IiwgR19UWVBFX0JPT0xFQU4sIG9wdGlvbnMuaWNlUmVzdGFy
dCwgbnVsbHB0cikpOworICAgIC8vIEZJWE1FOiBQbHVtYiBvcHRpb25zLnZvaWNlQWN0aXZpdHlE
ZXRlY3Rpb24uCisgICAgaW5pdGlhdGUodHJ1ZSwgV1RGTW92ZShvZmZlck9wdGlvbnMpKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0ZUFuc3dlcigpCit7CisgICAg
aW5pdGlhdGUoZmFsc2UsIG51bGxwdHIpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmluaXRpYXRlKGJvb2wgaXNJbml0aWF0b3IsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYm
IG9wdGlvbnMpCit7CisgICAgbV9pc0luaXRpYXRvciA9IGlzSW5pdGlhdG9yOworICAgIGNvbnN0
IGNoYXIqIHR5cGUgPSBpc0luaXRpYXRvciA/ICJvZmZlciIgOiAiYW5zd2VyIjsKKyAgICBHU1Rf
REVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDcmVhdGluZyAlcyIsIHR5cGUpOworICAg
IGF1dG8gc2lnbmFsTmFtZSA9IG1ha2VTdHJpbmcoImNyZWF0ZS0iLCB0eXBlKTsKKyAgICBnX3Np
Z25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksIHNpZ25hbE5hbWUuYXNjaWkoKS5k
YXRhKCksIG9wdGlvbnMucmVsZWFzZSgpLCBnc3RfcHJvbWlzZV9uZXdfd2l0aF9jaGFuZ2VfZnVu
YyhbXShHc3RQcm9taXNlKiBwcm9taXNlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBh
dXRvKiBlbmRwb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVyTWVkaWFFbmRwb2ludCo+
KHVzZXJEYXRhKTsKKyAgICAgICAgYXV0byBjbGVhbnVwID0gbWFrZVNjb3BlRXhpdChbJl0gewor
ICAgICAgICAgICAgZ3N0X3Byb21pc2VfdW5yZWYocHJvbWlzZSk7CisgICAgICAgIH0pOworICAg
ICAgICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZSk7CisgICAgICAgIGlm
IChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpIHsKKyAgICAgICAgICAgIGVu
ZHBvaW50LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoeyB9KTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGF1dG8qIHJlcGx5ID0gZ3N0X3By
b21pc2VfZ2V0X3JlcGx5KHByb21pc2UpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBseSk7
CisgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZChyZXBseSwgImVycm9yIikpIHsK
KyAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIGdz
dF9zdHJ1Y3R1cmVfZ2V0KHJlcGx5LCAiZXJyb3IiLCBHX1RZUEVfRVJST1IsICZlcnJvci5vdXRQ
dHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBlbmRwb2ludC0+Y3JlYXRlU2Vzc2lvbkRlc2Ny
aXB0aW9uRmFpbGVkKFdURk1vdmUoZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIqIHR5cGUgPSBlbmRwb2ludC0+bV9pc0luaXRpYXRv
ciA/ICJvZmZlciIgOiAiYW5zd2VyIjsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHc3RXZWJSVENT
ZXNzaW9uRGVzY3JpcHRpb24+IGRlc2NyaXB0aW9uOworICAgICAgICBnc3Rfc3RydWN0dXJlX2dl
dChyZXBseSwgdHlwZSwgR1NUX1RZUEVfV0VCUlRDX1NFU1NJT05fREVTQ1JJUFRJT04sICZkZXNj
cmlwdGlvbi5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RF
QlVHCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gc2RwKGdzdF9zZHBfbWVzc2FnZV9hc190ZXh0
KGRlc2NyaXB0aW9uLT5zZHApKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChlbmRwb2ludC0+
cGlwZWxpbmUoKSwgIkNyZWF0ZWQgJXM6ICVzIiwgdHlwZSwgc2RwLmdldCgpKTsKKyNlbmRpZgor
ICAgICAgICBlbmRwb2ludC0+Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVkKFdURk1v
dmUoZGVzY3JpcHRpb24pKTsKKyAgICB9LCB0aGlzLCBudWxscHRyKSk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2V0U3RhdHMoR3N0UGFkKiBwYWQsIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBtX3N0YXRzQ29sbGVjdG9yLT5nZXRTdGF0cyhbcHJv
bWlzZSA9IFdURk1vdmUocHJvbWlzZSksIHByb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXShhdXRv
JiYgcmVwb3J0KSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKKyAg
ICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpIHx8ICFyZXBvcnQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZTxJRExJbnRlcmZhY2U8UlRD
U3RhdHNSZXBvcnQ+PihyZXBvcnQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfSwgcGFkKTsKK30K
KworTWVkaWFTdHJlYW0mIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om1lZGlhU3RyZWFtRnJvbVJU
Q1N0cmVhbShTdHJpbmcgbGFiZWwpCit7CisgICAgYXV0byBtZWRpYVN0cmVhbSA9IG1fcmVtb3Rl
U3RyZWFtc0J5SWQuZW5zdXJlKGxhYmVsLCBbbGFiZWwsIHRoaXNdKCkgbXV0YWJsZSB7CisgICAg
ICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3BlZXJDb25uZWN0aW9u
QmFja2VuZC5jb25uZWN0aW9uKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAgICAgICAg
cmV0dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUoZG9jdW1lbnQsIE1lZGlhU3RyZWFtUHJpdmF0ZTo6
Y3JlYXRlKGRvY3VtZW50LmxvZ2dlcigpLCB7IH0sIFdURk1vdmUobGFiZWwpKSk7CisgICAgfSk7
CisgICAgcmV0dXJuICptZWRpYVN0cmVhbS5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkUmVtb3RlU3RyZWFtKEdzdFBhZCogcGFkKQoreworICAg
IG1fcGVuZGluZ0luY29taW5nU3RyZWFtcysrOworCisgICAgYXV0byBjYXBzID0gYWRvcHRHUmVm
KGdzdF9wYWRfcXVlcnlfY2FwcyhwYWQsIG51bGxwdHIpKTsKKyAgICBjb25zdCBjaGFyKiBtZWRp
YVR5cGUgPSBjYXBzTWVkaWFUeXBlKGNhcHMuZ2V0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyByZW1vdGUgJXMgc3RyZWFtIHRvICUiIEdTVF9QVFJf
Rk9STUFUICIgJXUgcGVuZGluZyBpbmNvbWluZyBzdHJlYW1zLCBjYXBzOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgbWVkaWFUeXBlLCBwYWQsIG1fcGVuZGluZ0luY29taW5nU3RyZWFtcywgY2Fwcy5nZXQo
KSk7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBydGNUcmFuc2NlaXZl
cjsKKyAgICBnX29iamVjdF9nZXQocGFkLCAidHJhbnNjZWl2ZXIiLCAmcnRjVHJhbnNjZWl2ZXIu
b3V0UHRyKCksIG51bGxwdHIpOworCisgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0cmFuc2NlaXZlckJh
Y2tlbmQpIHsKKyAgICAgICAgcmV0dXJuIHJ0Y1RyYW5zY2VpdmVyLmdldCgpID09IHRyYW5zY2Vp
dmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgIH0pOworICAgIGlmICghdHJhbnNjZWl2
ZXIpIHsKKyAgICAgICAgYXV0byB0eXBlID0gZG9DYXBzSGF2ZVR5cGUoY2Fwcy5nZXQoKSwgImF1
ZGlvIikgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OlZpZGVvOworICAgICAgICB0cmFuc2NlaXZlciA9ICZtX3BlZXJDb25uZWN0
aW9uQmFja2VuZC5uZXdSZW1vdGVUcmFuc2NlaXZlcihtYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZD4oV1RGTW92ZShydGNUcmFuc2NlaXZlcikpLCB0eXBlKTsKKyAgICB9
CisKKyAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVzY3Jp
cHRpb247CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAicmVtb3RlLWRlc2Ny
aXB0aW9uIiwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKworICAgIHVuc2lnbmVk
IG1MaW5lSW5kZXg7CisgICAgZ19vYmplY3RfZ2V0KHJ0Y1RyYW5zY2VpdmVyLmdldCgpLCAibWxp
bmVpbmRleCIsICZtTGluZUluZGV4LCBudWxscHRyKTsKKyAgICBjb25zdCBhdXRvKiBtZWRpYSA9
IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEoZGVzY3JpcHRpb24tPnNkcCwgbUxpbmVJbmRleCk7
CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHAoZ3N0X3NkcF9tZWRpYV9hc190ZXh0KG1lZGlhKSk7
CisgICAgYXV0byBzZHBTdHJpbmcgPSBtYWtlU3RyaW5nKHNkcC5nZXQoKSk7CisKKyAgICBHVW5p
cXVlUHRyPGdjaGFyPiBuYW1lKGdzdF9wYWRfZ2V0X25hbWUocGFkKSk7CisgICAgU3RyaW5nIGxh
YmVsKG5hbWUuZ2V0KCkpOworICAgIGF1dG8ga2V5ID0gbWFrZVN0cmluZygibXNpZDoiKTsKKyAg
ICBhdXRvIGxpbmVzID0gc2RwU3RyaW5nLnNwbGl0KCdcbicpOworICAgIGZvciAoYXV0byYgbGlu
ZSA6IGxpbmVzKSB7CisgICAgICAgIGF1dG8gaSA9IGxpbmUuZmluZChrZXkpOworICAgICAgICBp
ZiAoaSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgYXV0byB0bXAgPSBsaW5lLnN1YnN0cmlu
ZyhpICsga2V5LmFzY2lpKCkubGVuZ3RoKCkpOworICAgICAgICAgICAgbGFiZWwgPSB0bXAuc3Vi
c3RyaW5nKDAsIHRtcC5maW5kKCcgJykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJtc2lkOiAl
cyIsIGxhYmVsLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIEdzdEVsZW1lbnQqIGJpbiA9IG51bGxw
dHI7CisgICAgYXV0byYgdHJhY2sgPSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKS50cmFjaygpOwor
ICAgIGF1dG8mIHNvdXJjZSA9IHRyYWNrLnByaXZhdGVUcmFjaygpLnNvdXJjZSgpOworICAgIGlm
IChzb3VyY2UuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0YXRpY19j
YXN0PFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSkuYmluKCk7
CisgICAgZWxzZSBpZiAoc291cmNlLmlzSW5jb21pbmdWaWRlb1NvdXJjZSgpKQorICAgICAgICBi
aW4gPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXImPihz
b3VyY2UpLmJpbigpOworICAgIGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwg
YmluKTsKKyAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRp
Y19wYWQoYmluLCAic2luayIpKTsKKyAgICBnc3RfcGFkX2xpbmsocGFkLCBzaW5rUGFkLmdldCgp
KTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGJpbik7CisKKyAgICB0
cmFjay5zZXRFbmFibGVkKHRydWUpOworICAgIHNvdXJjZS5zZXRNdXRlZChmYWxzZSk7CisKKyAg
ICBhdXRvJiBtZWRpYVN0cmVhbSA9IG1lZGlhU3RyZWFtRnJvbVJUQ1N0cmVhbShsYWJlbCk7Cisg
ICAgbWVkaWFTdHJlYW0uYWRkVHJhY2tGcm9tUGxhdGZvcm0odHJhY2spOworICAgIG1fcGVuZGlu
Z1N0cmVhbXMuYXBwZW5kKCZtZWRpYVN0cmVhbSk7CisKKyAgICBhdXRvIGRvdEZpbGVOYW1lID0g
bWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUobV9waXBlbGluZS5nZXQoKSksICIuaW5jb21pbmct
IiwgbWVkaWFUeXBlLCAnLScsIEdTVF9PQkpFQ1RfTkFNRShwYWQpKTsKKyAgICBHU1RfREVCVUdf
QklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RF
QlVHX0dSQVBIX1NIT1dfQUxMLCBkb3RGaWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKK30KKwordm9p
ZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVSZW1vdGVTdHJlYW0oR3N0UGFkKikKK3sK
KyAgICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJyZW1vdmVSZW1vdGVTdHJl
YW0iKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6Om9wdGlvbmFsPEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OkJhY2tlbmRzPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVU
cmFuc2NlaXZlckJhY2tlbmRzKGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgUlRDUnRwVHJhbnNj
ZWl2ZXJJbml0JiBpbml0LCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmJiBzb3Vy
Y2UpCit7CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9w
dDsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIiV6dSBzdHJlYW1z
IGluIGluaXQgZGF0YSIsIGluaXQuc3RyZWFtcy5zaXplKCkpOworCisgICAgLy8gRklYTUU6IFNo
b3VsZCB3ZSBidWlsZCB0aGUgY2FwcyBmcm9tIHRoZSBpbml0LnNlbmRFbmNvZGluZ3M/IFByb2Js
ZW0gaXMgdGhlcmUgaXMgbm8KKyAgICAvLyBlbmNvZGluZ05hbWUgb3IgY2xvY2tSYXRlIGluIFJU
Q1J0cEVuY29kaW5nUGFyYW1ldGVycy4KKyAgICBWZWN0b3I8c3RkOjpwYWlyPGNvbnN0IGNoYXIq
LCBpbnQ+PiBlbmNvZGluZ3M7CisgICAgY29uc3QgY2hhciogbWVkaWEgPSBraW5kLnV0ZjgoKS5k
YXRhKCk7CisgICAgaWYgKGtpbmQgPT0gInZpZGVvIl9zKSB7CisgICAgICAgIGVuY29kaW5ncy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMpOworICAgICAgICBlbmNvZGluZ3MuYXBwZW5kKHsgIlZQ
OCIsIDkwMDAwIH0pOworICAgICAgICBlbmNvZGluZ3MuYXBwZW5kKHsgIlZQOSIsIDkwMDAwIH0p
OworICAgICAgICBlbmNvZGluZ3MuYXBwZW5kKHsgIkgyNjQiLCA5MDAwMCB9KTsKKyAgICB9IGVs
c2UgeworICAgICAgICBlbmNvZGluZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgxKTsKKyAgICAg
ICAgZW5jb2RpbmdzLmFwcGVuZCh7ICJPUFVTIiwgNDgwMDAgfSk7CisgICAgfQorCisgICAgYXV0
byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICBmb3IgKGF1dG8m
IFtlbmNvZGluZ05hbWUsIGNsb2NrUmF0ZV0gOiBlbmNvZGluZ3MpIHsKKyAgICAgICAgZ3N0X2Nh
cHNfYXBwZW5kKGNhcHMuZ2V0KCksIGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0aW9uL3gt
cnRwIiwgIm1lZGlhIiwgR19UWVBFX1NUUklORywgbWVkaWEsICJlbmNvZGluZy1uYW1lIiwgR19U
WVBFX1NUUklORywgZW5jb2RpbmdOYW1lLAorICAgICAgICAgICAgInBheWxvYWQiLCBHX1RZUEVf
SU5ULCBtX3B0Q291bnRlcisrLCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIGNsb2NrUmF0ZSwg
bnVsbHB0cikpOworICAgIH0KKworICAgIGF1dG8gZGlyZWN0aW9uID0gZnJvbVJUQ1J0cFRyYW5z
Y2VpdmVyRGlyZWN0aW9uKGluaXQuZGlyZWN0aW9uKTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NU
X0RFQlVHCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBkZXNjKGdfZW51bV90b19zdHJpbmcoR1NUX1RZ
UEVfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT04sIGRpcmVjdGlvbikpOworICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyAlcyB0cmFuc2NlaXZlciBm
b3IgcGF5bG9hZCAlIiBHU1RfUFRSX0ZPUk1BVCwgZGVzYy5nZXQoKSwgY2Fwcy5nZXQoKSk7Cisj
ZW5kaWYKKworICAgIC8vIEZJWE1FOiBOb25lIG9mIHRoaXMgKGV4Y2VwdGVkIGRpcmVjdGlvbikg
aXMgcGFzc2VkIHRvIHdlYnJ0Y2JpbiB5ZXQuCisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+
IGluaXREYXRhKGdzdF9zdHJ1Y3R1cmVfbmV3KCJ0cmFuc2NlaXZlci1pbml0LWRhdGEiLCAiZGly
ZWN0aW9uIiwgR1NUX1RZUEVfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT04sIGRpcmVj
dGlvbiwgbnVsbHB0cikpOworCisgICAgR1ZhbHVlIHN0cmVhbUlkc1ZhbHVlID0gR19WQUxVRV9J
TklUOworICAgIGdfdmFsdWVfaW5pdCgmc3RyZWFtSWRzVmFsdWUsIEdTVF9UWVBFX0xJU1QpOwor
ICAgIGZvciAoYXV0byYgc3RyZWFtIDogaW5pdC5zdHJlYW1zKSB7CisgICAgICAgIEdWYWx1ZSB2
YWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICAgICAgZ192YWx1ZV9pbml0KCZ2YWx1ZSwgR19UWVBF
X1NUUklORyk7CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZygmdmFsdWUsIHN0cmVhbS0+aWQo
KS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlKCZz
dHJlYW1JZHNWYWx1ZSwgJnZhbHVlKTsKKyAgICAgICAgZ192YWx1ZV91bnNldCgmdmFsdWUpOwor
ICAgIH0KKyAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUoaW5pdERhdGEuZ2V0KCksICJzdHJl
YW0taWRzIiwgJnN0cmVhbUlkc1ZhbHVlKTsKKworICAgIEdWYWx1ZSBlbmNvZGluZ3NWYWx1ZSA9
IEdfVkFMVUVfSU5JVDsKKyAgICBnX3ZhbHVlX2luaXQoJmVuY29kaW5nc1ZhbHVlLCBHU1RfVFlQ
RV9MSVNUKTsKKyAgICBpZiAoa2luZCA9PSAiYXVkaW8iKSB7CisgICAgICAgIGlmICghaW5pdC5z
ZW5kRW5jb2RpbmdzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBlbmNvZGluZ0RhdGEg
PSBmcm9tUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGluaXQuc2VuZEVuY29kaW5nc1swXSk7CisgICAg
ICAgICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgICAgICAgICBnX3ZhbHVl
X2luaXQoJnZhbHVlLCBHU1RfVFlQRV9TVFJVQ1RVUkUpOworICAgICAgICAgICAgZ3N0X3ZhbHVl
X3NldF9zdHJ1Y3R1cmUoJnZhbHVlLCBlbmNvZGluZ0RhdGEuZ2V0KCkpOworICAgICAgICAgICAg
Z3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlKCZlbmNvZGluZ3NWYWx1ZSwgJnZhbHVlKTsKKyAg
ICAgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7
CisgICAgICAgIGZvciAoYXV0byYgZW5jb2RpbmcgOiBpbml0LnNlbmRFbmNvZGluZ3MpIHsKKyAg
ICAgICAgICAgIGF1dG8gZW5jb2RpbmdEYXRhID0gZnJvbVJUQ0VuY29kaW5nUGFyYW1ldGVycyhl
bmNvZGluZyk7CisgICAgICAgICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAg
ICAgICAgICBnX3ZhbHVlX2luaXQoJnZhbHVlLCBHU1RfVFlQRV9TVFJVQ1RVUkUpOworICAgICAg
ICAgICAgZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmUoJnZhbHVlLCBlbmNvZGluZ0RhdGEuZ2V0KCkp
OworICAgICAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlKCZlbmNvZGluZ3NWYWx1
ZSwgJnZhbHVlKTsKKyAgICAgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUoaW5pdERhdGEuZ2V0KCksICJl
bmNvZGluZ3MiLCAmZW5jb2RpbmdzVmFsdWUpOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBU
cmFuc2NlaXZlcj4gcnRjVHJhbnNjZWl2ZXI7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1f
d2VicnRjQmluLmdldCgpLCAiYWRkLXRyYW5zY2VpdmVyIiwgZGlyZWN0aW9uLCBjYXBzLmdldCgp
LCAmcnRjVHJhbnNjZWl2ZXIub3V0UHRyKCkpOworICAgIGlmICghcnRjVHJhbnNjZWl2ZXIpCisg
ICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIHRyYW5zY2VpdmVyID0gbWFr
ZVVuaXF1ZTxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KFdURk1vdmUocnRjVHJhbnNj
ZWl2ZXIpKTsKKyAgICByZXR1cm4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6QmFja2VuZHMgeyB0
cmFuc2NlaXZlci0+Y3JlYXRlU2VuZGVyQmFja2VuZChtX3BlZXJDb25uZWN0aW9uQmFja2VuZCwg
V1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKGluaXREYXRhKSksIHRyYW5zY2VpdmVyLT5jcmVhdGVS
ZWNlaXZlckJhY2tlbmQoKSwgV1RGTW92ZSh0cmFuc2NlaXZlcikgfTsKK30KKworc3RkOjpvcHRp
b25hbDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6YWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0
cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlVHJhbnNjZWl2ZXJC
YWNrZW5kcyh0cmFja0tpbmQsIGluaXQsIG51bGxwdHIpOworfQorCitHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kOjpTb3VyY2UgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlU291cmNlRm9y
VHJhY2soTWVkaWFTdHJlYW1UcmFjayYgdHJhY2spCit7CisgICAgaWYgKHRyYWNrLnByaXZhdGVU
cmFjaygpLmhhc0F1ZGlvKCkpCisgICAgICAgIHJldHVybiBSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFjay5wcml2YXRlVHJhY2soKSk7CisKKyAgICBSRUxF
QVNFX0FTU0VSVCh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNWaWRlbygpKTsKKyAgICByZXR1cm4g
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJhY2sucHJpdmF0
ZVRyYWNrKCkpOworfQorCitzdGQ6Om9wdGlvbmFsPEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkJh
Y2tlbmRzPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFuc2NlaXZlcihNZWRpYVN0cmVh
bVRyYWNrJiB0cmFjaywgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiBpbml0KQoreworICAg
IHJldHVybiBjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKHRyYWNrLmtpbmQoKSwgaW5pdCwgY3Jl
YXRlU291cmNlRm9yVHJhY2sodHJhY2spKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYs
IE1lZGlhU3RyZWFtVHJhY2smKQoreworICAgIEdTVF9GSVhNRV9PQkpFQ1QobV9waXBlbGluZS5n
ZXQoKSwgInNldFNlbmRlclNvdXJjZUZyb21UcmFjayIpOworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+IEdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRyYW5zY2VpdmVyQmFja2VuZEZyb21TZW5kZXIoR1N0cmVh
bWVyUnRwU2VuZGVyQmFja2VuZCYgYmFja2VuZCkKK3sKKyAgICBHUmVmUHRyPEdBcnJheT4gdHJh
bnNjZWl2ZXJzOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwg
ImdldC10cmFuc2NlaXZlcnMiLCAmdHJhbnNjZWl2ZXJzLm91dFB0cigpKTsKKworICAgIEdTVF9E
RUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkxvb2tpbmcgZm9yIHNlbmRlciAlcCBpbiAl
dSBleGlzdGluZyB0cmFuc2NlaXZlcnMiLCBiYWNrZW5kLnJ0Y1NlbmRlcigpLCB0cmFuc2NlaXZl
cnMtPmxlbik7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHRyYW5zY2VpdmVycy0+bGVu
OyBpKyspIHsKKyAgICAgICAgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIGN1cnJlbnQgPSBnX2Fy
cmF5X2luZGV4KHRyYW5zY2VpdmVycy5nZXQoKSwgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqLCBp
KTsKKyAgICAgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IHNlbmRlcjsKKyAgICAgICAg
Z19vYmplY3RfZ2V0KGN1cnJlbnQsICJzZW5kZXIiLCAmc2VuZGVyLm91dFB0cigpLCBudWxscHRy
KTsKKworICAgICAgICBpZiAoIXNlbmRlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICBpZiAoc2VuZGVyLmdldCgpID09IGJhY2tlbmQucnRjU2VuZGVyKCkpCisgICAgICAgICAgICBy
ZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4oY3Vy
cmVudCk7CisgICAgfQorCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6YWRkSWNlQ2FuZGlkYXRlKEdTdHJlYW1lckljZUNhbmRpZGF0ZSYgY2Fu
ZGlkYXRlLCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrJiYg
Y2FsbGJhY2spCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRk
aW5nIElDRSBjYW5kaWRhdGUgJXMiLCBjYW5kaWRhdGUuY2FuZGlkYXRlLnV0ZjgoKS5kYXRhKCkp
OworCisgICAgaWYgKCFjYW5kaWRhdGUuY2FuZGlkYXRlLnN0YXJ0c1dpdGgoImNhbmRpZGF0ZToi
KSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gY3JlYXRlU2hhcmVkVGFzazxQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrRnVuY3Rpb24+KFdU
Rk1vdmUoY2FsbGJhY2spKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHRhc2stPnJ1bihFeGNl
cHRpb24geyBPcGVyYXRpb25FcnJvciwgIkV4cGVjdCBsaW5lOiBjYW5kaWRhdGU6PGNhbmRpZGF0
ZS1zdHI+IiB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBh
dXRvIHBhcnNlZENhbmRpZGF0ZSA9IHBhcnNlSWNlQ2FuZGlkYXRlU0RQKGNhbmRpZGF0ZS5jYW5k
aWRhdGUpOworICAgIGlmICghcGFyc2VkQ2FuZGlkYXRlKSB7CisgICAgICAgIGNhbGxPbk1haW5U
aHJlYWQoW3Rhc2sgPSBjcmVhdGVTaGFyZWRUYXNrPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRk
SWNlQ2FuZGlkYXRlQ2FsbGJhY2tGdW5jdGlvbj4oV1RGTW92ZShjYWxsYmFjaykpXSgpIG11dGFi
bGUgeworICAgICAgICAgICAgdGFzay0+cnVuKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAi
RXJyb3IgcHJvY2Vzc2luZyBJQ0UgY2FuZGlkYXRlIiB9KTsKKyAgICAgICAgfSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICAvLyBGSVhNRTogaW52YWxpZCBzZHBNTGluZUluZGV4IGV4
Y2VwdGlvbiBub3QgcmVsYXllZCBmcm9tIHdlYnJ0Y2Jpbi4KKyAgICAvLyBGSVhNRTogSWRlYWxs
eSB0aGlzIHNob3VsZCBwYXNzIHRoZSByZXN1bHQvZXJyb3IgdG8gYSBHc3RQcm9taXNlIG9iamVj
dC4KKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJhZGQtaWNl
LWNhbmRpZGF0ZSIsIGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4LCBjYW5kaWRhdGUuY2FuZGlkYXRl
LnV0ZjgoKS5kYXRhKCkpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Rhc2sgPSBjcmVhdGVTaGFy
ZWRUYXNrPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRlQ2FsbGJhY2tGdW5j
dGlvbj4oV1RGTW92ZShjYWxsYmFjaykpLCBkZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnNGcm9t
V2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgpKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgdGFzay0+
cnVuKFdURk1vdmUoZGVzY3JpcHRpb25zKSk7CisgICAgfSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZURh
dGFDaGFubmVsKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYg
b3B0aW9ucykKK3sKKyAgICBpZiAoIW1fd2VicnRjQmluKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGF1dG8gaW5pdCA9IEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6ZnJvbVJU
Q0RhdGFDaGFubmVsSW5pdChvcHRpb25zKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxp
bmUuZ2V0KCksICJDcmVhdGluZyBkYXRhIGNoYW5uZWwgZm9yIGluaXQgb3B0aW9ucyAlIiBHU1Rf
UFRSX0ZPUk1BVCwgaW5pdC5nZXQoKSk7CisgICAgR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5l
bD4gY2hhbm5lbDsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCks
ICJjcmVhdGUtZGF0YS1jaGFubmVsIiwgbGFiZWwudXRmOCgpLmRhdGEoKSwgaW5pdC5nZXQoKSwg
JmNoYW5uZWwub3V0UHRyKCkpOworICAgIGlmICghY2hhbm5lbCkKKyAgICAgICAgcmV0dXJuIG51
bGxwdHI7CisKKyAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlcj4oV1RGTW92ZShjaGFubmVsKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6b25EYXRhQ2hhbm5lbChHc3RXZWJSVENEYXRhQ2hhbm5lbCogZGF0YUNoYW5uZWwpCit7
CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiSW5jb21pbmcgZGF0YSBj
aGFubmVsIik7CisgICAgR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4gY2hhbm5lbCA9IGRh
dGFDaGFubmVsOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRo
aXMpLCBkYXRhQ2hhbm5lbCA9IFdURk1vdmUoY2hhbm5lbCldKCkgbXV0YWJsZSB7CisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdGVkVGhpcy0+bV9waXBlbGluZS5nZXQoKSwgIkluY29t
aW5nIGRhdGEgY2hhbm5lbCAxIik7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3Bw
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90
ZWN0ZWRUaGlzLT5tX3BpcGVsaW5lLmdldCgpLCAiSW5jb21pbmcgZGF0YSBjaGFubmVsIDIiKTsK
KyAgICAgICAgYXV0byYgY29ubmVjdGlvbiA9IHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rp
b25CYWNrZW5kLmNvbm5lY3Rpb24oKTsKKyAgICAgICAgY29ubmVjdGlvbi5kaXNwYXRjaEV2ZW50
KEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2hhbm5lbEV2ZW50KCpjb25uZWN0aW9uLmRv
Y3VtZW50KCksIFdURk1vdmUoZGF0YUNoYW5uZWwpKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6Y2xvc2UoKQoreworICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZy
ZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vaXNzdWVzLzExODEKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDbG9zaW5nIik7CisgICAgaWYg
KG1fcGlwZWxpbmUpCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdl
dCgpLCBHU1RfU1RBVEVfUkVBRFkpOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAg
c3RvcExvZ2dpbmdTdGF0cygpOworI2VuZGlmCit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6c3RvcCgpCit7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3RvcExvZ2dp
bmdTdGF0cygpOworI2VuZGlmCisKKyAgICBpZiAoIW1fcGlwZWxpbmUpCisgICAgICAgIHJldHVy
bjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlN0b3BwaW5nIik7
CisgICAgdGVhcmRvd25QaXBlbGluZSgpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OnN1c3BlbmQoKQoreworICAgIGlmICghbV9waXBlbGluZSkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU3VzcGVuZGluZyIpOwor
ICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUEFV
U0VEKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXN1bWUoKQoreworICAg
IGlmICghbV9waXBlbGluZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVD
VChtX3BpcGVsaW5lLmdldCgpLCAiUmVzdW1pbmciKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3Rh
dGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOworfQorCit2b2lkIEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6Om9uTmVnb3RpYXRpb25OZWVkZWQoKQoreworICAgIG1faXNOZWdv
dGlhdGlvbk5lZWRlZCA9IHRydWU7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJDaGVja2luZyBuZWdvdGlhdGlvbiBzdGF0dXMiKTsKKworICAgIGNhbGxPbk1haW5U
aHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXSB7CisgICAgICAgIGlmIChwcm90ZWN0
ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwcm90ZWN0ZWRUaGlzLT5tX3BpcGVsaW5lLmdldCgpLCAiTmVnb3RpYXRpb24g
bmVlZGVkISIpOworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2Vu
ZC5tYXJrQXNOZWVkaW5nTmVnb3RpYXRpb24oMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6b25JY2VDb25uZWN0aW9uQ2hhbmdlKCkKK3sKKyAgICBHc3RXZWJS
VENJQ0VDb25uZWN0aW9uU3RhdGUgc3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmlu
LmdldCgpLCAiaWNlLWNvbm5lY3Rpb24tc3RhdGUiLCAmc3RhdGUsIG51bGxwdHIpOworICAgIGNh
bGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCBjb25uZWN0aW9uU3Rh
dGUgPSB0b1JUQ0ljZUNvbm5lY3Rpb25TdGF0ZShzdGF0ZSldIHsKKyAgICAgICAgaWYgKHByb3Rl
Y3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRv
JiBjb25uZWN0aW9uID0gcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29u
bmVjdGlvbigpOworICAgICAgICBpZiAoY29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUoKSAh
PSBjb25uZWN0aW9uU3RhdGUpCisgICAgICAgICAgICBjb25uZWN0aW9uLnVwZGF0ZUljZUNvbm5l
Y3Rpb25TdGF0ZShjb25uZWN0aW9uU3RhdGUpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6Om9uSWNlR2F0aGVyaW5nQ2hhbmdlKCkKK3sKKyAgICBHc3RXZWJSVENJ
Q0VHYXRoZXJpbmdTdGF0ZSBzdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0
KCksICJpY2UtZ2F0aGVyaW5nLXN0YXRlIiwgJnN0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25N
YWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgc3RhdGVdIHsKKyAgICAgICAg
aWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBhdXRvJiBjb25uZWN0aW9uID0gcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuY29ubmVjdGlvbigpOworICAgICAgICBpZiAoc3RhdGUgPT0gR1NUX1dFQlJUQ19JQ0Vf
R0FUSEVSSU5HX1NUQVRFX0NPTVBMRVRFKQorICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+bV9w
ZWVyQ29ubmVjdGlvbkJhY2tlbmQuZG9uZUdhdGhlcmluZ0NhbmRpZGF0ZXMoKTsKKyAgICAgICAg
ZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX0dBVEhFUklO
RykKKyAgICAgICAgICAgIGNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUoUlRDSWNl
R2F0aGVyaW5nU3RhdGU6OkdhdGhlcmluZyk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlID09IEdT
VF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9ORVcpCisgICAgICAgICAgICBjb25uZWN0aW9u
LnVwZGF0ZUljZUdhdGhlcmluZ1N0YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpOZXcpOworICAg
IH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlQ2FuZGlkYXRlKGd1
aW50IHNkcE1MaW5lSW5kZXgsIGdjaGFyYXJyYXkgY2FuZGlkYXRlKQoreworICAgIC8vIEZJWE1F
OiBHZXQgbWlkIGZyb20gY2FuZGlkYXRlPworICAgIEdVbmlxdWVPdXRQdHI8R3N0V2ViUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNC
aW4uZ2V0KCksICJsb2NhbC1kZXNjcmlwdGlvbiIsICZkZXNjcmlwdGlvbi5vdXRQdHIoKSwgbnVs
bHB0cik7CisgICAgaWYgKCFkZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAgY29u
c3QgR3N0U0RQTWVkaWEqIG1lZGlhID0gZ3N0X3NkcF9tZXNzYWdlX2dldF9tZWRpYShkZXNjcmlw
dGlvbi0+c2RwLCBzZHBNTGluZUluZGV4KTsKKyAgICBTdHJpbmcgY2FuZGlkYXRlTWlkKGdzdF9z
ZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZV92YWwobWVkaWEsICJtaWQiKSk7CisgICAgU3RyaW5nIGNh
bmRpZGF0ZVNEUChjYW5kaWRhdGUpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRo
aXMgPSBSZWYoKnRoaXMpLCBtaWQgPSBXVEZNb3ZlKGNhbmRpZGF0ZU1pZCksIHNkcCA9IFdURk1v
dmUoY2FuZGlkYXRlU0RQKSwgc2RwTUxpbmVJbmRleCwgZGVzY3JpcHRpb25zID0gZGVzY3JpcHRp
b25zRnJvbVdlYlJUQ0JpbihtX3dlYnJ0Y0Jpbi5nZXQoKSldKCkgbXV0YWJsZSB7CisgICAgICAg
IGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQubmV3SUNFQ2FuZGlk
YXRlKFdURk1vdmUoc2RwKSwgV1RGTW92ZShtaWQpLCBzZHBNTGluZUluZGV4LCB7IH0sIFdURk1v
dmUoZGVzY3JpcHRpb25zKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVkKEdVbmlxdWVPdXRQdHI8R3N0
V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmIGRlc2NyaXB0aW9uKQoreworICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCBkZXNjcmlwdGlvbiA9IGRlc2Ny
aXB0aW9uLnJlbGVhc2UoKV0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVk
KCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHAo
Z3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoZGVzY3JpcHRpb24tPnNkcCkpOworICAgICAgICBpZiAo
cHJvdGVjdGVkVGhpcy0+bV9pc0luaXRpYXRvcikKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMt
Pm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNyZWF0ZU9mZmVyU3VjY2VlZGVkKHNkcC5nZXQoKSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rp
b25CYWNrZW5kLmNyZWF0ZUFuc3dlclN1Y2NlZWRlZChzZHAuZ2V0KCkpOworICAgIH0pOworfQor
Cit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbkZh
aWxlZChHVW5pcXVlT3V0UHRyPEdFcnJvcj4mJiBlcnJvcikKK3sKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgZXJyb3IgPSBlcnJvci5yZWxlYXNlKCld
IHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGF1dG8gZXhjID0gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3Is
IGVycm9yID8gZXJyb3ItPm1lc3NhZ2UgOiAiVW5rbm93biBFcnJvciIgfTsKKyAgICAgICAgaWYg
KHByb3RlY3RlZFRoaXMtPm1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlckZhaWxlZChXVEZNb3ZlKGV4Yykp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0
aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJGYWlsZWQoV1RGTW92ZShleGMpKTsKKyAgICB9KTsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sK
KyAgICBHUmVmUHRyPEdBcnJheT4gdHJhbnNjZWl2ZXJzOworICAgIGdfc2lnbmFsX2VtaXRfYnlf
bmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC10cmFuc2NlaXZlcnMiLCAmdHJhbnNjZWl2ZXJz
Lm91dFB0cigpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhbnNjZWl2ZXJzLT5s
ZW47IGkrKykgeworICAgICAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogY3VycmVudCA9IGdf
YXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdldCgpLCBHc3RXZWJSVENSVFBUcmFuc2NlaXZlcios
IGkpOworCisgICAgICAgIGF1dG8qIGV4aXN0aW5nVHJhbnNjZWl2ZXIgPSBtX3BlZXJDb25uZWN0
aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0cmFuc2NlaXZlckJhY2tl
bmQpIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50ID09IHRyYW5zY2VpdmVyQmFja2VuZC5y
dGNUcmFuc2NlaXZlcigpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGV4aXN0aW5nVHJhbnNj
ZWl2ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHUmVmUHRyPEdzdFdlYlJU
Q1JUUFJlY2VpdmVyPiByZWNlaXZlcjsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBtaWQ7
CisgICAgICAgIGdfb2JqZWN0X2dldChjdXJyZW50LCAicmVjZWl2ZXIiLCAmcmVjZWl2ZXIub3V0
UHRyKCksICJtaWQiLCAmbWlkLm91dFB0cigpLCBudWxscHRyKTsKKworICAgICAgICBpZiAoIXJl
Y2VpdmVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFtaWQpCisgICAg
ICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5uZXdS
ZW1vdGVUcmFuc2NlaXZlcihXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kPihXVEZNb3ZlKGN1cnJlbnQpKSwgbV9tZWRpYUZvck1pZC5nZXQobWlkLmdldCgpKSk7
CisgICAgfQorfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZygpCit7CisgICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiZ2V0LXN0YXRzIiwgbnVsbHB0ciwgZ3N0X3By
b21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcHJvbWlzZSwgZ3BvaW50
ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSBnc3RfcHJvbWlzZV93YWl0KHBy
b21pc2UpOworICAgICAgICBhdXRvIGNsZWFudXAgPSBtYWtlU2NvcGVFeGl0KFsmXSB7CisgICAg
ICAgICAgICBnc3RfcHJvbWlzZV91bnJlZihwcm9taXNlKTsKKyAgICAgICAgfSk7CisgICAgICAg
IGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY29uc3QgYXV0byogcmVwbHkgPSBnc3RfcHJvbWlzZV9nZXRfcmVw
bHkocHJvbWlzZSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGx5KTsKKyAgICAgICAgaWYg
KGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlcGx5LCAiZXJyb3IiKSkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBhdXRvKiBlbmRQb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVh
bWVyTWVkaWFFbmRwb2ludCo+KHVzZXJEYXRhKTsKKyAgICAgICAgZW5kUG9pbnQtPm9uU3RhdHNE
ZWxpdmVyZWQocmVwbHkpOworICAgIH0sIHRoaXMsIG51bGxwdHIpKTsKK30KKworY2xhc3MgUlRD
U3RhdHNMb2dnZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJUQ1N0YXRzTG9nZ2VyKGNvbnN0
IEdzdFN0cnVjdHVyZSogc3RhdHMpCisgICAgICAgIDogbV9zdGF0cyhzdGF0cykKKyAgICB7IH0K
KworICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdCB7IHJldHVybiBnc3RTdHJ1Y3R1cmVU
b0pTT05TdHJpbmcobV9zdGF0cyk7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBHc3RTdHJ1Y3R1
cmUqIG1fc3RhdHM7Cit9OworCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnByb2Nlc3NT
dGF0cyhjb25zdCBHVmFsdWUqIHZhbHVlKQoreworICAgIGlmICghR1NUX1ZBTFVFX0hPTERTX1NU
UlVDVFVSRSh2YWx1ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUodmFsdWUpOworICAgIEdzdFdl
YlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldChzdHJ1
Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VCUlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5cGUsIG51
bGxwdHIpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBKdXN0IGNoZWNrIGEgc2luZ2xlIHRp
bWVzdGFtcCwgaW5ib3VuZCBSVFAgZm9yIGluc3RhbmNlLgorICAgIGlmICghbV9zdGF0c0ZpcnN0
RGVsaXZlcmVkVGltZXN0YW1wICYmIHN0YXRzVHlwZSA9PSBHU1RfV0VCUlRDX1NUQVRTX0lOQk9V
TkRfUlRQKSB7CisgICAgICAgIGRvdWJsZSB0aW1lc3RhbXA7CisgICAgICAgIGlmIChnc3Rfc3Ry
dWN0dXJlX2dldF9kb3VibGUoc3RydWN0dXJlLCAidGltZXN0YW1wIiwgJnRpbWVzdGFtcCkpIHsK
KyAgICAgICAgICAgIGF1dG8gdHMgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKHRpbWVzdGFt
cCk7CisgICAgICAgICAgICBtX3N0YXRzRmlyc3REZWxpdmVyZWRUaW1lc3RhbXAgPSB0czsKKwor
ICAgICAgICAgICAgaWYgKCFpc1N0b3BwZWQoKSAmJiBtX3N0YXRzTG9nVGltZXIucmVwZWF0SW50
ZXJ2YWwoKSAhPSBzdGF0c0xvZ0ludGVydmFsKHRzKSkgeworICAgICAgICAgICAgICAgIG1fc3Rh
dHNMb2dUaW1lci5zdG9wKCk7CisgICAgICAgICAgICAgICAgbV9zdGF0c0xvZ1RpbWVyLnN0YXJ0
UmVwZWF0aW5nKHN0YXRzTG9nSW50ZXJ2YWwodHMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmIChsb2dnZXIoKS53aWxsTG9nKGxvZ0NoYW5uZWwoKSwgV1RGTG9n
TGV2ZWw6OkRlYnVnKSkgeworICAgICAgICAvLyBTdGF0cyBhcmUgdmVyeSB2ZXJib3NlLCBsZXQn
cyBvbmx5IGRpc3BsYXkgdGhlbSBpbiBpbnNwZWN0b3IgY29uc29sZSBpbiB2ZXJib3NlIG1vZGUu
CisgICAgICAgIGxvZ2dlcigpLmRlYnVnKExvZ1dlYlJUQywKKyAgICAgICAgICAgIExvZ2dlcjo6
TG9nU2l0ZUlkZW50aWZpZXIoIkdTdHJlYW1lck1lZGlhRW5kcG9pbnQiLCAib25TdGF0c0RlbGl2
ZXJlZCIsIGxvZ0lkZW50aWZpZXIoKSksCisgICAgICAgICAgICBSVENTdGF0c0xvZ2dlciB7IHN0
cnVjdHVyZSB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2dnZXIoKS5sb2dBbHdheXMoTG9n
V2ViUlRDU3RhdHMsCisgICAgICAgICAgICBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKCJHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50IiwgIm9uU3RhdHNEZWxpdmVyZWQiLCBsb2dJZGVudGlmaWVyKCkp
LAorICAgICAgICAgICAgUlRDU3RhdHNMb2dnZXIgeyBzdHJ1Y3R1cmUgfSk7CisgICAgfQorfQor
CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25TdGF0c0RlbGl2ZXJlZChjb25zdCBH
c3RTdHJ1Y3R1cmUqIHN0YXRzKQoreworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBzdGF0
c0NvcHkoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0YXRzKSk7CisgICAgY2FsbE9uTWFpblRocmVhZChb
cHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRoaXMsIHN0YXRzID0gc3RhdHNDb3B5LnJlbGVh
c2UoKV0geworICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2goc3RhdHMsIHN0YXRpY19jYXN0
PEdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jPihbXShHUXVhcmssIGNvbnN0IEdWYWx1ZSogdmFsdWUs
IGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgICAgICBhdXRvKiBlbmRQ
b2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVyTWVkaWFFbmRwb2ludCo+KHVzZXJEYXRh
KTsKKyAgICAgICAgICAgIGVuZFBvaW50LT5wcm9jZXNzU3RhdHModmFsdWUpOworICAgICAgICAg
ICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0pLCB0aGlzKTsKKyAgICB9KTsKK30KKyNlbmRpZgor
CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OnN0YXJ0TG9nZ2luZ1N0YXRzKCkKK3sKKyAgICBpZiAobV9zdGF0c0xvZ1RpbWVyLmlzQWN0aXZl
KCkpCisgICAgICAgIG1fc3RhdHNMb2dUaW1lci5zdG9wKCk7CisgICAgbV9zdGF0c0xvZ1RpbWVy
LnN0YXJ0UmVwZWF0aW5nKHN0YXRzTG9nSW50ZXJ2YWwoU2Vjb25kczo6bmFuKCkpKTsKK30KKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wTG9nZ2luZ1N0YXRzKCkKK3sKKyAgICBt
X3N0YXRzTG9nVGltZXIuc3RvcCgpOworfQorCitXVEZMb2dDaGFubmVsJiBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50Ojpsb2dDaGFubmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTG9nV2ViUlRDOwor
fQorCitTZWNvbmRzIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0YXRzTG9nSW50ZXJ2YWwoU2Vj
b25kcyByZXBvcnRUaW1lc3RhbXApIGNvbnN0Cit7CisgICAgaWYgKGxvZ2dlcigpLndpbGxMb2co
bG9nQ2hhbm5lbCgpLCBXVEZMb2dMZXZlbDo6SW5mbykpCisgICAgICAgIHJldHVybiAyX3M7CisK
KyAgICBpZiAocmVwb3J0VGltZXN0YW1wIC0gbV9zdGF0c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1w
ID4gMTVfcykKKyAgICAgICAgcmV0dXJuIDEwX3M7CisKKyAgICByZXR1cm4gNF9zOworfQorI2Vu
ZGlmCisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyRGVjb2RlckltcGxlbWVu
dGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICAv
LyBUT0RPOiBjb2xsZWN0IHN0YXRzIGFuZCBsb29rdXAgSW5ib3VuZFJ0cCAiZGVjb2Rlcl9pbXBs
ZW1lbnRhdGlvbiIgZmllbGQuCisgICAgY2FsbGJhY2soeyB9KTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECituYW1lc3BhY2UgV1RGIHsK
KwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3N0cnVjdCBMb2dBcmd1bWVudDsKKwordGVtcGxh
dGUgPD4KK3N0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3JlOjpSVENTdGF0c0xvZ2dlcj4geworICAg
IHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgV2ViQ29yZTo6UlRDU3RhdHNMb2dnZXImIGxv
Z2dlcikKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcobG9nZ2VyLnRvSlNPTlN0cmluZygp
KTsKKyAgICB9Cit9OworCit9OyAvLyBuYW1lc3BhY2UgV1RGCisjZW5kaWYgLy8gIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ck1lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43NzAzMmI0YzllMDhh
ZDk0NzE5OGY3MzcwNGEwMmU2MWQ0NDA1OWM4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dC5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEln
YWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJSVENSdHBSZWNlaXZlci5oIgorCisjaW5jbHVkZSA8d3RmL0xvZ2dlckhl
bHBlci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorI2luY2x1ZGUg
PHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
U3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ7CitjbGFzcyBHU3RyZWFtZXJSdHBUcmFuc2NlaXZl
ckJhY2tlbmQ7CitjbGFzcyBNZWRpYVN0cmVhbVRyYWNrOworY2xhc3MgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uOworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOworCitj
bGFzcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6Ok1haW4+Cisj
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBwcml2YXRlIExvZ2dlckhlbHBlcgorI2Vu
ZGlmCit7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxHU3RyZWFtZXJNZWRpYUVuZHBvaW50PiBj
cmVhdGUoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBwZWVyQ29ubmVjdGlvbikgeyBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50KHBlZXJDb25uZWN0aW9u
KSk7IH0KKyAgICB2aXJ0dWFsIH5HU3RyZWFtZXJNZWRpYUVuZHBvaW50KCk7CisKKyAgICBib29s
IHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mKTsKKyAgICB2b2lk
IHJlc3RhcnRJY2UoKTsKKworICAgIHZvaWQgZG9TZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFJU
Q1Nlc3Npb25EZXNjcmlwdGlvbiopOworICAgIHZvaWQgZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihj
b25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24mKTsKKyAgICB2b2lkIGRvQ3JlYXRlT2ZmZXIoY29u
c3QgUlRDT2ZmZXJPcHRpb25zJik7CisgICAgdm9pZCBkb0NyZWF0ZUFuc3dlcigpOworCisgICAg
dm9pZCBnZXRTdGF0cyhHc3RQYWQqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsKKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFDaGFubmVsKGNv
bnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpOworICAgIHZvaWQgb25EYXRh
Q2hhbm5lbChHc3RXZWJSVENEYXRhQ2hhbm5lbCopOworCisgICAgdm9pZCBhZGRJY2VDYW5kaWRh
dGUoR1N0cmVhbWVySWNlQ2FuZGlkYXRlJiwgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpBZGRJY2VD
YW5kaWRhdGVDYWxsYmFjayYmKTsKKworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2b2lkIHN0b3Ao
KTsKKyAgICBib29sIGlzU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BpcGVsaW5lOyB9CisK
KyAgICB2b2lkIHN1c3BlbmQoKTsKKyAgICB2b2lkIHJlc3VtZSgpOworCisgICAgdm9pZCBnYXRo
ZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0aW9uPHZvaWQoU3RyaW5nJiYpPiYmKTsK
KyAgICBib29sIGlzTmVnb3RpYXRpb25OZWVkZWQoKSBjb25zdCB7IHJldHVybiBtX2lzTmVnb3Rp
YXRpb25OZWVkZWQ7IH0KKworICAgIHZvaWQgY29uZmlndXJlQW5kTGlua1NvdXJjZShSZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXImKTsKKworICAgIGJvb2wgYWRkVHJhY2soR1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYsIE1lZGlhU3RyZWFtVHJhY2smLCBjb25zdCBGaXhlZFZl
Y3RvcjxTdHJpbmc+Jik7CisgICAgdm9pZCByZW1vdmVUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kJik7CisKKyAgICBzdHJ1Y3QgQmFja2VuZHMgeworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZD4gc2VuZGVyQmFja2VuZDsKKyAgICAgICAgc3Rk
Ojp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4gcmVjZWl2ZXJCYWNrZW5k
OworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
PiB0cmFuc2NlaXZlckJhY2tlbmQ7CisgICAgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPEJhY2tlbmRz
PiBhZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgUlRDUnRwVHJh
bnNjZWl2ZXJJbml0Jik7CisgICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gYWRkVHJhbnNjZWl2
ZXIoTWVkaWFTdHJlYW1UcmFjayYsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+IHRyYW5zY2Vp
dmVyQmFja2VuZEZyb21TZW5kZXIoR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYpOworCisgICAg
dm9pZCBzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYs
IE1lZGlhU3RyZWFtVHJhY2smKTsKKworICAgIHZvaWQgY29sbGVjdFRyYW5zY2VpdmVycygpOwor
CisgICAgdm9pZCBjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNjZWVkZWQoR1VuaXF1ZU91dFB0
cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYpOworICAgIHZvaWQgY3JlYXRlU2Vzc2lv
bkRlc2NyaXB0aW9uRmFpbGVkKEdVbmlxdWVPdXRQdHI8R0Vycm9yPiYmKTsKKworICAgIEdzdEVs
ZW1lbnQqIHBpcGVsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9waXBlbGluZS5nZXQoKTsgfQorICAg
IGJvb2wgaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKik7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICB2b2lkIHByb2Nlc3NTdGF0cyhjb25zdCBHVmFsdWUqKTsKKyNlbmRpZgorCitw
cm90ZWN0ZWQ6CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9pZCBvblN0YXRzRGVs
aXZlcmVkKGNvbnN0IEdzdFN0cnVjdHVyZSopOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludChHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmKTsKKwor
ICAgIGJvb2wgaW5pdGlhbGl6ZVBpcGVsaW5lKCk7CisgICAgdm9pZCB0ZWFyZG93blBpcGVsaW5l
KCk7CisgICAgdm9pZCBkaXNwb3NlRWxlbWVudENoYWluKEdzdEVsZW1lbnQqKTsKKworICAgIHZv
aWQgc2V0RGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKiwgYm9vbCBpc0xv
Y2FsLCBGdW5jdGlvbjx2b2lkKCk+JiYgc3VjY2Vzc0NhbGxiYWNrLCBGdW5jdGlvbjx2b2lkKGNv
bnN0IEdFcnJvciopPiYmIGZhaWx1cmVDYWxsYmFjayk7CisgICAgdm9pZCBpbml0aWF0ZShib29s
IGlzSW5pdGlhdG9yLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJik7CisKKyAgICB2b2lkIG9u
TmVnb3RpYXRpb25OZWVkZWQoKTsKKyAgICB2b2lkIG9uSWNlQ29ubmVjdGlvbkNoYW5nZSgpOwor
ICAgIHZvaWQgb25JY2VHYXRoZXJpbmdDaGFuZ2UoKTsKKyAgICB2b2lkIG9uSWNlQ2FuZGlkYXRl
KGd1aW50IHNkcE1MaW5lSW5kZXgsIGdjaGFyYXJyYXkgY2FuZGlkYXRlKTsKKworICAgIE1lZGlh
U3RyZWFtJiBtZWRpYVN0cmVhbUZyb21SVENTdHJlYW0oU3RyaW5nIGxhYmVsKTsKKworICAgIHZv
aWQgYWRkUmVtb3RlU3RyZWFtKEdzdFBhZCopOworICAgIHZvaWQgcmVtb3ZlUmVtb3RlU3RyZWFt
KEdzdFBhZCopOworCisgICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gY3JlYXRlVHJhbnNjZWl2
ZXJCYWNrZW5kcyhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5p
dCYsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYmKTsKKyAgICBHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UgY3JlYXRlU291cmNlRm9yVHJhY2soTWVkaWFTdHJlYW1U
cmFjayYpOworCisgICAgdm9pZCBzdG9yZVJlbW90ZU1MaW5lSW5mbyhHc3RTRFBNZXNzYWdlKik7
CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gcmVxdWVzdFBhZCh1bnNpZ25lZCBtbGluZUluZGV4LCBj
b25zdCBHUmVmUHRyPEdzdENhcHM+Jik7CisKKyAgICB2b2lkIHNldFJlbW90ZURlc2NyaXB0aW9u
U3VjY2VlZGVkKCk7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICB2b2lkIGdhdGhl
clN0YXRzRm9yTG9nZ2luZygpOworICAgIHZvaWQgc3RhcnRMb2dnaW5nU3RhdHMoKTsKKyAgICB2
b2lkIHN0b3BMb2dnaW5nU3RhdHMoKTsKKworICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCB2b2lkKiBsb2dJ
ZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CisgICAg
Y29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQiOyB9CisgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0
IGZpbmFsOworCisgICAgU2Vjb25kcyBzdGF0c0xvZ0ludGVydmFsKFNlY29uZHMpIGNvbnN0Owor
I2VuZGlmCisKKyAgICBIYXNoTWFwPFN0cmluZywgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZT4g
bV9tZWRpYUZvck1pZDsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIG1lZGlhVHlwZUZv
ck1pZChjb25zdCBjaGFyKiBtaWQpOworCisgICAgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kJiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1f
d2VicnRjQmluOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKworICAgIEhh
c2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiBtX3JlbW90ZVN0cmVhbXNCeUlkOwor
CisgICAgc3RydWN0IFBlbmRpbmdNTGluZUluZm8geworICAgICAgICBHUmVmUHRyPEdzdENhcHM+
IGNhcHM7CisgICAgICAgIGJvb2wgaXNVc2VkOworICAgICAgICBWZWN0b3I8aW50PiBwYXlsb2Fk
VHlwZXM7CisgICAgfTsKKyAgICBWZWN0b3I8UGVuZGluZ01MaW5lSW5mbz4gbV9yZW1vdGVNTGlu
ZUluZm9zOworCisgICAgUmVmPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yPiBtX3N0YXRzQ29sbGVj
dG9yOworCisgICAgdW5zaWduZWQgbV9yZXF1ZXN0UGFkQ291bnRlciB7IDAgfTsKKyAgICBpbnQg
bV9wdENvdW50ZXIgeyA5NiB9OworCisgICAgdW5zaWduZWQgbV9tbGluZUluZGV4IHsgMCB9Owor
CisgICAgVmVjdG9yPFJlZjxSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI+PiBt
X3NvdXJjZXM7CisKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPj4gbV9wZW5kaW5nU3Ry
ZWFtczsKKyAgICB1bnNpZ25lZCBtX3BlbmRpbmdJbmNvbWluZ1N0cmVhbXMgeyAwIH07CisKKyAg
ICBib29sIG1faXNJbml0aWF0b3IgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc05lZ290aWF0aW9u
TmVlZGVkIHsgZmFsc2UgfTsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIFRpbWVy
IG1fc3RhdHNMb2dUaW1lcjsKKyAgICBTZWNvbmRzIG1fc3RhdHNGaXJzdERlbGl2ZXJlZFRpbWVz
dGFtcDsKKyAgICBSZWY8Y29uc3QgTG9nZ2VyPiBtX2xvZ2dlcjsKKyAgICBjb25zdCB2b2lkKiBt
X2xvZ0lkZW50aWZpZXI7CisjZW5kaWYKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTM4NGVjZGRh
ZjY2MmY0MDYxOTZhY2VlZmI3YTRkNTM0YTY3MmJhNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcHAKQEAgLTAsMCArMSwzNzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJNZWRpYUVuZHBvaW50LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkljZUNh
bmRpZGF0ZS5oIgorI2luY2x1ZGUgIkpTUlRDU3RhdHNSZXBvcnQuaCIKKyNpbmNsdWRlICJNZWRp
YUVuZHBvaW50Q29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiUlRDSWNlQ2FuZGlkYXRlLmgiCisjaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24u
aCIKKyNpbmNsdWRlICJSVENSdHBDYXBhYmlsaXRpZXMuaCIKKyNpbmNsdWRlICJSVENSdHBSZWNl
aXZlci5oIgorI2luY2x1ZGUgIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBzdGQ6
OnVuaXF1ZV9wdHI8UGVlckNvbm5lY3Rpb25CYWNrZW5kPiBjcmVhdGVHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mIHBlZXJDb25uZWN0aW9uKQoreworICAg
IGVuc3VyZUdTdHJlYW1lckluaXRpYWxpemVkKCk7CisgICAgaWYgKCFpc0dTdHJlYW1lclBsdWdp
bkF2YWlsYWJsZSgid2VicnRjIikpIHsKKyAgICAgICAgV1RGTG9nQWx3YXlzKCJHc3RXZWJSVEMg
cGx1Z2luIG5vdCBmb3VuZC4gTWFrZSBzdXJlIHRvIGluc3RhbGwgZ3N0LXBsdWdpbnMtYmFkID49
IDEuMjAgd2l0aCB0aGUgd2VicnRjIHBsdWdpbiBlbmFibGVkLiIpOworICAgICAgICByZXR1cm4g
bnVsbHB0cjsKKyAgICB9CisgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ+KHBlZXJDb25uZWN0aW9uKTsKK30KKworQ3JlYXRlUGVlckNvbm5l
Y3Rpb25CYWNrZW5kIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlID0gY3JlYXRlR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOworCitzdGQ6Om9wdGlvbmFsPFJUQ1J0cENhcGFiaWxp
dGllcz4gUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZWNlaXZlckNhcGFiaWxpdGllcyhTY3JpcHRF
eGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBraW5kKQoreworICAgIFJUQ1J0cENhcGFi
aWxpdGllcyBjYXBhYmlsaXRpZXM7CisgICAgY2FwYWJpbGl0aWVzLmhlYWRlckV4dGVuc2lvbnMu
YXBwZW5kKHsgImh0dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQtaG9sbWVyLXJtY2F0LXRyYW5z
cG9ydC13aWRlLWNjLWV4dGVuc2lvbnMtMDEiIH0pOworICAgIGlmIChraW5kID09ICJhdWRpbyJf
cykgeworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJh
dWRpby9PUFVTIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA0ODAwMCwKKyAgICAgICAgICAg
IC5jaGFubmVscyA9IDIsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIgorICAgICAgICB9
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjYXBhYmlsaXRpZXMuaGVhZGVyRXh0ZW5zaW9ucy5h
cHBlbmQoeyAidXJuOjNncHA6dmlkZW8tb3JpZW50YXRpb24iIH0pOworICAgICAgICBjYXBhYmls
aXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDgiLAorICAgICAgICAg
ICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7
CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVv
L1ZQOSIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2Rw
Rm10cExpbmUgPSAicHJvZmlsZS1pZD0wIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVj
cy5hcHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5jbG9ja1Jh
dGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlkPTEiIH0p
OworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRl
by9IMjY0IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5z
ZHBGbXRwTGluZSA9ICIiIH0pOworICAgIH0KKyAgICByZXR1cm4gY2FwYWJpbGl0aWVzOworfQor
CitzdGQ6Om9wdGlvbmFsPFJUQ1J0cENhcGFiaWxpdGllcz4gUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpzZW5kZXJDYXBhYmlsaXRpZXMoU2NyaXB0RXhlY3V0aW9uQ29udGV4dCYsIGNvbnN0IFN0cmlu
ZyYga2luZCkKK3sKKyAgICBSVENSdHBDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOworICAgIGNh
cGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJodHRwOi8vd3d3LmlldGYub3Jn
L2lkL2RyYWZ0LWhvbG1lci1ybWNhdC10cmFuc3BvcnQtd2lkZS1jYy1leHRlbnNpb25zLTAxIiB9
KTsKKyAgICBpZiAoa2luZCA9PSAiYXVkaW8iX3MpIHsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNv
ZGVjcy5hcHBlbmQoeyAubWltZVR5cGUgPSAiYXVkaW8vT1BVUyIsCisgICAgICAgICAgICAuY2xv
Y2tSYXRlID0gNDgwMDAsCisgICAgICAgICAgICAuY2hhbm5lbHMgPSAyLAorICAgICAgICAgICAg
LnNkcEZtdHBMaW5lID0gIiIgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgY2FwYWJpbGl0aWVz
LmhlYWRlckV4dGVuc2lvbnMuYXBwZW5kKHsgInVybjozZ3BwOnZpZGVvLW9yaWVudGF0aW9uIiB9
KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUgPSAidmlk
ZW8vVlA4IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5z
ZHBGbXRwTGluZSA9ICIiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7
IC5taW1lVHlwZSA9ICJ2aWRlby9WUDkiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAw
LAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gInByb2ZpbGUtaWQ9MCIgfSk7CisgICAgICAg
IGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL1ZQOSIsCisg
ICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10cExpbmUg
PSAicHJvZmlsZS1pZD0xIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBlbmQo
eyAubWltZVR5cGUgPSAidmlkZW8vSDI2NCIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAw
MDAsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIiB9KTsKKyAgICB9CisgICAgcmV0dXJu
IGNhcGFiaWxpdGllczsKK30KKworR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mIHBlZXJDb25uZWN0
aW9uKQorICAgIDogUGVlckNvbm5lY3Rpb25CYWNrZW5kKHBlZXJDb25uZWN0aW9uKQorICAgICwg
bV9lbmRwb2ludChHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGUoKnRoaXMpKQoreworICAg
IGRpc2FibGVJQ0VDYW5kaWRhdGVGaWx0ZXJpbmcoKTsKK30KKworR1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjp+R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKCkgPSBkZWZhdWx0
OworCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c3VzcGVuZCgpCit7Cisg
ICAgbV9lbmRwb2ludC0+c3VzcGVuZCgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6cmVzdW1lKCkKK3sKKyAgICBtX2VuZHBvaW50LT5yZXN1bWUoKTsKK30KKwor
dm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlc3RhcnRJY2UoKQoreworICAg
IG1fZW5kcG9pbnQtPnJlc3RhcnRJY2UoKTsKK30KKworYm9vbCBHU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ6OnNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24m
JiBjb25maWd1cmF0aW9uKQoreworICAgIHJldHVybiBtX2VuZHBvaW50LT5zZXRDb25maWd1cmF0
aW9uKGNvbmZpZ3VyYXRpb24pOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6Z2V0U3RhdHMoUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQoreworICAgIG1f
ZW5kcG9pbnQtPmdldFN0YXRzKG51bGxwdHIsIFdURk1vdmUocHJvbWlzZSkpOworfQorCitzdGF0
aWMgaW5saW5lIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIGJhY2tlbmRGcm9tUlRQU2VuZGVy
KFJUQ1J0cFNlbmRlciYgc2VuZGVyKQoreworICAgIEFTU0VSVCghc2VuZGVyLmlzU3RvcHBlZCgp
KTsKKyAgICByZXR1cm4gc3RhdGljX2Nhc3Q8R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCY+KCpz
ZW5kZXIuYmFja2VuZCgpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmdldFN0YXRzKFJUQ1J0cFNlbmRlciYgc2VuZGVyLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYm
IHByb21pc2UpCit7CisgICAgaWYgKCFzZW5kZXIuYmFja2VuZCgpKSB7CisgICAgICAgIG1fZW5k
cG9pbnQtPmdldFN0YXRzKG51bGxwdHIsIFdURk1vdmUocHJvbWlzZSkpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgYXV0byYgYmFja2VuZCA9IGJhY2tlbmRGcm9tUlRQU2VuZGVyKHNl
bmRlcik7CisgICAgR1JlZlB0cjxHc3RQYWQ+IHBhZDsKKyAgICBpZiAoUmVhbHRpbWVPdXRnb2lu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyKiBzb3VyY2UgPSBiYWNrZW5kLmF1ZGlvU291cmNlKCkpCisg
ICAgICAgIHBhZCA9IHNvdXJjZS0+cGFkKCk7CisgICAgZWxzZSBpZiAoUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyKiBzb3VyY2UgPSBiYWNrZW5kLnZpZGVvU291cmNlKCkpCisg
ICAgICAgIHBhZCA9IHNvdXJjZS0+cGFkKCk7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMocGFk
LmdldCgpLCBXVEZNb3ZlKHByb21pc2UpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ6OmdldFN0YXRzKFJUQ1J0cFJlY2VpdmVyJiByZWNlaXZlciwgUmVmPERlZmVy
cmVkUHJvbWlzZT4mJiBwcm9taXNlKQoreworICAgIGlmICghcmVjZWl2ZXIuYmFja2VuZCgpKSB7
CisgICAgICAgIG1fZW5kcG9pbnQtPmdldFN0YXRzKG51bGxwdHIsIFdURk1vdmUocHJvbWlzZSkp
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgR3N0RWxlbWVudCogYmluID0gbnVsbHB0
cjsKKyAgICBhdXRvJiBzb3VyY2UgPSByZWNlaXZlci50cmFjaygpLnByaXZhdGVUcmFjaygpLnNv
dXJjZSgpOworICAgIGlmIChzb3VyY2UuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpCisgICAgICAg
IGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciY+
KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZSBpZiAoc291cmNlLmlzSW5jb21pbmdWaWRlb1NvdXJj
ZSgpKQorICAgICAgICBiaW4gPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXImPihzb3VyY2UpLmJpbigpOworICAgIGVsc2UKKyAgICAgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKworICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChiaW4sICJzaW5rIikpOworICAgIGF1dG8gc3JjUGFkID0g
YWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIoc2lua1BhZC5nZXQoKSkpOworICAgIG1fZW5kcG9p
bnQtPmdldFN0YXRzKHNyY1BhZC5nZXQoKSwgV1RGTW92ZShwcm9taXNlKSk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb1NldExvY2FsRGVzY3JpcHRpb24oY29u
c3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbikKK3sKKyAgICBtX2VuZHBvaW50
LT5kb1NldExvY2FsRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOworICAgIG1faXNMb2NhbERlc2Ny
aXB0aW9uU2V0ID0gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmRvU2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBk
ZXNjcmlwdGlvbikKK3sKKyAgICBtX2VuZHBvaW50LT5kb1NldFJlbW90ZURlc2NyaXB0aW9uKGRl
c2NyaXB0aW9uKTsKKyAgICBtX2lzUmVtb3RlRGVzY3JpcHRpb25TZXQgPSB0cnVlOworfQorCit2
b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9DcmVhdGVPZmZlcihSVENPZmZl
ck9wdGlvbnMmJiBvcHRpb25zKQoreworICAgIG1fZW5kcG9pbnQtPmRvQ3JlYXRlT2ZmZXIob3B0
aW9ucyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0
ZUFuc3dlcihSVENBbnN3ZXJPcHRpb25zJiYpCit7CisgICAgaWYgKCFtX2lzUmVtb3RlRGVzY3Jp
cHRpb25TZXQpIHsKKyAgICAgICAgY3JlYXRlQW5zd2VyRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFs
aWRTdGF0ZUVycm9yLCAiTm8gcmVtb3RlIGRlc2NyaXB0aW9uIHNldCIgfSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisgICAgbV9lbmRwb2ludC0+ZG9DcmVhdGVBbnN3ZXIoKTsKK30KKwordm9p
ZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNsb3NlKCkKK3sKKyAgICBtX2VuZHBv
aW50LT5jbG9zZSgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
ZG9TdG9wKCkKK3sKKyAgICBtX2VuZHBvaW50LT5zdG9wKCk7CisgICAgbV9wZW5kaW5nUmVjZWl2
ZXJzLmNsZWFyKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpk
b0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgQWRkSWNlQ2FuZGlk
YXRlQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICB1bnNpZ25lZCBzZHBNTGluZUluZGV4ID0g
Y2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgoKSA/IGNhbmRpZGF0ZS5zZHBNTGluZUluZGV4KCkudmFs
dWUoKSA6IDA7CisgICAgYXV0byBydGNDYW5kaWRhdGUgPSBXVEY6Om1ha2VVbmlxdWU8R1N0cmVh
bWVySWNlQ2FuZGlkYXRlPigqbmV3IEdTdHJlYW1lckljZUNhbmRpZGF0ZSB7IHNkcE1MaW5lSW5k
ZXgsIGNhbmRpZGF0ZS5jYW5kaWRhdGUoKSB9KTsKKyAgICBtX2VuZHBvaW50LT5hZGRJY2VDYW5k
aWRhdGUoKnJ0Y0NhbmRpZGF0ZSwgV1RGTW92ZShjYWxsYmFjaykpOworfQorCitSZWY8UlRDUnRw
UmVjZWl2ZXI+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXIo
c3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4mJiBiYWNrZW5kLCBj
b25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKQoreworICAgIGF1
dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3BlZXJDb25uZWN0aW9uLnNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQoKSk7CisKKyAgICBhdXRvIHNvdXJjZSA9IGJhY2tlbmQtPmNyZWF0
ZVNvdXJjZSh0cmFja0tpbmQsIHRyYWNrSWQpOworICAgIC8vIFJlbW90ZSBzb3VyY2UgaXMgaW5p
dGlhbGx5IG11dGVkIGFuZCB3aWxsIGJlIHVubXV0ZWQgd2hlbiByZWNlaXZpbmcgdGhlIGZpcnN0
IHBhY2tldC4KKyAgICBzb3VyY2UtPnNldE11dGVkKHRydWUpOworICAgIGF1dG8gdHJhY2tJRCA9
IHNvdXJjZS0+cGVyc2lzdGVudElEKCk7CisgICAgYXV0byByZW1vdGVUcmFja1ByaXZhdGUgPSBN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlKGRvY3VtZW50LmxvZ2dlcigpLCBXVEZNb3Zl
KHNvdXJjZSksIFdURk1vdmUodHJhY2tJRCkpOworICAgIGF1dG8gcmVtb3RlVHJhY2sgPSBNZWRp
YVN0cmVhbVRyYWNrOjpjcmVhdGUoZG9jdW1lbnQsIFdURk1vdmUocmVtb3RlVHJhY2tQcml2YXRl
KSk7CisKKyAgICByZXR1cm4gUlRDUnRwUmVjZWl2ZXI6OmNyZWF0ZSgqdGhpcywgV1RGTW92ZShy
ZW1vdGVUcmFjayksIFdURk1vdmUoYmFja2VuZCkpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRD
RGF0YUNoYW5uZWxIYW5kbGVyPiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0
ZURhdGFDaGFubmVsSGFuZGxlcihjb25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBSVENEYXRhQ2hh
bm5lbEluaXQmIG9wdGlvbnMpCit7CisgICAgcmV0dXJuIG1fZW5kcG9pbnQtPmNyZWF0ZURhdGFD
aGFubmVsKGxhYmVsLCBvcHRpb25zKTsKK30KKworc3RhdGljIGlubGluZSBSZWZQdHI8UlRDUnRw
U2VuZGVyPiBmaW5kRXhpc3RpbmdTZW5kZXIoY29uc3QgVmVjdG9yPFJlZlB0cjxSVENSdHBUcmFu
c2NlaXZlcj4+JiB0cmFuc2NlaXZlcnMsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIHNlbmRl
ckJhY2tlbmQpCit7CisgICAgQVNTRVJUKHNlbmRlckJhY2tlbmQucnRjU2VuZGVyKCkpOworICAg
IGZvciAoYXV0byYgdHJhbnNjZWl2ZXIgOiB0cmFuc2NlaXZlcnMpIHsKKyAgICAgICAgYXV0byYg
c2VuZGVyID0gdHJhbnNjZWl2ZXItPnNlbmRlcigpOworICAgICAgICBpZiAoIXNlbmRlci5pc1N0
b3BwZWQoKSAmJiBzZW5kZXJCYWNrZW5kLnJ0Y1NlbmRlcigpID09IGJhY2tlbmRGcm9tUlRQU2Vu
ZGVyKHNlbmRlcikucnRjU2VuZGVyKCkpCisgICAgICAgICAgICByZXR1cm4gUmVmKHNlbmRlcik7
CisgICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitFeGNlcHRpb25PcjxSZWY8UlRDUnRw
U2VuZGVyPj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFjayhNZWRpYVN0
cmVhbVRyYWNrJiB0cmFjaywgRml4ZWRWZWN0b3I8U3RyaW5nPiYmIG1lZGlhU3RyZWFtSWRzKQor
eworICAgIGF1dG8gc2VuZGVyQmFja2VuZCA9IFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kPigqdGhpcywgbnVsbHB0ciwgbnVsbHB0cik7CisgICAgaWYgKCFtX2VuZHBv
aW50LT5hZGRUcmFjaygqc2VuZGVyQmFja2VuZCwgdHJhY2ssIG1lZGlhU3RyZWFtSWRzKSkKKyAg
ICAgICAgcmV0dXJuIEV4Y2VwdGlvbiB7IFR5cGVFcnJvciwgIlVuYWJsZSB0byBhZGQgdHJhY2si
X3MgfTsKKworICAgIGlmIChhdXRvIHNlbmRlciA9IGZpbmRFeGlzdGluZ1NlbmRlcihtX3BlZXJD
b25uZWN0aW9uLmN1cnJlbnRUcmFuc2NlaXZlcnMoKSwgKnNlbmRlckJhY2tlbmQpKSB7CisgICAg
ICAgIGJhY2tlbmRGcm9tUlRQU2VuZGVyKCpzZW5kZXIpLnRha2VTb3VyY2UoKnNlbmRlckJhY2tl
bmQpOworICAgICAgICBzZW5kZXItPnNldFRyYWNrKFJlZih0cmFjaykpOworICAgICAgICBzZW5k
ZXItPnNldE1lZGlhU3RyZWFtSWRzKFdURk1vdmUobWVkaWFTdHJlYW1JZHMpKTsKKyAgICAgICAg
cmV0dXJuIHNlbmRlci5yZWxlYXNlTm9uTnVsbCgpOworICAgIH0KKworICAgIGF1dG8gdHJhbnNj
ZWl2ZXJCYWNrZW5kID0gbV9lbmRwb2ludC0+dHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNlbmRlcigq
c2VuZGVyQmFja2VuZCk7CisKKyAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRl
KG1fcGVlckNvbm5lY3Rpb24sIFJlZih0cmFjayksIFdURk1vdmUoc2VuZGVyQmFja2VuZCkpOwor
ICAgIHNlbmRlci0+c2V0TWVkaWFTdHJlYW1JZHMoV1RGTW92ZShtZWRpYVN0cmVhbUlkcykpOwor
ICAgIGF1dG8gcmVjZWl2ZXIgPSBjcmVhdGVSZWNlaXZlcih0cmFuc2NlaXZlckJhY2tlbmQtPmNy
ZWF0ZVJlY2VpdmVyQmFja2VuZCgpLCB0cmFjay5raW5kKCksIHRyYWNrLmlkKCkpOworICAgIGF1
dG8gdHJhbnNjZWl2ZXIgPSBSVENSdHBUcmFuc2NlaXZlcjo6Y3JlYXRlKHNlbmRlci5jb3B5UmVm
KCksIFdURk1vdmUocmVjZWl2ZXIpLCBXVEZNb3ZlKHRyYW5zY2VpdmVyQmFja2VuZCkpOworICAg
IG1fcGVlckNvbm5lY3Rpb24uYWRkSW50ZXJuYWxUcmFuc2NlaXZlcihXVEZNb3ZlKHRyYW5zY2Vp
dmVyKSk7CisgICAgcmV0dXJuIHNlbmRlcjsKK30KKwordGVtcGxhdGU8dHlwZW5hbWUgVD4KK0V4
Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZDo6YWRkVHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQoVCYmIHRyYWNrT3JLaW5kLCBj
b25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQpCit7CisgICAgYXV0byBiYWNrZW5kcyA9
IG1fZW5kcG9pbnQtPmFkZFRyYW5zY2VpdmVyKHRyYWNrT3JLaW5kLCBpbml0KTsKKyAgICBpZiAo
IWJhY2tlbmRzKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZEFjY2Vzc0Vycm9y
LCAiVW5hYmxlIHRvIGFkZCB0cmFuc2NlaXZlciJfcyB9OworCisgICAgYXV0byBzZW5kZXIgPSBS
VENSdHBTZW5kZXI6OmNyZWF0ZShtX3BlZXJDb25uZWN0aW9uLCBXVEZNb3ZlKHRyYWNrT3JLaW5k
KSwgV1RGTW92ZShiYWNrZW5kcy0+c2VuZGVyQmFja2VuZCkpOworICAgIGF1dG8gcmVjZWl2ZXIg
PSBjcmVhdGVSZWNlaXZlcihXVEZNb3ZlKGJhY2tlbmRzLT5yZWNlaXZlckJhY2tlbmQpLCBzZW5k
ZXItPnRyYWNrS2luZCgpLCBzZW5kZXItPnRyYWNrSWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZl
ciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoV1RGTW92ZShzZW5kZXIpLCBXVEZNb3ZlKHJl
Y2VpdmVyKSwgV1RGTW92ZShiYWNrZW5kcy0+dHJhbnNjZWl2ZXJCYWNrZW5kKSk7CisgICAgbV9w
ZWVyQ29ubmVjdGlvbi5hZGRJbnRlcm5hbFRyYW5zY2VpdmVyKHRyYW5zY2VpdmVyLmNvcHlSZWYo
KSk7CisgICAgcmV0dXJuIHRyYW5zY2VpdmVyOworfQorCitFeGNlcHRpb25PcjxSZWY8UlRDUnRw
VHJhbnNjZWl2ZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2Vp
dmVyKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQm
IGluaXQpCit7CisgICAgcmV0dXJuIGFkZFRyYW5zY2VpdmVyRnJvbVRyYWNrT3JLaW5kKFN0cmlu
ZyB7IHRyYWNrS2luZCB9LCBpbml0KTsKK30KKworRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5z
Y2VpdmVyPj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlcihS
ZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiB0cmFjaywgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0
JiBpbml0KQoreworICAgIHJldHVybiBhZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChXVEZN
b3ZlKHRyYWNrKSwgaW5pdCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYg
c2VuZGVyLCBNZWRpYVN0cmVhbVRyYWNrJiB0cmFjaykKK3sKKyAgICBtX2VuZHBvaW50LT5zZXRT
ZW5kZXJTb3VyY2VGcm9tVHJhY2soc2VuZGVyLCB0cmFjayk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJiBiYWNrZW5kRnJvbVJUUFRyYW5zY2VpdmVy
KFJUQ1J0cFRyYW5zY2VpdmVyJiB0cmFuc2NlaXZlcikKK3sKKyAgICByZXR1cm4gc3RhdGljX2Nh
c3Q8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJj4oKnRyYW5zY2VpdmVyLmJhY2tlbmQo
KSk7Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVyKiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmV4aXN0aW5nVHJhbnNjZWl2ZXIoV1RGOjpGdW5jdGlvbjxib29sKEdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZCYpPiYmIG1hdGNoaW5nRnVuY3Rpb24pCit7CisgICAgZm9yIChhdXRv
JiB0cmFuc2NlaXZlciA6IG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5zY2VpdmVycygpKSB7
CisgICAgICAgIGlmIChtYXRjaGluZ0Z1bmN0aW9uKGJhY2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIo
KnRyYW5zY2VpdmVyKSkpCisgICAgICAgICAgICByZXR1cm4gdHJhbnNjZWl2ZXIuZ2V0KCk7Cisg
ICAgfQorICAgIHJldHVybiBudWxscHRyOworfQorCitSVENSdHBUcmFuc2NlaXZlciYgR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpuZXdSZW1vdGVUcmFuc2NlaXZlcihzdGQ6OnVuaXF1
ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiYmIHRyYW5zY2VpdmVyQmFja2Vu
ZCwgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZSB0eXBlKQoreworICAgIGF1dG8gdHJhY2tLaW5k
ID0gdHlwZSA9PSBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA/ICJhdWRpbyJfcyA6
ICJ2aWRlbyJfczsKKyAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKG1fcGVl
ckNvbm5lY3Rpb24sIHRyYWNrS2luZCwgdHJhbnNjZWl2ZXJCYWNrZW5kLT5jcmVhdGVTZW5kZXJC
YWNrZW5kKCp0aGlzLCBudWxscHRyLCBudWxscHRyKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNy
ZWF0ZVJlY2VpdmVyKHRyYW5zY2VpdmVyQmFja2VuZC0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCks
IHRyYWNrS2luZCwgc2VuZGVyLT50cmFja0lkKCkpOworICAgIGF1dG8gdHJhbnNjZWl2ZXIgPSBS
VENSdHBUcmFuc2NlaXZlcjo6Y3JlYXRlKFdURk1vdmUoc2VuZGVyKSwgV1RGTW92ZShyZWNlaXZl
ciksIFdURk1vdmUodHJhbnNjZWl2ZXJCYWNrZW5kKSk7CisgICAgbV9wZWVyQ29ubmVjdGlvbi5h
ZGRJbnRlcm5hbFRyYW5zY2VpdmVyKHRyYW5zY2VpdmVyLmNvcHlSZWYoKSk7CisgICAgcmV0dXJu
IHRyYW5zY2VpdmVyLmdldCgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6Y29sbGVjdFRyYW5zY2VpdmVycygpCit7CisgICAgbV9lbmRwb2ludC0+Y29sbGVjdFRy
YW5zY2VpdmVycygpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
cmVtb3ZlVHJhY2soUlRDUnRwU2VuZGVyJiBzZW5kZXIpCit7CisgICAgbV9lbmRwb2ludC0+cmVt
b3ZlVHJhY2soYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKSk7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1Nv
dXJjZXMoKQoreworICAgIGZvciAoYXV0byYgdHJhbnNjZWl2ZXIgOiBtX3BlZXJDb25uZWN0aW9u
LmN1cnJlbnRUcmFuc2NlaXZlcnMoKSkgeworICAgICAgICBpZiAoIXRyYW5zY2VpdmVyLT5zZW5k
ZXIoKS5pc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHZpZGVvU291cmNlID0g
YmFja2VuZEZyb21SVFBTZW5kZXIodHJhbnNjZWl2ZXItPnNlbmRlcigpKS52aWRlb1NvdXJjZSgp
KQorICAgICAgICAgICAgICAgIHZpZGVvU291cmNlLT5zZXRBcHBseVJvdGF0aW9uKHRydWUpOwor
ICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYm
KT4mJiBjYWxsYmFjaykKK3sKKyAgICBtX2VuZHBvaW50LT5nYXRoZXJEZWNvZGVySW1wbGVtZW50
YXRpb25OYW1lKFdURk1vdmUoY2FsbGJhY2spKTsKK30KKworYm9vbCBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmlzTmVnb3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG1fZW5kcG9pbnQtPmlzTmVnb3RpYXRpb25OZWVkZWQoKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhhZWExYTI2MDE2ZDc1ZjBiZTNmZDk4MDY4Mjk2MDg4YjllMmFlNTkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaApAQCAtMCwwICsxLDEyMCBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1
ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVk
ZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOworY2xh
c3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDsKK2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zY2Vp
dmVyQmFja2VuZDsKK2NsYXNzIFJUQ1J0cFJlY2VpdmVyOworY2xhc3MgUlRDUnRwUmVjZWl2ZXJC
YWNrZW5kOworY2xhc3MgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uOworY2xhc3MgUlRDU3RhdHNSZXBv
cnQ7CitjbGFzcyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU1lZGlh
U291cmNlR1N0cmVhbWVyOworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVh
bWVyOworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOworCitzdHJ1
Y3QgR1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExP
Q0FURUQ7CisgICAgdW5zaWduZWQgc2RwTUxpbmVJbmRleDsKKyAgICBTdHJpbmcgY2FuZGlkYXRl
OworfTsKKworY2xhc3MgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kIGZpbmFsIDogcHVi
bGljIFBlZXJDb25uZWN0aW9uQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKFJU
Q1BlZXJDb25uZWN0aW9uJik7CisgICAgfkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCgp
OworCitwcml2YXRlOgorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIGRvQ3JlYXRl
T2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYpIGZpbmFsOworICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIo
UlRDQW5zd2VyT3B0aW9ucyYmKSBmaW5hbDsKKyAgICB2b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlv
bihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qKSBmaW5hbDsKKyAgICB2b2lkIGRvU2V0UmVt
b3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikgZmluYWw7CisgICAg
dm9pZCBkb0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmLCBBZGRJY2VDYW5kaWRhdGVD
YWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIGRvU3RvcCgpIGZpbmFsOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcihj
b25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKSBmaW5hbDsKKyAgICB2b2lk
IHJlc3RhcnRJY2UoKSBmaW5hbDsKKyAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRw
b2ludENvbmZpZ3VyYXRpb24mJikgZmluYWw7CisgICAgdm9pZCBnZXRTdGF0cyhSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmKSBmaW5hbDsKKyAgICB2b2lkIGdldFN0YXRzKFJUQ1J0cFNlbmRlciYsIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFsOworICAgIHZvaWQgZ2V0U3RhdHMoUlRDUnRwUmVj
ZWl2ZXImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKKworICAgIHZvaWQgZW11bGF0
ZVBsYXRmb3JtRXZlbnQoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseVJv
dGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKSBmaW5hbDsKKworICAgIHZvaWQgZ2F0aGVy
RGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJikgZmlu
YWw7CisKKyAgICBib29sIGlzTmVnb3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0IGZpbmFs
OworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBjYW5Ucmlja2xlSWNlQ2FuZGlkYXRlcygpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH07CisKKyAgICBmcmllbmQgY2xhc3MgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDsKKyAgICBmcmllbmQgY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDsKKyAg
ICBSVENQZWVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fcGVlckNvbm5lY3Rp
b247IH0KKworICAgIHZvaWQgZ2V0U3RhdHNTdWNjZWVkZWQoY29uc3QgRGVmZXJyZWRQcm9taXNl
JiwgUmVmPFJUQ1N0YXRzUmVwb3J0PiYmKTsKKworICAgIEV4Y2VwdGlvbk9yPFJlZjxSVENSdHBT
ZW5kZXI+PiBhZGRUcmFjayhNZWRpYVN0cmVhbVRyYWNrJiwgRml4ZWRWZWN0b3I8U3RyaW5nPiYm
KSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZVRyYWNrKFJUQ1J0cFNlbmRlciYpIGZpbmFsOworCisg
ICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIoY29u
c3QgU3RyaW5nJiwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JikgZmluYWw7CisgICAgRXhj
ZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIoUmVmPE1lZGlh
U3RyZWFtVHJhY2s+JiYsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpIGZpbmFsOworICAg
IHZvaWQgc2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQm
LCBNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICBSVENSdHBUcmFuc2NlaXZlciogZXhpc3RpbmdU
cmFuc2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kJik+JiYpOworICAgIFJUQ1J0cFRyYW5zY2VpdmVyJiBuZXdSZW1vdGVUcmFuc2NlaXZlcihz
dGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiYmLCBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlKTsKKworICAgIHZvaWQgY29sbGVjdFRyYW5zY2VpdmVycygpIGZp
bmFsOworCitwcml2YXRlOgorICAgIGJvb2wgaXNMb2NhbERlc2NyaXB0aW9uU2V0KCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9pc0xvY2FsRGVzY3JpcHRpb25TZXQ7IH0KKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQ+CisgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRk
VHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQoVCYmIHRyYWNrT3JLaW5kLCBjb25zdCBSVENSdHBU
cmFuc2NlaXZlckluaXQmKTsKKworICAgIFJlZjxSVENSdHBSZWNlaXZlcj4gY3JlYXRlUmVjZWl2
ZXIoc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4mJiwgY29uc3Qg
U3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCk7CisKKyAgICB2b2lkIHN1
c3BlbmQoKSBmaW5hbDsKKyAgICB2b2lkIHJlc3VtZSgpIGZpbmFsOworCisgICAgUmVmPEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ+IG1fZW5kcG9pbnQ7CisgICAgYm9vbCBtX2lzTG9jYWxEZXNjcmlw
dGlvblNldCB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzUmVtb3RlRGVzY3JpcHRpb25TZXQgeyBm
YWxzZSB9OworCisgICAgVmVjdG9yPHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJJY2VDYW5kaWRh
dGU+PiBtX3BlbmRpbmdDYW5kaWRhdGVzOworICAgIFZlY3RvcjxSZWY8UlRDUnRwUmVjZWl2ZXI+
PiBtX3BlbmRpbmdSZWNlaXZlcnM7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjljMTM0M2IxMzlmNWJhOTJm
NDE1NWYzZDA1MDUwNWQyY2ZhZmNkNzQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tl
bmQuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIg
SWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tl
bmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
V2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlx
dWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSVENSdHBQYXJhbWV0ZXJzIEdTdHJl
YW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0UGFyYW1ldGVycygpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8UlRDUnRwQ29udHJpYnV0aW5n
U291cmNlPiBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldENvbnRyaWJ1dGluZ1NvdXJj
ZXMoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KworVmVjdG9yPFJUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZT4gR1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kOjpnZXRTeW5jaHJvbml6YXRpb25Tb3VyY2VzKCkgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1JlZjxSZWFsdGltZU1lZGlhU291
cmNlPiBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmNyZWF0ZVNvdXJjZShjb25zdCBTdHJp
bmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKQoreworICAgIGlmICh0cmFja0tp
bmQgPT0gInZpZGVvIl9zKQorICAgICAgICByZXR1cm4gUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJhY2tJZC5pc29sYXRlZENvcHkoKSk7CisKKyAgICBSRUxF
QVNFX0FTU0VSVCh0cmFja0tpbmQgPT0gImF1ZGlvIl9zKTsKKyAgICByZXR1cm4gUmVhbHRpbWVJ
bmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJhY2tJZC5pc29sYXRlZENvcHko
KSk7Cit9CisKK1JlZjxSVENSdHBUcmFuc2Zvcm1CYWNrZW5kPiBHU3RyZWFtZXJSdHBSZWNlaXZl
ckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQoKQoreworICAgIHJldHVybiBHU3RyZWFt
ZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OmNyZWF0ZShtX3J0Y1JlY2VpdmVyKTsKK30K
Kworc3RkOjp1bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBHU3RyZWFtZXJSdHBS
ZWNlaXZlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICBHUmVmUHRyPEdz
dFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICBnX29iamVjdF9nZXQobV9ydGNS
ZWNlaXZlci5nZXQoKSwgInRyYW5zcG9ydCIsICZ0cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIp
OworICAgIHJldHVybiB0cmFuc3BvcnQgPyBtYWtlVW5pcXVlPEdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kPih0cmFuc3BvcnQpIDogbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mNjNhNzU5N2I5ODI3Njc2ZGUwMzNhMTliYzQzZmNkYTJmODEzMzA2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiUlRDUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1l
clJ0cFJlY2VpdmVyQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENSdHBSZWNlaXZlckJhY2tlbmQg
eworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEdT
dHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZChHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiYm
IHJ0Y1JlY2VpdmVyKQorICAgICAgICA6IG1fcnRjUmVjZWl2ZXIoV1RGTW92ZShydGNSZWNlaXZl
cikpCisgICAgeworICAgIH0KKworICAgIEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBydGNSZWNlaXZl
cigpIHsgcmV0dXJuIG1fcnRjUmVjZWl2ZXIuZ2V0KCk7IH0KKyAgICBSZWY8UmVhbHRpbWVNZWRp
YVNvdXJjZT4gY3JlYXRlU291cmNlKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJp
bmcmIHRyYWNrSWQpOworCitwcml2YXRlOgorICAgIFJUQ1J0cFBhcmFtZXRlcnMgZ2V0UGFyYW1l
dGVycygpIGZpbmFsOworICAgIFZlY3RvcjxSVENSdHBDb250cmlidXRpbmdTb3VyY2U+IGdldENv
bnRyaWJ1dGluZ1NvdXJjZXMoKSBjb25zdCBmaW5hbDsKKyAgICBWZWN0b3I8UlRDUnRwU3luY2hy
b25pemF0aW9uU291cmNlPiBnZXRTeW5jaHJvbml6YXRpb25Tb3VyY2VzKCkgY29uc3QgZmluYWw7
CisgICAgUmVmPFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ+IHJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQo
KSBmaW5hbDsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+IGR0
bHNUcmFuc3BvcnRCYWNrZW5kKCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJl
Y2VpdmVyPiBtX3J0Y1JlY2VpdmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFj
a2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZTI5MDgyZmVjYTRkNDhhODM3MDM2OTc5MTc2N2RiYWRhZTMz
ZjkwYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHAKQEAg
LTAsMCArMSw1OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2Vu
ZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0
aWMgaW5saW5lIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6TWVkaWFUeXBl
IG1lZGlhVHlwZUZyb21SZWNlaXZlcihjb25zdCBHc3RXZWJSVENSVFBSZWNlaXZlciYpCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNmb3JtQmFja2VuZDo6
TWVkaWFUeXBlOjpWaWRlbzsKK30KKworR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNr
ZW5kOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQoY29uc3QgR1JlZlB0cjxH
c3RXZWJSVENSVFBSZWNlaXZlcj4mIHJ0Y1JlY2VpdmVyKQorICAgIDogR1N0cmVhbWVyUnRwVHJh
bnNmb3JtQmFja2VuZChtZWRpYVR5cGVGcm9tUmVjZWl2ZXIoKnJ0Y1JlY2VpdmVyKSwgU2lkZTo6
UmVjZWl2ZXIpCisgICAgLCBtX3J0Y1JlY2VpdmVyKHJ0Y1JlY2VpdmVyKQoreworfQorCitHU3Ry
ZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6On5HU3RyZWFtZXJSdHBSZWNlaXZlclRy
YW5zZm9ybUJhY2tlbmQoKQoreworfQorCit2b2lkIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNm
b3JtQmFja2VuZDo6c2V0VHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soQ2FsbGJhY2smJiBjYWxs
YmFjaykKK3sKKyAgICBzZXRJbnB1dENhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3Jt
QmFja2VuZDo6cmVxdWVzdEtleUZyYW1lKCkKK3sKKyAgICBBU1NFUlQobWVkaWFUeXBlKCkgPT0g
TWVkaWFUeXBlOjpWaWRlbyk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNl
aXZlclRyYW5zZm9ybUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44NTg2Njc2YTA2YjdhYjllYjBiMzJl
N2RmN2M2MzQ4MTVhOGM5NzlmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1C
YWNrZW5kLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVh
bWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxz
LmgiCisjaW5jbHVkZSA8d3RmL0ZvcndhcmQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQgZmluYWwgOiBwdWJsaWMg
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxH
U3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ+IGNyZWF0ZShjb25zdCBHUmVmUHRy
PEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiYgcmVjZWl2ZXIpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKHJlY2VpdmVyKSk7IH0KKyAgICB+
R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKCk7CisKK3ByaXZhdGU6CisgICAg
ZXhwbGljaXQgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKGNvbnN0IEdSZWZQ
dHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+Jik7CisKKyAgICAvLyBSVENSdHBUcmFuc2Zvcm1CYWNr
ZW5kCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayhDYWxsYmFjayYmKSBm
aW5hbDsKKyAgICB2b2lkIHJlcXVlc3RLZXlGcmFtZSgpIGZpbmFsOworCisgICAgR1JlZlB0cjxH
c3RXZWJSVENSVFBSZWNlaXZlcj4gbV9ydGNSZWNlaXZlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZTY3MGE3NTJiMzc3ZTNmYjg3YTNmYzNmOTQzZmI3OTIzNDI3YzYwNAotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTQxIEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyRFRNRlNlbmRlckJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJS
VENVdGlscy5oIgorI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbi5oIgorI2luY2x1
ZGUgIlJUQ1J0cFNlbmRlci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lci5oIgorI2luY2x1ZGUgIlJ1bnRpbWVFbmFibGVkRmVhdHVyZXMuaCIKKyNpbmNsdWRlICJT
Y3JpcHRFeGVjdXRpb25Db250ZXh0LmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordGVtcGxh
dGU8dHlwZW5hbWUgU291cmNlPgorc3RhdGljIGlubGluZSBib29sIHVwZGF0ZVRyYWNrU291cmNl
KFNvdXJjZSYgc291cmNlLCBNZWRpYVN0cmVhbVRyYWNrKiB0cmFjaykKK3sKKyAgICBpZiAoIXRy
YWNrKSB7CisgICAgICAgIHNvdXJjZS5zdG9wKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAg
IH0KKyAgICByZXR1cm4gc291cmNlLnNldFRyYWNrKHRyYWNrLT5wcml2YXRlVHJhY2soKSk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c3RhcnRTb3VyY2UoKQoreworICAg
IHN3aXRjaE9uKG1fc291cmNlLCBbXShSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0
cmVhbWVyPiYgc291cmNlKSB7CisgICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICB9LCBbXShS
ZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7CisgICAg
ICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICB9LCBbXShzdGQ6Om51bGxwdHJfdCYpIHsKKyAgICB9
KTsKK30KKworR1JlZlB0cjxHc3RFbGVtZW50PiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpz
dG9wU291cmNlKCkKK3sKKyAgICBzd2l0Y2hPbihtX3NvdXJjZSwgW10oUmVmPFJlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0
b3AoKTsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8R3N0RWxlbWVudD4oc291cmNlLT5iaW4oKSk7
CisgICAgfSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNv
dXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0b3AoKTsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8
R3N0RWxlbWVudD4oc291cmNlLT5iaW4oKSk7CisgICAgfSwgW10oc3RkOjpudWxscHRyX3QmKSB7
CisgICAgICAgIHJldHVybiBHUmVmUHRyPEdzdEVsZW1lbnQ+KG51bGxwdHIpOworICAgIH0pOwor
ICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6
OnJlcGxhY2VUcmFjayhSVENSdHBTZW5kZXImIHNlbmRlciwgTWVkaWFTdHJlYW1UcmFjayogdHJh
Y2spCit7CisgICAgaWYgKCF0cmFjaykgeworICAgICAgICBzdG9wU291cmNlKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzZW5kZXIudHJhY2soKSkgeworICAgICAg
ICBzd2l0Y2hPbihtX3NvdXJjZSwgWyZdKFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFjay0+c291cmNlKCku
dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvKTsKKyAgICAgICAgICAg
IHNvdXJjZS0+c3RvcCgpOworICAgICAgICAgICAgc291cmNlLT5zZXRTb3VyY2UodHJhY2stPnBy
aXZhdGVUcmFjaygpKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICAgICAgfSwg
WyZdKFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsK
KyAgICAgICAgICAgIEFTU0VSVCh0cmFjay0+c291cmNlKCkudHlwZSgpID09IFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGU6OlZpZGVvKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAg
ICAgICAgICAgc291cmNlLT5zZXRTb3VyY2UodHJhY2stPnByaXZhdGVUcmFjaygpKTsKKyAgICAg
ICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICAgICAgfSwgW10oc3RkOjpudWxscHRyX3QmKSB7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLT5zZXRT
ZW5kZXJTb3VyY2VGcm9tVHJhY2soKnRoaXMsICp0cmFjayk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK1JUQ1J0cFNlbmRQYXJhbWV0ZXJzIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmdldFBh
cmFtZXRlcnMoKSBjb25zdAoreworICAgIHJldHVybiB0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKG1f
aW5pdERhdGEuZ2V0KCkpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnNl
dFBhcmFtZXRlcnMoY29uc3QgUlRDUnRwU2VuZFBhcmFtZXRlcnMmLCBET01Qcm9taXNlRGVmZXJy
ZWQ8dm9pZD4mJiBwcm9taXNlKQoreworICAgIGlmICghbV9ydGNTZW5kZXIpIHsKKyAgICAgICAg
cHJvbWlzZS5yZWplY3QoTm90U3VwcG9ydGVkRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBwcm9taXNlLnJlc29sdmUoKTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPFJUQ0RUTUZTZW5kZXJCYWNrZW5kPiBHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kOjpjcmVhdGVEVE1GQmFja2VuZCgpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R1N0
cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ+KCk7Cit9CisKK1JlZjxSVENSdHBUcmFuc2Zvcm1CYWNr
ZW5kPiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkK
K3sKKyAgICByZXR1cm4gR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6Y3JlYXRl
KG1fcnRjU2VuZGVyKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzZXRN
ZWRpYVN0cmVhbUlkcyhjb25zdCBGaXhlZFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+
IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAg
ICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICBnX29iamVj
dF9nZXQobV9ydGNTZW5kZXIuZ2V0KCksICJ0cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigp
LCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KSA6IG51bGxwdHI7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xYjk5N2E2ODY3M2VkYTMwODBlOWRiZDRiNGJhMjYxNTUyYTRmZjY0Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJSVENSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRn
b2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ7CisK
K2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDUnRwU2Vu
ZGVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZChHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQm
IGJhY2tlbmQsIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiYmIHJ0Y1NlbmRlciwgR1VuaXF1
ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEpCisgICAgICAgIDogbV9wZWVyQ29ubmVjdGlv
bkJhY2tlbmQoV2Vha1B0ciB7ICZiYWNrZW5kIH0pCisgICAgICAgICwgbV9ydGNTZW5kZXIoV1RG
TW92ZShydGNTZW5kZXIpKQorICAgICAgICAsIG1faW5pdERhdGEoV1RGTW92ZShpbml0RGF0YSkp
CisgICAgeworICAgIH0KKworICAgIHVzaW5nIFNvdXJjZSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51
bGxwdHJfdCwgUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4sIFJlZjxS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+PjsKKyAgICBHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgYmFja2VuZCwgR1Jl
ZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYgcnRjU2VuZGVyLCBTb3VyY2UmJiBzb3VyY2UsIEdV
bmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmIGluaXREYXRhKQorICAgICAgICA6IG1fcGVlckNvbm5l
Y3Rpb25CYWNrZW5kKFdlYWtQdHIgeyAmYmFja2VuZCB9KQorICAgICAgICAsIG1fcnRjU2VuZGVy
KFdURk1vdmUocnRjU2VuZGVyKSkKKyAgICAgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJjZSkp
CisgICAgICAgICwgbV9pbml0RGF0YShXVEZNb3ZlKGluaXREYXRhKSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBzZXRSVENTZW5kZXIoR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYgcnRj
U2VuZGVyKSB7IG1fcnRjU2VuZGVyID0gV1RGTW92ZShydGNTZW5kZXIpOyB9CisgICAgR3N0V2Vi
UlRDUlRQU2VuZGVyKiBydGNTZW5kZXIoKSB7IHJldHVybiBtX3J0Y1NlbmRlci5nZXQoKTsgfQor
CisgICAgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKiBhdWRpb1NvdXJjZSgp
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZSwKKyAgICAgICAg
ICAgIFtdIChSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiYgc291cmNl
KSB7IHJldHVybiBzb3VyY2UucHRyKCk7IH0sCisgICAgICAgICAgICBbXSAoY29uc3QgYXV0byYp
IC0+IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciogeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgICAgICApOworICAgIH0KKworICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lciogdmlkZW9Tb3VyY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9zb3VyY2UsCisgICAgICAgICAgICBbXSAoUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLnB0cigpOyB9LAorICAg
ICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSAtPiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXIqIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICAgICAgKTsKKyAgICB9CisKKyAgICBi
b29sIGhhc1NvdXJjZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChjb25zdCBzdGQ6Om51bGxwdHJfdCYpIHsgcmV0
dXJuIGZhbHNlOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSB7IHJldHVybiB0cnVl
OyB9CisgICAgICAgICk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclNvdXJjZSgpCisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU291cmNlKCkpOworICAgICAgICBtX3NvdXJjZSA9IG51bGxwdHI7
CisgICAgfQorCisgICAgdm9pZCBzZXRTb3VyY2UoU291cmNlJiYgc291cmNlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFoYXNTb3VyY2UoKSk7CisgICAgICAgIG1fc291cmNlID0gV1RGTW92ZShz
b3VyY2UpOworICAgICAgICBBU1NFUlQoaGFzU291cmNlKCkpOworICAgIH0KKworICAgIHZvaWQg
dGFrZVNvdXJjZShHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBiYWNrZW5kKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGJhY2tlbmQuaGFzU291cmNlKCkpOworICAgICAgICBzZXRTb3VyY2UoV1RG
TW92ZShiYWNrZW5kLm1fc291cmNlKSk7CisgICAgfQorCisgICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBzdG9wU291cmNlKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCByZXBsYWNlVHJhY2soUlRDUnRw
U2VuZGVyJiwgTWVkaWFTdHJlYW1UcmFjayopIGZpbmFsOworICAgIFJUQ1J0cFNlbmRQYXJhbWV0
ZXJzIGdldFBhcmFtZXRlcnMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFBhcmFtZXRlcnMo
Y29uc3QgUlRDUnRwU2VuZFBhcmFtZXRlcnMmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJikg
ZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RUTUZTZW5kZXJCYWNrZW5kPiBjcmVhdGVE
VE1GQmFja2VuZCgpIGZpbmFsOworICAgIFJlZjxSVENSdHBUcmFuc2Zvcm1CYWNrZW5kPiBydGNS
dHBUcmFuc2Zvcm1CYWNrZW5kKCkgZmluYWw7CisgICAgdm9pZCBzZXRNZWRpYVN0cmVhbUlkcyhj
b25zdCBGaXhlZFZlY3RvcjxTdHJpbmc+JikgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJU
Q0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBkdGxzVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworCisg
ICAgdm9pZCBzdGFydFNvdXJjZSgpOworCisgICAgV2Vha1B0cjxHU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ+IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kOworICAgIEdSZWZQdHI8R3N0V2Vi
UlRDUlRQU2VuZGVyPiBtX3J0Y1NlbmRlcjsKKyAgICBTb3VyY2UgbV9zb3VyY2U7CisgICAgR1Vu
aXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IG1faW5pdERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5z
Zm9ybUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2NmM0ZGVjMWJiMDNhMzI3N2Q5MmIwNjU0Mjlj
NjQwNzJiZTE0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNw
cApAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxp
YSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFj
a2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitz
dGF0aWMgaW5saW5lIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlw
ZSBtZWRpYVR5cGVGcm9tU2VuZGVyKGNvbnN0IEdzdFdlYlJUQ1JUUFNlbmRlciYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNmb3JtQmFja2VuZDo6TWVk
aWFUeXBlOjpWaWRlbzsKK30KKworR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6
R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJU
Q1JUUFNlbmRlcj4mIHJ0Y1NlbmRlcikKKyAgICA6IEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tl
bmQobWVkaWFUeXBlRnJvbVNlbmRlcigqcnRjU2VuZGVyKSwgU2lkZTo6U2VuZGVyKQorICAgICwg
bV9ydGNTZW5kZXIocnRjU2VuZGVyKQoreworfQorCitHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zv
cm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCgpCit7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6c2V0VHJhbnNmb3JtYWJs
ZUZyYW1lQ2FsbGJhY2soQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBzZXRJbnB1dENhbGxi
YWNrKFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lk
IEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSgpCit7
CisgICAgQVNTRVJUKG1lZGlhVHlwZSgpID09IE1lZGlhVHlwZTo6VmlkZW8pOworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRl
clRyYW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li42YjBhNTc2ZGIxMjY4M2U3NTg5Nzg0MmQxNGE3OTU4YTQ5MGU5MjZmCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1l
ci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyU2VuZGVyVHJhbnNmb3JtZXI7CisK
K2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQgZmluYWwgOiBwdWJsaWMg
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1C
YWNrZW5kPiBjcmVhdGUoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiBzZW5kZXIp
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2Vu
ZChzZW5kZXIpKTsgfQorICAgIH5HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKCk7
CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFj
a2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mKTsKKworICAgIC8vIFJUQ1J0
cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lkIHNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNr
KENhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVxdWVzdEtleUZyYW1lKCkgZmluYWw7CisK
KyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9ydGNTZW5kZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJh
bnNjZWl2ZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNWQxMGEyYzRhYWVkYTk4YmFiMmUwNmRh
NDk0NDFlNWNiYjRkMTc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNw
cApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2Fs
aWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisj
aW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVh
bWVyUnRwU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgi
CisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENSdHBDb2RlY0NhcGFi
aWxpdHkuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK0dTVF9ERUJVR19D
QVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdT
VF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4mJiBydGNU
cmFuc2NlaXZlcikKKyAgICA6IG1fcnRjVHJhbnNjZWl2ZXIoV1RGTW92ZShydGNUcmFuc2NlaXZl
cikpCit7CisgICAgZ19vYmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJkby1uYWNr
IiwgdHJ1ZSwgImZlYy10eXBlIiwgR1NUX1dFQlJUQ19GRUNfVFlQRV9VTFBfUkVELCBudWxscHRy
KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4gR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVSZWNlaXZlckJhY2tlbmQoKQorewor
ICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IHJlY2VpdmVyOworICAgIGdfb2JqZWN0
X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAicmVjZWl2ZXIiLCAmcmVjZWl2ZXIub3V0UHRy
KCksIG51bGxwdHIpOworICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJlY2VpdmVyKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxH
U3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6
OmNyZWF0ZVNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBiYWNr
ZW5kLCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmJiBzb3VyY2UsIEdVbmlxdWVQ
dHI8R3N0U3RydWN0dXJlPiYmIGluaXREYXRhKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQ
U2VuZGVyPiBzZW5kZXI7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCks
ICJzZW5kZXIiLCAmc2VuZGVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gV1RGOjpt
YWtlVW5pcXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+KGJhY2tlbmQsIFdURk1vdmUoc2Vu
ZGVyKSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKGluaXREYXRhKSk7Cit9CisKK1JUQ1J0cFRy
YW5zY2VpdmVyRGlyZWN0aW9uIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6ZGlyZWN0
aW9uKCkgY29uc3QKK3sKKyAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlvbiBnc3RE
aXJlY3Rpb247CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJkaXJl
Y3Rpb24iLCAmZ3N0RGlyZWN0aW9uLCBudWxscHRyKTsKKyAgICByZXR1cm4gdG9SVENSdHBUcmFu
c2NlaXZlckRpcmVjdGlvbihnc3REaXJlY3Rpb24pOworfQorCitzdGQ6Om9wdGlvbmFsPFJUQ1J0
cFRyYW5zY2VpdmVyRGlyZWN0aW9uPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmN1
cnJlbnREaXJlY3Rpb24oKSBjb25zdAoreworICAgIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyRGly
ZWN0aW9uIGdzdERpcmVjdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV9ydGNUcmFuc2NlaXZlci5n
ZXQoKSwgImN1cnJlbnQtZGlyZWN0aW9uIiwgJmdzdERpcmVjdGlvbiwgbnVsbHB0cik7CisgICAg
aWYgKCFnc3REaXJlY3Rpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0
dXJuIHRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZ3N0RGlyZWN0aW9uKTsKK30KKwordm9p
ZCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNldERpcmVjdGlvbihSVENSdHBUcmFu
c2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgZ19vYmplY3Rfc2V0KG1fcnRjVHJh
bnNjZWl2ZXIuZ2V0KCksICJkaXJlY3Rpb24iLCBmcm9tUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rp
b24oZGlyZWN0aW9uKSwgbnVsbHB0cik7Cit9CisKK1N0cmluZyBHU3RyZWFtZXJSdHBUcmFuc2Nl
aXZlckJhY2tlbmQ6Om1pZCgpCit7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBtaWQ7CisgICAg
Z19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJtaWQiLCAmbWlkLm91dFB0cigp
LCBudWxscHRyKTsKKyAgICByZXR1cm4gbWlkLmdldCgpOworfQorCit2b2lkIEdTdHJlYW1lclJ0
cFRyYW5zY2VpdmVyQmFja2VuZDo6c3RvcCgpCit7CisgICAgLy8gRklYTUU6IHdlYnJ0Y2JpbiB0
cmFuc2NlaXZlcnMgY2FuJ3QgYmUgc3RvcHBlZCB5ZXQuCisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKworYm9vbCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnN0b3BwZWQoKSBjb25z
dAoreworICAgIC8vIEZJWE1FOiB3ZWJydGNiaW4gdHJhbnNjZWl2ZXJzIGNhbid0IGJlIHN0b3Bw
ZWQgeWV0LgorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBFeGNlcHRpb25P
cjxHc3RDYXBzKj4gdG9SdHBDb2RlY0NhcGFiaWxpdHkoY29uc3QgUlRDUnRwQ29kZWNDYXBhYmls
aXR5JiBjb2RlYykKK3sKKyAgICBpZiAoIWNvZGVjLm1pbWVUeXBlLnN0YXJ0c1dpdGgoInZpZGVv
LyIpICYmICFjb2RlYy5taW1lVHlwZS5zdGFydHNXaXRoKCJhdWRpby8iKSkKKyAgICAgICAgcmV0
dXJuIEV4Y2VwdGlvbiB7IEludmFsaWRNb2RpZmljYXRpb25FcnJvciwgIlJUQ1J0cENvZGVjQ2Fw
YWJpbGl0eSBiYWQgbWltZVR5cGUiIH07CisKKyAgICBhdXRvIGNvbXBvbmVudHMgPSBjb2RlYy5t
aW1lVHlwZS5zcGxpdCgnLycpOworICAgIGF1dG8qIGNhcHMgPSBnc3RfY2Fwc19uZXdfc2ltcGxl
KCJhcHBsaWNhdGlvbi94LXJ0cCIsICJtZWRpYSIsIEdfVFlQRV9TVFJJTkcsIGNvbXBvbmVudHNb
MF0uYXNjaWkoKS5kYXRhKCksICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklORywgY29tcG9u
ZW50c1sxXS5hc2NpaSgpLmRhdGEoKSwgbnVsbHB0cik7CisgICAgZ3N0X2NhcHNfc2V0X3NpbXBs
ZShjYXBzLCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIGNvZGVjLmNsb2NrUmF0ZSwgbnVsbHB0
cik7CisgICAgaWYgKGNvZGVjLmNoYW5uZWxzKQorICAgICAgICBnc3RfY2Fwc19zZXRfc2ltcGxl
KGNhcHMsICJjaGFubmVscyIsIEdfVFlQRV9JTlQsICpjb2RlYy5jaGFubmVscywgbnVsbHB0cik7
CisKKyAgICBpZiAoIWNvZGVjLnNkcEZtdHBMaW5lLmlzRW1wdHkoKSkKKyAgICAgICAgR1NUX0ZJ
WE1FKCJVbnByb2Nlc3NlZCBTRFAgRm10cExpbmU6ICVzIiwgY29kZWMuc2RwRm10cExpbmUudXRm
OCgpLmRhdGEoKSk7CisgICAgR1NUX0RFQlVHKCJDb2RlYyBjYXBhYmlsaXR5OiAlIiBHU1RfUFRS
X0ZPUk1BVCwgY2Fwcyk7CisgICAgcmV0dXJuIGNhcHM7Cit9CisKK0V4Y2VwdGlvbk9yPHZvaWQ+
IEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c2V0Q29kZWNQcmVmZXJlbmNlcyhjb25z
dCBWZWN0b3I8UlRDUnRwQ29kZWNDYXBhYmlsaXR5PiYgY29kZWNzKQoreworICAgIGF1dG8gZ3N0
Q29kZWNzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICBmb3IgKGF1dG8m
IGNvZGVjIDogY29kZWNzKSB7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gdG9SdHBDb2RlY0NhcGFi
aWxpdHkoY29kZWMpOworICAgICAgICBpZiAocmVzdWx0Lmhhc0V4Y2VwdGlvbigpKQorICAgICAg
ICAgICAgcmV0dXJuIHJlc3VsdC5yZWxlYXNlRXhjZXB0aW9uKCk7CisgICAgICAgIGdzdF9jYXBz
X2FwcGVuZChnc3RDb2RlY3MuZ2V0KCksIHJlc3VsdC5yZWxlYXNlUmV0dXJuVmFsdWUoKSk7Cisg
ICAgfQorICAgIGdfb2JqZWN0X3NldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiY29kZWMtcHJl
ZmVyZW5jZXMiLCBnc3RDb2RlY3MuZ2V0KCksIG51bGxwdHIpOworICAgIHJldHVybiB7IH07Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGVhNzczMDRiMDZlNDE4MGZjNzA3
MTQ3ZjU0ODg2OTg1ODgxNmE2OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZC5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdh
bGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiUlRDUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOworCitjbGFzcyBHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHU3RyZWFt
ZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4m
Jik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiBj
cmVhdGVSZWNlaXZlckJhY2tlbmQoKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRw
U2VuZGVyQmFja2VuZD4gY3JlYXRlU2VuZGVyQmFja2VuZChHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQmLCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmJiwgR1VuaXF1ZVB0
cjxHc3RTdHJ1Y3R1cmU+JiYpOworCisgICAgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHJ0Y1Ry
YW5zY2VpdmVyKCkgeyByZXR1cm4gbV9ydGNUcmFuc2NlaXZlci5nZXQoKTsgfQorCitwcml2YXRl
OgorICAgIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbigpIGNvbnN0IGZpbmFs
OworICAgIHN0ZDo6b3B0aW9uYWw8UlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24+IGN1cnJlbnRE
aXJlY3Rpb24oKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldERpcmVjdGlvbihSVENSdHBUcmFu
c2NlaXZlckRpcmVjdGlvbikgZmluYWw7CisgICAgU3RyaW5nIG1pZCgpIGZpbmFsOworICAgIHZv
aWQgc3RvcCgpIGZpbmFsOworICAgIGJvb2wgc3RvcHBlZCgpIGNvbnN0IGZpbmFsOworICAgIEV4
Y2VwdGlvbk9yPHZvaWQ+IHNldENvZGVjUHJlZmVyZW5jZXMoY29uc3QgVmVjdG9yPFJUQ1J0cENv
ZGVjQ2FwYWJpbGl0eT4mKSBmaW5hbDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNj
ZWl2ZXI+IG1fcnRjVHJhbnNjZWl2ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjk5YjRhNmEzN2U1ZmIwM2NlOTgzNjMwNmNiZWZjZGZkOWE1YTBmNTMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcApAQCAtMCwwICsxLDQ3IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6
OnNldElucHV0Q2FsbGJhY2soQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBMb2NrZXIgaG9s
ZExvY2sgeyBtX2lucHV0Q2FsbGJhY2tMb2NrIH07CisgICAgbV9pbnB1dENhbGxiYWNrID0gV1RG
TW92ZShjYWxsYmFjayk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6
Y2xlYXJUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjaygpCit7CisgICAgc2V0SW5wdXRDYWxsYmFj
ayh7IH0pOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OnByb2Nlc3NU
cmFuc2Zvcm1lZEZyYW1lKFJUQ1J0cFRyYW5zZm9ybWFibGVGcmFtZSYpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNm
b3JtQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE5NTQ0OGZjN2Qz
MjYxOGY3OGU3ZTgxNWZjMTVlMTQ5NjExYjJiM2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zv
cm1CYWNrZW5kLmgKQEAgLTAsMCArMSw2MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEt
MjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJSVENSdHBUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVk
ZSA8d3RmL0xvY2suaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJS
dHBUcmFuc2Zvcm1CYWNrZW5kIDogcHVibGljIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQgeworcHJv
dGVjdGVkOgorICAgIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQoTWVkaWFUeXBlLCBTaWRl
KTsKKyAgICB2b2lkIHNldElucHV0Q2FsbGJhY2soQ2FsbGJhY2smJik7CisKK3Byb3RlY3RlZDoK
KyAgICBNZWRpYVR5cGUgbWVkaWFUeXBlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9tZWRpYVR5
cGU7IH0KKworcHJpdmF0ZToKKyAgICAvLyBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kCisgICAgdm9p
ZCBwcm9jZXNzVHJhbnNmb3JtZWRGcmFtZShSVENSdHBUcmFuc2Zvcm1hYmxlRnJhbWUmKSBmaW5h
bDsKKyAgICB2b2lkIGNsZWFyVHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soKSBmaW5hbDsKKyAg
ICBTaWRlIHNpZGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX3NpZGU7IH0KKworICAgIE1lZGlh
VHlwZSBtX21lZGlhVHlwZTsKKyAgICBTaWRlIG1fc2lkZTsKKworICAgIExvY2sgbV9pbnB1dENh
bGxiYWNrTG9jazsKKyAgICBDYWxsYmFjayBtX2lucHV0Q2FsbGJhY2s7CisKKyAgICBMb2NrIG1f
b3V0cHV0Q2FsbGJhY2tMb2NrOworfTsKKworaW5saW5lIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJh
Y2tlbmQ6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQoTWVkaWFUeXBlIG1lZGlhVHlwZSwg
U2lkZSBzaWRlKQorICAgIDogbV9tZWRpYVR5cGUobWVkaWFUeXBlKQorICAgICwgbV9zaWRlKHNp
ZGUpCit7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRC
YWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45NGNmZWQ3M2I3
NjNjMjBhZjkwNzkyZjI2NGM5NWQzMmI4NDY4ZTliCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5z
cG9ydEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsOTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJTY3RwVHJh
bnNwb3J0QmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBpbmxpbmUgUlRDU2N0cFRyYW5zcG9ydFN0YXRlIHRvUlRDU2N0cFRyYW5zcG9ydFN0
YXRlKEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnRTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0
YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NDVFBfVFJBTlNQT1JUX1NUQVRFX05FVzoKKyAg
ICBjYXNlIEdTVF9XRUJSVENfU0NUUF9UUkFOU1BPUlRfU1RBVEVfQ09OTkVDVElORzoKKyAgICAg
ICAgcmV0dXJuIFJUQ1NjdHBUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGluZzsKKyAgICBjYXNlIEdT
VF9XRUJSVENfU0NUUF9UUkFOU1BPUlRfU1RBVEVfQ09OTkVDVEVEOgorICAgICAgICByZXR1cm4g
UlRDU2N0cFRyYW5zcG9ydFN0YXRlOjpDb25uZWN0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX1ND
VFBfVFJBTlNQT1JUX1NUQVRFX0NMT1NFRDoKKyAgICAgICAgcmV0dXJuIFJUQ1NjdHBUcmFuc3Bv
cnRTdGF0ZTo6Q2xvc2VkOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVE
KCk7Cit9CisKK0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJTY3RwVHJh
bnNwb3J0QmFja2VuZChHUmVmUHRyPEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ+JiYgdHJhbnNwb3J0
KQorICAgIDogbV9iYWNrZW5kKFdURk1vdmUodHJhbnNwb3J0KSkKK3sKKyAgICBBU1NFUlQobV9i
YWNrZW5kKTsKK30KKworR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFtZXJT
Y3RwVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgdW5yZWdpc3RlckNsaWVudCgpOworfQorCitV
bmlxdWVSZWY8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+IEdTdHJlYW1lclNjdHBUcmFuc3BvcnRC
YWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgR1JlZlB0cjxHc3RXZWJSVENE
VExTVHJhbnNwb3J0PiB0cmFuc3BvcnQ7CisgICAgZ19vYmplY3RfZ2V0KG1fYmFja2VuZC5nZXQo
KSwgInRyYW5zcG9ydCIsICZ0cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworICAgIHJldHVy
biBtYWtlVW5pcXVlUmVmPEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kPih0cmFuc3BvcnQp
OworfQorCit2b2lkIEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNsaWVu
dChDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICBtX2NsaWVu
dCA9IGNsaWVudDsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9iYWNrZW5kLmdldCgp
LCAibm90aWZ5OjpzdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lclNjdHBUcmFuc3BvcnRC
YWNrZW5kKiBiYWNrZW5kKSB7CisgICAgICAgIGJhY2tlbmQtPnN0YXRlQ2hhbmdlZCgpOworICAg
IH0pLCB0aGlzKTsKK30KKwordm9pZCBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6dW5y
ZWdpc3RlckNsaWVudCgpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9k
YXRhKG1fYmFja2VuZC5nZXQoKSwgdGhpcyk7CisgICAgbV9jbGllbnQuY2xlYXIoKTsKK30KKwor
dm9pZCBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKCkKK3sKKyAg
ICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBHc3RXZWJSVENTQ1RQVHJh
bnNwb3J0U3RhdGUgdHJhbnNwb3J0U3RhdGU7CisgICAgZ3VpbnQxNiBtYXhDaGFubmVsczsKKyAg
ICB1aW50NjRfdCBtYXhNZXNzYWdlU2l6ZTsKKyAgICBnX29iamVjdF9nZXQobV9iYWNrZW5kLmdl
dCgpLCAic3RhdGUiLCAmdHJhbnNwb3J0U3RhdGUsICJtYXgtbWVzc2FnZS1zaXplIiwgJm1heE1l
c3NhZ2VTaXplLCAibWF4LWNoYW5uZWxzIiwgJm1heENoYW5uZWxzLCBudWxscHRyKTsKKyAgICBj
YWxsT25NYWluVGhyZWFkKFt0aGlzLCB0cmFuc3BvcnRTdGF0ZSwgbWF4Q2hhbm5lbHMsIG1heE1l
c3NhZ2VTaXplXSB7CisgICAgICAgIGlmICghbV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgbV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDU2N0cFRyYW5zcG9ydFN0
YXRlKHRyYW5zcG9ydFN0YXRlKSwgbWF4TWVzc2FnZVNpemUsIG1heENoYW5uZWxzKTsKKyAgICB9
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tl
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDk4MGZjODQ5OGMwNWMzOTdk
Y2IwNmM3MGM0MzMwOGIwMjkwZjAyNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNr
ZW5kLmgKQEAgLTAsMCArMSw1NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJ
Z2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRDU2N0cFRy
YW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCit0eXBlZGVmIHN0
cnVjdCBfR3N0V2ViUlRDU0NUUFRyYW5zcG9ydCBHc3RXZWJSVENTQ1RQVHJhbnNwb3J0OworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5k
IGZpbmFsIDogcHVibGljIFJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kLCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ+IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZChHUmVmUHRyPEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ+JiYpOworICAgIH5HU3RyZWFt
ZXJTY3RwVHJhbnNwb3J0QmFja2VuZCgpOworCitwcm90ZWN0ZWQ6CisgICAgdm9pZCBzdGF0ZUNo
YW5nZWQoKTsKKworcHJpdmF0ZSA6CisgICAgLy8gUlRDU2N0cFRyYW5zcG9ydEJhY2tlbmQKKyAg
ICBjb25zdCB2b2lkKiBiYWNrZW5kKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kLmdl
dCgpOyB9CisgICAgVW5pcXVlUmVmPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBkdGxzVHJhbnNw
b3J0QmFja2VuZCgpIGZpbmFsOworICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoQ2xpZW50JikgZmlu
YWw7CisgICAgdm9pZCB1bnJlZ2lzdGVyQ2xpZW50KCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdz
dFdlYlJUQ1NDVFBUcmFuc3BvcnQ+IG1fYmFja2VuZDsKKyAgICBXZWFrUHRyPENsaWVudD4gbV9j
bGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rv
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJTdGF0c0NvbGxlY3Rvci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjYxOTNhZjU2OTBhMTc4OTBhZmUx
ZWNmOTc0ZmJjYzYyODc5NDFiZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmNwcApA
QCAtMCwwICsxLDI3MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEg
Uy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgiCisKKyNp
ZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJH
VW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiSlNET01NYXBMaWtlLmgiCisjaW5jbHVk
ZSAiSlNSVENTdGF0c1JlcG9ydC5oIgorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisj
aW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQ
SQorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VY
VEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZB
VUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1N0YXRzKFJUQ1N0YXRzUmVwb3J0OjpTdGF0cyYg
c3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGRvdWJsZSB0aW1l
c3RhbXA7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShzdHJ1Y3R1cmUsICJ0aW1l
c3RhbXAiLCAmdGltZXN0YW1wKSkKKyAgICAgICAgc3RhdHMudGltZXN0YW1wID0gdGltZXN0YW1w
OworICAgIHN0YXRzLmlkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImlk
Iik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDUlRQU3RyZWFtU3RhdHMoUlRDU3Rh
dHNSZXBvcnQ6OlJ0cFN0cmVhbVN0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1
Y3R1cmUpCit7CisgICAgZmlsbFJUQ1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworCisgICAgc3Rh
dHMudHJhbnNwb3J0SWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAidHJh
bnNwb3J0LWlkIik7CisgICAgc3RhdHMuY29kZWNJZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmlu
ZyhzdHJ1Y3R1cmUsICJjb2RlYy1pZCIpOworCisgICAgdW5zaWduZWQgdmFsdWU7CisgICAgaWYg
KGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAic3NyYyIsICZ2YWx1ZSkpCisgICAg
ICAgIHN0YXRzLnNzcmMgPSB2YWx1ZTsKKworICAgIC8vIEZJWE1FOgorICAgIC8vIHN0YXRzLnRy
YW5zcG9ydElkCisgICAgLy8gc3RhdHMuY29kZWNJZAorICAgIC8vIHN0YXRzLm1lZGlhVHlwZQor
ICAgIC8vIHN0YXRzLmtpbmQKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENDb2RlY1N0
YXRzKFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJl
KiBzdHJ1Y3R1cmUpCit7CisgICAgZmlsbFJUQ1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworCisg
ICAgdW5zaWduZWQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0
dXJlLCAicGF5bG9hZC10eXBlIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMucGF5bG9hZFR5cGUg
PSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUsICJjbG9j
ay1yYXRlIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuY2xvY2tSYXRlID0gdmFsdWU7CisKKyAg
ICAvLyBGSVhNRToKKyAgICAvLyBzdGF0cy5taW1lVHlwZSA9CisgICAgLy8gc3RhdHMuY2hhbm5l
bHMgPQorICAgIC8vIHN0YXRzLnNkcEZtdHBMaW5lID0KKyAgICAvLyBzdGF0cy5pbXBsZW1lbnRh
dGlvbiA9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRz
KFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDUlRQU3RyZWFtU3RhdHMoc3RhdHMs
IHN0cnVjdHVyZSk7CisKKyAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVy
ZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgInBhY2tldHMtcmVjZWl2ZWQiLCAmdmFsdWUpKQorICAg
ICAgICBzdGF0cy5wYWNrZXRzUmVjZWl2ZWQgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVy
ZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgImJ5dGVzLXJlY2VpdmVkIiwgJnZhbHVlKSkKKyAgICAg
ICAgc3RhdHMuYnl0ZXNSZWNlaXZlZCA9IHZhbHVlOworCisgICAgdW5zaWduZWQgcGFja2V0c0xv
c3Q7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAicGFja2V0cy1s
b3N0IiwgJnBhY2tldHNMb3N0KSkKKyAgICAgICAgc3RhdHMucGFja2V0c0xvc3QgPSBwYWNrZXRz
TG9zdDsKKworICAgIGRvdWJsZSBqaXR0ZXI7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2Rv
dWJsZShzdHJ1Y3R1cmUsICJqaXR0ZXIiLCAmaml0dGVyKSkKKyAgICAgICAgc3RhdHMuaml0dGVy
ID0gaml0dGVyOworCisgICAgLy8gRklYTUU6CisgICAgLy8gc3RhdHMuZnJhY3Rpb25Mb3N0ID0K
KyAgICAvLyBzdGF0cy5wYWNrZXRzRGlzY2FyZGVkID0KKyAgICAvLyBzdGF0cy5wYWNrZXRzUmVw
YWlyZWQgPQorICAgIC8vIHN0YXRzLmJ1cnN0UGFja2V0c0xvc3QgPQorICAgIC8vIHN0YXRzLmJ1
cnN0UGFja2V0c0Rpc2NhcmRlZCA9CisgICAgLy8gc3RhdHMuYnVyc3RMb3NzQ291bnQgPQorICAg
IC8vIHN0YXRzLmJ1cnN0RGlzY2FyZENvdW50ID0KKyAgICAvLyBzdGF0cy5idXJzdExvc3NSYXRl
ID0KKyAgICAvLyBzdGF0cy5idXJzdERpc2NhcmRSYXRlID0KKyAgICAvLyBzdGF0cy5nYXBMb3Nz
UmF0ZSA9CisgICAgLy8gc3RhdHMuZ2FwRGlzY2FyZFJhdGUgPQorICAgIC8vIHN0YXRzLmZyYW1l
c0RlY29kZWQgPQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbE91dGJvdW5kUlRQU3RyZWFt
U3RhdHMoUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMmIHN0YXRzLCBjb25z
dCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDUlRQU3RyZWFtU3RhdHMo
c3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0
cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgInBhY2tldHMtc2VudCIsICZ2YWx1ZSkpCisg
ICAgICAgIHN0YXRzLnBhY2tldHNTZW50ID0gdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVf
Z2V0X3VpbnQ2NChzdHJ1Y3R1cmUsICJieXRlcy1zZW50IiwgJnZhbHVlKSkKKyAgICAgICAgc3Rh
dHMuYnl0ZXNTZW50ID0gdmFsdWU7CisKKyAgICAvLyBGSVhNRQorICAgIC8vIHN0YXRzLnRhcmdl
dEJpdHJhdGUgPQorICAgIC8vIHN0YXRzLmZyYW1lc0VuY29kZWQgPQorfQorCitzdGF0aWMgaW5s
aW5lIHZvaWQgZmlsbFJUQ1BlZXJDb25uZWN0aW9uU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlBlZXJD
b25uZWN0aW9uU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sK
KyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICBpbnQgdmFsdWU7Cisg
ICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJkYXRhLWNoYW5uZWxzLW9w
ZW5lZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLmRhdGFDaGFubmVsc09wZW5lZCA9IHZhbHVl
OworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAiZGF0YS1jaGFubmVs
cy1jbG9zZWQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5kYXRhQ2hhbm5lbHNDbG9zZWQgPSB2
YWx1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENUcmFuc3BvcnRTdGF0cyhSVENT
dGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICAv
LyBGSVhNRQorfQorCitzdGF0aWMgZ2Jvb2xlYW4gZmlsbFJlcG9ydENhbGxiYWNrKEdRdWFyaywg
Y29uc3QgR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdXNlckRhdGEpCit7CisgICAgaWYgKCFHU1Rf
VkFMVUVfSE9MRFNfU1RSVUNUVVJFKHZhbHVlKSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAg
ICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF92YWx1ZV9nZXRfc3RydWN0dXJl
KHZhbHVlKTsKKyAgICBHc3RXZWJSVENTdGF0c1R5cGUgc3RhdHNUeXBlOworICAgIGlmICghZ3N0
X3N0cnVjdHVyZV9nZXQoc3RydWN0dXJlLCAidHlwZSIsIEdTVF9UWVBFX1dFQlJUQ19TVEFUU19U
WVBFLCAmc3RhdHNUeXBlLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJuIFRSVUU7CisKKyAgICBE
T01NYXBBZGFwdGVyJiByZXBvcnQgPSAqcmVpbnRlcnByZXRfY2FzdDxET01NYXBBZGFwdGVyKj4o
dXNlckRhdGEpOworCisgICAgc3dpdGNoIChzdGF0c1R5cGUpIHsKKyAgICBjYXNlIEdTVF9XRUJS
VENfU1RBVFNfQ09ERUM6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3RhdHMgc3Rh
dHM7CisgICAgICAgIGZpbGxSVENDb2RlY1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAg
ICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6
Q29kZWNTdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfSU5CT1VORF9SVFA6IHsKKyAgICAgICAg
UlRDU3RhdHNSZXBvcnQ6OkluYm91bmRSdHBTdHJlYW1TdGF0cyBzdGF0czsKKyAgICAgICAgZmls
bEluYm91bmRSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKyAgICAgICAgcmVwb3J0
LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OkluYm91bmRS
dHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfT1VUQk9VTkRfUlRQOiB7CisgICAg
ICAgIFJUQ1N0YXRzUmVwb3J0OjpPdXRib3VuZFJ0cFN0cmVhbVN0YXRzIHN0YXRzOworICAgICAg
ICBmaWxsT3V0Ym91bmRSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKyAgICAgICAg
cmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6Ok91
dGJvdW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1JFTU9URV9JTkJPVU5E
X1JUUDogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzIHN0
YXRzOworICAgICAgICBmaWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0
c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMp
KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19SRU1P
VEVfT1VUQk9VTkRfUlRQOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpPdXRib3VuZFJ0cFN0
cmVhbVN0YXRzIHN0YXRzOworICAgICAgICBmaWxsT3V0Ym91bmRSVFBTdHJlYW1TdGF0cyhzdGF0
cywgc3RydWN0dXJlKTsKKyAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rp
b25hcnk8UlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0cy5pZCwg
V1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VC
UlRDX1NUQVRTX0NTUkM6CisgICAgICAgIEdTVF9GSVhNRSgiRGVwcmVjYXRlZCBzdGF0czogY3Ny
YyIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUEVFUl9DT05O
RUNUSU9OOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpQZWVyQ29ubmVjdGlvblN0YXRzIHN0
YXRzOworICAgICAgICBmaWxsUlRDUGVlckNvbm5lY3Rpb25TdGF0cyhzdGF0cywgc3RydWN0dXJl
KTsKKyAgICAgICAgcmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3Rh
dHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1RSQU5T
UE9SVDogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHMgc3RhdHM7Cisg
ICAgICAgIGZpbGxSVENUcmFuc3BvcnRTdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKyAgICAgICAg
cmVwb3J0LnNldDxJRExET01TdHJpbmcsIElETERpY3Rpb25hcnk8UlRDU3RhdHNSZXBvcnQ6OlRy
YW5zcG9ydFN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19TVFJFQU06CisgICAgICAgIEdTVF9G
SVhNRSgiRGVwcmVjYXRlZCBzdGF0czogc3RyZWFtIik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR1NUX1dFQlJUQ19TVEFUU19EQVRBX0NIQU5ORUw6CisgICAgICAgIEdTVF9GSVhNRSgiTWlz
c2luZyBkYXRhLWNoYW5uZWwgc3RhdHMgc3VwcG9ydCIpOworICAgICAgICBicmVhazsKKyAgICBj
YXNlIEdTVF9XRUJSVENfU1RBVFNfQ0FORElEQVRFX1BBSVI6CisgICAgY2FzZSBHU1RfV0VCUlRD
X1NUQVRTX0xPQ0FMX0NBTkRJREFURToKKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUkVNT1RF
X0NBTkRJREFURToKKyAgICAgICAgR1NUX0ZJWE1FKCJNaXNzaW5nIGNhbmRpZGF0ZSBzdGF0cyBz
dXBwb3J0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DRVJU
SUZJQ0FURToKKyAgICAgICAgR1NUX0ZJWE1FKCJNaXNzaW5nIGNlcnRpZmljYXRlIHN0YXRzIHN1
cHBvcnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgcmV0dXJuIFRSVUU7Cit9CisK
K3N0cnVjdCBDYWxsYmFja0hvbGRlciB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NB
VEVEOworICAgIENhbGxiYWNrSG9sZGVyKEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpDb2xsZWN0
b3JDYWxsYmFjayYmIGNvbGxlY3RvckNhbGxiYWNrKQorICAgICAgICA6IGNhbGxiYWNrKFdURk1v
dmUoY29sbGVjdG9yQ2FsbGJhY2spKQorICAgIHsKKyAgICB9CisgICAgR1N0cmVhbWVyU3RhdHND
b2xsZWN0b3I6OkNvbGxlY3RvckNhbGxiYWNrIGNhbGxiYWNrOworfTsKKwordm9pZCBHU3RyZWFt
ZXJTdGF0c0NvbGxlY3Rvcjo6Z2V0U3RhdHMoQ29sbGVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywg
R3N0UGFkKiBwYWQpCit7CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikgeworICAgICAgICBjYWxsYmFj
ayhudWxscHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8gaG9sZGVyID0g
V1RGOjptYWtlVW5pcXVlPENhbGxiYWNrSG9sZGVyPihXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAg
YXV0byogcHJvbWlzZSA9IGdzdF9wcm9taXNlX25ld193aXRoX2NoYW5nZV9mdW5jKFtdKEdzdFBy
b21pc2UqIHByb21pc2UsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxDYWxsYmFja0hvbGRlcj4gaG9sZGVyKHJlaW50ZXJwcmV0X2Nhc3Q8Q2FsbGJhY2tIb2xk
ZXIqPih1c2VyRGF0YSkpOworICAgICAgICBpZiAoZ3N0X3Byb21pc2Vfd2FpdChwcm9taXNlKSAh
PSBHU1RfUFJPTUlTRV9SRVNVTFRfUkVQTElFRCkgeworICAgICAgICAgICAgaG9sZGVyLT5jYWxs
YmFjayhudWxscHRyKTsKKyAgICAgICAgICAgIGdzdF9wcm9taXNlX3VucmVmKHByb21pc2UpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgYXV0byogc3Rh
dHMgPSBnc3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZSk7CisgICAgICAgIGlmICghc3RhdHMp
IHsKKyAgICAgICAgICAgIGhvbGRlci0+Y2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgICAgICBn
c3RfcHJvbWlzZV91bnJlZihwcm9taXNlKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFtzdGF0cywgcHJvbWlzZSwgaG9s
ZGVyID0gaG9sZGVyLmdldCgpXSB7CisgICAgICAgICAgICBob2xkZXItPmNhbGxiYWNrKFJUQ1N0
YXRzUmVwb3J0OjpjcmVhdGUoW3N0YXRzLCBwcm9taXNlXShhdXRvJiBtYXBBZGFwdGVyKSB7Cisg
ICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoKHN0YXRzLCBmaWxsUmVwb3J0Q2Fs
bGJhY2ssICZtYXBBZGFwdGVyKTsKKyAgICAgICAgICAgICAgICBnc3RfcHJvbWlzZV91bnJlZihw
cm9taXNlKTsKKyAgICAgICAgICAgIH0pKTsKKyAgICAgICAgfSk7CisgICAgfSwgaG9sZGVyLnJl
bGVhc2UoKSwgbnVsbHB0cik7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmlu
LmdldCgpLCAiZ2V0LXN0YXRzIiwgcGFkLCBwcm9taXNlKTsKK30KKworfTsgLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjU0MjczNTUzZjgyNTEzNzI2MWZhOTQ3NmJmZTBhZTE3MmJkMDgxYjYKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJTdGF0c0NvbGxlY3Rvci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorCisj
aW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5o
PgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIFJUQ1N0YXRzUmVwb3J0OworCitjbGFzcyBHU3RyZWFtZXJTdGF0c0Nv
bGxlY3RvciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHU3RyZWFtZXJTdGF0c0NvbGxl
Y3RvciwgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4geworcHVibGljOgorICAgIHVzaW5n
IENvbGxlY3RvckNhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8UlRDU3Rh
dHNSZXBvcnQ+JiYpPjsKKyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yPiBj
cmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yKCkp
OyB9CisKKyAgICB2b2lkIHNldEVsZW1lbnQoR3N0RWxlbWVudCogZWxlbWVudCkgeyBtX3dlYnJ0
Y0JpbiA9IGVsZW1lbnQ7IH0KKyAgICB2b2lkIGdldFN0YXRzKENvbGxlY3RvckNhbGxiYWNrJiYs
IEdzdFBhZCopOworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV93ZWJydGNC
aW47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJX
ZWJSVENVdGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWQyYmEyN2QzMDZmNmQyZmRhZDkyZTA3ZWY1ZmFm
ZTQxODc4MzViMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcApAQCAtMCwwICsxLDQ0
OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1
ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisKKyNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGUu
aCIKKyNpbmNsdWRlICJSVENJY2VQcm90b2NvbC5oIgorCisjaW5jbHVkZSA8b3BlbnNzbC9ibi5o
PgorI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNp
bmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KKyNpbmNsdWRlIDx3
dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9u
Lmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X3dlYnJ0Y191dGlsc19kZWJ1
Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX3V0aWxzX2RlYnVnCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBSVENJY2VDb21wb25lbnQgdG9S
VENJY2VDb21wb25lbnQoaW50IGNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gY29tcG9uZW50ID09
IDEgPyBSVENJY2VDb21wb25lbnQ6OlJ0cCA6IFJUQ0ljZUNvbXBvbmVudDo6UnRjcDsKK30KKwor
c3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0ljZVByb3RvY29sPiB0b1JUQ0ljZVByb3Rv
Y29sKGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCit7CisgICAgaWYgKCFwcm90b2NvbCB8fCBwcm90
b2NvbC5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKHByb3RvY29sID09
ICJ1ZHAiKQorICAgICAgICByZXR1cm4gUlRDSWNlUHJvdG9jb2w6OlVkcDsKKyAgICBBU1NFUlQo
cHJvdG9jb2wgPT0gInRjcCIpOworICAgIHJldHVybiBSVENJY2VQcm90b2NvbDo6VGNwOworfQor
CitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDSWNlVGNwQ2FuZGlkYXRlVHlwZT4gdG9S
VENJY2VUY3BDYW5kaWRhdGVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAoIXR5
cGUgfHwgdHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKHR5cGUg
PT0gImFjdGl2ZSIpCisgICAgICAgIHJldHVybiBSVENJY2VUY3BDYW5kaWRhdGVUeXBlOjpBY3Rp
dmU7CisgICAgaWYgKHR5cGUgPT0gInBhc3NpdmUiKQorICAgICAgICByZXR1cm4gUlRDSWNlVGNw
Q2FuZGlkYXRlVHlwZTo6UGFzc2l2ZTsKKyAgICBBU1NFUlQodHlwZSA9PSAic28iKTsKKyAgICBy
ZXR1cm4gUlRDSWNlVGNwQ2FuZGlkYXRlVHlwZTo6U287Cit9CisKK3N0YXRpYyBpbmxpbmUgc3Rk
OjpvcHRpb25hbDxSVENJY2VDYW5kaWRhdGVUeXBlPiB0b1JUQ0ljZUNhbmRpZGF0ZVR5cGUoY29u
c3QgU3RyaW5nJiB0eXBlKQoreworICAgIGlmICghdHlwZSB8fCB0eXBlLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAodHlwZSA9PSAiaG9zdCIpCisgICAgICAgIHJldHVy
biBSVENJY2VDYW5kaWRhdGVUeXBlOjpIb3N0OworICAgIGlmICh0eXBlID09ICJzcmZseCIpCisg
ICAgICAgIHJldHVybiBSVENJY2VDYW5kaWRhdGVUeXBlOjpTcmZseDsKKyAgICBpZiAodHlwZSA9
PSAicHJmbHgiKQorICAgICAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6UHJmbHg7Cisg
ICAgQVNTRVJUKHR5cGUgPT0gInJlbGF5Iik7CisgICAgcmV0dXJuIFJUQ0ljZUNhbmRpZGF0ZVR5
cGU6OlJlbGF5OworfQorCitSZWZQdHI8UlRDRXJyb3I+IHRvUlRDRXJyb3IoR0Vycm9yKiBydGNF
cnJvcikKK3sKKyAgICBhdXRvIGRldGFpbCA9IHRvUlRDRXJyb3JEZXRhaWxUeXBlKHN0YXRpY19j
YXN0PEdzdFdlYlJUQ0Vycm9yPihydGNFcnJvci0+Y29kZSkpOworICAgIGlmICghZGV0YWlsKQor
ICAgICAgICByZXR1cm4gbnVsbHB0cjsKKyAgICByZXR1cm4gUlRDRXJyb3I6OmNyZWF0ZSgqZGV0
YWlsLCBydGNFcnJvci0+bWVzc2FnZSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgZG91YmxlIHRvV2Vi
UlRDQml0UmF0ZVByaW9yaXR5KFJUQ1ByaW9yaXR5VHlwZSBwcmlvcml0eSkKK3sKKyAgICBzd2l0
Y2ggKHByaW9yaXR5KSB7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OlZlcnlMb3c6CisgICAg
ICAgIHJldHVybiAwLjU7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OkxvdzoKKyAgICAgICAg
cmV0dXJuIDE7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6Ok1lZGl1bToKKyAgICAgICAgcmV0
dXJuIDI7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OkhpZ2g6CisgICAgICAgIHJldHVybiA0
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK0dVbmlx
dWVQdHI8R3N0U3RydWN0dXJlPiBmcm9tUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0IFJUQ1J0
cEVuY29kaW5nUGFyYW1ldGVycyYgcGFyYW1ldGVycykKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0
cnVjdHVyZT4gcnRjUGFyYW1ldGVycyhnc3Rfc3RydWN0dXJlX25ldygiZW5jb2RpbmctcGFyYW1l
dGVycyIsICJhY3RpdmUiLCBHX1RZUEVfQk9PTEVBTiwgcGFyYW1ldGVycy5hY3RpdmUsCisgICAg
ICAgICJyaWQiLCBHX1RZUEVfU1RSSU5HLCBwYXJhbWV0ZXJzLnJpZC51dGY4KCkuZGF0YSgpLCAi
Yml0cmF0ZS1wcmlvcml0eSIsIEdfVFlQRV9ET1VCTEUsIHRvV2ViUlRDQml0UmF0ZVByaW9yaXR5
KHBhcmFtZXRlcnMucHJpb3JpdHkpLCBudWxscHRyKSk7CisKKyAgICBpZiAocGFyYW1ldGVycy5z
c3JjKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAic3Ny
YyIsIEdfVFlQRV9VTE9ORywgcGFyYW1ldGVycy5zc3JjLCBudWxscHRyKTsKKworICAgIGlmIChw
YXJhbWV0ZXJzLm1heEJpdHJhdGUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFt
ZXRlcnMuZ2V0KCksICJtYXgtYml0cmF0ZSIsIEdfVFlQRV9VTE9ORywgcGFyYW1ldGVycy5tYXhC
aXRyYXRlLCBudWxscHRyKTsKKworICAgIGlmIChwYXJhbWV0ZXJzLm1heEZyYW1lcmF0ZSkKKyAg
ICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgIm1heC1mcmFtZXJh
dGUiLCBHX1RZUEVfVUxPTkcsIHBhcmFtZXRlcnMubWF4RnJhbWVyYXRlLCBudWxscHRyKTsKKwor
ICAgIGlmIChwYXJhbWV0ZXJzLnNjYWxlUmVzb2x1dGlvbkRvd25CeSkKKyAgICAgICAgZ3N0X3N0
cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgInNjYWxlLXJlc29sdXRpb24tZG93bi1i
eSIsIEdfVFlQRV9ET1VCTEUsIHBhcmFtZXRlcnMuc2NhbGVSZXNvbHV0aW9uRG93bkJ5LCBudWxs
cHRyKTsKKworICAgIGlmIChwYXJhbWV0ZXJzLm5ldHdvcmtQcmlvcml0eSkKKyAgICAgICAgZ3N0
X3N0cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgIm5ldHdvcmstcHJpb3JpdHkiLCBH
X1RZUEVfSU5ULCAqcGFyYW1ldGVycy5uZXR3b3JrUHJpb3JpdHksIG51bGxwdHIpOworCisgICAg
cmV0dXJuIHJ0Y1BhcmFtZXRlcnM7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDUHJpb3JpdHlUeXBl
IGZyb21XZWJSVENCaXRSYXRlUHJpb3JpdHkoZG91YmxlIHByaW9yaXR5KQoreworICAgIGlmIChw
cmlvcml0eSA8IDAuNykKKyAgICAgICAgcmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6VmVyeUxvdzsK
KyAgICBpZiAocHJpb3JpdHkgPCAxLjUpCisgICAgICAgIHJldHVybiBSVENQcmlvcml0eVR5cGU6
OkxvdzsKKyAgICBpZiAocHJpb3JpdHkgPCAyLjUpCisgICAgICAgIHJldHVybiBSVENQcmlvcml0
eVR5cGU6Ok1lZGl1bTsKKyAgICByZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpIaWdoOworfQorCitz
dGF0aWMgaW5saW5lIFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycyB0b1JUQ0VuY29kaW5nUGFyYW1l
dGVycyhjb25zdCBHc3RTdHJ1Y3R1cmUqIHJ0Y1BhcmFtZXRlcnMpCit7CisgICAgUlRDUnRwRW5j
b2RpbmdQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7CisKKyAgICB1bnNpZ25lZCBzc3JjOworICAgIGlm
IChnc3Rfc3RydWN0dXJlX2dldF91aW50KHJ0Y1BhcmFtZXRlcnMsICJzc3JjIiwgJnNzcmMpKQor
ICAgICAgICBwYXJhbWV0ZXJzLnNzcmMgPSBzc3JjOworCisgICAgZ3N0X3N0cnVjdHVyZV9nZXQo
cnRjUGFyYW1ldGVycywgImFjdGl2ZSIsIEdfVFlQRV9CT09MRUFOLCAmKHBhcmFtZXRlcnMuYWN0
aXZlKSwgbnVsbHB0cik7CisKKyAgICB1aW50NjRfdCBtYXhCaXRyYXRlOworICAgIGlmIChnc3Rf
c3RydWN0dXJlX2dldF91aW50NjQocnRjUGFyYW1ldGVycywgIm1heC1iaXRyYXRlIiwgJm1heEJp
dHJhdGUpKQorICAgICAgICBwYXJhbWV0ZXJzLm1heEJpdHJhdGUgPSBtYXhCaXRyYXRlOworCisg
ICAgdWludDY0X3QgbWF4RnJhbWVyYXRlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50
NjQocnRjUGFyYW1ldGVycywgIm1heC1mcmFtZXJhdGUiLCAmbWF4RnJhbWVyYXRlKSkKKyAgICAg
ICAgcGFyYW1ldGVycy5tYXhGcmFtZXJhdGUgPSBtYXhGcmFtZXJhdGU7CisKKyAgICBwYXJhbWV0
ZXJzLnJpZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhydGNQYXJhbWV0ZXJzLCAicmlkIik7
CisKKyAgICBkb3VibGUgc2NhbGVSZXNvbHV0aW9uRG93bkJ5OworICAgIGlmIChnc3Rfc3RydWN0
dXJlX2dldF9kb3VibGUocnRjUGFyYW1ldGVycywgInNjYWxlLXJlc29sdXRpb24tZG93bi1ieSIs
ICZzY2FsZVJlc29sdXRpb25Eb3duQnkpKQorICAgICAgICBwYXJhbWV0ZXJzLnNjYWxlUmVzb2x1
dGlvbkRvd25CeSA9IHNjYWxlUmVzb2x1dGlvbkRvd25CeTsKKworICAgIGRvdWJsZSBiaXRyYXRl
UHJpb3JpdHk7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShydGNQYXJhbWV0ZXJz
LCAiYml0cmF0ZS1wcmlvcml0eSIsICZiaXRyYXRlUHJpb3JpdHkpKQorICAgICAgICBwYXJhbWV0
ZXJzLnByaW9yaXR5ID0gZnJvbVdlYlJUQ0JpdFJhdGVQcmlvcml0eShiaXRyYXRlUHJpb3JpdHkp
OworCisgICAgaW50IG5ldHdvcmtQcmlvcml0eTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRf
aW50KHJ0Y1BhcmFtZXRlcnMsICJuZXR3b3JrLXByaW9yaXR5IiwgJm5ldHdvcmtQcmlvcml0eSkp
CisgICAgICAgIHBhcmFtZXRlcnMubmV0d29ya1ByaW9yaXR5ID0gc3RhdGljX2Nhc3Q8UlRDUHJp
b3JpdHlUeXBlPihuZXR3b3JrUHJpb3JpdHkpOworCisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9
CisKK1JUQ1J0cFNlbmRQYXJhbWV0ZXJzIHRvUlRDUnRwU2VuZFBhcmFtZXRlcnMoY29uc3QgR3N0
U3RydWN0dXJlKiBydGNQYXJhbWV0ZXJzKQoreworICAgIGlmICghcnRjUGFyYW1ldGVycykKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIFJUQ1J0cFNlbmRQYXJhbWV0ZXJzIHBhcmFtZXRlcnM7
CisgICAgYXV0byogZW5jb2RpbmdzID0gZ3N0X3N0cnVjdHVyZV9nZXRfdmFsdWUocnRjUGFyYW1l
dGVycywgImVuY29kaW5ncyIpOworICAgIHVuc2lnbmVkIHNpemUgPSBnc3RfdmFsdWVfbGlzdF9n
ZXRfc2l6ZShlbmNvZGluZ3MpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBp
KyspIHsKKyAgICAgICAgY29uc3QgYXV0byogdmFsdWUgPSBnc3RfdmFsdWVfbGlzdF9nZXRfdmFs
dWUoZW5jb2RpbmdzLCBpKTsKKyAgICAgICAgcGFyYW1ldGVycy5lbmNvZGluZ3MuYXBwZW5kKHRv
UlRDRW5jb2RpbmdQYXJhbWV0ZXJzKEdTVF9TVFJVQ1RVUkVfQ0FTVCh2YWx1ZSkpKTsKKyAgICB9
CisKKyAgICAvLyBGSVhNRTogSGFuZGxlIHJ0Y1BhcmFtZXRlcnMuZGVncmFkYXRpb25fcHJlZmVy
ZW5jZS4KKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30KKworCitzdGF0aWMgdm9pZCBlbnN1cmVE
ZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQoKQoreworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBv
bmNlRmxhZzsKKyAgICBzdGQ6OmNhbGxfb25jZShvbmNlRmxhZywgW10geworICAgICAgICBHU1Rf
REVCVUdfQ0FURUdPUllfSU5JVCh3ZWJraXRfd2VicnRjX3V0aWxzX2RlYnVnLCAid2Via2l0d2Vi
cnRjdXRpbHMiLCAwLCAiV2ViS2l0IFdlYlJUQyB1dGlsaXRpZXMiKTsKKyAgICB9KTsKK30KKwor
c3RkOjpvcHRpb25hbDxSVENJY2VDYW5kaWRhdGU6OkZpZWxkcz4gcGFyc2VJY2VDYW5kaWRhdGVT
RFAoY29uc3QgU3RyaW5nJiBzZHApCit7CisgICAgZW5zdXJlRGVidWdDYXRlZ29yeUluaXRpYWxp
emVkKCk7CisgICAgR1NUX0RFQlVHKCJQYXJzaW5nIElDRSBDYW5kaWRhdGU6ICVzIiwgc2RwLnV0
ZjgoKS5kYXRhKCkpOworICAgIGlmICghc2RwLnN0YXJ0c1dpdGgoImNhbmRpZGF0ZToiKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIFN0cmluZyBmb3VuZGF0aW9uOworICAgIHVuc2lnbmVk
IGNvbXBvbmVudElkID0gMDsKKyAgICBTdHJpbmcgdHJhbnNwb3J0OworICAgIHVuc2lnbmVkIHBy
aW9yaXR5ID0gMDsKKyAgICBTdHJpbmcgYWRkcmVzczsKKyAgICB1aW50MzJfdCBwb3J0ID0gMDsK
KyAgICBTdHJpbmcgdHlwZTsKKyAgICBTdHJpbmcgdGNwdHlwZTsKKyAgICBTdHJpbmcgcmVsYXRl
ZEFkZHJlc3M7CisgICAgZ3VpbnQxNiByZWxhdGVkUG9ydCA9IDA7CisgICAgU3RyaW5nIHVzZXJu
YW1lRnJhZ21lbnQ7CisgICAgYXV0byB0b2tlbnMgPSBzZHAuY29udmVydFRvQVNDSUlMb3dlcmNh
c2UoKS5zdWJzdHJpbmcoMTApLnNwbGl0KCcgJyk7CisKKyAgICBmb3IgKGF1dG8gaXQgPSB0b2tl
bnMuYmVnaW4oKTsgaXQgIT0gdG9rZW5zLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGF1dG8gaSA9
IHN0ZDo6ZGlzdGFuY2UodG9rZW5zLmJlZ2luKCksIGl0KTsKKyAgICAgICAgYXV0byB0b2tlbiA9
ICppdDsKKyAgICAgICAgc3dpdGNoIChpKSB7CisgICAgICAgIGNhc2UgMDoKKyAgICAgICAgICAg
IGZvdW5kYXRpb24gPSB0b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDE6
CisgICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlcjx1bnNpZ25lZD4odG9r
ZW4pKQorICAgICAgICAgICAgICAgIGNvbXBvbmVudElkID0gKnZhbHVlOworICAgICAgICAgICAg
ZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgY2FzZSAyOgorICAgICAgICAgICAgdHJhbnNwb3J0ID0gdG9rZW47CisgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgY2FzZSAzOgorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBw
YXJzZUludGVnZXI8dW5zaWduZWQ+KHRva2VuKSkKKyAgICAgICAgICAgICAgICBwcmlvcml0eSA9
ICp2YWx1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNDoKKyAgICAgICAgICAgIGFkZHJlc3Mg
PSB0b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDU6CisgICAgICAgICAg
ICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlcjx1bnNpZ25lZD4odG9rZW4pKQorICAgICAg
ICAgICAgICAgIHBvcnQgPSAqdmFsdWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBkZWZhdWx0OgorICAg
ICAgICAgICAgaWYgKGl0ICsgMSA9PSB0b2tlbnMuZW5kKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgICAgICAgICAgaXQrKzsKKyAgICAgICAgICAgIGlmICh0b2tlbiA9PSAi
dHlwIikKKyAgICAgICAgICAgICAgICB0eXBlID0gKml0OworICAgICAgICAgICAgZWxzZSBpZiAo
dG9rZW4gPT0gInJhZGRyIikKKyAgICAgICAgICAgICAgICByZWxhdGVkQWRkcmVzcyA9ICppdDsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJycG9ydCIpCisgICAgICAgICAgICAgICAg
cmVsYXRlZFBvcnQgPSBwYXJzZUludGVnZXI8dW5zaWduZWQ+KCppdCkudmFsdWVfb3IoMCk7Cisg
ICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAidGNwdHlwZSIpCisgICAgICAgICAgICAgICAg
dGNwdHlwZSA9ICppdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJ1ZnJhZyIpCisg
ICAgICAgICAgICAgICAgdXNlcm5hbWVGcmFnbWVudCA9ICppdDsKKyAgICAgICAgICAgIGJyZWFr
OworICAgICAgICB9CisgICAgfQorCisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgUlRDSWNlQ2FuZGlkYXRlOjpGaWVsZHMgZmllbGRzOworICAgIGZp
ZWxkcy5mb3VuZGF0aW9uID0gZm91bmRhdGlvbjsKKyAgICBmaWVsZHMuY29tcG9uZW50ID0gdG9S
VENJY2VDb21wb25lbnQoY29tcG9uZW50SWQpOworICAgIGZpZWxkcy5wcmlvcml0eSA9IHByaW9y
aXR5OworICAgIGZpZWxkcy5wcm90b2NvbCA9IHRvUlRDSWNlUHJvdG9jb2wodHJhbnNwb3J0KTsK
KyAgICBpZiAoIWFkZHJlc3MuaXNFbXB0eSgpKSB7CisgICAgICAgIGZpZWxkcy5hZGRyZXNzID0g
YWRkcmVzczsKKyAgICAgICAgZmllbGRzLnBvcnQgPSBwb3J0OworICAgIH0KKyAgICBmaWVsZHMu
dHlwZSA9IHRvUlRDSWNlQ2FuZGlkYXRlVHlwZSh0eXBlKTsKKyAgICBmaWVsZHMudGNwVHlwZSA9
IHRvUlRDSWNlVGNwQ2FuZGlkYXRlVHlwZSh0Y3B0eXBlKTsKKyAgICBpZiAoIXJlbGF0ZWRBZGRy
ZXNzLmlzRW1wdHkoKSkgeworICAgICAgICBmaWVsZHMucmVsYXRlZEFkZHJlc3MgPSByZWxhdGVk
QWRkcmVzczsKKyAgICAgICAgZmllbGRzLnJlbGF0ZWRQb3J0ID0gcmVsYXRlZFBvcnQ7CisgICAg
fQorICAgIGZpZWxkcy51c2VybmFtZUZyYWdtZW50ID0gdXNlcm5hbWVGcmFnbWVudDsKKyAgICBy
ZXR1cm4gZmllbGRzOworfQorCitzdGF0aWMgU3RyaW5nIHg1MDlTZXJpYWxpemUoWDUwOSogeDUw
OSkKK3sKKyAgICBCSU8qIGJpbyA9IEJJT19uZXcoQklPX3NfbWVtKCkpOworICAgIGlmICghYmlv
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgYXV0byBzY29wZUV4aXQgPSBXVEY6Om1ha2VT
Y29wZUV4aXQoWyZdIHsKKyAgICAgICAgQklPX2ZyZWUoYmlvKTsKKyAgICB9KTsKKworICAgIGlm
ICghUEVNX3dyaXRlX2Jpb19YNTA5KGJpbywgeDUwOSkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGJ1ZmZlci5yZXNlcnZlQ2FwYWNpdHkoNDA5
Nik7CisgICAgaW50IGxlbmd0aCA9IEJJT19yZWFkKGJpbywgYnVmZmVyLmRhdGEoKSwgNDA5Nik7
CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gU3Ry
aW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7Cit9CisKK3N0YXRpYyBTdHJpbmcgcHJpdmF0ZUtl
eVNlcmlhbGl6ZShFVlBfUEtFWSogcHJpdmF0ZUtleSkKK3sKKyAgICBCSU8qIGJpbyA9IEJJT19u
ZXcoQklPX3NfbWVtKCkpOworICAgIGlmICghYmlvKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgYXV0byBzY29wZUV4aXQgPSBXVEY6Om1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgQklP
X2ZyZWUoYmlvKTsKKyAgICB9KTsKKworICAgIGlmICghUEVNX3dyaXRlX2Jpb19Qcml2YXRlS2V5
KGJpbywgcHJpdmF0ZUtleSwgbnVsbHB0ciwgbnVsbHB0ciwgMCwgbnVsbHB0ciwgbnVsbHB0cikp
CisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBWZWN0b3I8Y2hhcj4gYnVmZmVyOworICAgIGJ1
ZmZlci5yZXNlcnZlQ2FwYWNpdHkoNDA5Nik7CisgICAgaW50IGxlbmd0aCA9IEJJT19yZWFkKGJp
bywgYnVmZmVyLmRhdGEoKSwgNDA5Nik7CisgICAgaWYgKCFsZW5ndGgpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICByZXR1cm4gU3RyaW5nKGJ1ZmZlci5kYXRhKCksIGxlbmd0aCk7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UmVmPFJUQ0NlcnRpZmljYXRlPj4gZ2VuZXJhdGVDZXJ0aWZpY2F0ZShS
ZWY8U2VjdXJpdHlPcmlnaW4+JiYgb3JpZ2luLCBjb25zdCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OkNlcnRpZmljYXRlSW5mb3JtYXRpb24mIGluZm8pCit7CisgICAgZW5zdXJlRGVidWdDYXRlZ29y
eUluaXRpYWxpemVkKCk7CisgICAgRVZQX1BLRVkqIHByaXZhdGVLZXkgPSBFVlBfUEtFWV9uZXco
KTsKKyAgICBpZiAoIXByaXZhdGVLZXkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0
byBjcmVhdGUgcHJpdmF0ZSBrZXkiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBhdXRvIHNjb3BlRXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBFVlBf
UEtFWV9mcmVlKHByaXZhdGVLZXkpOworICAgIH0pOworCisgICAgc3dpdGNoIChpbmZvLnR5cGUp
IHsKKyAgICBjYXNlIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJbmZvcm1hdGlv
bjo6VHlwZTo6RUNEU0FQMjU2OiB7CisgICAgICAgIEVDX0tFWSogZWNLZXkgPSBFQ19LRVlfbmV3
X2J5X2N1cnZlX25hbWUoTklEX1g5XzYyX3ByaW1lMjU2djEpOworICAgICAgICAvLyBFbnN1cmUg
Y3VydmUgbmFtZSBpcyBpbmNsdWRlZCB3aGVuIEVDIGtleSBpcyBzZXJpYWxpemVkLgorICAgICAg
ICAvLyBXaXRob3V0IHRoaXMgY2FsbCwgT3BlblNTTCB2ZXJzaW9ucyBiZWZvcmUgMS4xLjAgd2ls
bCBjcmVhdGUKKyAgICAgICAgLy8gY2VydGlmaWNhdGVzIHRoYXQgZG9uJ3Qgd29yayBmb3IgVExT
LgorICAgICAgICAvLyBUaGlzIGlzIGEgbm8tb3AgZm9yIEJvcmluZ1NTTCBhbmQgT3BlblNTTCAx
LjEuMCsKKyAgICAgICAgRUNfS0VZX3NldF9hc24xX2ZsYWcoZWNLZXksIE9QRU5TU0xfRUNfTkFN
RURfQ1VSVkUpOworICAgICAgICBpZiAoIXByaXZhdGVLZXkgfHwgIWVjS2V5IHx8ICFFQ19LRVlf
Z2VuZXJhdGVfa2V5KGVjS2V5KSB8fCAhRVZQX1BLRVlfYXNzaWduX0VDX0tFWShwcml2YXRlS2V5
LCBlY0tleSkpIHsKKyAgICAgICAgICAgIEVDX0tFWV9mcmVlKGVjS2V5KTsKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uOjpUeXBlOjpSU0FT
U0FQS0NTMXYxNTogeworICAgICAgICBSU0EqIHJzYSA9IFJTQV9uZXcoKTsKKyAgICAgICAgaWYg
KCFyc2EpCisgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgIEJJR05VTSogZXhwb25l
bnQgPSBCTl9uZXcoKTsKKyAgICAgICAgaW50IHB1YmxpY0V4cG9uZW50ID0gaW5mby5yc2FQYXJh
bWV0ZXJzID8gaW5mby5yc2FQYXJhbWV0ZXJzLT5wdWJsaWNFeHBvbmVudCA6IDY1NTM3OworICAg
ICAgICBhdXRvIG1vZHVsdXNMZW5ndGggPSBpbmZvLnJzYVBhcmFtZXRlcnMgPyBpbmZvLnJzYVBh
cmFtZXRlcnMtPm1vZHVsdXNMZW5ndGggOiAyMDQ4OworICAgICAgICBpZiAoIUJOX3NldF93b3Jk
KGV4cG9uZW50LCBwdWJsaWNFeHBvbmVudCkgfHwgIVJTQV9nZW5lcmF0ZV9rZXlfZXgocnNhLCBt
b2R1bHVzTGVuZ3RoLCBleHBvbmVudCwgbnVsbHB0cikKKyAgICAgICAgICAgIHx8ICFFVlBfUEtF
WV9hc3NpZ25fUlNBKHByaXZhdGVLZXksIHJzYSkpIHsKKyAgICAgICAgICAgIFJTQV9mcmVlKHJz
YSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIEJOX2ZyZWUo
ZXhwb25lbnQpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgfQorCisgICAgWDUwOSogeDUw
OSA9IFg1MDlfbmV3KCk7CisgICAgaWYgKCF4NTA5KSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJG
YWlsZWQgdG8gY3JlYXRlIGNlcnRpZmljYXRlIik7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorCisgICAgYXV0byBjZXJ0U2NvcGVFeGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsmXSB7Cisg
ICAgICAgIFg1MDlfZnJlZSh4NTA5KTsKKyAgICB9KTsKKworICAgIFg1MDlfc2V0X3ZlcnNpb24o
eDUwOSwgMik7CisKKyAgICAvLyBTZXQgYSByYW5kb20gNjQgYml0IGludGVnZXIgYXMgc2VyaWFs
IG51bWJlci4KKyAgICBCSUdOVU0qIHNlcmlhbE51bWJlciA9IEJOX25ldygpOworICAgIEJOX3Bz
ZXVkb19yYW5kKHNlcmlhbE51bWJlciwgNjQsIDAsIDApOworICAgIEFTTjFfSU5URUdFUiogYXNu
MVNlcmlhbE51bWJlciA9IFg1MDlfZ2V0X3NlcmlhbE51bWJlcih4NTA5KTsKKyAgICBCTl90b19B
U04xX0lOVEVHRVIoc2VyaWFsTnVtYmVyLCBhc24xU2VyaWFsTnVtYmVyKTsKKyAgICBCTl9mcmVl
KHNlcmlhbE51bWJlcik7CisKKyAgICAvLyBTZXQgYSByYW5kb20gOCBieXRlIGJhc2U2NCBzdHJp
bmcgYXMgaXNzdWVyL3N1YmplY3QuCisgICAgWDUwOV9OQU1FKiBuYW1lID0gWDUwOV9OQU1FX25l
dygpOworICAgIFZlY3Rvcjx1aW50OF90PiBidWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVJbml0
aWFsQ2FwYWNpdHkoOCk7CisgICAgV1RGOjpjcnlwdG9ncmFwaGljYWxseVJhbmRvbVZhbHVlcyhi
dWZmZXIuZGF0YSgpLCA4KTsKKyAgICBhdXRvIGNvbW1vbk5hbWUgPSBiYXNlNjRFbmNvZGVUb1N0
cmluZyhidWZmZXIpOworICAgIFg1MDlfTkFNRV9hZGRfZW50cnlfYnlfTklEKG5hbWUsIE5JRF9j
b21tb25OYW1lLCBNQlNUUklOR19BU0MsIChjb25zdCBndWNoYXIqKWNvbW1vbk5hbWUuYXNjaWko
KS5kYXRhKCksIC0xLCAtMSwgMCk7CisgICAgWDUwOV9zZXRfc3ViamVjdF9uYW1lKHg1MDksIG5h
bWUpOworICAgIFg1MDlfc2V0X2lzc3Vlcl9uYW1lKHg1MDksIG5hbWUpOworICAgIFg1MDlfTkFN
RV9mcmVlKG5hbWUpOworCisgICAgLy8gRmFsbGJhY2sgdG8gMzAgZGF5cywgbWF4IG91dCBhdCBv
bmUgeWVhci4KKyAgICB1aW50NjRfdCBleHBpcmVzID0gaW5mby5leHBpcmVzLnZhbHVlX29yKDI1
OTIwMDApOworICAgIGV4cGlyZXMgPSBzdGQ6Om1pbjx1aW50NjRfdD4oZXhwaXJlcywgMzE1MzYw
MDAwMDApOworICAgIFg1MDlfZ210aW1lX2FkaihYNTA5X2dldG1fbm90QmVmb3JlKHg1MDkpLCAw
KTsKKyAgICBYNTA5X2dtdGltZV9hZGooWDUwOV9nZXRtX25vdEFmdGVyKHg1MDkpLCBleHBpcmVz
KTsKKyAgICBYNTA5X3NldF9wdWJrZXkoeDUwOSwgcHJpdmF0ZUtleSk7CisKKyAgICBpZiAoIVg1
MDlfc2lnbih4NTA5LCBwcml2YXRlS2V5LCBFVlBfc2hhMjU2KCkpKSB7CisgICAgICAgIEdTVF9X
QVJOSU5HKCJGYWlsZWQgdG8gc2lnbiBjZXJ0aWZpY2F0ZSIpOworICAgICAgICByZXR1cm4geyB9
OworICAgIH0KKworICAgIGF1dG8gcGVtID0geDUwOVNlcmlhbGl6ZSh4NTA5KTsKKyAgICBHU1Rf
REVCVUcoIkdlbmVyYXRlZCBjZXJ0aWZpY2F0ZSBQRU06ICVzIiwgcGVtLmFzY2lpKCkuZGF0YSgp
KTsKKyAgICBhdXRvIHNlcmlhbGl6ZWRQcml2YXRlS2V5ID0gcHJpdmF0ZUtleVNlcmlhbGl6ZShw
cml2YXRlS2V5KTsKKyAgICBWZWN0b3I8UlRDQ2VydGlmaWNhdGU6OkR0bHNGaW5nZXJwcmludD4g
ZmluZ2VycHJpbnRzOworICAgIC8vIEZJWE1FOiBGaWxsIGZpbmdlcnByaW50cy4KKyAgICBhdXRv
IGV4cGlyYXRpb25UaW1lID0gV1RGOjpXYWxsVGltZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2go
KSArIFdURjo6U2Vjb25kcyhleHBpcmVzKTsKKyAgICByZXR1cm4gUlRDQ2VydGlmaWNhdGU6OmNy
ZWF0ZShXVEZNb3ZlKG9yaWdpbiksIGV4cGlyYXRpb25UaW1lLm1pbGxpc2Vjb25kcygpLCBXVEZN
b3ZlKGZpbmdlcnByaW50cyksIFdURk1vdmUocGVtKSwgV1RGTW92ZShzZXJpYWxpemVkUHJpdmF0
ZUtleSkpOworfQorCitib29sIHNkcE1lZGlhSGFzQXR0cmlidXRlS2V5KGNvbnN0IEdzdFNEUE1l
ZGlhKiBtZWRpYSwgY29uc3QgY2hhcioga2V5KQoreworICAgIHVuc2lnbmVkIGxlbiA9IGdzdF9z
ZHBfbWVkaWFfYXR0cmlidXRlc19sZW4obWVkaWEpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCBsZW47IGkrKykgeworICAgICAgICBjb25zdCBhdXRvKiBhdHRyaWJ1dGUgPSBnc3Rfc2Rw
X21lZGlhX2dldF9hdHRyaWJ1dGUobWVkaWEsIGkpOworICAgICAgICBpZiAoIWdfc3RyY21wMChh
dHRyaWJ1dGUtPmtleSwga2V5KSkKKyAgICAgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKwor
ICAgIHJldHVybiBmYWxzZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lcldlYlJUQ1V0aWxzLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY1OGQ3MTFl
NmFhNjZkZWE4M2VhN2EyOTQ3NGFiMGY1OWU0ODcyZjAKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENV
dGlscy5oCkBAIC0wLDAgKzEsMjY3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRp
YUVuZHBvaW50Q29uZmlndXJhdGlvbi5oIgorI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIlJUQ0J1bmRsZVBvbGljeS5oIgorI2luY2x1ZGUgIlJUQ0NlcnRpZmlj
YXRlLmgiCisjaW5jbHVkZSAiUlRDRHRsc1RyYW5zcG9ydC5oIgorI2luY2x1ZGUgIlJUQ0Vycm9y
LmgiCisjaW5jbHVkZSAiUlRDSWNlQ29ubmVjdGlvblN0YXRlLmgiCisjaW5jbHVkZSAiUlRDSWNl
VHJhbnNwb3J0UG9saWN5LmgiCisjaW5jbHVkZSAiUlRDSWNlVHJhbnNwb3J0U3RhdGUuaCIKKyNp
bmNsdWRlICJSVENSdHBTZW5kUGFyYW1ldGVycy5oIgorI2luY2x1ZGUgIlJUQ1J0cFRyYW5zY2Vp
dmVyRGlyZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDU2RwVHlwZS5oIgorI2luY2x1ZGUgIlJUQ1Np
Z25hbGluZ1N0YXRlLmgiCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRl
IDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworaW5saW5lIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIHRv
UlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXJEaXJlY3Rp
b24gZGlyZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fTk9ORToKKyAgICAgICAgLy8gwq9cXyjj
g4QpXy/CrworICAgICAgICByZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OkluYWN0
aXZlOworICAgIGNhc2UgR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX0lOQUNU
SVZFOgorICAgICAgICByZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OkluYWN0aXZl
OworICAgIGNhc2UgR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1NFTkRPTkxZ
OgorICAgICAgICByZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OlNlbmRvbmx5Owor
ICAgIGNhc2UgR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1JFQ1ZPTkxZOgor
ICAgICAgICByZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OlJlY3Zvbmx5OworICAg
IGNhc2UgR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1NFTkRSRUNWOgorICAg
ICAgICByZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OlNlbmRyZWN2OworICAgIH0K
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSVENSdHBUcmFu
c2NlaXZlckRpcmVjdGlvbjo6SW5hY3RpdmU7Cit9CisKK2lubGluZSBHc3RXZWJSVENSVFBUcmFu
c2NlaXZlckRpcmVjdGlvbiBmcm9tUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oUlRDUnRwVHJh
bnNjZWl2ZXJEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIHN3aXRjaCAoZGlyZWN0aW9uKSB7
CisgICAgY2FzZSBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6SW5hY3RpdmU6CisgICAgICAg
IHJldHVybiBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fSU5BQ1RJVkU7Cisg
ICAgY2FzZSBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6U2VuZG9ubHk6CisgICAgICAgIHJl
dHVybiBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fU0VORE9OTFk7CisgICAg
Y2FzZSBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6UmVjdm9ubHk6CisgICAgICAgIHJldHVy
biBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fUkVDVk9OTFk7CisgICAgY2Fz
ZSBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6U2VuZHJlY3Y6CisgICAgICAgIHJldHVybiBH
U1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fU0VORFJFQ1Y7CisgICAgfQorICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9XRUJSVENfUlRQ
X1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9OT05FOworfQorCitzdGF0aWMgaW5saW5lIEdzdFdlYlJU
Q1NEUFR5cGUgdG9TZXNzaW9uRGVzY3JpcHRpb25UeXBlKFJUQ1NkcFR5cGUgc2RwVHlwZSkKK3sK
KyAgICBzd2l0Y2ggKHNkcFR5cGUpIHsKKyAgICBjYXNlIFJUQ1NkcFR5cGU6Ok9mZmVyOgorICAg
ICAgICByZXR1cm4gR1NUX1dFQlJUQ19TRFBfVFlQRV9PRkZFUjsKKyAgICBjYXNlIFJUQ1NkcFR5
cGU6OlByYW5zd2VyOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19TRFBfVFlQRV9QUkFOU1dF
UjsKKyAgICBjYXNlIFJUQ1NkcFR5cGU6OkFuc3dlcjoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJS
VENfU0RQX1RZUEVfQU5TV0VSOworICAgIGNhc2UgUlRDU2RwVHlwZTo6Um9sbGJhY2s6CisgICAg
ICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX1JPTExCQUNLOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9XRUJSVENfU0RQX1RZ
UEVfT0ZGRVI7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDU2RwVHlwZSBmcm9tU2Vzc2lvbkRlc2Ny
aXB0aW9uVHlwZShHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQorewor
ICAgIGF1dG8gdHlwZSA9IGRlc2NyaXB0aW9uLT50eXBlOworICAgIGlmICh0eXBlID09IEdTVF9X
RUJSVENfU0RQX1RZUEVfT0ZGRVIpCisgICAgICAgIHJldHVybiBSVENTZHBUeXBlOjpPZmZlcjsK
KyAgICBpZiAodHlwZSA9PSBHU1RfV0VCUlRDX1NEUF9UWVBFX0FOU1dFUikKKyAgICAgICAgcmV0
dXJuIFJUQ1NkcFR5cGU6OkFuc3dlcjsKKyAgICBBU1NFUlQodHlwZSA9PSBHU1RfV0VCUlRDX1NE
UF9UWVBFX1BSQU5TV0VSKTsKKyAgICByZXR1cm4gUlRDU2RwVHlwZTo6UHJhbnN3ZXI7Cit9CisK
K3N0YXRpYyBpbmxpbmUgUlRDU2lnbmFsaW5nU3RhdGUgdG9TaWduYWxpbmdTdGF0ZShHc3RXZWJS
VENTaWduYWxpbmdTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2Fz
ZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9TVEFCTEU6CisgICAgICAgIHJldHVybiBSVENT
aWduYWxpbmdTdGF0ZTo6U3RhYmxlOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RB
VEVfSEFWRV9MT0NBTF9PRkZFUjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpI
YXZlTG9jYWxPZmZlcjsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NUQVRFX0hBVkVf
TE9DQUxfUFJBTlNXRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxv
Y2FsUHJhbnN3ZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX1JF
TU9URV9PRkZFUjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlUmVtb3Rl
T2ZmZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX1JFTU9URV9Q
UkFOU1dFUjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlUmVtb3RlUHJh
bnN3ZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9DTE9TRUQ6CisgICAg
ICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6Q2xvc2VkOworICAgIH0KKworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpT
dGFibGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlQ29ubmVjdGlvblN0YXRlIHRvUlRDSWNl
Q29ubmVjdGlvblN0YXRlKEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZSkKK3sKKyAg
ICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NU
QVRFX05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6TmV3OworICAg
IGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DSEVDS0lORzoKKyAgICAgICAg
cmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q2hlY2tpbmc7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0lj
ZUNvbm5lY3Rpb25TdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09O
TkVDVElPTl9TVEFURV9DT01QTEVURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9u
U3RhdGU6OkNvbXBsZXRlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RB
VEVfRkFJTEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpGYWlsZWQ7
CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRDoK
KyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6RGlzY29ubmVjdGVkOworICAg
IGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJl
dHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6
Ok5ldzsKK30KKworc3RhdGljIGlubGluZSBSVENEdGxzVHJhbnNwb3J0U3RhdGUgdG9SVENEdGxz
VHJhbnNwb3J0U3RhdGUoR3N0V2ViUlRDRFRMU1RyYW5zcG9ydFN0YXRlIHN0YXRlKQoreworICAg
IHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RB
VEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpOZXc7CisgICAg
Y2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAg
IHJldHVybiBSVENEdGxzVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJU
Q0R0bHNUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19EVExT
X1RSQU5TUE9SVF9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJhbnNwb3J0
U3RhdGU6OkNsb3NlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVf
RkFJTEVEOgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpGYWlsZWQ7Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlu
bGluZSBSVENJY2VUcmFuc3BvcnRTdGF0ZSB0b1JUQ0ljZVRyYW5zcG9ydFN0YXRlKEdzdFdlYlJU
Q0lDRUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZSkKK3sKKyAgICAvLyBGSVhNRTogTm8gR3N0V2ViUlRD
SUNFVHJhbnNwb3J0U3RhdGUgPworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9X
RUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDSWNlVHJh
bnNwb3J0U3RhdGU6Ok5ldzsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RB
VEVfQ0hFQ0tJTkc6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tp
bmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRDoK
KyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb25uZWN0ZWQ7CisgICAgY2Fz
ZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NPTVBMRVRFRDoKKyAgICAgICAgcmV0
dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb21wbGV0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRD
X0lDRV9DT05ORUNUSU9OX1NUQVRFX0ZBSUxFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5z
cG9ydFN0YXRlOjpGYWlsZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NU
QVRFX0RJU0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpE
aXNjb25uZWN0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NM
T1NFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDbG9zZWQ7CisgICAg
fQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDSWNl
VHJhbnNwb3J0U3RhdGU6Ok5ldzsKK30KKworc3RhdGljIGlubGluZSBSVENJY2VHYXRoZXJpbmdT
dGF0ZSB0b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKEdzdFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIHN0
YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0dB
VEhFUklOR19TVEFURV9ORVc6CisgICAgICAgIHJldHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6
TmV3OworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX0dBVEhFUklORzoK
KyAgICAgICAgcmV0dXJuIFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpHYXRoZXJpbmc7CisgICAgY2Fz
ZSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfQ09NUExFVEU6CisgICAgICAgIHJldHVy
biBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6Q29tcGxldGU7CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENCdW5kbGVQ
b2xpY3kgYnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uLmJ1bmRs
ZVBvbGljeSkgeworICAgIGNhc2UgUlRDQnVuZGxlUG9saWN5OjpCYWxhbmNlZDoKKyAgICAgICAg
cmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElDWV9CQUxBTkNFRDsKKyAgICBjYXNlIFJUQ0J1
bmRsZVBvbGljeTo6TWF4Q29tcGF0OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19CVU5ETEVf
UE9MSUNZX01BWF9DT01QQVQ7CisgICAgY2FzZSBSVENCdW5kbGVQb2xpY3k6Ok1heEJ1bmRsZToK
KyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElDWV9NQVhfQlVORExFOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9X
RUJSVENfQlVORExFX1BPTElDWV9OT05FOworfQorCitzdGF0aWMgaW5saW5lIEdzdFdlYlJUQ0lD
RVRyYW5zcG9ydFBvbGljeSBpY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29uZmlndXJhdGlvbihNZWRp
YUVuZHBvaW50Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNv
bmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7CisgICAgY2FzZSBSVENJY2VUcmFuc3Bv
cnRQb2xpY3k6OkFsbDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5TUE9SVF9Q
T0xJQ1lfQUxMOworICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0UG9saWN5OjpSZWxheToKKyAgICAg
ICAgcmV0dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lfUkVMQVk7CisgICAgfQor
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJU
Q19JQ0VfVFJBTlNQT1JUX1BPTElDWV9BTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpvcHRp
b25hbDxSVENFcnJvckRldGFpbFR5cGU+IHRvUlRDRXJyb3JEZXRhaWxUeXBlKEdzdFdlYlJUQ0Vy
cm9yIGNvZGUpCit7CisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VS
Uk9SX0RBVEFfQ0hBTk5FTF9GQUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRhaWxU
eXBlOjpEYXRhQ2hhbm5lbEZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0RUTFNf
RkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6RHRsc0ZhaWx1cmU7
CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0ZJTkdFUlBSSU5UX0ZBSUxVUkU6CisgICAgICAg
IHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OkZpbmdlcnByaW50RmFpbHVyZTsKKyAgICBjYXNl
IEdTVF9XRUJSVENfRVJST1JfU0NUUF9GQUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JE
ZXRhaWxUeXBlOjpTY3RwRmFpbHVyZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfU0RQX1NZ
TlRBWF9FUlJPUjoKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6U2RwU3ludGF4
RXJyb3I7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0hBUkRXQVJFX0VOQ09ERVJfTk9UX0FW
QUlMQUJMRToKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfRU5DT0RFUl9FUlJPUjoKKyAgICAg
ICAgLy8gRklYTUUKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4geyB9OworICAgIH07Cit9
CisKK1JlZlB0cjxSVENFcnJvcj4gdG9SVENFcnJvcihHRXJyb3IqKTsKKworR1VuaXF1ZVB0cjxH
c3RTdHJ1Y3R1cmU+IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3QgUlRDUnRwRW5jb2Rp
bmdQYXJhbWV0ZXJzJik7CitSVENSdHBTZW5kUGFyYW1ldGVycyB0b1JUQ1J0cFNlbmRQYXJhbWV0
ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSopOworCitzdGQ6Om9wdGlvbmFsPFJlZjxSVENDZXJ0aWZp
Y2F0ZT4+IGdlbmVyYXRlQ2VydGlmaWNhdGUoUmVmPFNlY3VyaXR5T3JpZ2luPiYmLCBjb25zdCBQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb24mKTsKKworYm9vbCBz
ZHBNZWRpYUhhc0F0dHJpYnV0ZUtleShjb25zdCBHc3RTRFBNZWRpYSosIGNvbnN0IGNoYXIqIGtl
eSk7CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0
cmVhbWVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmlu
ZGV4IGFiOWM3MDkyZTY1ZjUxMTUyMDEzYzEyYmE0ODAyN2ZkNzBiODI0YjQuLjg1MjVmNDk1MjRi
NTkxNmJkNWFjY2M1NDU0NWEwNjk0MTA0MjE1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9H
U3RyZWFtZXIuY21ha2UKQEAgLTEsMTIgKzEsMjkgQEAKIGlmIChFTkFCTEVfVklERU8gT1IgRU5B
QkxFX1dFQl9BVURJTykKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9E
SVJFQ1RPUklFUworICAgICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvbXNlIgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL2VtZSIKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAg
ICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKKyAgICAgICAg
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBSZWNlaXZlckJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAK
KyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVy
VHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcAorICAg
ICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyU3RhdHNDb2xsZWN0b3IuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcAorCiAgICAgICAgIE1vZHVsZXMvd2ViYXVkaW8v
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKwogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKICAg
ICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCkBA
IC02MCw2ICs3Nyw3IEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAg
ICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVy
ZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJD
YXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEaXNwbGF5Q2FwdHVyZURldmljZU1h
bmFnZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTY3LDcgKzg1LDEzIEBA
IGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKICAgICAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZUF1ZGlvU291cmNlR1N0
cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1Jl
YWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisg
ICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291
cmNlR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckdTdHJlYW1l
ci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKyAg
ICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lci5jcHAKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BS
SVZBVEVfRlJBTUVXT1JLX0hFQURFUlMKQEAgLTE0Niw3ICsxNzAsNyBAQCBpZiAoRU5BQkxFX1ZJ
REVPKQogICAgICAgICApCiAgICAgZW5kaWYgKCkKIAotICAgIGlmIChFTkFCTEVfTUVESUFfU1RS
RUFNIE9SIEVOQUJMRV9XRUJfUlRDKQorICAgIGlmIChVU0VfTElCV0VCUlRDKQogICAgICAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgICAgICAg
ICAke0dTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfSU5DTFVERV9ESVJTfQogICAgICAgICApCkBAIC0x
NTUsNiArMTc5LDIxIEBAIGlmIChFTkFCTEVfVklERU8pCiAgICAgICAgICAgICAgICAgJHtHU1RS
RUFNRVJfQ09ERUNQQVJTRVJTX0xJQlJBUklFU30KICAgICAgICAgICAgICkKICAgICAgICAgZW5k
aWYgKCkKKyAgICBlbHNlaWYgKFVTRV9HU1RSRUFNRVJfV0VCUlRDKQorICAgICAgICBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICAgICAke0dT
VFJFQU1FUl9SVFBfSU5DTFVERV9ESVJTfQorICAgICAgICAgICAgJHtHU1RSRUFNRVJfU0RQX0lO
Q0xVREVfRElSU30KKyAgICAgICAgICAgICR7R1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlN9
CisgICAgICAgICkKKyAgICAgICAgaWYgKE5PVCBVU0VfR1NUUkVBTUVSX0ZVTEwpCisgICAgICAg
ICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAgICAgICAgICR7R1NU
UkVBTUVSX1JUUF9MSUJSQVJJRVN9CisgICAgICAgICAgICAgICAgJHtHU1RSRUFNRVJfU0RQX0xJ
QlJBUklFU30KKyAgICAgICAgICAgICAgICAke0dTVFJFQU1FUl9XRUJSVENfTElCUkFSSUVTfQor
ICAgICAgICAgICAgKQorICAgICAgICBlbmRpZiAoKQorCisgICAgICAgIGxpc3QoQVBQRU5EIFdl
YkNvcmVfTElCUkFSSUVTIE9wZW5TU0w6OkNyeXB0bykKICAgICBlbmRpZiAoKQogZW5kaWYgKCkK
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1
ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIuY3BwCmluZGV4IGI0
ZDVmNjcwM2U5MjllZGYxN2YxMDllZjY0ODEzMGFjZTAzOGNhYzQuLmExYWNlOTc2MWRhMmNlMmFh
ZDQ2NDIxYjliZTZkZjhkM2E5ZTU0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92
aWRlckdTdHJlYW1lci5jcHAKQEAgLTEwMCwxMCArMTAwLDU4IEBAIEF1ZGlvU291cmNlUHJvdmlk
ZXJHU3RyZWFtZXI6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIoTWVkaWFTdHJlYW1UcmFj
a1ByaXZhCiAKICAgICBtX2F1ZGlvU2lua0JpbiA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlw
dGlvbigidGVlIG5hbWU9YXVkaW9UZWUiLCB0cnVlLCBudWxscHRyKTsKIAotICAgIGdzdF9iaW5f
YWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBzcmMsIG1fYXVkaW9TaW5r
QmluLmdldCgpLCBudWxscHRyKTsKLSAgICBnc3RfZWxlbWVudF9saW5rKHNyYywgbV9hdWRpb1Np
bmtCaW4uZ2V0KCkpOworICAgIGF1dG8qIGRlY29kZWJpbiA9IG1ha2VHU3RyZWFtZXJFbGVtZW50
KCJkZWNvZGViaW4zIiwgbnVsbHB0cik7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRl
Y29kZWJpbiwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0soK1tdKEF1ZGlvU291cmNlUHJvdmlkZXJH
U3RyZWFtZXIqIHByb3ZpZGVyLCBHc3RQYWQqIHBhZCkgeworICAgICAgICBhdXRvIHBhZENhcHMg
PSBhZG9wdEdSZWYoZ3N0X3BhZF9xdWVyeV9jYXBzKHBhZCwgbnVsbHB0cikpOworICAgICAgICBi
b29sIGlzQXVkaW8gPSBkb0NhcHNIYXZlVHlwZShwYWRDYXBzLmdldCgpLCAiYXVkaW8iKTsKKyAg
ICAgICAgaWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxOCwgMCkpCisgICAgICAgICAgICBS
RUxFQVNFX0FTU0VSVChpc0F1ZGlvKTsKKyAgICAgICAgZWxzZSBpZiAoIWlzQXVkaW8pCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9l
bGVtZW50X2dldF9zdGF0aWNfcGFkKHByb3ZpZGVyLT5tX2F1ZGlvU2lua0Jpbi5nZXQoKSwgInNp
bmsiKSk7CisgICAgICAgIGdzdF9wYWRfbGluayhwYWQsIHNpbmtQYWQuZ2V0KCkpOworICAgICAg
ICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KHByb3ZpZGVyLT5tX2F1ZGlvU2lu
a0Jpbi5nZXQoKSk7CisgICAgfSksIHRoaXMpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1Rf
QklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIHNyYywgZGVjb2RlYmluLCBtX2F1ZGlvU2lua0Jp
bi5nZXQoKSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfbGluayhzcmMsIGRlY29kZWJpbik7
CisKKyAgICBhdXRvIGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQ
RUxJTkUobV9waXBlbGluZS5nZXQoKSkpKTsKKyAgICBBU1NFUlQoYnVzKTsKKworICAgIGdzdF9i
dXNfc2V0X3N5bmNfaGFuZGxlcihidXMuZ2V0KCksIFtdKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1l
c3NhZ2UsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHc3RCdXNTeW5jUmVwbHkgeworICAgICAgICBh
dXRvKiBkZWNvZGViaW4gPSBHU1RfRUxFTUVOVF9DQVNUKHVzZXJEYXRhKTsKKyAgICAgICAgaWYg
KEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkgIT0gR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJ
T04gfHwgR1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpICE9IEdTVF9PQkpFQ1RfQ0FTVChkZWNvZGVi
aW4pKSB7CisgICAgICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICAgICAg
ICAgIHJldHVybiBHU1RfQlVTX0RST1A7CisgICAgICAgIH0KKworICAgICAgICBHUmVmUHRyPEdz
dFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247CisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNl
X3N0cmVhbV9jb2xsZWN0aW9uKG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91dFB0cigpKTsKKyAgICAg
ICAgaWYgKCFjb2xsZWN0aW9uKSB7CisgICAgICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtZXNz
YWdlKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfQlVTX0RST1A7CisgICAgICAgIH0KKworICAg
ICAgICB1bnNpZ25lZCBzaXplID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplKGNvbGxl
Y3Rpb24uZ2V0KCkpOworICAgICAgICBHTGlzdCogc3RyZWFtcyA9IG51bGxwdHI7CisgICAgICAg
IGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGF1dG8q
IHN0cmVhbSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtKGNvbGxlY3Rpb24uZ2V0
KCksIGkpOworICAgICAgICAgICAgYXV0byBzdHJlYW1UeXBlID0gZ3N0X3N0cmVhbV9nZXRfc3Ry
ZWFtX3R5cGUoc3RyZWFtKTsKKyAgICAgICAgICAgIGlmIChzdHJlYW1UeXBlID09IEdTVF9TVFJF
QU1fVFlQRV9BVURJTykgeworICAgICAgICAgICAgICAgIHN0cmVhbXMgPSBnX2xpc3RfYXBwZW5k
KHN0cmVhbXMsIGNvbnN0X2Nhc3Q8Y2hhcio+KGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJl
YW0pKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgICAgaWYgKHN0cmVhbXMpIHsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZl
bnQoZGVjb2RlYmluLCBnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zKHN0cmVhbXMpKTsKKyAg
ICAgICAgICAgIGdfbGlzdF9mcmVlKHN0cmVhbXMpOworICAgICAgICB9CiAKLSAgICBjb25uZWN0
U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCkpOworICAgICAgICBnc3Rf
bWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAg
ICB9LCBnc3Rfb2JqZWN0X3JlZihkZWNvZGViaW4pLCBnc3Rfb2JqZWN0X3VucmVmKTsKIH0KICNl
bmRpZgogCkBAIC0xMjAsMTAgKzE2OCw4IEBAIEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6
On5BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKCkKIAogICAgIHNldENsaWVudChudWxscHRy
KTsKICNpZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGlmIChtX3BpcGVsaW5lKSB7Ci0gICAg
ICAgIGRpc2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5nZXQoKSk7
CisgICAgaWYgKG1fcGlwZWxpbmUpCiAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3Bp
cGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgfQogI2VuZGlmCiB9CiAKQEAgLTM0
NSw3ICszOTEsNiBAQCB2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OmhhbmRsZU5l
d0RlaW50ZXJsZWF2ZVBhZChHc3RQYWQqIHBhZCkKIAogICAgIEdRdWFyayBxdWFyayA9IGdfcXVh
cmtfZnJvbV9zdGF0aWNfc3RyaW5nKCJwZWVyIik7CiAgICAgZ19vYmplY3Rfc2V0X3FkYXRhKEdf
T0JKRUNUKHBhZCksIHF1YXJrLCBzaW5rUGFkLmdldCgpKTsKLQogICAgIG1fZGVpbnRlcmxlYXZl
U291cmNlUGFkcysrOwogICAgIEdRdWFyayBjaGFubmVsSWRRdWFyayA9IGdfcXVhcmtfZnJvbV9z
dGF0aWNfc3RyaW5nKCJjaGFubmVsLWlkIik7CiAgICAgZ19vYmplY3Rfc2V0X3FkYXRhKEdfT0JK
RUNUKHNpbmspLCBjaGFubmVsSWRRdWFyaywgR0lOVF9UT19QT0lOVEVSKG1fZGVpbnRlcmxlYXZl
U291cmNlUGFkcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0
aW9uLmgKaW5kZXggNmYyODg3MmFmYjExNzZlNTEzZDJiZGY1NWE2MjIxZDRmNmZiMGFlNy4uZGQz
MTNiMzE0MjQwNmNhZjU3OTRlYWM3Y2MyYWY4ZDY0ZTU0NWFhMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCkBAIC0zMiwxOSArMzIsMTYgQEAgY2xh
c3MgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBmaW5hbDogcHVibGljIEF1ZGlvU3Ry
ZWFtRGVzY3JpcHRpb24gewogcHVibGljOgogICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24oR3N0QXVkaW9JbmZvJiYgaW5mbykKICAgICAgICAgOiBtX2luZm8oV1RGTW92ZShpbmZv
KSkKLSAgICAgICAgLCBtX2NhcHMoYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1f
aW5mbykpKQogICAgIHsKICAgICB9CiAKICAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0
aW9uKGNvbnN0IEdzdEF1ZGlvSW5mbyYgaW5mbykKICAgICAgICAgOiBtX2luZm8oaW5mbykKLSAg
ICAgICAgLCBtX2NhcHMoYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykp
KQogICAgIHsKICAgICB9CiAKICAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKEdz
dEF1ZGlvSW5mbyogaW5mbykKICAgICAgICAgOiBtX2luZm8oKmluZm8pCi0gICAgICAgICwgbV9j
YXBzKGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZtX2luZm8pKSkKICAgICB7CiAg
ICAgfQogCkBAIC05OSw3ICs5NiwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvcj09KGNv
bnN0IEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG90aGVyKSB7IHJldHVybiBnc3Rf
YXVkaW9faW5mb19pc19lcXVhbCgmbV9pbmZvLCAmb3RoZXIubV9pbmZvKTsgfQogICAgIGJvb2wg
b3BlcmF0b3IhPShjb25zdCBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikg
eyByZXR1cm4gIW9wZXJhdG9yID09IChvdGhlcik7IH0KIAotICAgIGNvbnN0IEdSZWZQdHI8R3N0
Q2Fwcz4mIGNhcHMoKSBjb25zdCB7IHJldHVybiBtX2NhcHM7IH0KKyAgICBjb25zdCBHUmVmUHRy
PEdzdENhcHM+JiBjYXBzKCkKKyAgICB7CisgICAgICAgIGlmICghbV9jYXBzKQorICAgICAgICAg
ICAgbV9jYXBzID0gYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpOwor
ICAgICAgICByZXR1cm4gbV9jYXBzOworICAgIH0KICAgICBjb25zdCBHc3RBdWRpb0luZm8mIGdl
dEluZm8oKSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVh
bWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVm
UHRyR1N0cmVhbWVyLmNwcAppbmRleCAyM2FjMTI1NzY2MjE5N2ZhNGVhYzk3YTk5N2NiNWQwZmVl
ZTc0MzkwLi45ZjZmNzYxNWE3NjE4MThjYTRiZDlmY2U4Yzg3ZjIyMjM0Mzk0NDljIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdT
dHJlYW1lci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCkBAIC0yNyw2ICsyNywxMiBAQAogI2luY2x1ZGUgPGdz
dC9nbC9lZ2wvZ3N0ZWdsaW1hZ2UuaD4KICNlbmRpZgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93
ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2VuZGlmCisKIG5hbWVzcGFj
ZSBXVEYgewogCiB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0TWluaU9iamVjdD4gYWRvcHRHUmVmKEdz
dE1pbmlPYmplY3QqIHB0cikKQEAgLTU2OSw2ICs1NzUsMTI0IEBAIHRlbXBsYXRlIDw+IHZvaWQg
ZGVyZWZHUHRyPEdzdEVHTEltYWdlPihHc3RFR0xJbWFnZSogcHRyKQogCiAjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUl9HTCkKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCit0ZW1wbGF0ZSA8
PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQUmVj
ZWl2ZXIqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4o
cHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBSZWNlaXZl
ciogcmVmR1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4oR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHB0
cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0
cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8
R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIpCit7CisgICAg
aWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8
PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFNlbmRl
ciogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4ocHRyLCBH
UmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBTZW5kZXIqIHJlZkdQ
dHI8R3N0V2ViUlRDUlRQU2VuZGVyPihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sKKyAgICBp
ZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAg
cmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQ
U2VuZGVyPihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAg
ICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2Vi
UlRDUlRQVHJhbnNjZWl2ZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcHRy
KQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihwdHIsIEdS
ZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBy
ZWZHUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciog
cHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpFQ1Qo
cHRyKSk7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0
cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikK
K3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3Rl
bXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGFkb3B0R1JlZihHc3RXZWJS
VENEYXRhQ2hhbm5lbCogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFD
aGFubmVsPihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0Rh
dGFDaGFubmVsKiByZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hh
bm5lbCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdfb2JqZWN0X3JlZihHX09CSkVD
VChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZH
UHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCogcHRyKQorewor
ICAgIGlmIChwdHIpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRl
IDw+IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RU
TFNUcmFuc3BvcnQqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENEVExTVHJh
bnNwb3J0PihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RU
TFNUcmFuc3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRM
U1RyYW5zcG9ydCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVm
KEdTVF9PQkpFQ1QocHRyKSk7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2
b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNw
b3J0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIp
OworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gYWRvcHRH
UmVmKEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdz
dFdlYlJUQ0lDRVRyYW5zcG9ydD4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8
PiBHc3RXZWJSVENJQ0VUcmFuc3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihH
c3RXZWJSVENJQ0VUcmFuc3BvcnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rf
b2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVt
cGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJ
Q0VUcmFuc3BvcnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3Vu
cmVmKHB0cik7Cit9CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwogfSAvLyBu
YW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0
cmVhbWVyLmgKaW5kZXggMDc4ZDNjNTYzOTc0ZjZhMmIzYWYxZWI4Mzk4NjQ5ODc5NDVmYTdkOC4u
ODdmZjA2ZjRlNTAzZDQ1NTFmYjQwY2I3ZjQ1OTI4MDcxYWNjYjhlZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIu
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5oCkBAIC0zMyw2ICszMywxNSBAQCB0eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250
ZXh0IEdzdEdMQ29udGV4dDsKIHR5cGVkZWYgc3RydWN0IF9Hc3RFR0xJbWFnZSBHc3RFR0xJbWFn
ZTsKICNlbmRpZgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCit0eXBlZGVmIHN0cnVjdCBf
R3N0V2ViUlRDRGF0YUNoYW5uZWwgR3N0V2ViUlRDRGF0YUNoYW5uZWw7Cit0eXBlZGVmIHN0cnVj
dCBfR3N0V2ViUlRDUlRQUmVjZWl2ZXIgR3N0V2ViUlRDUlRQUmVjZWl2ZXI7Cit0eXBlZGVmIHN0
cnVjdCBfR3N0V2ViUlRDUlRQU2VuZGVyIEdzdFdlYlJUQ1JUUFNlbmRlcjsKK3R5cGVkZWYgc3Ry
dWN0IF9Hc3RXZWJSVENSVFBUcmFuc2NlaXZlciBHc3RXZWJSVENSVFBUcmFuc2NlaXZlcjsKK3R5
cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENEVExTVHJhbnNwb3J0IEdzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQ7Cit0eXBlZGVmIHN0cnVjdCBfR3N0V2ViUlRDSUNFVHJhbnNwb3J0IEdzdFdlYlJUQ0lDRVRy
YW5zcG9ydDsKKyNlbmRpZgorCiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBHUmVmUHRy
PEdzdFBsdWdpbj4gYWRvcHRHUmVmKEdzdFBsdWdpbiogcHRyKTsKQEAgLTE0Niw2ICsxNTUsMzMg
QEAgdGVtcGxhdGU8PiBHc3RFR0xJbWFnZSogcmVmR1B0cjxHc3RFR0xJbWFnZT4oR3N0RUdMSW1h
Z2UqIHB0cik7CiB0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdzdEVHTEltYWdlPihHc3RFR0xJ
bWFnZSogcHRyKTsKICNlbmRpZgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCit0ZW1wbGF0
ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQ
UmVjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiByZWZHUHRyPEdz
dFdlYlJUQ1JUUFJlY2VpdmVyPihHc3RXZWJSVENSVFBSZWNlaXZlciopOwordGVtcGxhdGUgPD4g
dm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVy
Kik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBhZG9wdEdSZWYo
R3N0V2ViUlRDUlRQU2VuZGVyKik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBTZW5kZXIqIHJl
ZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPihHc3RXZWJSVENSVFBTZW5kZXIqKTsKK3RlbXBsYXRl
IDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVy
Kik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IGFkb3B0
R1JlZihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQ
VHJhbnNjZWl2ZXIqIHJlZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJUQ1JU
UFRyYW5zY2VpdmVyKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENSVFBU
cmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqKTsKKwordGVtcGxhdGUgPD4gR1Jl
ZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RhdGFDaGFubmVs
Kik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEYXRhQ2hhbm5lbCogcmVmR1B0cjxHc3RXZWJSVENE
YXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVy
ZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCopOworCit0
ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RX
ZWJSVENEVExTVHJhbnNwb3J0Kik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEVExTVHJhbnNwb3J0
KiByZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQq
KTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdz
dFdlYlJUQ0RUTFNUcmFuc3BvcnQqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENJ
Q0VUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJSVENJQ0VUcmFuc3BvcnQqKTsKK3RlbXBsYXRl
IDw+IEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCogcmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+
KEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0
V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJQ0VUcmFuc3BvcnQqKTsKKworI2VuZGlmCisK
IH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJD
b21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dT
dHJlYW1lckNvbW1vbi5jcHAKaW5kZXggOWY0OTVkZGY5MDJkZjRmZmRmNTNhZmU4YzBmNjc0ZjU2
Y2JmNWZlMS4uYThjYmU1YzcyZTIzMDIxY2ZlNDdjODJhYTFkZWNjMzhlMzY0MjYxYyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
ckNvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKQEAgLTE4OSw2ICsxODksOSBAQCBjb25zdCBjaGFyKiBj
YXBzTWVkaWFUeXBlKGNvbnN0IEdzdENhcHMqIGNhcHMpCiAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVf
aGFzX25hbWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1jZW5jIikgfHwgZ3N0X3N0cnVjdHVy
ZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LWNiY3MiKSB8fCBnc3Rfc3RydWN0
dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtd2VibS1lbmMiKSkKICAgICAg
ICAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJvcmlnaW5hbC1t
ZWRpYS10eXBlIik7CiAjZW5kaWYKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1
Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cCIpKQorICAgICAgICByZXR1cm4gZ3N0X3N0cnVjdHVy
ZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm1lZGlhIik7CisKICAgICByZXR1cm4gZ3N0X3N0cnVj
dHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFt
ZXIuaAppbmRleCBiZjc0ZWNmMDJjYzIyZjYwNmViY2I5ZmU4NWMwMzRiMjZjNDA2NDQxLi5lNTI0
NzFjYTdlYTYyYTMxNThjNTIzMzM2MDYzNTJlYzYzMTUyYTM3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HVW5pcXVl
UHRyR1N0cmVhbWVyLmgKQEAgLTMwLDYgKzMwLDEyIEBACiAjaW5jbHVkZSA8Z3N0L3ZpZGVvL3Zp
ZGVvLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgogCisjaWYgZGVmaW5lZChC
VUlMRElOR19XZWJDb3JlKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNkZWZpbmUgR1NUX1VT
RV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRlIDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdT
VF9VU0VfVU5TVEFCTEVfQVBJCisjZW5kaWYKKwogI2lmIFVTRShXUEVfVklERU9fUExBTkVfRElT
UExBWV9ETUFCVUYpCiAjaW5jbHVkZSA8d3BlL2V4dGVuc2lvbnMvdmlkZW8tcGxhbmUtZGlzcGxh
eS1kbWFidWYuaD4KICNlbmRpZgpAQCAtNDksNiArNTUsMTAgQEAgV1RGX0RFRklORV9HUFRSX0RF
TEVURVIoR3N0Qnl0ZVJlYWRlciwgZ3N0X2J5dGVfcmVhZGVyX2ZyZWUpCiBXVEZfREVGSU5FX0dQ
VFJfREVMRVRFUihHc3RWaWRlb0NvbnZlcnRlciwgZ3N0X3ZpZGVvX2NvbnZlcnRlcl9mcmVlKQog
V1RGX0RFRklORV9HUFRSX0RFTEVURVIoR3N0QXVkaW9Db252ZXJ0ZXIsIGdzdF9hdWRpb19jb252
ZXJ0ZXJfZnJlZSkKIAorI2lmIGRlZmluZWQoQlVJTERJTkdfV2ViQ29yZSkgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCitXVEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RXZWJSVENTZXNzaW9uRGVz
Y3JpcHRpb24sIGdzdF93ZWJydGNfc2Vzc2lvbl9kZXNjcmlwdGlvbl9mcmVlKQorI2VuZGlmCisK
ICNpZiBVU0UoV1BFX1ZJREVPX1BMQU5FX0RJU1BMQVlfRE1BQlVGKQogV1RGX0RFRklORV9HUFRS
X0RFTEVURVIoc3RydWN0IHdwZV92aWRlb19wbGFuZV9kaXNwbGF5X2RtYWJ1Zl9zb3VyY2UsIHdw
ZV92aWRlb19wbGFuZV9kaXNwbGF5X2RtYWJ1Zl9zb3VyY2VfZGVzdHJveSkKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCmluZGV4IGVjMzJiYTg1Y2NmODQ3MjUzODM1MjY4MTg1
OWM0MDc3ZWJkNDk5MmQuLjE4MjY2ZjEyMmM0YjE4Njc0YTFmNzliYWI5MWYwNTQ5NjdmY2I3MDAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKQEAgLTM4LDcgKzM4LDcgQEAKIAogI2lm
IFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tBdWRpb1NvdXJjZVBy
b3ZpZGVyQ29jb2EuaCIKLSNlbGlmIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjZWxpZiBFTkFCTEUo
V0VCX0FVRElPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVBTUVSKQogI2lu
Y2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIuaCIKICNlbHNlCiAjaW5jbHVkZSAi
V2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oIgpAQCAtMTk5LDcgKzE5OSw3IEBAIFJlZlB0cjxXZWJB
dWRpb1NvdXJjZVByb3ZpZGVyPiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlQXVkaW9T
b3VyY2VQcm92aWRlCiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICByZXR1cm4gTWVkaWFTdHJl
YW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYTo6Y3JlYXRlKCp0aGlzKTsKLSNlbGlmIFVT
RShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjZWxpZiBVU0UoR1NUUkVBTUVSKQogICAg
IHJldHVybiBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpjcmVhdGUoKnRoaXMpOwogI2Vs
c2UKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRp
b0NhcHR1cmVyLmNwcAppbmRleCAyNmVlNDI2M2I5ZGI4NzgxZGJhZTYxZTFhMzAxMmVmN2RjNzA5
NzI1Li4zNWU2NWMwZWIwYmQ0ODFkM2Y4NWE5ZGQwNWI2NmJmOTU2OTBlN2UxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
QXVkaW9DYXB0dXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCkBAIC0yOSwyOSArMjksNDYg
QEAKICNpbmNsdWRlICJMaWJXZWJSVENBdWRpb0Zvcm1hdC5oIgogI2VuZGlmCiAKLSNpbmNsdWRl
IDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewogCiAjaWYgVVNF
KExJQldFQlJUQykKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IEF1ZGlvQ2FwdHVyZVNhbXBsZVJh
dGUgPSBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlUmF0ZTsKK3N0YXRpYyBjb25zdGV4cHIg
c2l6ZV90IHNfYXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IExpYldlYlJUQ0F1ZGlvRm9ybWF0Ojpz
YW1wbGVSYXRlOwogI2Vsc2UKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IEF1ZGlvQ2FwdHVyZVNh
bXBsZVJhdGUgPSA0ODAwMDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNfYXVkaW9DYXB0dXJl
U2FtcGxlUmF0ZSA9IDQ4MDAwOwogI2VuZGlmCiAKIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdT
dHJlYW1lckF1ZGlvQ2FwdHVyZXIoR1N0cmVhbWVyQ2FwdHVyZURldmljZSBkZXZpY2UpCi0gICAg
OiBHU3RyZWFtZXJDYXB0dXJlcihkZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxl
KCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgQXVkaW9DYXB0dXJlU2FtcGxlUmF0
ZSwgbnVsbHB0cikpKQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoZGV2aWNlLCBhZG9wdEdSZWYo
Z3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLCAicmF0ZSIsIEdfVFlQRV9JTlQsIHNf
YXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSwgbnVsbHB0cikpKQogewogfQogCiBHU3RyZWFtZXJBdWRp
b0NhcHR1cmVyOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKCkKLSAgICA6IEdTdHJlYW1lckNhcHR1
cmVyKCJhcHBzcmMiLCBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXci
LCAicmF0ZSIsIEdfVFlQRV9JTlQsIEF1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51bGxwdHIpKSwg
Q2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSkKKyAgICA6IEdTdHJlYW1lckNh
cHR1cmVyKCJhcHBzcmMiLCBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1y
YXciLCAicmF0ZSIsIEdfVFlQRV9JTlQsIHNfYXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSwgbnVsbHB0
cikpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNyb3Bob25lKQogewogfQogCiBHc3RF
bGVtZW50KiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpjcmVhdGVDb252ZXJ0ZXIoKQogewotICAg
IHJldHVybiBtYWtlR1N0cmVhbWVyQmluKCJhdWRpb2NvbnZlcnQgISBhdWRpb3Jlc2FtcGxlIiwg
dHJ1ZSk7CisgICAgYXV0byogYmluID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7CisgICAgYXV0byog
YXVkaW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb2NvbnZlcnQiLCBu
dWxscHRyKTsKKyAgICBhdXRvKiBhdWRpb3Jlc2FtcGxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJhdWRpb3Jlc2FtcGxlIiwgbnVsbHB0cik7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1Rf
QklOX0NBU1QoYmluKSwgYXVkaW9jb252ZXJ0LCBhdWRpb3Jlc2FtcGxlLCBudWxscHRyKTsKKyAg
ICBnc3RfZWxlbWVudF9saW5rKGF1ZGlvY29udmVydCwgYXVkaW9yZXNhbXBsZSk7CisKKyNpZiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKKyAgICBpZiAoYXV0byogd2VicnRjZHNwID0gbWFrZUdTdHJl
YW1lckVsZW1lbnQoIndlYnJ0Y2RzcCIsIG51bGxwdHIpKSB7CisgICAgICAgIGdfb2JqZWN0X3Nl
dCh3ZWJydGNkc3AsICJlY2hvLWNhbmNlbCIsIGZhbHNlLCAidm9pY2UtZGV0ZWN0aW9uIiwgdHJ1
ZSwgbnVsbHB0cik7CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChiaW4pLCB3ZWJy
dGNkc3ApOworICAgICAgICBnc3RfZWxlbWVudF9saW5rKHdlYnJ0Y2RzcCwgYXVkaW9jb252ZXJ0
KTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChhdXRvIHBhZCA9IGFkb3B0R1JlZihnc3RfYmlu
X2ZpbmRfdW5saW5rZWRfcGFkKEdTVF9CSU5fQ0FTVChiaW4pLCBHU1RfUEFEX1NSQykpKQorICAg
ICAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1QoYmluKSwgZ3N0X2dob3N0
X3BhZF9uZXcoInNyYyIsIHBhZC5nZXQoKSkpOworICAgIGlmIChhdXRvIHBhZCA9IGFkb3B0R1Jl
Zihnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkKEdTVF9CSU5fQ0FTVChiaW4pLCBHU1RfUEFEX1NJ
TkspKSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVF9DQVNUKGJpbiks
IGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgpKSk7CisKKyAgICByZXR1cm4gYmlu
OwogfQogCiBib29sIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OnNldFNhbXBsZVJhdGUoaW50IHNh
bXBsZVJhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcAppbmRleCBjOWUw
ZDVlYjYwZTJiYzM4ZWYzYTlhNWQ1MzJjNDM4ODAxMDk2ZjRlLi4wOTgzNGE2NThjMTI0MDMyMDQ0
NTU4NGUyMTk0MTVhODVlMTM3MGI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJl
ci5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCBHc3RFbGVtZW50KiBHU3RyZWFtZXJDYXB0dXJlcjo6
Y3JlYXRlU291cmNlKCkKICAgICAgICAgbV9zcmMgPSBtYWtlRWxlbWVudChtX3NvdXJjZUZhY3Rv
cnkpOwogICAgICAgICBBU1NFUlQobV9zcmMpOwogICAgICAgICBpZiAoR1NUX0lTX0FQUF9TUkMo
bV9zcmMuZ2V0KCkpKQotICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fc3JjLmdldCgpLCAiaXMt
bGl2ZSIsIHRydWUsICJmb3JtYXQiLCBHU1RfRk9STUFUX1RJTUUsIG51bGxwdHIpOworICAgICAg
ICAgICAgZ19vYmplY3Rfc2V0KG1fc3JjLmdldCgpLCAiaXMtbGl2ZSIsIHRydWUsICJmb3JtYXQi
LCBHU1RfRk9STUFUX1RJTUUsICJkby10aW1lc3RhbXAiLCB0cnVlLCBudWxscHRyKTsKIAogICAg
ICAgICBhdXRvIHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCht
X3NyYy5nZXQoKSwgInNyYyIpKTsKICAgICAgICAgaWYgKG1fZGV2aWNlVHlwZSA9PSBDYXB0dXJl
RGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmEpIHsKQEAgLTEzOCw2ICsxMzgsNyBAQCBHc3RFbGVt
ZW50KiBHU3RyZWFtZXJDYXB0dXJlcjo6Y3JlYXRlU291cmNlKCkKICAgICBtX3NyYyA9IGdzdF9k
ZXZpY2VfY3JlYXRlX2VsZW1lbnQobV9kZXZpY2UuZ2V0KCksIHNvdXJjZU5hbWUuZ2V0KCkpOwog
ICAgIEFTU0VSVChtX3NyYyk7CiAKKyAgICAvLyBnX29iamVjdF9zZXQobV9zcmMuZ2V0KCksICJp
by1tb2RlIiwgMiwgbnVsbHB0cik7CiAgICAgcmV0dXJuIG1fc3JjLmdldCgpOwogfQogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5mYTFkZTUyYmQ1ODE5NGM3Mzc2YTZhMWE0ZjNmZmU0ZGVkYzFhNzJhCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJE
VE1GU2VuZGVyQmFja2VuZDo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjp+R1N0cmVh
bWVyRFRNRlNlbmRlckJhY2tlbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jv
b2wgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmNhbkluc2VydERUTUYoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdTdHJlYW1lckRU
TUZTZW5kZXJCYWNrZW5kOjpwbGF5VG9uZShjb25zdCBTdHJpbmcmLCBzaXplX3QsIHNpemVfdCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgR1N0cmVhbWVyRFRNRlNlbmRl
ckJhY2tlbmQ6OnRvbmVzKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiB7IH07Cit9CisKK3NpemVfdCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6ZHVyYXRp
b24oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisK
K3NpemVfdCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6aW50ZXJUb25lR2FwKCkgY29uc3QK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lkIEdTdHJl
YW1lckRUTUZTZW5kZXJCYWNrZW5kOjpvblRvbmVQbGF5ZWQoRnVuY3Rpb248dm9pZChjb25zdCBT
dHJpbmcmKT4mJiBvblRvbmVQbGF5ZWQpCit7CisgICAgbV9vblRvbmVQbGF5ZWQgPSBXVEZNb3Zl
KG9uVG9uZVBsYXllZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1G
U2VuZGVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzU3OTcwNTBj
ZWM5YjRiMGFhNmQ5ZWZlOTgwOGFlNWM5MDg4ZmIzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2Vu
ZGVyQmFja2VuZC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUlRDRFRNRlNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRl
IDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzZSBlYWdlciBp
bml0aWFsaXphdGlvbiBmb3IgdGhlIFdlYWtQdHJGYWN0b3J5IHNpbmNlIHdlIGNhbGwgbWFrZVdl
YWtQdHIoKSBmcm9tIGFub3RoZXIgdGhyZWFkLgorY2xhc3MgR1N0cmVhbWVyRFRNRlNlbmRlckJh
Y2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDRFRNRlNlbmRlckJhY2tlbmQsIHB1YmxpYyBDYW5NYWtl
V2Vha1B0cjxHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCwgV2Vha1B0ckZhY3RvcnlJbml0aWFs
aXphdGlvbjo6RWFnZXI+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCgpOworICAgIH5HU3RyZWFt
ZXJEVE1GU2VuZGVyQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0RUTUZTZW5kZXJC
YWNrZW5kCisgICAgYm9vbCBjYW5JbnNlcnREVE1GKCkgZmluYWw7CisgICAgdm9pZCBwbGF5VG9u
ZShjb25zdCBTdHJpbmcmIHRvbmUsIHNpemVfdCBkdXJhdGlvbiwgc2l6ZV90IGludGVyVG9uZUdh
cCkgZmluYWw7CisgICAgdm9pZCBvblRvbmVQbGF5ZWQoRnVuY3Rpb248dm9pZChjb25zdCBTdHJp
bmcmKT4mJikgZmluYWw7CisgICAgU3RyaW5nIHRvbmVzKCkgY29uc3QgZmluYWw7CisgICAgc2l6
ZV90IGR1cmF0aW9uKCkgY29uc3QgZmluYWw7CisgICAgc2l6ZV90IGludGVyVG9uZUdhcCgpIGNv
bnN0IGZpbmFsOworCisgICAgRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4gbV9vblRvbmVQ
bGF5ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1T
b3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAppbmRleCA5OTU0ZmE2NTgzMTNhOWE0NWE1
MmUzY2Y3NjFmMTAxZjM0ZDlhYWQ1Li4wNWJhMjBmNzA0ZmU3YjZjMjI2YWY3NzBhYWFhMTEwMTkz
YzUyOGViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNv
dXJjZS5jcHAKQEAgLTM0LDE3ICszNCwyMyBAQAogI2luY2x1ZGUgIlZpZGVvRnJhbWVNZXRhZGF0
YUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTdHJlYW0uaCIK
IAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lci5oIgorI2VuZGlmCisKICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNyYy5o
PgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGZsb3djb21iaW5lci5oPgogI2luY2x1ZGUgPHd0Zi9V
VUlELmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KIAogdXNpbmcgbmFtZXNwYWNl
IFdlYkNvcmU7CiAKIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB2aWRlb1NyY1RlbXBsYXRl
ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInZpZGVvX3NyYyV1IiwgR1NUX1BBRF9TUkMsIEdT
VF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQUygidmlkZW8veC1yYXc7dmlkZW8v
eC1oMjY0O3ZpZGVvL3gtdnA4IikpOworICAgIEdTVF9TVEFUSUNfQ0FQUygidmlkZW8veC1yYXc7
dmlkZW8veC1oMjY0O3ZpZGVvL3gtdnA4O3ZpZGVvL3gtdnA5O2FwcGxpY2F0aW9uL3gtcnRwLCBt
ZWRpYT0oc3RyaW5nKXZpZGVvIikpOwogCiBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgYXVk
aW9TcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJhdWRpb19zcmMldSIsIEdT
VF9QQURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMoImF1ZGlv
L3gtcmF3KEFOWSk7IikpOworICAgIEdTVF9TVEFUSUNfQ0FQUygiYXVkaW8veC1yYXcoQU5ZKTth
cHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbyIpKTsKIAogR1NUX0RFQlVHX0NB
VEVHT1JZX1NUQVRJQyh3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnKTsKICNkZWZpbmUgR1NUX0NB
VF9ERUZBVUxUIHdlYmtpdE1lZGlhU3RyZWFtU3JjRGVidWcKQEAgLTIyMSw3ICsyMjcsNyBAQCBw
dWJsaWM6CiAKICAgICAgICAgaWYgKGRyb3ApIHsKICAgICAgICAgICAgIG1fbmVlZHNEaXNjb250
ID0gdHJ1ZTsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChtX3NyYy5nZXQoKSwgIiVzIHF1
ZXVlIGZ1bGwgYWxyZWFkeS4uLiBub3QgcHVzaGluZyIsIG1fdHJhY2suaGFzVmlkZW8oKSA/ICJW
aWRlbyIgOiAiQXVkaW8iKTsKKyAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QobV9zcmMuZ2V0
KCksICIlcyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4gbm90IHB1c2hpbmciLCBtX3RyYWNrLmhhc1Zp
ZGVvKCkgPyAiVmlkZW8iIDogIkF1ZGlvIik7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAg
IH0KIApAQCAtNjUyLDYgKzY1OCw3IEBAIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFj
ayhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1UcmFja1ByCiAgICAgY29u
c3QgY2hhciogc291cmNlVHlwZTsKICAgICB1bnNpZ25lZCBjb3VudGVyOwogICAgIEdzdFN0YXRp
Y1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZTsKKwogICAgIGlmICh0cmFjay0+aGFzQXVkaW8oKSkg
ewogICAgICAgICBwYWRUZW1wbGF0ZSA9ICZhdWRpb1NyY1RlbXBsYXRlOwogICAgICAgICBzb3Vy
Y2VUeXBlID0gImF1ZGlvIjsKQEAgLTY2Myw5ICs2NzAsMTkgQEAgdm9pZCB3ZWJraXRNZWRpYVN0
cmVhbVNyY0FkZFRyYWNrKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmVhbVRy
YWNrUHIKICAgICAgICAgY291bnRlciA9IHNlbGYtPnByaXYtPnZpZGVvUGFkQ291bnRlci5leGNo
YW5nZUFkZCgxKTsKICAgICB9CiAKLSAgICBhdXRvIHBhZE5hbWUgPSBtYWtlU3RyaW5nKHNvdXJj
ZVR5cGUsICJfc3JjIiwgY291bnRlcik7CisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisgICAg
aWYgKHRyYWNrLT5zb3VyY2UoKS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkgeworICAgICAgICBh
dXRvJiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXImPih0cmFjay0+c291cmNlKCkpOworICAgICAgICBzb3VyY2UucmVnaXN0ZXJDbGllbnQo
KTsKKyAgICB9IGVsc2UgaWYgKHRyYWNrLT5zb3VyY2UoKS5pc0luY29taW5nVmlkZW9Tb3VyY2Uo
KSkgeworICAgICAgICBhdXRvJiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXImPih0cmFjay0+c291cmNlKCkpOworICAgICAgICBzb3VyY2Uu
cmVnaXN0ZXJDbGllbnQoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIEdTVF9ERUJVR19PQkpFQ1Qo
c2VsZiwgIlNldHVwICVzIHNvdXJjZSBmb3IgdHJhY2sgJXMsIG9ubHkgdHJhY2s6ICVzIiwgc291
cmNlVHlwZSwgdHJhY2stPmlkKCkudXRmOCgpLmRhdGEoKSwgYm9vbEZvclByaW50aW5nKG9ubHlU
cmFjaykpOwogCisgICAgYXV0byBwYWROYW1lID0gbWFrZVN0cmluZyhzb3VyY2VUeXBlLCAiX3Ny
YyIsIGNvdW50ZXIpOwogICAgIGF1dG8gc291cmNlID0gbWFrZVVuaXF1ZTxJbnRlcm5hbFNvdXJj
ZT4oR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgKnRyYWNrLCBwYWROYW1lKTsKICAgICBhdXRvKiBl
bGVtZW50ID0gc291cmNlLT5nZXQoKTsKICAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1Qoc2Vs
ZiksIGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNw
cAppbmRleCBmYWM0NzA1ZmI4YTdjZjJkYzIzZWE1MTFiMTVmY2Y0ODU1MmNmMzNhLi5hNzZlZjFl
ZmZkMTZmYTI2YjZkZTM1NzRmNDY0ZjVkMjMzYzk1ZWZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcApAQCAtMjk3LDkgKzI5NywxMSBAQCBzdGF0aWMgdm9p
ZCB3ZWJraXRfd2VicnRjX3ZpZGVvX2VuY29kZXJfY2xhc3NfaW5pdChXZWJLaXRXZWJydGNWaWRl
b0VuY29kZXJDbGFzcwogICAgICAgICAgICAgZ19vYmplY3Rfc2V0KHNlbGYtPnByaXYtPnBhcnNl
ci5nZXQoKSwgImNvbmZpZy1pbnRlcnZhbCIsIDEsIG51bGxwdHIpOwogICAgICAgICB9LCAidGFy
Z2V0LWJpdHJhdGUiLCBzZXRCaXRyYXRlQml0UGVyU2VjLCAiaW50ZXJ2YWwtaW50cmFmcmFtZXMi
KTsKICAgICBFbmNvZGVyczo6cmVnaXN0ZXJFbmNvZGVyKFgyNjQsICJ4MjY0ZW5jIiwgImgyNjRw
YXJzZSIsICJ2aWRlby94LWgyNjQiLAotICAgICAgICAidmlkZW8veC1oMjY0LGFsaWdubWVudD1h
dSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFtLHByb2ZpbGU9YmFzZWxpbmUiLAorICAgICAgICAi
dmlkZW8veC1oMjY0LGFsaWdubWVudD1hdSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFtLHByb2Zp
bGU9Y29uc3RyYWluZWQtYmFzZWxpbmUiLAogICAgICAgICBbXShXZWJLaXRXZWJydGNWaWRlb0Vu
Y29kZXIqIHNlbGYpIHsKICAgICAgICAgICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdfT0JK
RUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAidHVuZSIsICJ6ZXJvbGF0ZW5jeSIpOwor
ICAgICAgICAgICAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1Qoc2VsZi0+cHJpdi0+
ZW5jb2Rlci5nZXQoKSksICJzcGVlZC1wcmVzZXQiLCAidWx0cmFmYXN0Iik7CisgICAgICAgICAg
ICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2VsZi0+cHJpdi0+ZW5jb2Rlci5nZXQoKSksICJrZXkt
aW50LW1heCIsIDE1LCBOVUxMKTsKICAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZWxmLT5wcml2
LT5wYXJzZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRyKTsKICAgICAgICAg
fSwgImJpdHJhdGUiLCBzZXRCaXRyYXRlS2JpdFBlclNlYywgImtleS1pbnQtbWF4Iik7CiAgICAg
RW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihPcGVuSDI2NCwgIm9wZW5oMjY0ZW5jIiwgImgyNjRw
YXJzZSIsICJ2aWRlby94LWgyNjQiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44Njgw
NTZhODU4OGU1ZmRhNzU5NzdkMTgxMjAwMzhhZWFlYmM3YmNjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5j
b21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0RhdGEuaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZUluY29taW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXIoU3RyaW5nJiYgYXVkaW9UcmFja0lkKQorICAgIDogUmVhbHRp
bWVNZWRpYVNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbywgV1RGTW92ZShh
dWRpb1RyYWNrSWQpKQorICAgICwgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcigpCit7
CisgICAgc3RhcnQoKTsKK30KKworUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
Ojp+UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBzdG9wKCk7
Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzdGFydFBy
b2R1Y2luZ0RhdGEoKQoreworICAgIHJlbGVhc2VWYWx2ZSgpOworfQorCit2b2lkIFJlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAg
IGxvY2tWYWx2ZSgpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVz
JiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNhcGFiaWxpdGllcygpCit7
CisgICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OmVtcHR5Q2FwYWJp
bGl0aWVzKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgUmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzZXR0aW5ncygpCit7CisgICAgcmV0dXJu
IG1fY3VycmVudFNldHRpbmdzOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYgZ3N0U2FtcGxl
KQoreworICAgIGF1dG8qIGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihnc3RTYW1wbGUu
Z2V0KCkpOworICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gZGVzY3JpcHRpb247
CisgICAgR1N0cmVhbWVyQXVkaW9EYXRhIGZyYW1lcyhXVEZNb3ZlKGdzdFNhbXBsZSksIGRlc2Ny
aXB0aW9uLmdldEluZm8oKSk7CisKKyAgICBhdWRpb1NhbXBsZXNBdmFpbGFibGUoTWVkaWFUaW1l
KEdTVF9USU1FX0FTX1VTRUNPTkRTKEdTVF9CVUZGRVJfUFRTKGJ1ZmZlcikpLCBHX1VTRUNfUEVS
X1NFQyksIGZyYW1lcywgZGVzY3JpcHRpb24sIDApOworfQorCit9CisKKyNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZGY2ZGEzYjcxZjVm
ZWU1OTZmMjU2ZjIxNWRkY2RmNzY5ODg0ZWE0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisK
KyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAi
UmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciA6IHB1YmxpYyBSZWFsdGltZU1lZGlh
U291cmNlLCBwdWJsaWMgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+IGNy
ZWF0ZShTdHJpbmcmJiBhdWRpb1RyYWNrSWQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFdURk1vdmUoYXVkaW9UcmFja0lkKSkpOyB9
CisKK3Byb3RlY3RlZDoKKyAgICBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIo
U3RyaW5nJiYpOworICAgIH5SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoKTsK
KworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAgIHZvaWQgc3Rh
cnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpICBm
aW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmls
aXRpZXMoKSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNl
dHRpbmdzKCkgZmluYWw7CisgICAgYm9vbCBpc0luY29taW5nQXVkaW9Tb3VyY2UoKSBjb25zdCBm
aW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyIEFQSQorICAgIHZvaWQgZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYp
IGZpbmFsOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fY3VycmVudFNldHRp
bmdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJB
SVRTX0JFR0lOKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcikK
KyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJj
ZSYgc291cmNlKSB7IHJldHVybiBzb3VyY2UuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCk7IH0KK1NQ
RUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExOTZmMjVkOWQyZDA1YmMyYmIyYjFkMmMxZWU2ZDYx
MmI2OTk0NzgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5jcHAKQEAg
LTAsMCArMSw5NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiUmVhbHRp
bWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KKyNpbmNsdWRlIDx3dGYv
dGV4dC9XVEZTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2Vi
cnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJy
dGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZUluY29t
aW5nU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKCkKK3sK
KyAgICBtX2JpbiA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOworICAgIG1fdmFsdmUgPSBnc3RfZWxl
bWVudF9mYWN0b3J5X21ha2UoInZhbHZlIiwgbnVsbHB0cik7CisgICAgbV90ZWUgPSBnc3RfZWxl
bWVudF9mYWN0b3J5X21ha2UoInRlZSIsIG51bGxwdHIpOworICAgIGdfb2JqZWN0X3NldChtX3Rl
ZS5nZXQoKSwgImFsbG93LW5vdC1saW5rZWQiLCB0cnVlLCBudWxscHRyKTsKKworICAgIGF1dG8q
IHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAg
IGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV92YWx2ZS5nZXQo
KSwgcXVldWUsIG1fdGVlLmdldCgpLCBudWxscHRyKTsKKworICAgIGdzdF9lbGVtZW50X2xpbmtf
bWFueShtX3ZhbHZlLmdldCgpLCBxdWV1ZSwgbV90ZWUuZ2V0KCksIG51bGxwdHIpOworICAgIGdz
dF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV92YWx2ZS5nZXQoKSk7CisgICAgZ3N0
X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChxdWV1ZSk7CisgICAgZ3N0X2VsZW1lbnRf
c3luY19zdGF0ZV93aXRoX3BhcmVudChtX3RlZS5nZXQoKSk7CisKKyAgICBhdXRvIHNpbmtQYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV92YWx2ZS5nZXQoKSwgInNp
bmsiKSk7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChtX2Jpbi5nZXQoKSwgZ3N0X2dob3N0X3Bh
ZF9uZXcoInNpbmsiLCBzaW5rUGFkLmdldCgpKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWlu
Z1NvdXJjZUdTdHJlYW1lcjo6bG9ja1ZhbHZlKCkgY29uc3QKK3sKKyAgICBpZiAobV92YWx2ZSkK
KyAgICAgICAgZ19vYmplY3Rfc2V0KG1fdmFsdmUuZ2V0KCksICJkcm9wIiwgdHJ1ZSwgbnVsbHB0
cik7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVsZWFzZVZh
bHZlKCkgY29uc3QKK3sKKyAgICBpZiAobV92YWx2ZSkKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1f
dmFsdmUuZ2V0KCksICJkcm9wIiwgZmFsc2UsIG51bGxwdHIpOworfQorCit2b2lkIFJlYWx0aW1l
SW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OnJlZ2lzdGVyQ2xpZW50KCkKK3sKKyAgICBHU1RfREVC
VUcoIlJlZ2lzdGVyaW5nIG5ldyBjbGllbnQiKTsKKyAgICBhdXRvKiBxdWV1ZSA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxscHRyKTsKKyAgICBhdXRvKiBzaW5rID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhcHBzaW5rIiwgbnVsbHB0cik7CisgICAgZ19vYmplY3Rf
c2V0KHNpbmssICJlbmFibGUtbGFzdC1zYW1wbGUiLCBGQUxTRSwgImVtaXQtc2lnbmFscyIsIFRS
VUUsICJtYXgtYnVmZmVycyIsIDEsIG51bGxwdHIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChzaW5rLCAibmV3LXNhbXBsZSIsIEdfQ0FMTEJBQ0soK1tdKFJlYWx0aW1lSW5jb21pbmdT
b3VyY2VHU3RyZWFtZXIqIHNlbGYsIEdzdEVsZW1lbnQqIHNpbmspIC0+IEdzdEZsb3dSZXR1cm4g
eworICAgICAgICBhdXRvIHNhbXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfcHVsbF9zYW1w
bGUoR1NUX0FQUF9TSU5LKHNpbmspKSk7CisgICAgICAgIHNlbGYtPmRpc3BhdGNoU2FtcGxlKFdU
Rk1vdmUoc2FtcGxlKSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgICB9KSwgdGhp
cyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQoc2luaywgIm5ldy1wcmVyb2xsIiwg
R19DQUxMQkFDSygrW10oUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciogc2VsZiwgR3N0
RWxlbWVudCogc2luaykgLT4gR3N0Rmxvd1JldHVybiB7CisgICAgICAgIGF1dG8gc2FtcGxlID0g
YWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3ByZXJvbGwoR1NUX0FQUF9TSU5LKHNpbmspKSk7
CisgICAgICAgIHNlbGYtPmRpc3BhdGNoU2FtcGxlKFdURk1vdmUoc2FtcGxlKSk7CisgICAgICAg
IHJldHVybiBHU1RfRkxPV19PSzsKKyAgICB9KSwgdGhpcyk7CisKKyAgICBnc3RfYmluX2FkZF9t
YW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIHF1ZXVlLCBzaW5rLCBudWxscHRyKTsKKyAg
ICBnc3RfZWxlbWVudF9saW5rX21hbnkobV90ZWUuZ2V0KCksIHF1ZXVlLCBzaW5rLCBudWxscHRy
KTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KHF1ZXVlKTsKKyAgICBn
c3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KHNpbmspOworCisgICAgYXV0byBkb3RG
aWxlTmFtZSA9IG1ha2VTdHJpbmcoR1NUX09CSkVDVF9OQU1FKG1fYmluLmdldCgpKSwgIi5pbmNv
bWluZyIpOworICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOX0NB
U1QobV9iaW4uZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0
ZjgoKS5kYXRhKCkpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2NzRjNGI5MDI5NDI2Y2I1ZDJj
MTlhYTU2N2E5YzVhZWRhMjcxZWEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJl
YW1lci5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIg
SWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJH
UmVmUHRyR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRp
bWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAgR3N0RWxlbWVudCogYmlu
KCkgeyByZXR1cm4gbV9iaW4uZ2V0KCk7IH0KKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KCk7CisK
K3Byb3RlY3RlZDoKKyAgICBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKCk7CisKKyAg
ICB2b2lkIGxvY2tWYWx2ZSgpIGNvbnN0OworICAgIHZvaWQgcmVsZWFzZVZhbHZlKCkgY29uc3Q7
CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmFsdmU7CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmKSB7IH0KKworICAg
IEdSZWZQdHI8R3N0RWxlbWVudD4gbV9iaW47CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3Rl
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xNWYwODA3NjJiYzI1NmVk
N2VjOWYxZjhlOTk1NGJjMTJiNDE4MGY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgor
CisjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJWaWRlb0ZyYW1l
TWV0YWRhdGFHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvcnRwL3J0cC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmIHZpZGVvVHJhY2tJZCkK
KyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Vmlk
ZW8sIFdURk1vdmUodmlkZW9UcmFja0lkKSkKKyAgICAsIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXIoKQoreworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50
cyBjb25zdHJhaW50czsKKyAgICBjb25zdHJhaW50cy5zZXRTdXBwb3J0c1dpZHRoKHRydWUpOwor
ICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0KHRydWUpOworICAgIG1fY3VycmVudFNl
dHRpbmdzID0gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHsgfTsKKyAgICBtX2N1cnJlbnRT
ZXR0aW5ncy0+c2V0U3VwcG9ydGVkQ29uc3RyYWludHMoV1RGTW92ZShjb25zdHJhaW50cykpOwor
CisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KG1fdmFsdmUuZ2V0KCksICJzaW5rIikpOworICAgIGdzdF9wYWRfYWRkX3Byb2JlKHNpbmtQYWQu
Z2V0KCksIHN0YXRpY19jYXN0PEdzdFBhZFByb2JlVHlwZT4oR1NUX1BBRF9QUk9CRV9UWVBFX0JV
RkZFUiksIFtdKEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5mbywgZ3BvaW50ZXIpIC0+IEdz
dFBhZFByb2JlUmV0dXJuIHsKKyAgICAgICAgYXV0byB2aWRlb1NhbXBsZU1ldGFkYXRhID0gc3Rk
OjptYWtlX29wdGlvbmFsPFZpZGVvU2FtcGxlTWV0YWRhdGE+KHsgfSk7CisgICAgICAgIHZpZGVv
U2FtcGxlTWV0YWRhdGEtPnJlY2VpdmVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCkuc2Vjb25k
c1NpbmNlRXBvY2goKTsKKworICAgICAgICBhdXRvKiBidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1Qo
R1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEoaW5mbykpOworICAgICAgICBHc3RSVFBCdWZmZXIgcnRw
QnVmZmVyIEdTVF9SVFBfQlVGRkVSX0lOSVQ7CisgICAgICAgIGlmIChnc3RfcnRwX2J1ZmZlcl9t
YXAoYnVmZmVyLCBHU1RfTUFQX1JFQUQsICZydHBCdWZmZXIpKSB7CisgICAgICAgICAgICB2aWRl
b1NhbXBsZU1ldGFkYXRhLT5ydHBUaW1lc3RhbXAgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfdGltZXN0
YW1wKCZydHBCdWZmZXIpOworICAgICAgICAgICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAoJnJ0cEJ1
ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyID0gd2Via2l0R3N0QnVmZmVyU2V0Vmlk
ZW9TYW1wbGVNZXRhZGF0YShidWZmZXIsIFdURk1vdmUodmlkZW9TYW1wbGVNZXRhZGF0YSkpOwor
ICAgICAgICBHU1RfUEFEX1BST0JFX0lORk9fREFUQShpbmZvKSA9IGJ1ZmZlcjsKKyAgICAgICAg
cmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7CisgICAgfSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAg
ICBzdGFydCgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cjo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICByZWxlYXNlVmFsdmUoKTsKK30KKwordm9p
ZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRh
KCkKK3sKKyAgICBsb2NrVmFsdmUoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNh
cGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjYXBhYmls
aXRpZXMoKQoreworICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpl
bXB0eUNhcGFiaWxpdGllcygpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MoKQorewor
ICAgIGlmIChtX2N1cnJlbnRTZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudFNldHRp
bmdzLnZhbHVlKCk7CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWlu
dHMgY29uc3RyYWludHM7CisgICAgY29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsK
KyAgICBjb25zdHJhaW50cy5zZXRTdXBwb3J0c0hlaWdodCh0cnVlKTsKKworICAgIFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBhdXRvJiBzaXplID0gdGhpcy0+c2l6
ZSgpOworICAgIHNldHRpbmdzLnNldFdpZHRoKHNpemUud2lkdGgoKSk7CisgICAgc2V0dGluZ3Mu
c2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOworICAgIHNldHRpbmdzLnNldFN1cHBvcnRlZENvbnN0
cmFpbnRzKGNvbnN0cmFpbnRzKTsKKworICAgIG1fY3VycmVudFNldHRpbmdzID0gV1RGTW92ZShz
ZXR0aW5ncyk7CisgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVlKCk7Cit9CisKK3Zv
aWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXR0aW5nc0RpZENoYW5n
ZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPiBzZXR0aW5ncykK
K3sKKyAgICBpZiAoc2V0dGluZ3MuY29udGFpbnNBbnkoeyBSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3M6OkZsYWc6OldpZHRoLCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6Okhl
aWdodCB9KSkKKyAgICAgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBzdGQ6Om51bGxvcHQ7Cit9CisK
K3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBs
ZShHUmVmUHRyPEdzdFNhbXBsZT4mJiBnc3RTYW1wbGUpCit7CisgICAgdmlkZW9TYW1wbGVBdmFp
bGFibGUoTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZVdyYXBwZWRTYW1wbGUoZ3N0U2FtcGxl
KSwgeyB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTliYzMwMDY5Y2QzMzIw
OTIzMThiYmY3NzhhYjkzZDkxODQ4MzFmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisj
aW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lTWVkaWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNv
dXJjZSwgcHVibGljIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiBjcmVh
dGUoU3RyaW5nJiYgdmlkZW9UcmFja0lkKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKHZpZGVvVHJhY2tJZCkpKTsgfQor
ICAgIH5SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoKSA9IGRlZmF1bHQ7CisK
K3Byb3RlY3RlZDoKKyAgICBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoU3Ry
aW5nJiYpOworCitwcml2YXRlOgorICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2UgQVBJCisgICAg
dm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQcm9kdWNpbmdE
YXRhKCkgIGZpbmFsOworICAgIHZvaWQgc2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pIGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGZpbmFsOworICAgIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBmaW5hbDsKKyAgICBib29s
IGlzSW5jb21pbmdWaWRlb1NvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIC8vIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgQVBJCisgICAgdm9pZCBkaXNw
YXRjaFNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJikgZmluYWw7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9jdXJyZW50U2V0dGluZ3M7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKQorICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlJiBzb3VyY2Up
IHsgcmV0dXJuIHNvdXJjZS5pc0luY29taW5nVmlkZW9Tb3VyY2UoKTsgfQorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI4MDUzOTE5MzM2MTNhYmM4YTc3NWNlZjc5NzQ0ZDI3
MjJiMGRhODYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNw
cApAQCAtMCwwICsxLDk2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxp
YSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJl
YW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50
ZWdlckNvbnZlcnNpb24uaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2Vi
cnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJy
dGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNlKQorICAgIDogUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBtX2FsbG93ZWRDYXBzID0g
YWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0aW9uL3gtcnRwIiwgIm1lZGlh
IiwgR19UWVBFX1NUUklORywgImF1ZGlvIiwKKyAgICAgICAgImVuY29kaW5nLW5hbWUiLCBHX1RZ
UEVfU1RSSU5HLCAiT1BVUyIsICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgNDgwMDAsIG51bGxw
dHIpKTsKKworICAgIG1fYXVkaW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJh
dWRpb2NvbnZlcnQiLCBudWxscHRyKTsKKyAgICBtX2F1ZGlvcmVzYW1wbGUgPSBnc3RfZWxlbWVu
dF9mYWN0b3J5X21ha2UoImF1ZGlvcmVzYW1wbGUiLCBudWxscHRyKTsKKworICAgIG1fZW5jb2Rl
ciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJvcHVzZW5jIiwgbnVsbHB0cik7CisgICAgaWYgKCFt
X2VuY29kZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBFbmFibGUgZHR4IHRv
bz8KKyAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVChtX2VuY29kZXIuZ2V0KCkp
LCAiYXVkaW8tdHlwZSIsICJ2b2ljZSIpOworCisgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVh
bWVyRWxlbWVudCgicnRwb3B1c3BheSIsIG51bGxwdHIpOworICAgIGlmICghbV9wYXlsb2FkZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwg
ImF1dG8taGVhZGVyLWV4dGVuc2lvbiIsIEZBTFNFLCBudWxscHRyKTsKKworICAgIGdzdF9iaW5f
YWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV9hdWRpb2NvbnZlcnQuZ2V0KCks
IG1fYXVkaW9yZXNhbXBsZS5nZXQoKSwgbV9lbmNvZGVyLmdldCgpLCBtX3BheWxvYWRlci5nZXQo
KSwgbnVsbHB0cik7CisgICAgc2V0U291cmNlKFdURk1vdmUoc291cmNlKSk7Cit9CisKK2Jvb2wg
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzZXRQYXlsb2FkVHlwZShHUmVm
UHRyPEdzdENhcHM+JiBjYXBzKQoreworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9iaW4uZ2V0KCks
ICJPdXRnb2luZyBhdWRpbyBzb3VyY2UgcGF5bG9hZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwg
Y2Fwcy5nZXQoKSk7CisgICAgYXV0byogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVy
ZShjYXBzLmdldCgpLCAwKTsKKyAgICBpZiAoY29uc3QgY2hhciogZW5jb2RpbmdOYW1lID0gZ3N0
X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImVuY29kaW5nLW5hbWUiKSkgeworICAg
ICAgICBpZiAoIWVxdWFsKGVuY29kaW5nTmFtZSwgIk9QVVMiKSkgeworICAgICAgICAgICAgR1NU
X0VSUk9SX09CSkVDVChtX2Jpbi5nZXQoKSwgIlVuc3VwcG9ydGVkIG91dGdvaW5nIGF1ZGlvIGVu
Y29kaW5nOiAlcyIsIGVuY29kaW5nTmFtZSk7CisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1fYmluLmdl
dCgpLCAiZW5jb2RpbmctbmFtZSBub3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIH0KKworICAgIGlmIChjb25zdCBjaGFyKiB1c2VJbmJhbmRGZWMgPSBnc3Rfc3RydWN0dXJl
X2dldF9zdHJpbmcoc3RydWN0dXJlLCAidXNlaW5iYW5kZmVjIikpIHsKKyAgICAgICAgaWYgKCFz
dHJjbXAodXNlSW5iYW5kRmVjLCAiMSIpKQorICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fZW5j
b2Rlci5nZXQoKSwgImluYmFuZC1mZWMiLCB0cnVlLCBudWxscHRyKTsKKyAgICB9CisKKyAgICBp
ZiAoY29uc3QgY2hhciogbWluUFRpbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0
dXJlLCAibWlucHRpbWUiKSkgeworICAgICAgICBTdHJpbmcgdGltZShtaW5QVGltZSk7CisgICAg
ICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyQWxsb3dpbmdUcmFpbGluZ0p1bms8aW50
NjRfdD4odGltZSkpCisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCks
ICJtaW4tcHRpbWUiLCAqdmFsdWUgKiBHU1RfTVNFQ09ORCwgbnVsbHB0cik7CisgICAgfQorCisg
ICAgaW50IHBheWxvYWRUeXBlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0
dXJlLCAicGF5bG9hZCIsICZwYXlsb2FkVHlwZSkpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3Bh
eWxvYWRlci5nZXQoKSwgInB0IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIpOworCisgICAgZ19vYmpl
Y3Rfc2V0KG1fY2Fwc0ZpbHRlci5nZXQoKSwgImNhcHMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsK
KworICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX291dGdvaW5nU291cmNlLmdldCgpLCBtX3Zh
bHZlLmdldCgpLCBtX2F1ZGlvY29udmVydC5nZXQoKSwgbV9hdWRpb3Jlc2FtcGxlLmdldCgpLCBt
X3ByZUVuY29kZXJRdWV1ZS5nZXQoKSwgbV9lbmNvZGVyLmdldCgpLCBtX3BheWxvYWRlci5nZXQo
KSwgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1
ZGlvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTllODFlNWJjN2VjMzAwNGY0MjAwYjNl
YTQwYTg2ZDI4YmI2ZmIyNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyIGZpbmFs
IDogcHVibGljIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+IGNy
ZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgYXVkaW9Tb3VyY2UpIHsgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFdURk1v
dmUoYXVkaW9Tb3VyY2UpKSk7IH0KKworICAgIGJvb2wgc2V0UGF5bG9hZFR5cGUoR1JlZlB0cjxH
c3RDYXBzPiYpIGZpbmFsOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgUmVhbHRpbWVPdXRn
b2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7
CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2F1ZGlvY29udmVydDsKKyAg
ICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYXVkaW9yZXNhbXBsZTsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yMjY3MjBiMmI0YmMwODgyNzI1ODNjMDVlODMyMjIyNDIyNWY2
YWNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKQEAg
LTAsMCArMSwxNDkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXIuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVy
Q29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuaCIKKworI2Rl
ZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJydGMvd2VicnRjLmg+
CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVS
Tih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxU
IHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcigpCit7CisgICAgbV9iaW4gPSBnc3RfYmluX25ldyhudWxscHRyKTsK
KworICAgIG1fdmFsdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInZhbHZlIiwgbnVsbHB0
cik7CisgICAgbV9wcmVFbmNvZGVyUXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1
ZXVlIiwgbnVsbHB0cik7CisgICAgbV9wb3N0RW5jb2RlclF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIG1fY2Fwc0ZpbHRlciA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIG51bGxwdHIpOworCisgICAgZ3N0X2Jpbl9h
ZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3ZhbHZlLmdldCgpLCBtX3ByZUVu
Y29kZXJRdWV1ZS5nZXQoKSwKKyAgICAgICAgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBtX2Nh
cHNGaWx0ZXIuZ2V0KCksIG51bGxwdHIpOworCisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYo
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9jYXBzRmlsdGVyLmdldCgpLCAic3JjIikpOwor
ICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4uZ2V0KCksIGdzdF9naG9zdF9wYWRfbmV3KCJz
cmMiLCBzcmNQYWQuZ2V0KCkpKTsKK30KKworUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyOjp+UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBz
dG9wKCk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9iaW4uZ2V0KCksIEdTVF9TVEFU
RV9OVUxMKTsKKyAgICBpZiAoYXV0byBwaXBlbGluZSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9n
ZXRfcGFyZW50KG1fYmluLmdldCgpKSkpCisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU5f
Q0FTVChwaXBlbGluZS5nZXQoKSksIG1fYmluLmdldCgpKTsKK30KKwordm9pZCBSZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU+JiYgbmV3U291cmNlKQoreworICAgIGlmIChtX3NvdXJjZSAmJiAhbV9pbml0aWFs
U2V0dGluZ3MpCisgICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV9zb3VyY2UudmFsdWUoKS0+
c2V0dGluZ3MoKTsKKworICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAgbV9zb3VyY2UudmFsdWUo
KS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fc291cmNlID0gV1RGTW92ZShuZXdTb3Vy
Y2UpOworICAgIGluaXRpYWxpemVGcm9tVHJhY2soKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdv
aW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0YXJ0KCkKK3sKKyAgICBtX3NvdXJjZS52YWx1ZSgp
LT5hZGRPYnNlcnZlcigqdGhpcyk7CisgICAgbV9pc1N0b3BwZWQgPSBmYWxzZTsKK30KKwordm9p
ZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0b3AoKQoreworICAgIGlm
IChtX3NvdXJjZSkgeworICAgICAgICBtX3NvdXJjZS52YWx1ZSgpLT5yZW1vdmVPYnNlcnZlcigq
dGhpcyk7CisgICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQobV9vdXRnb2luZ1NvdXJjZS5n
ZXQoKSwgZ3N0X2V2ZW50X25ld19lb3MoKSk7CisKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X2xv
Y2tlZF9zdGF0ZShtX2Jpbi5nZXQoKSwgdHJ1ZSk7CisgICAgICAgIGdzdF9lbGVtZW50X3NldF9z
dGF0ZShtX291dGdvaW5nU291cmNlLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisKKyAgICAgICAg
aWYgKG1fd2VicnRjU2lua1BhZCkgeworICAgICAgICAgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9iaW4uZ2V0KCksICJzcmMiKSk7CisgICAg
ICAgICAgICBnc3RfcGFkX3VubGluayhzcmNQYWQuZ2V0KCksIG1fd2VicnRjU2lua1BhZC5nZXQo
KSk7CisKKyAgICAgICAgICAgIGF1dG8gcGFyZW50ID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3Bh
cmVudF9lbGVtZW50KG1fd2VicnRjU2lua1BhZC5nZXQoKSkpOworICAgICAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChwYXJlbnQuZ2V0KCksICJSZW1vdmluZyBwYWQgJSIgR1NUX1BUUl9GT1JNQVQs
IG1fd2VicnRjU2lua1BhZC5nZXQoKSk7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9yZWxlYXNl
X3JlcXVlc3RfcGFkKHBhcmVudC5nZXQoKSwgbV93ZWJydGNTaW5rUGFkLmdldCgpKTsKKyAgICAg
ICAgfQorCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9iaW4uZ2V0KCks
IGZhbHNlKTsKKyAgICAgICAgbV9zb3VyY2UucmVzZXQoKTsKKyAgICB9CisgICAgbV9pc1N0b3Bw
ZWQgPSB0cnVlOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1l
cjo6c291cmNlTXV0ZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICBy
ZXR1cm47CisgICAgQVNTRVJUKG1fbXV0ZWQgIT0gbV9zb3VyY2UudmFsdWUoKS0+bXV0ZWQoKSk7
CisgICAgbV9tdXRlZCA9IG1fc291cmNlLnZhbHVlKCktPm11dGVkKCk7Cit9CisKK3ZvaWQgUmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2VFbmFibGVkQ2hhbmdlZCgp
Cit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9lbmFibGVk
ID0gbV9zb3VyY2UudmFsdWUoKS0+ZW5hYmxlZCgpOworICAgIGlmIChtX3ZhbHZlKQorICAgICAg
ICBnX29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3AiLCAhbV9lbmFibGVkLCBudWxscHRy
KTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmluaXRp
YWxpemVGcm9tVHJhY2soKQoreworICAgIG1fbXV0ZWQgPSBtX3NvdXJjZS52YWx1ZSgpLT5tdXRl
ZCgpOworICAgIG1fZW5hYmxlZCA9IG1fc291cmNlLnZhbHVlKCktPmVuYWJsZWQoKTsKKyAgICBt
X291dGdvaW5nU291cmNlID0gd2Via2l0TWVkaWFTdHJlYW1TcmNOZXcoKTsKKyAgICBnc3RfYmlu
X2FkZChHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX291dGdvaW5nU291cmNlLmdldCgpKTsK
KyAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFRyYWNrKFdFQktJVF9NRURJQV9TVFJFQU1fU1JD
KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCkpLCBtX3NvdXJjZS0+cHRyKCksIHRydWUpOworfQorCit2
b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bGluaygpCit7CisgICAg
Z3N0X2VsZW1lbnRfbGluayhtX3Bvc3RFbmNvZGVyUXVldWUuZ2V0KCksIG1fY2Fwc0ZpbHRlci5n
ZXQoKSk7CisKKyAgICBhdXRvIHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZChtX2Jpbi5nZXQoKSwgInNyYyIpKTsKKyAgICBnc3RfcGFkX2xpbmsoc3JjUGFkLmdl
dCgpLCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVf
d2l0aF9wYXJlbnQobV9iaW4uZ2V0KCkpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6c2V0U2lua1BhZChjb25zdCBHUmVmUHRyPEdzdFBhZD4mIHBhZCkK
K3sKKyAgICBtX3dlYnJ0Y1NpbmtQYWQgPSBwYWQ7CisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBU
cmFuc2NlaXZlcj4gdHJhbnNjZWl2ZXI7CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjU2lua1Bh
ZC5nZXQoKSwgInRyYW5zY2VpdmVyIiwgJnRyYW5zY2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsK
KyAgICBnX29iamVjdF9nZXQodHJhbnNjZWl2ZXIuZ2V0KCksICJzZW5kZXIiLCAmbV9zZW5kZXIu
b3V0UHRyKCksIG51bGxwdHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNWUw
YmM1YTk1ZjViNzRhNTkzYTJiZGZhMTM1NzIzMTlhYjg0YjU2Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhbHRpbWVPdXRn
b2luZ01lZGlhU291cmNlR1N0cmVhbWVyPiwgcHVibGljIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgflJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdT
dHJlYW1lcigpOworCisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgc3RvcCgpOworICAgIHZv
aWQgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisgICAgTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5nZXQo
KTsgfQorCisgICAgR1JlZlB0cjxHc3RDYXBzPiBhbGxvd2VkQ2FwcygpIGNvbnN0IHsgcmV0dXJu
IG1fYWxsb3dlZENhcHM7IH0KKworICAgIHZvaWQgbGluaygpOworICAgIGNvbnN0IEdSZWZQdHI8
R3N0UGFkPiYgcGFkKCkgY29uc3QgeyByZXR1cm4gbV93ZWJydGNTaW5rUGFkOyB9CisgICAgdm9p
ZCBzZXRTaW5rUGFkKGNvbnN0IEdSZWZQdHI8R3N0UGFkPiYpOworCisgICAgR1JlZlB0cjxHc3RX
ZWJSVENSVFBTZW5kZXI+IHNlbmRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZGVyOyB9CisgICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBiaW4oKSBjb25zdCB7IHJldHVybiBtX2JpbjsgfQorCisgICAg
dmlydHVhbCBib29sIHNldFBheWxvYWRUeXBlKEdSZWZQdHI8R3N0Q2Fwcz4mKSB7IHJldHVybiBm
YWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgUmVhbHRpbWVPdXRnb2luZ01lZGlh
U291cmNlR1N0cmVhbWVyKCk7CisKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVHJhY2soKTsKKwor
ICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNlIH07
CisgICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgc3RkOjpvcHRpb25hbDxSZWY8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiBtX3NvdXJjZTsKKyAgICBzdGQ6Om9wdGlvbmFsPFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9pbml0aWFsU2V0dGluZ3M7CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX2JpbjsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fb3V0Z29pbmdT
b3VyY2U7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ZhbHZlOworICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gbV9wcmVFbmNvZGVyUXVldWU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2Vu
Y29kZXI7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BheWxvYWRlcjsKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fcG9zdEVuY29kZXJRdWV1ZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fY2Fwc0ZpbHRlcjsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fYWxsb3dlZENhcHM7CisgICAg
R1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IG1fc2VuZGVyOworICAgIEdSZWZQdHI8R3N0UGFk
PiBtX3dlYnJ0Y1NpbmtQYWQ7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzb3VyY2VNdXRlZENoYW5n
ZWQoKTsKKyAgICB2b2lkIHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7CisKKyAgICAvLyBNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgQVBJCisgICAgdm9pZCB0cmFja011dGVkQ2hhbmdl
ZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgc291cmNlTXV0ZWRDaGFuZ2Vk
KCk7IH0KKyAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUmKSBvdmVycmlkZSB7IHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7IH0KKyAgICB2b2lkIHRyYWNr
U2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgb3ZlcnJpZGUgeyBpbml0
aWFsaXplRnJvbVRyYWNrKCk7IH0KKyAgICB2b2lkIHRyYWNrRW5kZWQoTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUmKSBvdmVycmlkZSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5lY2MzMzAxMDAzZDg5ZjkyN2NiZTc5MzQwMzhmMDY5NzVlNzgwNzNjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxMTEgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2lmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291
cmNlLmgiCisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2lu
dF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50
X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoUmVmPE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHNvdXJjZSkKKyAgICA6IFJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lcigpCit7CisgICAgcmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJFbGVt
ZW50cygpOworCisgICAgbV92aWRlb0NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
InZpZGVvY29udmVydCIsIG51bGxwdHIpOworICAgIG1fZW5jb2RlciA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbWFrZSgid2VicnRjdmlkZW9lbmNvZGVyIiwgbnVsbHB0cik7CisgICAgZ3N0X2Jpbl9h
ZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3ZpZGVvQ29udmVydC5nZXQoKSwg
bV9lbmNvZGVyLmdldCgpLCBudWxscHRyKTsKKworICAgIGF1dG8qIHBhZFRlbXBsYXRlID0gZ3N0
X2VsZW1lbnRfZ2V0X3BhZF90ZW1wbGF0ZShtX2VuY29kZXIuZ2V0KCksICJzcmMiKTsKKyAgICBh
dXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyhwYWRUZW1wbGF0
ZSkpOworICAgIG1fYWxsb3dlZENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkp
OworICAgIGdzdF9jYXBzX2ZvcmVhY2goY2Fwcy5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxHc3RD
YXBzRm9yZWFjaEZ1bmM+KCtbXShHc3RDYXBzRmVhdHVyZXMqLCBHc3RTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byogc291cmNlID0gcmVpbnRl
cnByZXRfY2FzdDxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIqPih1c2VyRGF0
YSk7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0
cnVjdHVyZSk7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nTmFtZSA9IG51bGxwdHI7Cisg
ICAgICAgIGlmIChlcXVhbChuYW1lLCAidmlkZW8veC12cDgiKSkKKyAgICAgICAgICAgIGVuY29k
aW5nTmFtZSA9ICJWUDgiOworICAgICAgICBlbHNlIGlmIChlcXVhbChuYW1lLCAidmlkZW8veC12
cDkiKSkKKyAgICAgICAgICAgIGVuY29kaW5nTmFtZSA9ICJWUDkiOworICAgICAgICBlbHNlIGlm
IChlcXVhbChuYW1lLCAidmlkZW8veC1oMjY0IikpCisgICAgICAgICAgICBlbmNvZGluZ05hbWUg
PSAiSDI2NCI7CisgICAgICAgIGlmIChlbmNvZGluZ05hbWUpCisgICAgICAgICAgICBnc3RfY2Fw
c19hcHBlbmRfc3RydWN0dXJlKHNvdXJjZS0+bV9hbGxvd2VkQ2Fwcy5nZXQoKSwgZ3N0X3N0cnVj
dHVyZV9uZXcoImFwcGxpY2F0aW9uL3gtcnRwIiwgIm1lZGlhIiwgR19UWVBFX1NUUklORywgInZp
ZGVvIiwgImVuY29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBlbmNvZGluZ05hbWUsICJjbG9j
ay1yYXRlIiwgR19UWVBFX0lOVCwgOTAwMDAsIG51bGxwdHIpKTsKKyAgICB9KSwgdGhpcyk7CisK
KyAgICBzZXRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKK30KKworYm9vbCBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKEdSZWZQdHI8R3N0Q2Fwcz4m
IGNhcHMpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX2Jpbi5nZXQoKSwgIk91dGdvaW5nIHZp
ZGVvIHNvdXJjZSBwYXlsb2FkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsK
KyAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMuZ2V0KCks
IDApOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gZW5jb2RlckNhcHM7CisgICAgaWYgKGNvbnN0IGNo
YXIqIGVuY29kaW5nTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJl
bmNvZGluZy1uYW1lIikpIHsKKyAgICAgICAgaWYgKGVxdWFsKGVuY29kaW5nTmFtZSwgIlZQOCIp
KSB7CisgICAgICAgICAgICBlbmNvZGVyQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1w
dHlfc2ltcGxlKCJ2aWRlby94LXZwOCIpKTsKKyAgICAgICAgICAgIG1fcGF5bG9hZGVyID0gbWFr
ZUdTdHJlYW1lckVsZW1lbnQoInJ0cHZwOHBheSIsIG51bGxwdHIpOworICAgICAgICB9IGVsc2Ug
aWYgKGVxdWFsKGVuY29kaW5nTmFtZSwgIlZQOSIpKSB7CisgICAgICAgICAgICBlbmNvZGVyQ2Fw
cyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LXZwOSIpKTsK
KyAgICAgICAgICAgIG1fcGF5bG9hZGVyID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoInJ0cHZwOXBh
eSIsIG51bGxwdHIpOworICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGVuY29kaW5nTmFtZSwgIkgy
NjQiKSkgeworICAgICAgICAgICAgZW5jb2RlckNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3
X2VtcHR5X3NpbXBsZSgidmlkZW8veC1oMjY0IikpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIg
PSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwaDI2NHBheSIsIG51bGxwdHIpOworICAgICAgICAg
ICAgLy8gRklYTUU6IGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0
LXBsdWdpbnMtZ29vZC8tL2lzc3Vlcy84OTMKKyAgICAgICAgICAgIC8vIGdzdF91dGlsX3NldF9v
YmplY3RfYXJnKEdfT0JKRUNUKG1fcGF5bG9hZGVyLmdldCgpKSwgImFnZ3JlZ2F0ZS1tb2RlIiwg
Inplcm8tbGF0ZW5jeSIpOworICAgICAgICAgICAgLy8gZ19vYmplY3Rfc2V0KG1fcGF5bG9hZGVy
LmdldCgpLCAiY29uZmlnLWludGVydmFsIiwgLTEsIG51bGxwdHIpOworICAgICAgICB9IGVsc2Ug
eworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX2Jpbi5nZXQoKSwgIlVuc3VwcG9ydGVk
IG91dGdvaW5nIHZpZGVvIGVuY29kaW5nOiAlcyIsIGVuY29kaW5nTmFtZSk7CisgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHU1RfRVJS
T1JfT0JKRUNUKG1fYmluLmdldCgpLCAiZW5jb2RpbmctbmFtZSBub3QgZm91bmQiKTsKKyAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9wYXlsb2FkZXIpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBSZS1lbmFibGUgdGhpcy4gQ3VycmVudGx5
IHRyaWdnZXJzIGNhcHMgbmVnb3RpYXRpb24gZXJyb3IuCisgICAgZ19vYmplY3Rfc2V0KG1fcGF5
bG9hZGVyLmdldCgpLCAiYXV0by1oZWFkZXItZXh0ZW5zaW9uIiwgRkFMU0UsIG51bGxwdHIpOwor
CisgICAgZ19vYmplY3Rfc2V0KG1fZW5jb2Rlci5nZXQoKSwgImZvcm1hdCIsIGVuY29kZXJDYXBz
LmdldCgpLCBudWxscHRyKTsKKworICAgIGludCBwYXlsb2FkVHlwZTsKKyAgICBpZiAoZ3N0X3N0
cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgInBheWxvYWQiLCAmcGF5bG9hZFR5cGUpKQorICAg
ICAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJwdCIsIHBheWxvYWRUeXBlLCBu
dWxscHRyKTsKKworICAgIGF1dG8gZmlsdGVyZWRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25l
d19mdWxsKGdzdF9zdHJ1Y3R1cmVfY29weShzdHJ1Y3R1cmUpLCBudWxscHRyKSk7CisgICAgZ19v
YmplY3Rfc2V0KG1fY2Fwc0ZpbHRlci5nZXQoKSwgImNhcHMiLCBmaWx0ZXJlZENhcHMuZ2V0KCks
IG51bGxwdHIpOworCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwg
bV9wYXlsb2FkZXIuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX291dGdvaW5n
U291cmNlLmdldCgpLCBtX3ZhbHZlLmdldCgpLCBtX3ZpZGVvQ29udmVydC5nZXQoKSwgbV9wcmVF
bmNvZGVyUXVldWUuZ2V0KCksCisgICAgICAgIG1fZW5jb2Rlci5nZXQoKSwgbV9wYXlsb2FkZXIu
Z2V0KCksIG1fcG9zdEVuY29kZXJRdWV1ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2ZDRjYmU2OTU0MzkwNmI3OTQw
MTNhYzZjODNjOWYxYzZmY2Q5ZjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
R1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1
ZGUgIlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciBm
aW5hbCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVy
PiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHNvdXJjZSkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92
ZShzb3VyY2UpKSk7IH0KKworICAgIHZvaWQgc2V0QXBwbHlSb3RhdGlvbihib29sIHNob3VsZEFw
cGx5Um90YXRpb24pIHsgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gc2hvdWxkQXBwbHlSb3RhdGlv
bjsgfQorCisgICAgYm9vbCBzZXRQYXlsb2FkVHlwZShHUmVmUHRyPEdzdENhcHM+JikgZmluYWw7
CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXIoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKworICAgIGJvb2wgbV9z
aG91bGRBcHBseVJvdGF0aW9uIHsgZmFsc2UgfTsKKworcHJpdmF0ZToKKyAgICBHUmVmUHRyPEdz
dEVsZW1lbnQ+IG1fdmlkZW9Db252ZXJ0OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVy
bmFscy5jcHAKaW5kZXggMjJlYTMzMjM5MGM1YzgyMmFkMzQyNTkwYTRhMWUwYmYwYzUxOWQwOC4u
MDVhNGIzYzUzM2I4ZTUzNzUwMmE0OGE3YWU0YTlkYzljYmY4MjVkOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNTk5LDYgKzU5OSw5IEBAIHZvaWQgSW50ZXJuYWxzOjpy
ZXNldFRvQ29uc2lzdGVudFN0YXRlKFBhZ2UmIHBhZ2UpCiAgICAgcnRjUHJvdmlkZXIuc2V0SDI2
NVN1cHBvcnQodHJ1ZSk7CiAgICAgcnRjUHJvdmlkZXIuc2V0VlA5U3VwcG9ydCh0cnVlLCB0cnVl
KTsKICAgICBydGNQcm92aWRlci5jbGVhckZhY3RvcnkoKTsKKyNlbGlmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorICAgIHBhZ2Uuc2V0dGluZ3MoKS5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZCh0
cnVlKTsKKyAgICBwYWdlLnNldHRpbmdzKCkuc2V0UGVlckNvbm5lY3Rpb25FbmFibGVkKHRydWUp
OwogI2VuZGlmCiAKICAgICBwYWdlLnNldEZ1bGxzY3JlZW5BdXRvSGlkZUR1cmF0aW9uKDBfcyk7
CkBAIC0xNjE1LDYgKzE2MTgsNyBAQCB2b2lkIEludGVybmFsczo6YXBwbHlSb3RhdGlvbkZvck91
dGdvaW5nVmlkZW9Tb3VyY2VzKFJUQ1BlZXJDb25uZWN0aW9uJiBjb25uZWN0aQogewogICAgIGNv
bm5lY3Rpb24uYXBwbHlSb3RhdGlvbkZvck91dGdvaW5nVmlkZW9Tb3VyY2VzKCk7CiB9CisKIHZv
aWQgSW50ZXJuYWxzOjpzZXRXZWJSVENIMjY1U3VwcG9ydChib29sIHZhbHVlKQogewogI2lmIFVT
RShMSUJXRUJSVEMpCkBAIC0xNjIyLDYgKzE2MjYsOCBAQCB2b2lkIEludGVybmFsczo6c2V0V2Vi
UlRDSDI2NVN1cHBvcnQoYm9vbCB2YWx1ZSkKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlk
ZXIoKS5zZXRIMjY1U3VwcG9ydCh2YWx1ZSk7CiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3Zp
ZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2MzIsNiArMTYzOCw5IEBAIHZvaWQgSW50ZXJuYWxzOjpz
ZXRXZWJSVENWUDlTdXBwb3J0KGJvb2wgc3VwcG9ydFZQOVByb2ZpbGUwLCBib29sIHN1cHBvcnRW
UDlQcm9mCiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0VlA5U3VwcG9ydChz
dXBwb3J0VlA5UHJvZmlsZTAsIHN1cHBvcnRWUDlQcm9maWxlMik7CiAgICAgICAgIHBhZ2UtPmxp
YldlYlJUQ1Byb3ZpZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0oc3VwcG9ydFZQOVByb2ZpbGUwKTsKKyAgICBVTlVTRURfUEFSQU0oc3VwcG9ydFZQ
OVByb2ZpbGUyKTsKICNlbmRpZgogfQogCkBAIC0xNjQyLDYgKzE2NTEsOCBAQCB2b2lkIEludGVy
bmFsczo6c2V0V2ViUlRDVlA5VlRCU3VwcG9ydChib29sIHZhbHVlKQogICAgICAgICBwYWdlLT5s
aWJXZWJSVENQcm92aWRlcigpLnNldFZQOVZUQlN1cHBvcnQodmFsdWUpOwogICAgICAgICBwYWdl
LT5saWJXZWJSVENQcm92aWRlcigpLmNsZWFyRmFjdG9yeSgpOwogICAgIH0KKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKHZhbHVlKTsKICNlbmRpZgogfQogCkBAIC0xNjgyLDYgKzE2OTMsOCBAQCB2
b2lkIEludGVybmFsczo6c2V0RW5hYmxlV2ViUlRDRW5jcnlwdGlvbihib29sIHZhbHVlKQogI2lm
IFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGF1dG8qIHBhZ2UgPSBjb250ZXh0RG9jdW1lbnQoKS0+
cGFnZSgpKQogICAgICAgICBwYWdlLT5zZXR0aW5ncygpLnNldFdlYlJUQ0VuY3J5cHRpb25FbmFi
bGVkKHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNlbmRpZgogfQog
CkBAIC0xNjkyLDYgKzE3MDUsOCBAQCB2b2lkIEludGVybmFsczo6c2V0VXNlRFRMUzEwKGJvb2wg
dXNlRFRMUzEwKQogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5wYWdlKCkpCiAgICAg
ICAgIHJldHVybjsKICAgICBkb2N1bWVudC0+cGFnZSgpLT5saWJXZWJSVENQcm92aWRlcigpLnNl
dFVzZURUTFMxMCh1c2VEVExTMTApOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odXNlRFRMUzEw
KTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvRmluZEdTdHJlYW1lci5j
bWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNtYWtlCmluZGV4IDlkOTdhNGI1MGNi
MGY5ODBmNWI4NDA1N2MyYmFlZTg5OTc5OWRmNjYuLjQ4NjI1NTdhOTliMzU5MmUwMDE5ZTc2YjI4
YWU1NTFhY2Q4OTQ1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNt
YWtlCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNtYWtlCkBAIC0yNiw2ICsyNiw5
IEBACiAjICBnc3RyZWFtZXItdmlkZW86ICAgICAgR1NUUkVBTUVSX1ZJREVPX0lOQ0xVREVfRElS
UyBhbmQgR1NUUkVBTUVSX1ZJREVPX0xJQlJBUklFUwogIyAgZ3N0cmVhbWVyLWNvZGVjcGFyc2Vy
OkdTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfSU5DTFVERV9ESVJTIGFuZCBHU1RSRUFNRVJfQ09ERUNQ
QVJTRVJTX0xJQlJBUklFUwogIyAgZ3N0cmVhbWVyLWZ1bGw6ICAgICAgIEdTVFJFQU1FUl9GVUxM
X0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX0ZVTExfTElCUkFSSUVTCisjICBnc3RyZWFtZXIt
cnRwOiAgICAgICAgR1NUUkVBTUVSX1JUUF9JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9SVFBf
TElCUkFSSUVTCisjICBnc3RyZWFtZXItc2RwOiAgICAgICAgR1NUUkVBTUVSX1NEUF9JTkNMVURF
X0RJUlMgYW5kIEdTVFJFQU1FUl9TRFBfTElCUkFSSUVTCisjICBnc3RyZWFtZXItd2VicnRjOiAg
ICAgR1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9XRUJSVENfTElC
UkFSSUVTCiAjCiAjIENvcHlyaWdodCAoQykgMjAxMiBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgPHJh
a3Vjb0B3ZWJraXQub3JnPgogIwpAQCAtMTA2LDYgKzEwOSw5IEBAIEZJTkRfR1NUUkVBTUVSX0NP
TVBPTkVOVChHU1RSRUFNRVJfUEJVVElMUyBnc3RyZWFtZXItcGJ1dGlscy0xLjAgZ3N0cGJ1dGls
cy0xLjApCiBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX1RBRyBnc3RyZWFtZXIt
dGFnLTEuMCBnc3R0YWctMS4wKQogRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9W
SURFTyBnc3RyZWFtZXItdmlkZW8tMS4wIGdzdHZpZGVvLTEuMCkKIEZJTkRfR1NUUkVBTUVSX0NP
TVBPTkVOVChHU1RSRUFNRVJfQ09ERUNQQVJTRVJTIGdzdHJlYW1lci1jb2RlY3BhcnNlcnMtMS4w
IGdzdGNvZGVjcGFyc2Vycy0xLjApCitGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVS
X1JUUCBnc3RyZWFtZXItcnRwLTEuMCBnc3RydHAtMS4wKQorRklORF9HU1RSRUFNRVJfQ09NUE9O
RU5UKEdTVFJFQU1FUl9TRFAgZ3N0cmVhbWVyLXNkcC0xLjAgZ3N0c2RwLTEuMCkKK0ZJTkRfR1NU
UkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfV0VCUlRDIGdzdHJlYW1lci13ZWJydGMtMS4wIGdz
dHdlYnJ0Yy0xLjApCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tCiAjIDMuIFByb2Nlc3MgdGhlIENPTVBPTkVOVFMgcGFzc2VkIHRvIEZJTkRfUEFD
S0FHRQpAQCAtMTQ4LDQgKzE1NCw2IEBAIG1hcmtfYXNfYWR2YW5jZWQoCiAgICAgR1NUUkVBTUVS
X0NPREVDUEFSU0VSU19MSUJSQVJJRVMKICAgICBHU1RSRUFNRVJfRlVMTF9JTkNMVURFX0RJUlMK
ICAgICBHU1RSRUFNRVJfRlVMTF9MSUJSQVJJRVMKKyAgICBHU1RSRUFNRVJfV0VCUlRDX0lOQ0xV
REVfRElSUworICAgIEdTVFJFQU1FUl9XRUJSVENfTElCUkFSSUVTCiApCmRpZmYgLS1naXQgYS9T
b3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlIGIvU291cmNlL2NtYWtlL0dTdHJlYW1l
ckNoZWNrcy5jbWFrZQppbmRleCA3N2U5NTg0NWU5OTEzYTU5NzhkYWQxMGNmYzQzMDA5M2I0M2M3
YWEzLi5jOGQwZmFmYjIzZmIxOGZjNTliOTFlMGNlMDRjMTRlZTQ1OWIyNDc2IDEwMDY0NAotLS0g
YS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9H
U3RyZWFtZXJDaGVja3MuY21ha2UKQEAgLTI4LDYgKzI4LDEwIEBAIGlmIChFTkFCTEVfVklERU8g
T1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgICAgICAgbGlzdChBUFBFTkQgR1NUUkVBTUVS
X0NPTVBPTkVOVFMgYXVkaW8gZmZ0KQogICAgICAgICAgIGVuZGlmICgpCiAKKyAgICAgICAgICBp
ZiAoVVNFX0dTVFJFQU1FUl9XRUJfUlRDKQorICAgICAgICAgICAgICBsaXN0KEFQUEVORCBHU1RS
RUFNRVJfQ09NUE9ORU5UUyB3ZWJydGMpCisgICAgICAgICAgZW5kaWYgKCkKKwogICAgICAgICAg
IGZpbmRfcGFja2FnZShHU3RyZWFtZXIgMS4xNC4wIFJFUVVJUkVEIENPTVBPTkVOVFMgJHtHU1RS
RUFNRVJfQ09NUE9ORU5UU30pCiAKICAgICAgICAgICBpZiAoRU5BQkxFX1dFQl9BVURJTykKQEAg
LTQ5LDExICs1MywyMSBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAg
ICAgICAgICAgaWYgKFVTRV9HU1RSRUFNRVJfR0wgQU5EIE5PVCBQQ19HU1RSRUFNRVJfR0xfRk9V
TkQpCiAgICAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkdTdHJlYW1lckdMIGlzIG5l
ZWRlZCBmb3IgVVNFX0dTVFJFQU1FUl9HTC4iKQogICAgICAgICAgIGVuZGlmICgpCisKKyAgICAg
ICAgICBpZiAoVVNFX0dTVFJFQU1FUl9XRUJSVEMgQU5EIChQQ19HU1RSRUFNRVJfVkVSU0lPTiBW
RVJTSU9OX0xFU1MgIjEuMjAiIE9SIE5PVCBQQ19HU1RSRUFNRVJfV0VCUlRDX0ZPVU5EKSkKKyAg
ICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiR1N0cmVhbWVyV2ViUlRDID49IDEuMjAg
aXMgbmVlZGVkIGZvciBVU0VfR1NUUkVBTUVSX1dFQlJUQy4iKQorICAgICAgICAgIGVuZGlmICgp
CiAgICAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAogaWYgKEVOQUJMRV9NRURJQV9TVFJFQU0gQU5E
IEVOQUJMRV9XRUJfUlRDKQotICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJS
VEMgVFJVRSkKKyAgICBpZiAoVVNFX0dTVFJFQU1FUl9XRUJSVEMpCisgICAgICAgIFNFVF9BTkRf
RVhQT1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJSVEMgRkFMU0UpCisKKyAgICAgICAgZmluZF9wYWNr
YWdlKE9wZW5TU0wgUkVRVUlSRUQpCisgICAgZWxzZSAoKQorICAgICAgICBTRVRfQU5EX0VYUE9T
RV9UT19CVUlMRChVU0VfTElCV0VCUlRDIFRSVUUpCisgICAgZW5kaWYgKCkKIGVsc2UgKCkKICAg
ICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIEZBTFNFKQogZW5kaWYgKCkK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZSBiL1Nv
dXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQppbmRleCAxZjFhMjEzYzIxMDEw
ZDMyYWNjMTdmYjkxY2I1MjBjMWJkMjM4ZWFiLi4yZjMwMGEwNzA2NDg5MWY2NzZlY2FjNWQyZWFm
ZDdjYzg1Njg5MjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5pdGlv
bnMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlCkBA
IC0xMCwzICsxMCw0IEBAIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJfRlVMTCAi
V2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3Igc3RhdGljIEdTCiBXRUJLSVRfT1BUSU9OX0RF
RklORShVU0VfR1NUUkVBTUVSX05BVElWRV9WSURFTyAiVG9nZ2xlIG5hdGl2ZSB2aWRlbyBzdXBw
b3J0IGluIEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIiIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElP
Tl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9OQVRJVkVfQVVESU8gIlRvZ2dsZSBuYXRpdmUgYXVkaW8g
c3VwcG9ydCBpbiBHU3RyZWFtZXIgbWVkaWEgcGxheWVyIiBQUklWQVRFIE9GRikKIFdFQktJVF9P
UFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJfVEVYVF9TSU5LICJUb2dnbGUgdGV4dCBzaW5rIHN1
cHBvcnQgaW4gR1N0cmVhbWVyIG1lZGlhIHBsYXllciIgUFJJVkFURSBPTikKK1dFQktJVF9PUFRJ
T05fREVGSU5FKFVTRV9HU1RSRUFNRVJfV0VCUlRDICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0
IGZvciBXZWJSVEMiIFBSSVZBVEUgT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvR1N0cmVh
bWVyRGVwZW5kZW5jaWVzLmNtYWtlIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVuZGVuY2ll
cy5jbWFrZQppbmRleCBmNDJjN2U3MDY5NzdiZjE2YzlmMjliZjNkZTMwOGM1ZTk2ODAyOTk2Li4w
OWI2YzI1ZThkNTkyZDU4ODRlODk0NmJhNmFmNThkMmZkYjE2MTlkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9H
U3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2UKQEAgLTEsMyArMSw0IEBACiBXRUJLSVRfT1BUSU9O
X0RFUEVORChVU0VfR1NUUkVBTUVSX0dMIEVOQUJMRV9WSURFTykKIFdFQktJVF9PUFRJT05fREVQ
RU5EKFVTRV9HU1RSRUFNRVJfTVBFR1RTIEVOQUJMRV9WSURFTykKIFdFQktJVF9PUFRJT05fREVQ
RU5EKFVTRV9XUEVfVklERU9fUExBTkVfRElTUExBWV9ETUFCVUYgVVNFX0dTVFJFQU1FUl9HTCkK
K1dFQktJVF9PUFRJT05fREVQRU5EKFVTRV9HU1RSRUFNRVJfV0VCUlRDIEVOQUJMRV9XRUJfUlRD
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDg3
YjBkNTc4ZDlhZGFiNWRmODYyNWMwNGQxN2E0ZDZjYjU2NWM1ZTEuLjc2M2ZlZmI3NzdlNGVjNjVj
MTI4OWRmNjBhMGUxMzBmZDJjMTFhNTEgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUg
Tm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5p
dGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZsYXRwYWsvZmxhdHBha3V0aWxzLnB5Ogor
ICAgICAgICAoV2Via2l0RmxhdHBhay5ydW5faW5fc2FuZGJveCk6IEFsbG93IGxpYm5pY2UgZGVi
dWcgbG9nIGVudmlyb25tZW50IHZhcmlhYmxlIGluIHJ1bnRpbWUgc2FuZGJveC4KKwogMjAyMi0w
Mi0wNyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+CiAKICAgICAgICAgW0VX
U10gVHJpZ2dlciBNYWMgYnVpbGRlcnMgb24gcHVsbC1yZXF1ZXN0cwpkaWZmIC0tZ2l0IGEvVG9v
bHMvZmxhdHBhay9mbGF0cGFrdXRpbHMucHkgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5w
eQppbmRleCAwNzU2YjA5ZWNlNWVmYmIxY2E3YjU5YTMyYTZiODc3NGNjYTczYTRkLi5hYjU3YjUz
OTQzYmQ4ZTViNmIzMGE5YjU2MDM1NDIwNTE0NzU4ODVkIDEwMDY0NAotLS0gYS9Ub29scy9mbGF0
cGFrL2ZsYXRwYWt1dGlscy5weQorKysgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQpA
QCAtODM4LDYgKzgzOCw3IEBAIGNsYXNzIFdlYmtpdEZsYXRwYWs6CiAgICAgICAgICAgICAiTUVT
QSIsCiAgICAgICAgICAgICAiTElCR0wiLAogICAgICAgICAgICAgIlBJUEVXSVJFIiwKKyAgICAg
ICAgICAgICJOSUNFIiwKICAgICAgICAgICAgICJSVVNUIiwKICAgICAgICAgICAgICJTQ0NBQ0hF
IiwKICAgICAgICAgICAgICJTUEEiLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9n
IGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDY1NzA3ZGExNmI2ZWZjOTU5YWQyODVmNzNm
YjM1YjQwZjBkMDNjZDcuLmY0OWMxNzYxM2JhMDNiMDE2ZDlmYTcxMWFiMDU4YzUzNDI5YzBjZGEg
MTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBu
b3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQg
b2YgdGhlIEdzdFdlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9P
UFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczogRmxhZyBt
b3N0IFdlYlJUQyBhcyBmYWlsaW5nLiBEdXJpbmcgdGhpcyBmaXJzdCBkZXZlbG9wbWVudAorICAg
ICAgICBjeWNsZSBJIGZvY3VzZWQgbW9zdGx5IG9uIGZpeGluZyBjcmFzaGVzIGFuZCBvbmx5IGZp
eGVkIGEgZmV3IGZhaWx1cmVzLiBUaGUgcmVtYWluaW5nIG9uZXMKKyAgICAgICAgd2lsbCBiZSBh
ZHJlc3NlZCBpbiBmb2xsb3ctdXAgcGF0Y2hlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2Zh
c3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFi
bGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAyMi0wMi0xOCAgQW50b2luZSBRdWludCAgPGdy
YW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbZnJhbWUtcmF0ZV0gW2N1c3RvbS1lZmZlY3Rd
IGFsbG93IHNldHRpbmcgZnJhbWVSYXRlIGFzIGFuIG9wdGlvbiBwYXNzZWQgdG8gZG9jdW1lbnQu
dGltZWxpbmUuYW5pbWF0ZSgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGli
L1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3Rh
dGlvbnMKaW5kZXggMmFmZmZkYjM4YTRiMWQ3ODc4ZTIxOGFlOTU2MjFkNmY4MmY1ZTNmYy4uYzJm
ODMyMmU1Njk4YzcxMDVhN2MzNGUzYmVmNGMxNzk0MGFhODJhMCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtODU3LDcgKzg1Nyw3IEBAIHdlYmtpdC5v
cmcvYi8yMzE4MTEgbWVkaWEvdmlkZW8tY29uY3VycmVudC1wbGF5YmFjay5odG1sIFsgRmFpbHVy
ZSBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLWludGVycnVwdGlvbi13aXRoLXJl
c3VtZS1ub3QtYWxsb3dpbmctcGxheS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMx
ODExIG1lZGlhL3ZpZGVvLW11bHRpcGxlLWNvbmN1cnJlbnQtcGxheWJhY2suaHRtbCBbIEZhaWx1
cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS93ZWJhdWRpby1iYWNrZ3JvdW5kLXBsYXli
YWNrLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMzE4MTEgd2VicnRjL2NvbmN1cnJl
bnRWaWRlb1BsYXliYWNrMi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxODExIHdl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2NvbmN1cnJlbnRWaWRlb1BsYXliYWNrMi5odG1sIFsg
RmFpbHVyZSBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvbWVkaWEtc2Vzc2lv
bi9jYWxsQWN0aW9uSGFuZGxlci5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMxODEx
IG1lZGlhL21lZGlhLXNlc3Npb24vcGxheS1hZnRlci1zZWVrLmh0bWwgWyBUaW1lb3V0IF0KIHdl
YmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvcmVtb3RlLWNvbnRyb2wtY29tbWFuZC1pcy11c2VyLWdl
c3R1cmUuaHRtbCBbIFRpbWVvdXQgXQpAQCAtODcwLDEwICs4NzAsMTAgQEAgd2Via2l0Lm9yZy9i
LzIzMTgxMSBtZWRpYS92aWRlby1zeXN0ZW0tc2xlZXAuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0
Lm9yZy9iLzIzMTgxMSB3ZWJhdWRpby9hdWRpb2NvbnRleHQtc3RhdGUtaW50ZXJydXB0ZWQuaHRt
bCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSB3ZWJhdWRpby9zdXNwZW5kLWNvbnRl
eHQtd2hpbGUtaW50ZXJydXB0ZWQuaHRtbCBbIFRpbWVvdXQgXQogCisjIHJ2ZmMgcmVsYXRlZCBm
YWlsdXJlcwogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1ydmZjIFsgUGFz
cyBdCiBmYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS1ydmZjLmh0bWwgWyBQYXNzIEZhaWx1
cmUgXQogd2VicnRjL3BlZXJDb25uZWN0aW9uLXJ2ZmMuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRj
L2NhbnZhcy10by1wZWVyLWNvbm5lY3Rpb24uaHRtbCBbIEZhaWx1cmUgXQogaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1ydmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJh
Y2std2VicnRjLmh0dHBzLmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvdmlkZW8tcnZmYy9yZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWJlZm9yZS14ci1z
ZXNzaW9uLmh0dHBzLmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvdmlkZW8tcnZmYy9yZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWR1cmluZy14ci1zZXNz
aW9uLmh0dHBzLmh0bWwgWyBTa2lwIF0KQEAgLTg5MSw2ICs4OTEsOTUgQEAgd2Via2l0Lm9yZy9i
LzIzNDA4NCBtZWRpYS90cmFjay9hdWRpby10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWls
dXJlIF0KICMgYml0cmF0ZSBlc3RpbWF0aW9uLgogd2Via2l0Lm9yZy9iLzIzNDA4NCBtZWRpYS90
cmFjay92aWRlby10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIAorIyBEYXRh
Q2hhbm5lbCBHc3RXZWJSVEMgaW1wbGVtZW50YXRpb24gaW5jb21wbGV0ZQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvZGF0YWNoYW5uZWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
aHR0cC93cHQvd2VicnRjL3RyYW5zZmVyLWRhdGFjaGFubmVsLXNlcnZpY2Utd29ya2VyLmh0dHBz
Lmh0bWwgWyBTa2lwIF0KKworIyBUaGUgR3N0V2ViUlRDIGJhY2tlbmQgZG9lc24ndCBzdXBwb3J0
IHRyYW5zZm9ybXMgeWV0Lgord2Via2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93ZWJydGMvYXVk
aW92aWRlby1zY3JpcHQtdHJhbnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgaHR0cC93cHQvd2VicnRjL3ZpZGVvLXNjcmlwdC10cmFuc2Zvcm0ta2V5ZnJhbWUtb25seS5o
dG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy92aWRlby1z
Y3JpcHQtdHJhbnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2NyaXB0
LWF1ZGlvLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3Jt
L3NjcmlwdC1jaGFuZ2UtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10
cmFuc2Zvcm0vc2NyaXB0LW1ldGFkYXRhLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRj
LWVuY29kZWQtdHJhbnNmb3JtL3NjcmlwdC10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0
Yy1lbmNvZGVkLXRyYW5zZm9ybS9zY3JpcHQtd3JpdGUtdHdpY2UtdHJhbnNmb3JtLmh0dHBzLmh0
bWwgWyBTa2lwIF0KKword2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLWFkZEljZUNhbmRpZGF0ZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tYWRkVHJhY2stcmV1
c2Utc2VuZGVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLWxvY2FsLW9mZmVyLmh0bWwgWyBDcmFzaCBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
aGF2ZS1sb2NhbC1wcmFuc3dlci5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBm
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhhdmUtcmVtb3RlLW9mZmVyLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1oYXZlLXJlbW90ZS1wcmFuc3dlci5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWljZWNhbmRpZGF0
ZS1ldmVudC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1hbnN3ZXIuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWlu
c3BlY3Qtb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLWNhbGxiYWNrcy1zaW5nbGUt
ZGlhbG9nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9nLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi1tZWRpYS1zZXR1cC10d28tZGlhbG9ncy5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXBhZ2UtY2FjaGUu
aHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1yZW1vdGVseS1hc3NpZ25lZC10cmFuc2NlaXZlci1taWQuaHRtbCBbIFRp
bWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLXNldExvY2FsRGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRzU2Vs
ZWN0b3IuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3Ry
ZWFtL2NoYW5nZS10cmFja3MtbWVkaWEtc3RyZWFtLWJlaW5nLXBsYXllZC5odG1sIFsgVGltZW91
dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy90aGlyZC1wYXJ0eS1mcmFt
ZS1pY2UtY2FuZGlkYXRlLWZpbHRlcmluZy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWV4dGVuc2lvbnMv
UlRDUnRwUGFyYW1ldGVycy1tYXhGcmFtZXJhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1leHRlbnNp
b25zL1JUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZS1jYXB0dXJlVGltZXN0YW1wLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy93ZWJydGMtcHJpb3JpdHkvUlRDUnRwUGFyYW1ldGVycy1lbmNvZGluZ3MuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbnNwZWN0b3IvcGFnZS9vdmVycmlkZVNldHRp
bmctSUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtY2FwYWJp
bGl0aWVzL2RlY29kaW5nSW5mby53ZWJydGMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLWNhcGFiaWxpdGll
cy9lbmNvZGluZ0luZm8ud2VicnRjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL2FkZFRyYW5zY2VpdmVyLXRoZW4tYWRkVHJhY2suaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tbXV0ZWQtc3RhdHMuaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0aW9uLWc3
MjIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVl
ci1jb25uZWN0aW9uLXdlYmF1ZGlvLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL2F1ZGlvLXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tc2FtcGxlcmF0ZS1jaGFuZ2UuaHRtbCBbIENyYXNoIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2F1ZGlvLXZpZGVvLWVsZW1lbnQtcGxheWluZy5o
dG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jYW5kaWRhdGUtc3Rh
dHMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FudmFzLXRv
LXBlZXItY29ubmVjdGlvbi5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IHdlYnJ0Yy9jbG9uZS1hdWRpby10cmFjay5odG1sIFsgVGltZW91dCBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IHdlYnJ0Yy9jbG9zaW5nLXBlZXJjb25uZWN0aW9uLmh0bWwgWyBUaW1lb3V0
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2RpcmVjdGlvbi1jaGFuZ2UuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGlzYWJsZS1lbmNyeXB0aW9uLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2VwaGVtZXJhbC1jZXJ0
aWZpY2F0ZXMtYW5kLWNuYW1lcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1hZnRlci1yZWxvYWQuaHRtbCBbIFRpbWVv
dXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvaDI2NC1wYWNrZXRpemF0aW9uLW1vZGUu
aHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvbGlid2VicnRjL3Nl
dExvY2FsRGVzY3JpcHRpb25DcmFzaC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy9tdWx0aS12aWRlby5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy9uby1wb3J0LXplcm8taW4tdXBkLWNhbmRpZGF0ZXMuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLWF1ZGlvLW11dGUu
aHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0
aW9uLWF1ZGlvLW11dGUyLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2Vi
cnRjL3BlZXItY29ubmVjdGlvbi1hdWRpby11bm11dGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLWNyZWF0ZU1lZGlhU3RyZWFtRGVz
dGluYXRpb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVl
ci1jb25uZWN0aW9uLXJlbW90ZS1hdWRpby1tdXRlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0ZTIuaHRt
bCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9u
LXRyYWNrLWVuZC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9w
ZWVyY29ubmVjdGlvbi1wYWdlLWNhY2hlLWxvbmcuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvcGVlcmNvbm5lY3Rpb24tcGFnZS1jYWNoZS5odG1sIFsgVGltZW91
dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZWNlaXZlci10cmFjay1zaG91bGQtc3Rh
eS1saXZlLWV2ZW4taWYtcmVjZWl2ZXItaXMtaW5hY3RpdmUuaHRtbCBbIFRpbWVvdXQgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcmVsZWFzZS1hZnRlci1nZXR0aW5nLXRyYWNrLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3JlbW90ZUF1ZGlvLW5ldmVy
LXBsYXllZC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZW1v
dmUtdHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdXRm
OC1zZHAuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8t
YWRkVHJhbnNjZWl2ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJy
dGMvdmlkZW8tYXV0b3BsYXkuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvdmlkZW8tZ2V0UGFyYW1ldGVycy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IHdlYnJ0Yy92aWRlby1tZWRpYXN0cmVhbXRyYWNrLXN0YXRzLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW11dGUtdnA4Lmh0bWwgWyBUaW1l
b3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW11dGUuaHRtbCBbIFRpbWVv
dXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVjZWl2ZXJzLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlcGxhY2UtdHJhY2st
dG8tbnVsbC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRl
by1yZXBsYWNlLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2Vi
cnRjL3ZpZGVvLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2Vi
cnRjL3ZpZGVvLXVubXV0ZS5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJy
dGMvdmlkZW8tdnA4LXZpZGVvcmFuZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvdmlkZW8uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvdnA4LXRoZW4taDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy92cDktc3ZjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2Vi
cnRjL3ZwOS5odG1sIFsgRmFpbHVyZSBdCisKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vCiAjIEVuZCBvZiBHU3RyZWFtZXItcmVsYXRlZCBidWdzCiAjLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLwpAQCAtMTQxNiwxNCArMTUwNSwxNCBAQCB3ZWJraXQub3JnL2IvNzkyMDMg
d2Via2l0Lm9yZy9iLzE4NjY3OCBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVs
ZW1lbgogCiBmYXN0L21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy1hZGRFdmVudExpc3RlbmVyLmh0
bWwgWyBEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgXQogCi13ZWJraXQub3JnL2IvMTkxMDA2IHdl
YnJ0Yy9zaW11bGNhc3QtaDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTkxMDA2
IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3NpbXVsY2FzdC1oMjY0Lmh0bWwgWyBGYWlsdXJl
IFRpbWVvdXQgXQogCiB3ZWJraXQub3JnL2IvMTkzNjQxIHdlYnJ0Yy92aWRlby1zZXREaXJlY3Rp
b24uaHRtbCBbIEZhaWx1cmUgUGFzcyBdCiAKIHdlYmtpdC5vcmcvYi8xOTQ2MTEgaHR0cC93cHQv
d2VicnRjL2dldFVzZXJNZWRpYS1wcm9jZXNzU3dhcHBpbmcuaHRtbCBbIEZhaWx1cmUgXQogCiB3
ZWJraXQub3JnL2IvMjAxMjY3IFsgUmVsZWFzZSBdIHdlYnJ0Yy92aWRlby1oMjY0Lmh0bWwgWyBU
aW1lb3V0IEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIyMjU4NSBbIERlYnVnIF0gd2VicnRjL3Zp
ZGVvLWgyNjQuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMjI1ODUgd2Via2l0Lm9yZy9i
LzIzNTg4NSBbIERlYnVnIF0gd2VicnRjL3ZpZGVvLWgyNjQuaHRtbCBbIENyYXNoIEZhaWx1cmUg
XQogCiB3ZWJraXQub3JnL2IvMjEwMjcyIHdlYnJ0Yy9kYXRhY2hhbm5lbC9tdWx0aXBsZS1jb25u
ZWN0aW9ucy5odG1sIFsgVGltZW91dCBQYXNzIF0KIApAQCAtMTQzNCw3ICsxNTIzLDcgQEAgd2Vi
a2l0Lm9yZy9iLzIxNTAwNyBbIERlYnVnIF0gd2VicnRjL2gyNjQtaGlnaC5odG1sIFsgU2xvdyBG
YWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIxNjUzOCB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJy
dGMtc29mdHdhcmUtaDI2NC1iYXNlbGluZS5odG1sIFsgU2xvdyBGYWlsdXJlIF0KIAotd2Via2l0
Lm9yZy9iLzIxNjc2MyB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMtc29mdHdhcmUtaDI2NC1o
aWdoLmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMTY3NjMgd2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMtc29mdHdhcmUtaDI2NC1oaWdo
Lmh0bWwgWyBDcmFzaCBGYWlsdXJlIFRpbWVvdXQgXQogCiB3ZWJraXQub3JnL2IvMjE4MjIxIHdl
YnJ0Yy92cDktcHJvZmlsZTIuaHRtbCBbIFRpbWVvdXQgRmFpbHVyZSBdCiAKQEAgLTIyMjUsMTMg
KzIzMTQsMTMgQEAgd2Via2l0Lm9yZy9iLzE4NjEwMCBjc3MzL2NvbG9yLWZpbHRlcnMvY29sb3It
ZmlsdGVyLWNvbG9yLXByb3BlcnR5LWxpc3QtaXRlbS5odG0KIHdlYmtpdC5vcmcvYi8xODYxMDAg
ZmFzdC9oaWRwaS9maWx0ZXJzLXR1cmJ1bGVuY2UuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQog
d2Via2l0Lm9yZy9iLzE4NzA0NCB3ZWJhbmltYXRpb25zL29wYWNpdHktYW5pbWF0aW9uLXlpZWxk
cy1jb21wb3NpdGluZy1zcGFuLmh0bWwgWyBGYWlsdXJlIF0KIAotd2Via2l0Lm9yZy9iLzE4NzA2
NCB3ZWJydGMvZGF0YWNoYW5uZWwvbWRucy1pY2UtY2FuZGlkYXRlcy5odG1sIFsgVGltZW91dCBd
Cit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2RhdGFjaGFu
bmVsL21kbnMtaWNlLWNhbmRpZGF0ZXMuaHRtbCBbIFRpbWVvdXQgRmFpbHVyZSBdCiB3ZWJraXQu
b3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1hZGRUcmFjay5odG1sIFsgRmFpbHVyZSBdCi13ZWJr
aXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1kaXNhYmxlZC1ibGFjay5odG1sIFsgQ3Jhc2gg
XQotd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcmVtb3RlLW11dGUuaHRtbCBbIENy
YXNoIF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJlcGxhY2UtbXV0ZWQtdHJh
Y2suaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy92aWRlby1yZXBsYWNlLW11dGVkLXRyYWNrLmh0bWwgWyBUaW1lb3V0IEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRl
by1kaXNhYmxlZC1ibGFjay5odG1sIFsgQ3Jhc2ggVGltZW91dCBdCit3ZWJraXQub3JnL2IvMTg3
MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlbW90ZS1tdXRlLmh0bWwgWyBD
cmFzaCBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJvdGF0aW9u
Lmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJvdGF0
aW9uLW5vLWN2by5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJvdGF0aW9uLW5vLWN2by5odG1sIFsgRmFpbHVyZSBD
cmFzaCBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby13aXRoLWRhdGEtY2hhbm5l
bC5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWdldFN0YXRzLmh0dHBzLmh0
bWwgWyBGYWlsdXJlIFBhc3MgXQogCkBAIC0yNTI2LDcgKzI2MTUsNyBAQCBtZWRpYS92aWRlby1y
ZW1vdGUtY29udHJvbC1wbGF5cGF1c2UuaHRtbCBbIFNraXAgXQogCiB3ZWJraXQub3JnL2IvMjA3
MDYyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291
cmNlLXJlcGxheS5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAotd2Via2l0Lm9yZy9iLzIyOTM0NiB3
ZWJydGMvbXVsdGktYXVkaW8uaHRtbCBbIFRpbWVvdXQgUGFzcyBdCit3ZWJraXQub3JnL2IvMjI5
MzQ2IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL211bHRpLWF1ZGlvLmh0bWwgWyBUaW1lb3V0
IFBhc3MgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMjk3MTUgWyBEZWJ1ZyBdIGZhc3QvbWVk
aWFzdHJlYW0vZ2V0RGlzcGxheU1lZGlhLW1heC1jb25zdHJhaW50czMuaHRtbCBbIFRpbWVvdXQg
XQogd2Via2l0Lm9yZy9iLzIyOTcxNSBbIERlYnVnIF0gZmFzdC9tZWRpYXN0cmVhbS9zY3JlZW5j
YXB0dXJlLXVzZXItZ2VzdHVyZS5odG1sIFsgVGltZW91dCBdCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9j
YWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zh
c3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYzk1YTliNjE5MDA5YTc0MzJhMTI5MzZhN2M2YTgxODkwODRkMmM3
ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDE5IEBACitUZXN0cyBSVENQZWVyQ29ubmVjdGlvbiBsb2NhbERlc2NyaXB0aW9u
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBwYy5zZXRMb2NhbERlc2Ny
aXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgcmVxdWVz
dEZhaWxlZDEpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdFN1Y2NlZWRl
ZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlw
dGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgcmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90IHRo
cm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdEZhaWxlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5s
b2NhbERlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9u
LnNkcCBzaG91bGQgYmUgbG9jYWwuIFdhcyB0PTAgMAorLgorUEFTUyBwYy5sb2NhbERlc2NyaXB0
aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNkcCBzaG91bGQg
YmUgbG9jYWwuIFdhcyB0PTAgMAorLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIv
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVEZXNjcmlwdGlvbi1leHBl
Y3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24tcmVtb3RlRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjlkNTNlYzVjMjE2MGQwMzI3M2MxOTgxZjhlZDlmYTE4Mzg0ZmQwNzUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tcmVtb3RlRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTkgQEAK
K1Rlc3RzIFJUQ1BlZXJDb25uZWN0aW9uIHJlbW90ZURlc2NyaXB0aW9uLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9u
RGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDEsIHJlcXVlc3RGYWlsZWQxKTsgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHJlcXVlc3RTdWNjZWVkZWQgd2FzIGNhbGxlZC4K
K1BBU1MgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKHJl
cXVlc3RTdWNjZWVkZWQyLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9u
LgorUEFTUyByZXF1ZXN0RmFpbGVkIHdhcyBjYWxsZWQuCitQQVNTIHBjLnJlbW90ZURlc2NyaXB0
aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbi5zZHAgc2hvdWxk
IGJlIHJlbW90ZS4gV2FzIHQ9MCAwCisuCitQQVNTIHBjLnJlbW90ZURlc2NyaXB0aW9uLnR5cGUg
aXMgIm9mZmVyIgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIHJlbW90
ZS4gV2FzIHQ9MCAwCisuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmNjNDE4MTBiOGRlMTkxZGRlZTU5YTBlYzU5YzM1MTk5MWJlN2ZiYgotLS0g
L2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50
eHQKQEAgLTAsMCArMSwzOSBAQAorVGVzdCBSVENQZWVyQ29ubmVjdGlvbi5zZXRSZW1vdGVEZXNj
cmlwdGlvbiBjYWxsZWQgd2l0aCBhbiBSVENTZXNzaW9uRGVzY3JpcHRpb24gb2YgdHlwZSAnb2Zm
ZXInCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2Fn
ZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisqKiogQ3JlYXRlIChyZW1vdGUp
IG9mZmVyIHdpdGggYXVkaW8gKHJlbW90ZU9mZmVyMSkKKyoqKiBEb25lLCBzdGFydCB0ZXN0aW5n
IHdpdGggcmVtb3RlT2ZmZXIxCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICdzdGFibGUnCitQ
QVNTIHBjLnJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGMucGVuZGluZ1JlbW90ZURl
c2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGMuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIGlzIG51
bGwKKworUEFTUyByZW1vdGVPZmZlcjEgc2V0IGFzIHJlbW90ZSBkZXNjcmlwdGlvbgorUEFTUyBw
Yy5zaWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1vdGUtb2ZmZXInCitGQUlMIHBjLnJlbW90ZURl
c2NyaXB0aW9uIHNob3VsZCBiZSBbb2JqZWN0IE9iamVjdF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Np
b25EZXNjcmlwdGlvbl0uCitGQUlMIHBjLnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQg
YmUgW29iamVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgor
UEFTUyBwYy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorCitQQVNTIHJlbW90ZU9m
ZmVyMSBzZXQgYXMgcmVtb3RlIGRlc2NyaXB0aW9uIChhZ2FpbikKK1BBU1MgcGMuc2lnbmFsaW5n
U3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9mZmVyJworCisqKiogVHJ5IHNldHRpbmcgbG9jYWwgZGVz
Y3JpcHRpb25zIHdpdGggYmFkIHR5cGVzIGZvciB0aGUgY3VycmVudCBzdGF0ZQorUEFTUyBwcm9t
aXNlIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHt0eXBlOidhbnN3ZXInLCBzZHA6cmVtb3RlT2Zm
ZXIxLnNkcH0pOyByZWplY3RlZCB3aXRoIE9wZXJhdGlvbkVycm9yOiBVbmFibGUgdG8gYXBwbHkg
c2Vzc2lvbiByZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcHJvbWlzZSBwYy5zZXRSZW1vdGVEZXNj
cmlwdGlvbih7dHlwZToncHJhbnN3ZXInLCBzZHA6cmVtb3RlT2ZmZXIxLnNkcH0pOyByZWplY3Rl
ZCB3aXRoIE9wZXJhdGlvbkVycm9yOiBVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiByZW1vdGUgZGVz
Y3JpcHRpb24KKworKioqIENyZWF0ZSAocmVtb3RlKSBvZmZlciB3aXRoIHZpZGVvIChyZW1vdGVP
ZmZlcjIpCisqKiogRG9uZSwgc3RhcnQgdGVzdGluZyB3aXRoIHJlbW90ZU9mZmVyMgorUEFTUyBw
Yy5zaWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1vdGUtb2ZmZXInCisKK1BBU1MgcmVtb3RlT2Zm
ZXIyIHNldCBhcyByZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMg
J2hhdmUtcmVtb3RlLW9mZmVyJworRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUg
W29iamVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgorRkFJ
TCBwYy5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4g
V2FzIFtvYmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uXS4KK1BBU1MgcGMuY3VycmVudFJlbW90
ZURlc2NyaXB0aW9uIGlzIG51bGwKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIv
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLXN0YWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAxNjZkY2E1NjNlY2U0N2Y0OGMw
NzIyY2MwODdhM2UyZjk2NmM0ZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsNTEgQEAKK1Rlc3RzIFJUQ1BlZXJDb25uZWN0aW9uIGluIHN0YWJs
ZSBzdGF0ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcGMuc2lnbmFs
aW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9u
RGVzY3JpcHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQxKTsgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldExvY2FsRGVzY3JpcHRpb24gZmFpbGVkLgor
RkFJTCBlcnJvclJlYXNvbi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9u
RXJyb3IuIFdhcyBPcGVyYXRpb25FcnJvci4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91
bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRp
b24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGlu
Z1N0YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRl
c2NyaXB0aW9uKS50aGVuKGZpbmlzaElmU3VjY2VlZGVkLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBu
b3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRMb2NhbERlc2NyaXB0aW9uIGZhaWxlZC4KK0ZB
SUwgZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVy
cm9yLiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxk
IHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9u
IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdT
dGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVz
Y3JpcHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQzKTsgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4KK0ZB
SUwgZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVy
cm9yLiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxk
IHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9u
IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdT
dGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVz
Y3JpcHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQ0KTsgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4KK0ZB
SUwgZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVy
cm9yLiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxk
IHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9u
IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdT
dGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNj
cmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgZmluaXNoSWZGYWlsZWQpOyBkaWQgbm90
IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0TG9jYWxEZXNjcmlwdGlvbiBzdWNjZWVkZWQuCitQ
QVNTIHBjLmxvY2FsRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVz
Y3JpcHRpb24uc2RwIHNob3VsZCBiZSBsb2NhbC4gV2FzIHQ9MCAwCisuCitGQUlMIHBjLnJlbW90
ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBw
Yy5zaWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1sb2NhbC1vZmZlciIKK0ZBSUwgcGMubG9jYWxEZXNj
cmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVt
b3RlRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNT
IHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0
aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgZmluaXNoSWZG
YWlsZWQpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0UmVtb3RlRGVzY3JpcHRp
b24gc3VjY2VlZGVkLgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBl
eGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlIGlzICJv
ZmZlciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSByZW1vdGUuIFdh
cyB0PTAgMAorLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1yZW1vdGUtb2ZmZXIi
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGM2NmU1ZDA0ZGFmNTcxODhhOTc3
MjkyYzk4MTMzOWUyNWM3OTAwZWUuLjJiODliNmEwM2VhNDRiYTUyZGYwYzhjMDA5MjNmMzlhZmZj
NTliY2UgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBi
YWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
bmFibGUgR3N0V2ViUlRDIGJ5IGRlZmF1bHQgaWYgYSByZWNlbnQtZW5vdWdoICg+PSAxLjIwKSB2
ZXJzaW9uIGlzIGF2YWlsYWJsZS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kR1N0cmVh
bWVyLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2U6
CisgICAgICAgICogU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlOgorICAg
ICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2U6CisKIDIwMjIt
MDItMTcgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQub3JnPgogCiAgICAgICAg
IFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg5OTQ5Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452544</attachid>
            <date>2022-02-18 10:49:56 -0800</date>
            <delta_ts>2022-02-19 01:34:23 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220218104953.patch</filename>
            <type>text/plain</type>
            <size>327569</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDJlMmI5YWU2MjQ5YWMyM2U3YjEzZGRj
ZmUxODY3MzJjYjI3YWQyMTMuLmMyMTRkZDNhZWMyN2U4MmJkM2U3MjY4NjcxOGFjY2Q5MGVjNzQ3
ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAyLTE3ICBNYXR0IFdvb2Ryb3cgIDxtYXR0
d29vZHJvd0BhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIHN1YmdyaWQgYnkgZGVmYXVsdC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMTYwZDA5M2RjMzE3NzRmNTMzMTNjMTY0NWQ1YmI5OGE4N2M0YTQwLi4w
MDYzMzY4ZjVhMzZlYzJkYTIzZDg2NWFiY2RjZDg0YTNhYjdhY2VjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzc0IEBACisyMDIyLTAyLTEyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBJbml0aWFsIGltcG9ydCBvZiB0aGUgR3N0
V2ViUlRDIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNjU0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEluaXRpYWwgR3N0V2ViUlRDIGJhY2tlbmQuIEEgbG90IG9mIGZlYXR1cmVzIHVuaW1w
bGVtZW50ZWQgc3RpbGwsIGJ1dCB3ZSB3aWxsIGluY3JlbWVudGFsbHkKKyAgICAgICAgaW1wcm92
ZSB0aGUgbGF5b3V0IHRlc3QgY292ZXJhZ2UgaW4gZm9sbG93LXVwIHBhdGNoZXMuIE1vc3Qgbm90
YWJsZSBzaG9ydC1jb21pbmdzIGN1cnJlbnRseToKKworICAgICAgICAtIERhdGFDaGFubmVsIHN1
cHBvcnQgaXMgaW5jb21wbGV0ZSAoYnVnIDIzNTg3OSkKKyAgICAgICAgLSBOZXR3b3JrIHRyYWZm
aWMgbm90IHJvdXRlZCB0aHJvdWdoIE5ldHdvcmsgcHJvY2VzcyB5ZXQKKyAgICAgICAgLSBTdGF0
cyBzdXBwb3J0IGluY29tcGxldGUKKyAgICAgICAgLSBEVE1GIHN1cHBvcnQgdW5pbXBsZW1lbnRl
ZAorICAgICAgICAtIElDRSByZXN0YXJ0cyBub3Qgc3VwcG9ydGVkIHlldAorICAgICAgICAtIFJl
LW5lZ290aWF0aW9uIHVubGlrZWx5IHRvIHdvcmsKKyAgICAgICAgLSBTaW11bGNhc3Qgbm90IGhh
bmRsZWQgeWV0CisgICAgICAgIC0gQmFsYW5jZWQgYnVuZGxlIG5vdCBzdXBwb3J0ZWQKKyAgICAg
ICAgLSBSVFggYW5kIEZFQyB1bi10ZXN0ZWQsIGJ1dCBzaG91bGRuJ3QgYmUgaGFyZCB0byBmaXgK
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcDoKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdlbmVyYXRlQ2VydGlmaWNhdGUp
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6OmZyb21SVENEYXRhQ2hhbm5lbEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyOjpjaGFubmVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjp+R1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFu
bmVsSGFuZGxlcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6c2VuZFN0cmluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kUmF3RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2hlY2tTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnJlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uTWVzc2Fn
ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6
Om9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
OjpvbkJ1ZmZlcmVkQW1vdW50TG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6cG9zdFRhc2spOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFj
a2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQ6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQ6OmljZVRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFu
c3BvcnRCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZDo6fkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp1bnJl
Z2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJh
Y2tlbmQ6OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFu
c3BvcnRCYWNrZW5kOjpnYXRoZXJpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVk
aWFFbmRwb2ludC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWFsaXplUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6fkdTdHJlYW1lck1lZGlhRW5kcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dGVhcmRvd25QaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpoYW5kbGVNZXNzYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRpc3Bvc2VFbGVt
ZW50Q2hhaW4pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0
Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpyZXN0YXJ0SWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmZldGNoRGVzY3JpcHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6ZmV0Y2hTaWduYWxpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb1NldFJlbW90ZURlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNldERlc2NyaXB0aW9uQ2FsbERhdGE6OlNldERl
c2NyaXB0aW9uQ2FsbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6c2V0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6c3RvcmVSZW1vdGVNTGluZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6Y29uZmlndXJlQW5kTGlua1NvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXF1ZXN0UGFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlT2ZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVBbnN3ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aW5pdGlhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2V0U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6bWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFJlbW90ZVN0cmVhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVSZW1vdGVTdHJl
YW0pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlVHJh
bnNjZWl2ZXJCYWNrZW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjphZGRUcmFuc2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpjcmVhdGVTb3VyY2VGb3JUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNlbmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRJY2VDYW5k
aWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRl
RGF0YUNoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
b25EYXRhQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN1c3BlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVzdW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uTmVnb3RpYXRpb25OZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDb25uZWN0
aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9u
SWNlR2F0aGVyaW5nQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6Om9uSWNlQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvblN1Y2NlZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25G
YWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y29sbGVj
dFRyYW5zY2VpdmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpnYXRoZXJTdGF0c0ZvckxvZ2dpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UlRDU3RhdHNMb2dn
ZXI6OlJUQ1N0YXRzTG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyOjp0
b0pTT05TdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6cHJvY2Vzc1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6Om9uU3RhdHNEZWxpdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6c3RhcnRMb2dnaW5nU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6c3RvcExvZ2dpbmdTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpsb2dDaGFubmVsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0YXRzTG9nSW50ZXJ2YWwgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyRGVjb2RlckltcGxl
bWVudGF0aW9uTmFtZSk6CisgICAgICAgIChXVEY6OkxvZ0FyZ3VtZW50PFdlYkNvcmU6OlJUQ1N0
YXRzTG9nZ2VyPjo6dG9TdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6aXNTdG9wcGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmlzTmVnb3RpYXRpb25OZWVkZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cGlwZWxpbmUgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uQmFja2VuZDo6cmVjZWl2ZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpzZW5kZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6cmVzdGFydEljZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OnNldENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyk6CisgICAgICAgIChXZWJD
b3JlOjpiYWNrZW5kRnJvbVJUUFNlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0UmVtb3RlRGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
Ojpkb0NyZWF0ZU9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6ZG9DcmVhdGVBbnN3ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVh
dGVEYXRhQ2hhbm5lbEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEV4aXN0aW5nU2Vu
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
YWRkVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjphZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2VpdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0U2VuZGVyU291cmNl
RnJvbVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmJhY2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpleGlz
dGluZ1RyYW5zY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6bmV3UmVtb3RlVHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJhbnNjZWl2ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVtb3ZlVHJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphcHBs
eVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25O
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
aXNOZWdvdGlhdGlvbk5lZWRlZCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVy
QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0
cFJlY2VpdmVyQmFja2VuZDo6Z2V0Q29udHJpYnV0aW5nU291cmNlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFN5bmNocm9uaXphdGlv
blNvdXJjZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kOjpjcmVhdGVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVy
QmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Om1lZGlhVHlwZUZyb21SZWNlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFJlY2VpdmVy
VHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZl
clRyYW5zZm9ybUJhY2tlbmQ6On5HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5k
OjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJU
cmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnVwZGF0ZVRyYWNrU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ6OnN0YXJ0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0b3BTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6cmVwbGFjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c2V0UGFyYW1ldGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpjcmVhdGVEVE1GQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpydGNS
dHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ6OnNldE1lZGlhU3RyZWFtSWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0
cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1l
ZGlhVHlwZUZyb21TZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVy
VHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0
cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNr
ZW5kOjpyZXF1ZXN0S2V5RnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQ6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVJlY2VpdmVy
QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ6OmNyZWF0ZVNlbmRlckJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRw
VHJhbnNjZWl2ZXJCYWNrZW5kOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjdXJyZW50RGlyZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c2V0RGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZDo6bWlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZDo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ6OnN0b3BwZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kOjpzZXRDb2RlY1ByZWZlcmVuY2VzKToKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRw
VHJhbnNmb3JtQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UnRwVHJhbnNmb3JtQmFja2VuZDo6c2V0SW5wdXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpjbGVhclRyYW5zZm9ybWFibGVGcmFtZUNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6
OnByb2Nlc3NUcmFuc2Zvcm1lZEZyYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJh
bnNmb3JtQmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OnRvUlRDU2N0cFRyYW5zcG9ydFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBU
cmFuc3BvcnRCYWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnN0
YXRlQ2hhbmdlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxs
UlRDUlRQU3RyZWFtU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJUQ0NvZGVjU3RhdHMp
OgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEluYm91bmRSVFBTdHJlYW1TdGF0cyk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsT3V0Ym91bmRSVFBTdHJlYW1TdGF0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpmaWxsUlRDUGVlckNvbm5lY3Rpb25TdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUlRD
VHJhbnNwb3J0U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJlcG9ydENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbGxiYWNrSG9sZGVyOjpDYWxsYmFja0hvbGRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Z2V0U3RhdHMpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9y
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6c2V0RWxl
bWVudCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
V2ViUlRDVXRpbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlQ29tcG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlUHJvdG9jb2wpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9SVENJY2VUY3BDYW5kaWRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRD
SWNlQ2FuZGlkYXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0Vycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvV2ViUlRDQml0UmF0ZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OmZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVdlYlJU
Q0JpdFJhdGVQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0VuY29kaW5nUGFyYW1l
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCk6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUljZUNhbmRpZGF0ZVNEUCk6CisgICAgICAgIChXZWJDb3JlOjp4NTA5U2Vy
aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnByaXZhdGVLZXlTZXJpYWxpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZHBN
ZWRpYUhhc0F0dHJpYnV0ZUtleSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0
b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZyb21SVENS
dHBUcmFuc2NlaXZlckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0b1Nlc3Npb25EZXNj
cmlwdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9TaWduYWxpbmdTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjp0b1JUQ0ljZUNvbm5lY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0R0
bHNUcmFuc3BvcnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZVRyYW5zcG9ydFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlR2F0aGVyaW5nU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6YnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6aWNlVHJhbnNwb3J0UG9saWN5RnJvbUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6dG9SVENFcnJvckRldGFpbFR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1l
ci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3Zp
ZGVyR1N0cmVhbWVyOjpBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6On5BdWRpb1NvdXJjZVByb3ZpZGVy
R1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFt
ZXI6OmhhbmRsZU5ld0RlaW50ZXJsZWF2ZVBhZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXVEY6OmFkb3B0R1JlZik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDUlRQUmVj
ZWl2ZXI+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPik6
CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPik6CisgICAgICAgIChX
VEY6OmRlcmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KToKKyAgICAgICAgKFdURjo6cmVmR1B0
cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0
V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENE
YXRhQ2hhbm5lbD4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5u
ZWw+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0Pik6Cisg
ICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0Pik6CisgICAgICAg
IChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0Pik6CisgICAgICAgIChXVEY6OmRl
cmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y2Fwc01lZGlhVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dV
bmlxdWVQdHJHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZTo6Y3JlYXRlQXVkaW9Tb3VyY2VQcm92aWRlcik6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0
dXJlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpjcmVhdGVD
b252ZXJ0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDYXB0dXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJDYXB0dXJlcjo6
Y3JlYXRlU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6fkdTdHJlYW1l
ckRUTUZTZW5kZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5k
ZXJCYWNrZW5kOjpjYW5JbnNlcnREVE1GKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRU
TUZTZW5kZXJCYWNrZW5kOjpwbGF5VG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJE
VE1GU2VuZGVyQmFja2VuZDo6dG9uZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyRFRNRlNlbmRlckJhY2tlbmQ6OmR1cmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjppbnRlclRvbmVHYXAgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6Om9uVG9uZVBsYXllZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5k
ZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHA6CisgICAgICAgICh3ZWJraXRNZWRp
YVN0cmVhbVNyY0FkZFRyYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJydGNf
dmlkZW9fZW5jb2Rlcl9jbGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXI6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6On5SZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzdGFydFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzdG9wUHJvZHVj
aW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI6OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5n
U291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmxvY2tW
YWx2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyOjpyZWxlYXNlVmFsdmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJl
YW1lcjo6YmluKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6
OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXI6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXR0aW5n
c0RpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyOjpjcmVhdGUpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxv
YWRUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6
flJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1l
cjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXI6OnNvdXJjZU11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6aW5p
dGlhbGl6ZUZyb21UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXI6OmxpbmspOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRn
b2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTaW5rUGFkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291
cmNlR1N0cmVhbWVyOjpzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjphbGxvd2VkQ2FwcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnBhZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXI6OnNlbmRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXI6OmJpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5h
bHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6
c2V0V2ViUlRDVlA5U3VwcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFdl
YlJUQ1ZQOVZUQlN1cHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbmFi
bGVXZWJSVENFbmNyeXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0VXNl
RFRMUzEwKToKKwogMjAyMi0wMi0xOCAgUGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgog
CiAgICAgICAgIFtpT1NdW01vZGVybiBNZWRpYSBDb250cm9sc10gQWRkIGFuIGFsdGVybmF0aXZl
IG92ZXJmbG93IGljb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNl
cy9XZWJQcmVmZXJlbmNlcy55YW1sIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dl
YlByZWZlcmVuY2VzLnlhbWwKaW5kZXggNGFhNjdhMzEyOTgwNGRhOWZmOGU2YTQ0OTQ1OTZjNDY2
MWZmOWUxNi4uYjY2Yzc0MGU4MDcyY2M1OWM1YmEyN2M1ZWU0MzM2NDE2ZjlmMWNmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlhbWwK
KysrIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlhbWwK
QEAgLTE3MjIsNyArMTcyMiw5IEBAIFBlZXJDb25uZWN0aW9uRW5hYmxlZDoKICAgICBXZWJLaXRM
ZWdhY3k6CiAgICAgICBkZWZhdWx0OiB0cnVlCiAgICAgV2ViS2l0OgotICAgICAgZGVmYXVsdDog
V2ViQ29yZTo6TGliV2ViUlRDUHJvdmlkZXI6OndlYlJUQ0F2YWlsYWJsZSgpCisgICAgICAiVVNF
KExJQldFQlJUQykiOiBXZWJDb3JlOjpMaWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxl
KCkKKyAgICAgICJVU0UoR1NUUkVBTUVSX1dFQlJUQykiOiB0cnVlCisgICAgICBkZWZhdWx0OiBm
YWxzZQogICAgIFdlYkNvcmU6CiAgICAgICBkZWZhdWx0OiB0cnVlCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55
YW1sIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJp
bWVudGFsLnlhbWwKaW5kZXggMmQyYzJiMzlkNjZlMmZjOWY3OGJkYmE0NTBkOTg4ZTI2MjZlMzc4
Yy4uZWJhYjE3M2E4MzNlNWEwZDY1ZGE4NGFlYTc2ZDZiZmE1ZGE1NzYxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFs
LnlhbWwKKysrIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2Vz
RXhwZXJpbWVudGFsLnlhbWwKQEAgLTE2ODMsOSArMTY4MywxMSBAQCBXZWJSVENFbmNvZGVkVHJh
bnNmb3JtRW5hYmxlZDoKICAgICBXZWJLaXRMZWdhY3k6CiAgICAgICBkZWZhdWx0OiBmYWxzZQog
ICAgIFdlYktpdDoKLSAgICAgIGRlZmF1bHQ6IHRydWUKKyAgICAgICJVU0UoTElCV0VCUlRDKSI6
IHRydWUKKyAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgV2ViQ29yZToKLSAgICAgIGRlZmF1bHQ6
IHRydWUKKyAgICAgICJVU0UoTElCV0VCUlRDKSI6IHRydWUKKyAgICAgIGRlZmF1bHQ6IGZhbHNl
CiAKICMgRklYTUU6IElzIHRoaXMgaW1wbGVtZW50ZWQgZm9yIFdlYktpdExlZ2FjeT8gSWYgbm90
LCB0aGlzIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIFdlYktpdExlZ2FjeSBlbnRpcmVseS4KIFdl
YlJUQ0gyNjRMb3dMYXRlbmN5RW5jb2RlckVuYWJsZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9nbGliL0dSZWZQdHIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNwcApp
bmRleCAxYjlhZGUzZjkzNmVlNTY0ZDM4MmMwN2VmOTY2NTc2YWI2NjE5YjQxLi45MzEyYTNlODk0
YmQ4YTBkN2ExMWE2YTQ1Y2NiZDM2ODczZjhjNTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAK
QEAgLTIyMyw2ICsyMjMsMjIgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1VyaSogcHRy
KQogfQogI2VuZGlmCiAKK3RlbXBsYXRlIDw+CitHQXJyYXkqIHJlZkdQdHIoR0FycmF5KiBwdHIp
Cit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19hcnJheV9yZWYocHRyKTsKKworICAgIHJldHVy
biBwdHI7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIGRlcmVmR1B0cihHQXJyYXkqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnX2FycmF5X3VucmVmKHB0cik7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdMSUIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9nbGliL0dSZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCmluZGV4
IGU3MjFmZDU1ZjQyYWMzZDc2YjQwMTc2MGUwYTE5Yjk5ZmUzZTBmOGIuLjY2NzM2MDc4N2FjNWY2
NDk2MGJlMWQ1NDYyZGRlNTlkNzM1NWY2YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2ds
aWIvR1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCkBAIC0yNTAs
NiArMjUwLDggQEAgdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdEYXRlVGltZSogcmVm
R1B0cihHRGF0ZVRpbWUqIHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkZXJlZkdQdHIoR0RhdGVUaW1lKiBwdHIpOwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklW
QVRFIEdEQnVzTm9kZUluZm8qIHJlZkdQdHIoR0RCdXNOb2RlSW5mbyogcHRyKTsKIHRlbXBsYXRl
IDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHREJ1c05vZGVJbmZvKiBwdHIp
OwordGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdBcnJheSogcmVmR1B0cihHQXJyYXkq
KTsKK3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHQXJyYXkq
KTsKIAogI2lmIEhBVkUoR1VSSSkKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHVXJp
KiByZWZHUHRyKEdVcmkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKaW5kZXggZGZiOWJk
YWM1NjZiNzk2NWJhYWNmZTBjZmVlNzA2MTQzOGIxOTViMi4uOGM3NDRmY2QxMzc3MDA2ZmJiOTA3
NjZlYmIzYmM0Yzg0ZThkY2NiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKQEAgLTE4
MCw3ICsxODAsNyBAQCBzdGF0aWMgdm9pZCBnYXRoZXJEZWNvZGluZ0luZm8oRG9jdW1lbnQmIGRv
Y3VtZW50LCBNZWRpYURlY29kaW5nQ29uZmlndXJhdGlvbiYmCiAgICAgY29uZmlndXJhdGlvbi5j
YW5FeHBvc2VWUDkgPSBkb2N1bWVudC5zZXR0aW5ncygpLnZwOURlY29kZXJFbmFibGVkKCk7CiAj
ZW5kaWYKIAotI2lmIEVOQUJMRShXRUJfUlRDKQorI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
TElCV0VCUlRDKQogICAgIGlmIChjb25maWd1cmF0aW9uLnR5cGUgPT0gTWVkaWFEZWNvZGluZ1R5
cGU6OldlYlJUQykgewogICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkK
ICAgICAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuY3JlYXRlRGVjb2RpbmdDb25m
aWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlvbiksIFdURk1vdmUoZGVjb2RpbmdDYWxsYmFj
aykpOwpAQCAtMjAwLDcgKzIwMCw3IEBAIHN0YXRpYyB2b2lkIGdhdGhlckVuY29kaW5nSW5mbyhE
b2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhRW5jb2RpbmdDb25maWd1cmF0aW9uJiYKICAgICAgICAg
Y2FsbGJhY2soV1RGTW92ZShyZXN1bHQpKTsKICAgICB9OwogCi0jaWYgRU5BQkxFKFdFQl9SVEMp
CisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGNvbmZpZ3Vy
YXRpb24udHlwZSA9PSBNZWRpYUVuY29kaW5nVHlwZTo6V2ViUlRDKSB7CiAgICAgICAgIGlmIChh
dXRvKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+bGliV2ViUlRD
UHJvdmlkZXIoKS5jcmVhdGVFbmNvZGluZ0NvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0
aW9uKSwgV1RGTW92ZShlbmNvZGluZ0NhbGxiYWNrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKaW5kZXggNTA2ZjMzNzRiN2U2
ZDc2ZDU5OGY0OTUzZDg0OWMzOGVhYWM3MjdlOS4uN2I5YjViNjZkYTUxNTMyNGU2NjZjZjRiMWJh
M2Y1Y2QyZmFlMGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYURldmljZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFEZXZpY2VzLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU01lZGlh
RGV2aWNlSW5mby5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVRyYWNr
U3VwcG9ydGVkQ29uc3RyYWludHMuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCmlu
ZGV4IDg2ZDc1NzM5OTJmNGQ1YmQ0YzM1M2RjYjYwOTcyNjRlOTg1ZDU3ZTguLjBlNzAxYmZkNDdl
OTI4NGJhMTc4MTY0MWQ5MjI3YTNhZjg1OWQ1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAK
QEAgLTUzLDkgKzUzLDE0IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCisjaWYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiAhVVNFKExJQldFQlJUQykKKyNpZiAh
VVNFKExJQldFQlJUQykgJiYgIVVTRShHU1RSRUFNRVJfV0VCUlRDKQorCiBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3JlYXRlTm9QZWVyQ29ubmVjdGlvbkJh
Y2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mKQogewogICAgIHJldHVybiBudWxscHRyOwpAQCAtNDM3
LDEzICs0NDIsMTkgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdlbmVyYXRlQ2VydGlm
aWNhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBDZXJ0aWYKICAgICAgICAgcHJvbWlzZS5y
ZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCiAgICAg
TGliV2ViUlRDQ2VydGlmaWNhdGVHZW5lcmF0b3I6OmdlbmVyYXRlQ2VydGlmaWNhdGUoZG9jdW1l
bnQuc2VjdXJpdHlPcmlnaW4oKSwgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKSwgaW5mbywgW3By
b21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAg
ICAgcHJvbWlzZS5zZXR0bGUoV1RGTW92ZShyZXN1bHQpKTsKICAgICB9KTsKKyNlbGlmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQorICAgIGF1dG8gY2VydGlmaWNhdGUgPSA6OldlYkNvcmU6OmdlbmVy
YXRlQ2VydGlmaWNhdGUoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwgaW5mbyk7CisgICAgaWYg
KGNlcnRpZmljYXRlLmhhc192YWx1ZSgpKQorICAgICAgICBwcm9taXNlLnJlc29sdmUoKmNlcnRp
ZmljYXRlKTsKKyAgICBlbHNlCisgICAgICAgIHByb21pc2UucmVqZWN0KE5vdFN1cHBvcnRlZEVy
cm9yKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKLSAgICBVTlVTRURfUEFS
QU0oZXhwaXJlcyk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShp
bmZvKTsKICAgICBwcm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7CiAjZW5kaWYKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi5jcHAKaW5kZXggNWJkZGZlYzdlNGRmYzlkOWMwMjk5YzllMjdjYTlkYzIyZGY2
NDEwNC4uOTBkZTYzOTkzNGVkNjFjNWMwYjEwMTJjMGFhNTM5N2RkMGQ4YjMyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJUQ1BlZXJDb25uZWN0
aW9uPj4gUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQKICAgICBp
ZiAoIXBlZXJDb25uZWN0aW9uLT5pc0Nsb3NlZCgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwYWdl
ID0gZG9jdW1lbnQucGFnZSgpKSB7CiAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi0+cmVnaXN0
ZXJUb0NvbnRyb2xsZXIocGFnZS0+cnRjQ29udHJvbGxlcigpKTsKLSNpZiAhTE9HX0RJU0FCTEVE
IHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorI2lmIFVTRShMSUJXRUJSVEMpICYmICghTE9HX0RJ
U0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRCkKICAgICAgICAgICAgIGlmICghcGFnZS0+
c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgICAgICAgICBwYWdlLT5saWJXZWJS
VENQcm92aWRlcigpLnNldExvZ2dpbmdMZXZlbChMb2dXZWJSVEMubGV2ZWwpOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yOTRiZGFhMzNhMzRkNDc3YzZjYjM3NGI1OWQyZTAyZGYwMTgwMGJkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcApAQCAtMCwwICsxLDMxNCBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRD
VXRpbHMuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbC5oIgorI2luY2x1ZGUgIlJUQ0RhdGFD
aGFubmVsRXZlbnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgorI2luY2x1ZGUgIlJUQ1ByaW9y
aXR5VHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworR1NUX0RFQlVHX0NB
VEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NU
X0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gR1N0cmVhbWVyRGF0YUNoYW5uZWxI
YW5kbGVyOjpmcm9tUlRDRGF0YUNoYW5uZWxJbml0KGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYg
b3B0aW9ucykKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaW5pdChnc3Rfc3RydWN0
dXJlX25ldygib3B0aW9ucyIsICJwcm90b2NvbCIsIEdfVFlQRV9TVFJJTkcsIG9wdGlvbnMucHJv
dG9jb2wudXRmOCgpLmRhdGEoKSwgbnVsbHB0cikpOworCisgICAgaWYgKG9wdGlvbnMub3JkZXJl
ZCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgIm9yZGVyZWQiLCBHX1RZ
UEVfQk9PTEVBTiwgKm9wdGlvbnMub3JkZXJlZCwgbnVsbHB0cik7CisgICAgaWYgKG9wdGlvbnMu
bWF4UGFja2V0TGlmZVRpbWUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCks
ICJtYXgtcGFja2V0LWxpZmV0aW1lIiwgR19UWVBFX0lOVCwgKm9wdGlvbnMubWF4UGFja2V0TGlm
ZVRpbWUsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25zLm1heFJldHJhbnNtaXRzKQorICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAibWF4LXJldHJhbnNtaXRzIiwgR19UWVBF
X0lOVCwgKm9wdGlvbnMubWF4UmV0cmFuc21pdHMsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25z
Lm5lZ290aWF0ZWQpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJuZWdv
dGlhdGVkIiwgR19UWVBFX0JPT0xFQU4sICpvcHRpb25zLm5lZ290aWF0ZWQsIG51bGxwdHIpOwor
ICAgIGlmIChvcHRpb25zLmlkKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgp
LCAiaWQiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5pZCwgbnVsbHB0cik7CisKKyAgICBHc3RXZWJS
VENQcmlvcml0eVR5cGUgcHJpb3JpdHlUeXBlOworICAgIHN3aXRjaCAob3B0aW9ucy5wcmlvcml0
eSkgeworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93OgorICAgICAgICBwcmlvcml0
eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfVkVSWV9MT1c7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpMb3c6CisgICAgICAgIHByaW9yaXR5VHlwZSA9
IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9MT1c7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UlRDUHJpb3JpdHlUeXBlOjpNZWRpdW06CisgICAgICAgIHByaW9yaXR5VHlwZSA9IEdTVF9XRUJS
VENfUFJJT1JJVFlfVFlQRV9NRURJVU07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlRDUHJp
b3JpdHlUeXBlOjpIaWdoOgorICAgICAgICBwcmlvcml0eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9S
SVRZX1RZUEVfSElHSDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVf
c2V0KGluaXQuZ2V0KCksICJwcmlvcml0eSIsIEdTVF9UWVBFX1dFQlJUQ19QUklPUklUWV9UWVBF
LCBwcmlvcml0eVR5cGUsIG51bGxwdHIpOworCisgICAgcmV0dXJuIGluaXQ7Cit9CisKK1JlZjxS
VENEYXRhQ2hhbm5lbEV2ZW50PiBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNoYW5uZWxF
dmVudChEb2N1bWVudCYgZG9jdW1lbnQsIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+JiYg
ZGF0YUNoYW5uZWwpCit7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBsYWJlbDsKKyAgICBHVW5p
cXVlT3V0UHRyPGNoYXI+IHByb3RvY29sOworICAgIGdib29sZWFuIG9yZGVyZWQsIG5lZ290aWF0
ZWQ7CisgICAgZ2ludCBtYXhQYWNrZXRMaWZlVGltZSwgbWF4UmV0cmFuc21pdHMsIGlkOworICAg
IGdfb2JqZWN0X2dldChkYXRhQ2hhbm5lbC5nZXQoKSwgIm9yZGVyZWQiLCAmb3JkZXJlZCwgImxh
YmVsIiwgJmxhYmVsLm91dFB0cigpLAorICAgICAgICAibWF4LXBhY2tldC1saWZldGltZSIsICZt
YXhQYWNrZXRMaWZlVGltZSwgIm1heC1yZXRyYW5zbWl0cyIsICZtYXhSZXRyYW5zbWl0cywKKyAg
ICAgICAgInByb3RvY29sIiwgJnByb3RvY29sLm91dFB0cigpLCAibmVnb3RpYXRlZCIsICZuZWdv
dGlhdGVkLCAiaWQiLCAmaWQsIG51bGxwdHIpOworCisgICAgUlRDRGF0YUNoYW5uZWxJbml0IGlu
aXQ7CisgICAgaW5pdC5vcmRlcmVkID0gb3JkZXJlZDsKKyAgICBpbml0Lm1heFBhY2tldExpZmVU
aW1lID0gbWF4UGFja2V0TGlmZVRpbWU7CisgICAgaW5pdC5tYXhSZXRyYW5zbWl0cyA9IG1heFJl
dHJhbnNtaXRzOworICAgIGluaXQucHJvdG9jb2wgPSBTdHJpbmcocHJvdG9jb2wuZ2V0KCkpOwor
ICAgIGluaXQubmVnb3RpYXRlZCA9IG5lZ290aWF0ZWQ7CisgICAgaW5pdC5pZCA9IGlkOworCisg
ICAgYXV0byBoYW5kbGVyID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcj4oV1RGTW92ZShkYXRhQ2hhbm5lbCkpOworICAgIGF1dG8gY2hhbm5lbCA9IFJUQ0RhdGFD
aGFubmVsOjpjcmVhdGUoZG9jdW1lbnQsIFdURk1vdmUoaGFuZGxlciksIFN0cmluZyhsYWJlbC5n
ZXQoKSksIFdURk1vdmUoaW5pdCkpOworICAgIHJldHVybiBSVENEYXRhQ2hhbm5lbEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLmRhdGFjaGFubmVsRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5v
LCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObywgV1RGTW92ZShjaGFubmVsKSk7Cit9CisKK0dTdHJl
YW1lckRhdGFDaGFubmVsSGFuZGxlcjo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKEdSZWZQ
dHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+JiYgY2hhbm5lbCkKKyAgICA6IG1fY2hhbm5lbChXVEZN
b3ZlKGNoYW5uZWwpKQoreworICAgIEFTU0VSVChtX2NoYW5uZWwpOworCisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm5vdGlmeTo6cmVhZHktc3RhdGUiLCBH
X0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIpIHsKKyAg
ICAgICAgaGFuZGxlci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7CisgICAg
Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLW1lc3NhZ2UtZGF0
YSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlciwg
R0J5dGVzKiBieXRlcykgeworICAgICAgICBoYW5kbGVyLT5vbk1lc3NhZ2VEYXRhKGJ5dGVzKTsK
KyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5n
ZXQoKSwgIm9uLW1lc3NhZ2Utc3RyaW5nIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRGF0YUNo
YW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBjaGFyKiBtZXNzYWdlKSB7CisgICAgICAgIENTdHJpbmcg
YnVmZmVyKG1lc3NhZ2UsIHN0cmxlbihtZXNzYWdlKSk7CisgICAgICAgIGF1dG8gc3RyaW5nID0g
U3RyaW5nOjpmcm9tVVRGOChidWZmZXIpOworICAgICAgICBoYW5kbGVyLT5vbk1lc3NhZ2VTdHJp
bmcoV1RGTW92ZShzdHJpbmcpKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLWVycm9yIiwgR19DQUxMQkFDSygrW10oR1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBHRXJyb3IqIHJhd0Vycm9yKSB7Cisg
ICAgICAgIEdVbmlxdWVQdHI8R0Vycm9yPiBlcnJvcihyYXdFcnJvcik7CisgICAgICAgIGhhbmRs
ZXItPm9uRXJyb3IoV1RGTW92ZShlcnJvcikpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tYnVmZmVyZWQtYW1vdW50LWxv
dyIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlcikg
eworICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgdGhlIGFtb3VudCBkZWx0YSBmcm9t
IHdlYnJ0Y2JpbiB0byB0aGUgV2ViQ29yZSBoYW5kbGVyLgorICAgICAgICBoYW5kbGVyLT5vbkJ1
ZmZlcmVkQW1vdW50TG93KCk7CisgICAgfSksIHRoaXMpOworfQorCitHU3RyZWFtZXJEYXRhQ2hh
bm5lbEhhbmRsZXI6On5HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoKQoreworICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2NoYW5uZWwuZ2V0KCksIHRoaXMpOwor
fQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2V0Q2xpZW50KFJUQ0RhdGFD
aGFubmVsSGFuZGxlckNsaWVudCYgY2xpZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRp
ZmllciBjb250ZXh0SWRlbnRpZmllcikKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRM
b2NrIH07CisgICAgQVNTRVJUKCFtX2hhc0NsaWVudCk7CisgICAgbV9oYXNDbGllbnQgPSB0cnVl
OworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgICptX2NsaWVudCA9ICZjbGllbnQ7CisgICAg
bV9jb250ZXh0SWRlbnRpZmllciA9IGNvbnRleHRJZGVudGlmaWVyOworCisgICAgZm9yIChhdXRv
JiBtZXNzYWdlIDogbV9idWZmZXJlZE1lc3NhZ2VzKSB7CisgICAgICAgIHN3aXRjaE9uKG1lc3Nh
Z2UsIFsmXShSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAgICAg
IEdTVF9ERUJVRygiTm90aWZ5aW5nIHF1ZXVlZCByYXcgZGF0YSAoc2l6ZTogJXp1KSIsIGRhdGEt
PnNpemUoKSk7CisgICAgICAgICAgICBjbGllbnQuZGlkUmVjZWl2ZVJhd0RhdGEoZGF0YS0+bWFr
ZUNvbnRpZ3VvdXMoKS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgICAgICB9LCBbJl0oU3Ry
aW5nJiB0ZXh0KSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIk5vdGlmeWluZyBxdWV1ZWQgc3Ry
aW5nICVzIiwgdGV4dC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBjbGllbnQuZGlkUmVj
ZWl2ZVN0cmluZ0RhdGEodGV4dCk7CisgICAgICAgIH0sIFsmXShTdGF0ZUNoYW5nZSBzdGF0ZUNo
YW5nZSkgeworICAgICAgICAgICAgaWYgKHN0YXRlQ2hhbmdlLmVycm9yKSB7CisgICAgICAgICAg
ICAgICAgaWYgKGF1dG8gcnRjRXJyb3IgPSB0b1JUQ0Vycm9yKCpzdGF0ZUNoYW5nZS5lcnJvcikp
CisgICAgICAgICAgICAgICAgICAgIGNsaWVudC5kaWREZXRlY3RFcnJvcihydGNFcnJvci5yZWxl
YXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdTVF9ERUJVRygiRGlz
cGF0Y2hpbmcgc3RhdGUgY2hhbmdlIHRvICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0ZUNoYW5n
ZS5zdGF0ZSkpOworICAgICAgICAgICAgY2xpZW50LmRpZENoYW5nZVJlYWR5U3RhdGUoc3RhdGVD
aGFuZ2Uuc3RhdGUpOworICAgICAgICB9KTsKKyAgICB9CisgICAgbV9idWZmZXJlZE1lc3NhZ2Vz
LmNsZWFyKCk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kU3Ry
aW5nRGF0YShjb25zdCBDU3RyaW5nJiB0ZXh0KQoreworICAgIEdTVF9ERUJVRygiU2VuZGluZyBz
dHJpbmcgJXMiLCB0ZXh0LmRhdGEoKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fY2hh
bm5lbC5nZXQoKSwgInNlbmQtc3RyaW5nIiwgdGV4dC5kYXRhKCkpOworICAgIHJldHVybiB0cnVl
OworfQorCitib29sIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFJhd0RhdGEoY29u
c3QgdWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBhdXRvIGJ5dGVzID0gYWRv
cHRHUmVmKGdfYnl0ZXNfbmV3KGRhdGEsIGxlbmd0aCkpOworICAgIGdfc2lnbmFsX2VtaXRfYnlf
bmFtZShtX2NoYW5uZWwuZ2V0KCksICJzZW5kLWRhdGEiLCBieXRlcy5nZXQoKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjbG9zZSgp
Cit7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5lbC5nZXQoKSwgImNsb3NlIik7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGVja1N0YXRlKCkKK3sK
KyAgICBBU1NFUlQobV9jbGllbnRMb2NrLmlzSGVsZCgpKTsKKworICAgIEdzdFdlYlJUQ0RhdGFD
aGFubmVsU3RhdGUgY2hhbm5lbFN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX2NoYW5uZWwuZ2V0
KCksICJyZWFkeS1zdGF0ZSIsICZjaGFubmVsU3RhdGUsIG51bGxwdHIpOworCisgICAgUlRDRGF0
YUNoYW5uZWxTdGF0ZSBzdGF0ZTsKKyAgICBzd2l0Y2ggKGNoYW5uZWxTdGF0ZSkgeworICAgIGNh
c2UgR1NUX1dFQlJUQ19EQVRBX0NIQU5ORUxfU1RBVEVfTkVXOgorICAgIGNhc2UgR1NUX1dFQlJU
Q19EQVRBX0NIQU5ORUxfU1RBVEVfQ09OTkVDVElORzoKKyAgICAgICAgc3RhdGUgPSBSVENEYXRh
Q2hhbm5lbFN0YXRlOjpDb25uZWN0aW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9X
RUJSVENfREFUQV9DSEFOTkVMX1NUQVRFX09QRU46CisgICAgICAgIHN0YXRlID0gUlRDRGF0YUNo
YW5uZWxTdGF0ZTo6T3BlbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RB
VEFfQ0hBTk5FTF9TVEFURV9DTE9TSU5HOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVs
U3RhdGU6OkNsb3Npbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRB
X0NIQU5ORUxfU1RBVEVfQ0xPU0VEOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3Rh
dGU6OkNsb3NlZDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFtX2hhc0NsaWVu
dCkgeworICAgICAgICBHU1RfREVCVUcoIk5vIGNsaWVudCB5ZXQsIHF1ZXVlaW5nIHN0YXRlIik7
CisgICAgICAgIG1fYnVmZmVyZWRNZXNzYWdlcy5hcHBlbmQoU3RhdGVDaGFuZ2UgeyBzdGF0ZSwg
eyB9IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2NsaWVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHKCJEaXNwYXRjaGluZyBzdGF0ZSBjaGFuZ2Ug
dG8gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRlKSk7CisgICAgcG9zdFRhc2soW2NsaWVudCA9
IG1fY2xpZW50LCBzdGF0ZV0geworICAgICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgY2xpZW50LnZhbHVlKCktPmRpZENoYW5nZVJlYWR5U3RhdGUoc3RhdGUp
OworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6cmVhZHlT
dGF0ZUNoYW5nZWQoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKyAg
ICBjaGVja1N0YXRlKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpv
bk1lc3NhZ2VEYXRhKEdCeXRlcyogcmF3Qnl0ZXMpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1f
Y2xpZW50TG9jayB9OworCisgICAgaWYgKCFtX2hhc0NsaWVudCkgeworICAgICAgICBtX2J1ZmZl
cmVkTWVzc2FnZXMuYXBwZW5kKFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKHJhd0J5dGVzKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBhdXRvIGJ5dGVzID0gYWRvcHRHUmVmKHJhd0J5dGVzKTsKKyAgICBwb3N0VGFzayhb
Y2xpZW50ID0gbV9jbGllbnQsIGJ5dGVzID0gV1RGTW92ZShieXRlcyldIHsKKyAgICAgICAgaWYg
KCFjbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGdzaXplIHNpemUgPSAwOwor
ICAgICAgICBjb25zdCBhdXRvKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCB1aW50OF90
Kj4oZ19ieXRlc19nZXRfZGF0YShieXRlcy5nZXQoKSwgJnNpemUpKTsKKyAgICAgICAgY2xpZW50
LnZhbHVlKCktPmRpZFJlY2VpdmVSYXdEYXRhKGRhdGEsIHNpemUpOworICAgIH0pOworfQorCit2
b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlU3RyaW5nKFN0cmluZyYm
IHN0cmluZykKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisKKyAgICBH
U1RfREVCVUcoIkluY29taW5nIHN0cmluZzogJXMiLCBzdHJpbmcuYXNjaWkoKS5kYXRhKCkpOwor
ICAgIGlmICghbV9oYXNDbGllbnQpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJObyBjbGllbnQgeWV0
LCBrZWVwaW5nIGFzIGJ1ZmZlcmVkIG1lc3NhZ2UiKTsKKyAgICAgICAgbV9idWZmZXJlZE1lc3Nh
Z2VzLmFwcGVuZChXVEZNb3ZlKHN0cmluZykpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHKCJEaXNw
YXRjaGluZyBwYXlsb2FkIik7CisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50LCBzdHJp
bmcgPSBXVEZNb3ZlKHN0cmluZyldIHsKKyAgICAgICAgaWYgKCFjbGllbnQpCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgY2xpZW50LnZhbHVlKCktPmRpZFJlY2VpdmVTdHJpbmdEYXRh
KHN0cmluZyk7CisgICAgICAgIEdTVF9ERUJVRygiRG9uZSIpOworICAgIH0pOworfQorCit2b2lk
IEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25FcnJvcihHVW5pcXVlUHRyPEdFcnJvcj4m
JiBlcnJvcikKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisgICAgaWYg
KCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX1dBUk5JTkcoIkdvdCBkYXRh
LWNoYW5uZWwgZXJyb3IgJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgcG9zdFRhc2soW2NsaWVu
dCA9IG1fY2xpZW50LCBlcnJvciA9IFdURk1vdmUoZXJyb3IpXSB7CisgICAgICAgIGlmICghY2xp
ZW50IHx8ICFlcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHJ0Y0Vy
cm9yID0gdG9SVENFcnJvcihlcnJvci5nZXQoKSk7CisgICAgICAgIGlmICghcnRjRXJyb3IpCisg
ICAgICAgICAgICBydGNFcnJvciA9IFJUQ0Vycm9yOjpjcmVhdGUoUlRDRXJyb3I6OkluaXQgeyBS
VENFcnJvckRldGFpbFR5cGU6OkRhdGFDaGFubmVsRmFpbHVyZSwgeyB9LCB7IH0sIHsgfSwgeyB9
IH0sIHsgfSk7CisgICAgICAgIGNsaWVudC52YWx1ZSgpLT5kaWREZXRlY3RFcnJvcihydGNFcnJv
ci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hh
bm5lbEhhbmRsZXI6Om9uQnVmZmVyZWRBbW91bnRMb3coKQoreworICAgIExvY2tlciBsb2NrZXIg
eyBtX2NsaWVudExvY2sgfTsKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBwb3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnRdIHsKKyAgICAgICAgaWYgKCFjbGllbnQp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRklYTUU6IFBhc3MgYW1vdW50IHRv
IGhhbmRsZXIgaW5zdGVhZCBvZiAwLgorICAgICAgICBjbGllbnQudmFsdWUoKS0+YnVmZmVyZWRB
bW91bnRJc0RlY3JlYXNpbmcoMCk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNo
YW5uZWxIYW5kbGVyOjpwb3N0VGFzayhGdW5jdGlvbjx2b2lkKCk+JiYgZnVuY3Rpb24pCit7Cisg
ICAgQVNTRVJUKG1fY2xpZW50TG9jay5pc0hlbGQoKSk7CisKKyAgICBpZiAoIW1fY29udGV4dElk
ZW50aWZpZXIpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChXVEZNb3ZlKGZ1bmN0aW9uKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dDo6cG9z
dFRhc2tUbyhtX2NvbnRleHRJZGVudGlmaWVyLCBXVEZNb3ZlKGZ1bmN0aW9uKSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi4zODE4ZmE5ZjExYzEyMjhmMzIzNjA2MmJjNTU4ZjVmNzU2OTMxY2FjCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgKQEAgLTAsMCArMSw4OCBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHVW5pcXVl
UHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxIYW5kbGVyLmgiCisjaW5j
bHVkZSAiUlRDRGF0YUNoYW5uZWxTdGF0ZS5oIgorI2luY2x1ZGUgIlNoYXJlZEJ1ZmZlci5oIgor
CisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBEb2N1
bWVudDsKK2NsYXNzIFJUQ0RhdGFDaGFubmVsRXZlbnQ7CitjbGFzcyBSVENEYXRhQ2hhbm5lbEhh
bmRsZXJDbGllbnQ7CitzdHJ1Y3QgUlRDRGF0YUNoYW5uZWxJbml0OworCitjbGFzcyBHU3RyZWFt
ZXJEYXRhQ2hhbm5lbEhhbmRsZXIgZmluYWwgOiBwdWJsaWMgUlRDRGF0YUNoYW5uZWxIYW5kbGVy
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBH
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4m
Jik7CisgICAgfkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcigpOworCisgICAgc3RhdGljIEdV
bmlxdWVQdHI8R3N0U3RydWN0dXJlPiBmcm9tUlRDRGF0YUNoYW5uZWxJbml0KGNvbnN0IFJUQ0Rh
dGFDaGFubmVsSW5pdCYpOworICAgIHN0YXRpYyBSZWY8UlRDRGF0YUNoYW5uZWxFdmVudD4gY2hh
bm5lbEV2ZW50KERvY3VtZW50JiwgR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4mJik7CisK
K3Byb3RlY3RlZDoKKyAgICB2b2lkIG9uTWVzc2FnZURhdGEoR0J5dGVzKik7CisgICAgdm9pZCBv
bk1lc3NhZ2VTdHJpbmcoU3RyaW5nJiYpOworICAgIHZvaWQgb25FcnJvcihHVW5pcXVlUHRyPEdF
cnJvcj4mJik7CisgICAgdm9pZCBvbkJ1ZmZlcmVkQW1vdW50TG93KCk7CisgICAgdm9pZCByZWFk
eVN0YXRlQ2hhbmdlZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0RhdGFDaGFubmVsSGFuZGxl
ciBBUEkKKyAgICB2b2lkIHNldENsaWVudChSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQmLCBT
Y3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllcikgZmluYWw7CisgICAgYm9vbCBzZW5kU3Ry
aW5nRGF0YShjb25zdCBDU3RyaW5nJikgZmluYWw7CisgICAgYm9vbCBzZW5kUmF3RGF0YShjb25z
dCB1aW50OF90Kiwgc2l6ZV90KSBmaW5hbDsKKyAgICB2b2lkIGNsb3NlKCkgZmluYWw7CisKKyAg
ICB2b2lkIGNoZWNrU3RhdGUoKTsKKyAgICB2b2lkIHBvc3RUYXNrKEZ1bmN0aW9uPHZvaWQoKT4m
Jik7CisKKyAgICBzdHJ1Y3QgU3RhdGVDaGFuZ2UgeworICAgICAgICBSVENEYXRhQ2hhbm5lbFN0
YXRlIHN0YXRlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPEdFcnJvcio+IGVycm9yOworICAgIH07
CisgICAgdXNpbmcgTWVzc2FnZSA9IHN0ZDo6dmFyaWFudDxTdGF0ZUNoYW5nZSwgU3RyaW5nLCBS
ZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+OworICAgIHVzaW5nIFBlbmRpbmdNZXNzYWdlcyA9
IFZlY3RvcjxNZXNzYWdlPjsKKworICAgIExvY2sgbV9jbGllbnRMb2NrOworICAgIEdSZWZQdHI8
R3N0V2ViUlRDRGF0YUNoYW5uZWw+IG1fY2hhbm5lbDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYWtQ
dHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50Pj4gbV9jbGllbnQgV1RGX0dVQVJERURfQllf
TE9DSyhtX2NsaWVudExvY2spOworICAgIGJvb2wgbV9oYXNDbGllbnQgV1RGX0dVQVJERURfQllf
TE9DSyhtX2NsaWVudExvY2spIHsgZmFsc2UgfTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
SWRlbnRpZmllciBtX2NvbnRleHRJZGVudGlmaWVyOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IG1fcHJldmlvdXNCdWZmZXJlZEFtb3VudDsKKyAgICBQZW5kaW5nTWVzc2FnZXMgbV9idWZm
ZXJlZE1lc3NhZ2VzIFdURl9HVUFSREVEX0JZX0xPQ0sobV9jbGllbnRMb2NrKTsKKworICAgIExv
Y2sgbV9vcGVuTG9jazsKKyAgICBDb25kaXRpb24gbV9vcGVuQ29uZGl0aW9uIFdURl9HVUFSREVE
X0JZX0xPQ0sobV9vcGVuTG9jayk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MGFjYzVjMWUwNzg5
ZGM3N2M3YzM5ZTc5ZWZhYTkxZjViOWZlMzVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIx
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNw
b3J0QmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJy
YXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckR0
bHNUcmFuc3BvcnRCYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4m
IHRyYW5zcG9ydCkKKyAgICA6IG1fYmFja2VuZCh0cmFuc3BvcnQpCit7CisgICAgQVNTRVJUKG1f
YmFja2VuZCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKK30KKworR1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCgpCit7Cisg
ICAgdW5yZWdpc3RlckNsaWVudCgpOworfQorCitVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0QmFj
a2VuZD4gR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydEJhY2tlbmQo
KQoreworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tl
bmQ+KG1fYmFja2VuZCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6
OnJlZ2lzdGVyQ2xpZW50KENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQp
OworICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X2JhY2tlbmQuZ2V0KCksICJub3RpZnk6OnN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVy
RHRsc1RyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVD
aGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworfQorCit2b2lkIEdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19k
aXNjb25uZWN0X2J5X2RhdGEobV9iYWNrZW5kLmdldCgpLCB0aGlzKTsKKyAgICBtX2NsaWVudC5y
ZXNldCgpOworfQorCit2b2lkIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNo
YW5nZWQoKQoreworICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFt3ZWFrVGhpcyA9IFdlYWtQ
dHIgeyB0aGlzIH1dIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiByZW1vdGVDZXJ0aWZpY2F0ZTsKKyAgICAg
ICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBjZXJ0aWZpY2F0ZTsKKyAgICAgICAgR3N0V2ViUlRDRFRM
U1RyYW5zcG9ydFN0YXRlIHN0YXRlOworCisgICAgICAgIGdfb2JqZWN0X2dldCh3ZWFrVGhpcy0+
bV9iYWNrZW5kLmdldCgpLCAic3RhdGUiLCAmc3RhdGUsICJyZW1vdGUtY2VydGlmaWNhdGUiLCAm
cmVtb3RlQ2VydGlmaWNhdGUub3V0UHRyKCksICJjZXJ0aWZpY2F0ZSIsICZjZXJ0aWZpY2F0ZS5v
dXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICAgICAgVmVjdG9yPFJlZjxKU0M6OkFycmF5QnVmZmVy
Pj4gY2VydGlmaWNhdGVzOworICAgICAgICBjZXJ0aWZpY2F0ZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSgyKTsKKyAgICAgICAgaWYgKHJlbW90ZUNlcnRpZmljYXRlKSB7CisgICAgICAgICAgICBh
dXRvIHJlbW90ZUNlcnRpZmljYXRlU3RyaW5nID0gbWFrZVN0cmluZyhyZW1vdGVDZXJ0aWZpY2F0
ZS5nZXQoKSk7CisgICAgICAgICAgICBhdXRvIGpzUmVtb3RlQ2VydGlmaWNhdGUgPSBKU0M6OkFy
cmF5QnVmZmVyOjpjcmVhdGUocmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcuY2hhcmFjdGVyczgoKSwg
cmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcuc2l6ZUluQnl0ZXMoKSk7CisgICAgICAgICAgICBjZXJ0
aWZpY2F0ZXMuYXBwZW5kKFdURk1vdmUoanNSZW1vdGVDZXJ0aWZpY2F0ZSkpOworCisgICAgICAg
ICAgICBhdXRvIGNlcnRpZmljYXRlU3RyaW5nID0gbWFrZVN0cmluZyhjZXJ0aWZpY2F0ZS5nZXQo
KSk7CisgICAgICAgICAgICBhdXRvIGpzQ2VydGlmaWNhdGUgPSBKU0M6OkFycmF5QnVmZmVyOjpj
cmVhdGUoY2VydGlmaWNhdGVTdHJpbmcuY2hhcmFjdGVyczgoKSwgY2VydGlmaWNhdGVTdHJpbmcu
c2l6ZUluQnl0ZXMoKSk7CisgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuYXBwZW5kKFdURk1vdmUo
anNDZXJ0aWZpY2F0ZSkpOworICAgICAgICB9CisgICAgICAgICgqd2Vha1RoaXMtPm1fY2xpZW50
KS0+b25TdGF0ZUNoYW5nZWQodG9SVENEdGxzVHJhbnNwb3J0U3RhdGUoc3RhdGUpLCBXVEZNb3Zl
KGNlcnRpZmljYXRlcykpOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi45YzI1NGJjODQ3ZGE3OTE2N2I4ZmMxOTQ5YjMwNGUxNzg3Y2VkNWEwCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRD
KSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRl
ICJSVENEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQgZmluYWwgOiBwdWJsaWMgUlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtl
V2Vha1B0cjxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4geworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRHRsc1RyYW5z
cG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiYpOworICAg
IH5HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCgpOworCisgICAgdm9pZCBzdGF0ZUNoYW5n
ZWQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENEdGxzVHJhbnNwb3J0QmFja2VuZAorICAgIGNv
bnN0IHZvaWQqIGJhY2tlbmQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7
IH0KKyAgICBVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0QmFja2VuZD4gaWNlVHJhbnNwb3J0QmFj
a2VuZCgpIGZpbmFsOworICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoQ2xpZW50JikgZmluYWw7Cisg
ICAgdm9pZCB1bnJlZ2lzdGVyQ2xpZW50KCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJU
Q0RUTFNUcmFuc3BvcnQ+IG1fYmFja2VuZDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYWtQdHI8Q2xp
ZW50Pj4gbV9jbGllbnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VU
cmFuc3BvcnRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0
ZDc1YTFmNjU3OWQ1OTY0ZWRiMWRiOWE1ZjMwMWJlMmFkMmIwODQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
ckljZVRyYW5zcG9ydEJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5j
bHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9H
VW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVySWNlVHJhbnNw
b3J0QmFja2VuZDo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZChjb25zdCBHUmVmUHRyPEdz
dFdlYlJUQ0RUTFNUcmFuc3BvcnQ+JiB0cmFuc3BvcnQpCisgICAgOiBtX2JhY2tlbmQodHJhbnNw
b3J0KQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOworCisgICAgaWNlVHJhbnNwb3J0Q2hhbmdl
ZCgpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCksICJub3Rp
Znk6OnRyYW5zcG9ydCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tl
bmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+aWNlVHJhbnNwb3J0Q2hhbmdlZCgpOwor
ICAgIH0pLCB0aGlzKTsKK30KKworR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJl
YW1lckljZVRyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIGlmIChHX0lTX09CSkVDVChtX2ljZVRy
YW5zcG9ydC5nZXQoKSkpCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlf
ZGF0YShtX2ljZVRyYW5zcG9ydC5nZXQoKSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNf
ZGlzY29ubmVjdF9ieV9kYXRhKG1fYmFja2VuZC5nZXQoKSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0Q2hhbmdlZCgpCit7CisgICAg
aWYgKEdfSVNfT0JKRUNUKG1faWNlVHJhbnNwb3J0LmdldCgpKSkKKyAgICAgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1faWNlVHJhbnNwb3J0LmdldCgpLCB0aGlzKTsK
KworICAgIGdfb2JqZWN0X2dldChtX2JhY2tlbmQuZ2V0KCksICJ0cmFuc3BvcnQiLCAmbV9pY2VU
cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKG1faWNlVHJhbnNwb3J0LmdldCgpLCAibm90aWZ5OjpzdGF0ZSIsIEdfQ0FMTEJBQ0soK1td
KEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2Vu
ZC0+c3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgIm5vdGlmeTo6Z2F0aGVyaW5nLXN0YXRlIiwg
R19DQUxMQkFDSygrW10oR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgewor
ICAgICAgICBiYWNrZW5kLT5nYXRoZXJpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7
Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQo
Q2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9jbGllbnQg
PSBjbGllbnQ7CisKKyAgICBHc3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgdHJhbnNwb3J0U3Rh
dGU7CisgICAgR3N0V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgZ2F0aGVyaW5nU3RhdGU7CisgICAg
Z19vYmplY3RfZ2V0KG1faWNlVHJhbnNwb3J0LmdldCgpLCAic3RhdGUiLCAmdHJhbnNwb3J0U3Rh
dGUsICJnYXRoZXJpbmctc3RhdGUiLCAmZ2F0aGVyaW5nU3RhdGUsIG51bGxwdHIpOworCisgICAg
Ly8gV2Ugc3RhcnQgb2JzZXJ2aW5nIGEgYml0IGxhdGUgYW5kIG1pZ2h0IG1pc3MgdGhlIGNoZWNr
aW5nIHN0YXRlLiBTeW50aGVzaXplIGl0IGFzIG5lZWRlZC4KKyAgICBpZiAodHJhbnNwb3J0U3Rh
dGUgPiBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NIRUNLSU5HICYmIHRyYW5zcG9y
dFN0YXRlICE9IEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0xPU0VEKSB7CisgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH1dIHsKKyAg
ICAgICAgICAgIGlmICghd2Vha1RoaXMgfHwgIXdlYWtUaGlzLT5tX2NsaWVudCkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVD
aGFuZ2VkKFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDaGVja2luZyk7CisgICAgICAgIH0pOworICAg
IH0KKyAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCB0
cmFuc3BvcnRTdGF0ZSwgZ2F0aGVyaW5nU3RhdGVdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcyB8
fCAhd2Vha1RoaXMtPm1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3ZWFr
VGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDSWNlVHJhbnNwb3J0U3RhdGUodHJh
bnNwb3J0U3RhdGUpKTsKKyAgICAgICAgd2Vha1RoaXMtPm1fY2xpZW50LT5vbkdhdGhlcmluZ1N0
YXRlQ2hhbmdlZCh0b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKGdhdGhlcmluZ1N0YXRlKSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNs
aWVudCgpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC5jbGVhcigpOwor
fQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCgpCit7
CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDSUNF
Q29ubmVjdGlvblN0YXRlIHRyYW5zcG9ydFN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX2ljZVRy
YW5zcG9ydC5nZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0YXRlLCBudWxscHRyKTsKKyAgICBj
YWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCB0cmFuc3BvcnRT
dGF0ZV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV9jbGllbnQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5tX2NsaWVudC0+b25TdGF0ZUNo
YW5nZWQodG9SVENJY2VUcmFuc3BvcnRTdGF0ZSh0cmFuc3BvcnRTdGF0ZSkpOworICAgIH0pOwor
fQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OmdhdGhlcmluZ1N0YXRlQ2hh
bmdlZCgpCit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0
V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgZ2F0aGVyaW5nU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0
KG1faWNlVHJhbnNwb3J0LmdldCgpLCAiZ2F0aGVyaW5nLXN0YXRlIiwgJmdhdGhlcmluZ1N0YXRl
LCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAq
dGhpcyB9LCBnYXRoZXJpbmdTdGF0ZV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFr
VGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5t
X2NsaWVudC0+b25HYXRoZXJpbmdTdGF0ZUNoYW5nZWQodG9SVENJY2VHYXRoZXJpbmdTdGF0ZShn
YXRoZXJpbmdTdGF0ZSkpOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNmZlYTUyMGJiYTkxMGZkMTdmMzAwNzk4NTUyN2E5ODY4OGY0YjA3ZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQ
dHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJJY2VUcmFuc3Bv
cnRCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBD
YW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kPiB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJJY2VU
cmFuc3BvcnRCYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mKTsK
KyAgICB+R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCgpOworCisgICAgdm9pZCBzdGF0ZUNo
YW5nZWQoKTsKKyAgICB2b2lkIGdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpOworCitwcml2YXRlOgor
ICAgIC8vIFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQKKyAgICBjb25zdCB2b2lkKiBiYWNrZW5kKCkg
Y29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICB2b2lkIHJlZ2lz
dGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAgIHZvaWQgdW5yZWdpc3RlckNsaWVudCgpIGZp
bmFsOworCisgICAgdm9pZCBpY2VUcmFuc3BvcnRDaGFuZ2VkKCk7CisKKyAgICBHUmVmUHRyPEdz
dFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IG1fYmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0lD
RVRyYW5zcG9ydD4gbV9pY2VUcmFuc3BvcnQ7CisgICAgV2Vha1B0cjxDbGllbnQ+IG1fY2xpZW50
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJN
ZWRpYUVuZHBvaW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNTdmYzViNjZmZjFhYzliNTFmM2M0YTM1NmQ0
ZGIyYjBhNDJiNjY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKQEAgLTAsMCAr
MSwxMjQwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oIgorCisjaWYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclNjdHBUcmFu
c3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNs
dWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIkpTUlRDU3RhdHNSZXBvcnQu
aCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3Vy
YXRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJUQ0RhdGFD
aGFubmVsLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxFdmVudC5oIgorI2luY2x1ZGUgIlJU
Q0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJUQ09mZmVyT3B0aW9ucy5oIgorI2luY2x1ZGUg
IlJUQ1BlZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDU2N0cFRyYW5zcG9ydEJhY2tlbmQu
aCIKKyNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJSVENTdGF0
c1JlcG9ydC5oIgorI2luY2x1ZGUgIlJUQ1RyYWNrRXZlbnQuaCIKKyNpbmNsdWRlICJSZWFsdGlt
ZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgPGdzdC9zZHAvc2RwLmg+CisjaW5jbHVkZSA8d3Rm
L01haW5UaHJlYWQuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9SdW5Mb29wU291cmNlUHJpb3JpdHkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0lu
dGVnZXJDb252ZXJzaW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRfd2VicnRjX2Vu
ZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5k
cG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50KEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZCYgcGVlckNvbm5lY3Rpb24pCisgICAgOiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZChwZWVyQ29u
bmVjdGlvbikKKyAgICAsIG1fc3RhdHNDb2xsZWN0b3IoR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6
OmNyZWF0ZSgpKQorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICwgbV9zdGF0c0xvZ1Rp
bWVyKCp0aGlzLCAmR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyU3RhdHNGb3JMb2dnaW5n
KQorICAgICwgbV9sb2dnZXIocGVlckNvbm5lY3Rpb24ubG9nZ2VyKCkpCisgICAgLCBtX2xvZ0lk
ZW50aWZpZXIocGVlckNvbm5lY3Rpb24ubG9nSWRlbnRpZmllcigpKQorI2VuZGlmCit7CisgICAg
ZW5zdXJlR1N0cmVhbWVySW5pdGlhbGl6ZWQoKTsKKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxh
ZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJl
ZEZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3dlYnJ0
Y19lbmRwb2ludF9kZWJ1ZywgIndlYmtpdHdlYnJ0Y2VuZHBvaW50IiwgMCwgIldlYktpdCBXZWJS
VEMgZW5kLXBvaW50Iik7CisgICAgfSk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6aW5pdGlhbGl6ZVBpcGVsaW5lKCkKK3sKKyAgICBzdGF0aWMgaW50IG5QaXBlbGluZSA9IDA7
CisgICAgYXV0byBwaXBlbGluZU5hbWUgPSBtYWtlU3RyaW5nKCJ3ZWJraXQtd2VicnQtcGlwZWxp
bmUtIiwgblBpcGVsaW5lKTsKKyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyhwaXBl
bGluZU5hbWUuYXNjaWkoKS5kYXRhKCkpOworCisgICAgY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VD
YWxsYmFjayhtX3BpcGVsaW5lLmdldCgpLCBbdGhpc10oR3N0TWVzc2FnZSogbWVzc2FnZSkgewor
ICAgICAgICBoYW5kbGVNZXNzYWdlKG1lc3NhZ2UpOworICAgIH0pOworCisgICAgYXV0byBiaW5O
YW1lID0gbWFrZVN0cmluZygid2Via2l0LXdlYnJ0Y2Jpbi0iLCBuUGlwZWxpbmUrKyk7CisgICAg
bV93ZWJydGNCaW4gPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgid2VicnRjYmluIiwgYmluTmFtZS5h
c2NpaSgpLmRhdGEoKSk7CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgbV9zdGF0c0NvbGxlY3Rvci0+c2V0RWxlbWVudChtX3dlYnJ0Y0Jpbi5nZXQo
KSk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAibm90
aWZ5OjppY2UtY29ubmVjdGlvbi1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQqIGVuZFBvaW50KSB7CisgICAgICAgIGVuZFBvaW50LT5vbkljZUNvbm5lY3Rpb25D
aGFuZ2UoKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1f
d2VicnRjQmluLmdldCgpLCAibm90aWZ5OjppY2UtZ2F0aGVyaW5nLXN0YXRlIiwgR19DQUxMQkFD
SygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQpIHsKKyAgICAgICAgZW5kUG9p
bnQtPm9uSWNlR2F0aGVyaW5nQ2hhbmdlKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLW5lZ290aWF0aW9uLW5lZWRl
ZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50KSB7Cisg
ICAgICAgIGVuZFBvaW50LT5vbk5lZ290aWF0aW9uTmVlZGVkKCk7CisgICAgfSksIHRoaXMpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLWljZS1j
YW5kaWRhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2lu
dCwgZ3VpbnQgc2RwTUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5kaWRhdGUpIHsKKyAgICAgICAg
ZW5kUG9pbnQtPm9uSWNlQ2FuZGlkYXRlKHNkcE1MaW5lSW5kZXgsIGNhbmRpZGF0ZSk7CisgICAg
fSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQo
KSwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVu
ZFBvaW50LCBHc3RQYWQqIHBhZCkgeworICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5v
dGlmaWNhdGlvbnMuCisgICAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9Q
QURfU1JDKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRB
bmRXYWl0KFtwcm90ZWN0ZWRUaGlzID0gUmVmKCplbmRQb2ludCksIHBhZF0geworICAgICAgICAg
ICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+YWRkUmVtb3RlU3RyZWFtKHBhZCk7Cisg
ICAgICAgIH0pOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV93ZWJydGNCaW4uZ2V0KCksICJwYWQtcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RQYWQqIHBhZCkgeworICAgICAgICAvLyBJZ25v
cmUgb3V0Z29pbmcgcGFkIG5vdGlmaWNhdGlvbnMuCisgICAgICAgIGlmIChHU1RfUEFEX0RJUkVD
VElPTihwYWQpICE9IEdTVF9QQURfU1JDKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGlmIChlbmRQb2ludC0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGVuZFBvaW50LT5yZW1vdmVSZW1vdGVTdHJlYW0ocGFkKTsKKyAgICB9KSwgdGhpcyk7CisKKyAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJvbi1kYXRhLWNo
YW5uZWwiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCwg
R3N0V2ViUlRDRGF0YUNoYW5uZWwqIGNoYW5uZWwpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uRGF0
YUNoYW5uZWwoY2hhbm5lbCk7CisgICAgfSksIHRoaXMpOworCisgICAgZ3N0X2Jpbl9hZGQoR1NU
X0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX3dlYnJ0Y0Jpbi5nZXQoKSk7CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK0dTdHJlYW1lck1lZGlhRW5kcG9pbnQ6On5HU3RyZWFtZXJNZWRpYUVu
ZHBvaW50KCkKK3sKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgdGVhcmRvd25QaXBlbGlu
ZSgpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRlYXJkb3duUGlwZWxpbmUo
KQoreworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0b3BMb2dnaW5nU3RhdHMoKTsK
KyNlbmRpZgorICAgIG1fc3RhdHNDb2xsZWN0b3ItPnNldEVsZW1lbnQobnVsbHB0cik7CisKKyAg
ICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9waXBlbGluZS5nZXQoKSwg
dGhpcyk7CisgICAgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5l
LmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NU
X1NUQVRFX05VTEwpOworCisgICAgbV9zb3VyY2VzLmNsZWFyKCk7CisgICAgbV9yZW1vdGVNTGlu
ZUluZm9zLmNsZWFyKCk7CisgICAgbV9yZW1vdGVTdHJlYW1zQnlJZC5jbGVhcigpOworICAgIG1f
d2VicnRjQmluID0gbnVsbHB0cjsKKyAgICBtX3BpcGVsaW5lID0gbnVsbHB0cjsKK30KKworYm9v
bCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3Nh
Z2UpCit7CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CisgICAgY2Fz
ZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lU
SF9UUyhHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9X
X0FMTCwgImVvcyIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VMRU1F
TlQ6IHsKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1
cmUobWVzc2FnZSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKGdzdF9zdHJ1Y3R1cmVfZ2V0X25h
bWUoZGF0YSksICJHc3RCaW5Gb3J3YXJkZWQiKSkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RN
ZXNzYWdlPiBzdWJNZXNzYWdlOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQoZGF0YSwg
Im1lc3NhZ2UiLCBHU1RfVFlQRV9NRVNTQUdFLCAmc3ViTWVzc2FnZS5vdXRQdHIoKSwgbnVsbHB0
cik7CisgICAgICAgICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShzdWJNZXNzYWdlLmdldCgpKSA9
PSBHU1RfTUVTU0FHRV9FT1MpCisgICAgICAgICAgICAgICAgZGlzcG9zZUVsZW1lbnRDaGFpbihH
U1RfRUxFTUVOVF9DQVNUKEdTVF9NRVNTQUdFX1NSQyhzdWJNZXNzYWdlLmdldCgpKSkpOworICAg
ICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVh
azsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6ZGlzcG9zZUVsZW1lbnRDaGFpbihHc3RFbGVtZW50KiBlbGVtZW50KQoreworICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkdvdCBlbGVtZW50IEVPUyBtZXNzYWdl
IGZyb20gJSIgR1NUX1BUUl9GT1JNQVQsIGVsZW1lbnQpOworCisgICAgYXV0byBwYWQgPSBhZG9w
dEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZWxlbWVudCwgInNpbmsiKSk7CisgICAg
YXV0byBwZWVyID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIocGFkLmdldCgpKSk7CisKKyAg
ICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIHRydWUpOwor
ICAgIGdzdF9wYWRfdW5saW5rKHBlZXIuZ2V0KCksIHBhZC5nZXQoKSk7CisgICAgZ3N0X2Jpbl9y
ZW1vdmUoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBlbGVtZW50KTsKKyAgICBnc3Rf
ZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKG1fd2VicnRjQmluLmdldCgpLCBwZWVyLmdldCgp
KTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoZWxlbWVudCwgR1NUX1NUQVRFX05VTEwpOwor
ICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgZmFsc2Up
OworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRpb24oTWVk
aWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgaWYgKG1fcGlw
ZWxpbmUpCisgICAgICAgIHRlYXJkb3duUGlwZWxpbmUoKTsKKworICAgIGlmICghaW5pdGlhbGl6
ZVBpcGVsaW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYnVuZGxlUG9s
aWN5ID0gYnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7CisgICAg
YXV0byBpY2VUcmFuc3BvcnRQb2xpY3kgPSBpY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29uZmlndXJh
dGlvbihjb25maWd1cmF0aW9uKTsKKyAgICBnX29iamVjdF9zZXQobV93ZWJydGNCaW4uZ2V0KCks
ICJidW5kbGUtcG9saWN5IiwgYnVuZGxlUG9saWN5LCAiaWNlLXRyYW5zcG9ydC1wb2xpY3kiLCBp
Y2VUcmFuc3BvcnRQb2xpY3ksIG51bGxwdHIpOworCisgICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBj
b25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHsKKyAgICAgICAgYm9vbCBzdHVuU2V0ID0gZmFsc2U7
CisgICAgICAgIGZvciAoYXV0byYgdXJsIDogc2VydmVyLnVybHMpIHsKKyAgICAgICAgICAgIGlm
ICh1cmwucHJvdG9jb2woKS5zdGFydHNXaXRoKCJ0dXJuIikpIHsKKyAgICAgICAgICAgICAgICBh
dXRvIHZhbGlkID0gdXJsLnN0cmluZygpLmlzb2xhdGVkQ29weSgpLnJlcGxhY2UoInR1cm46Iiwg
InR1cm46Ly8iKS5yZXBsYWNlKCJ0dXJuczoiLCAidHVybnM6Ly8iKTsKKyAgICAgICAgICAgICAg
ICBVUkwgdmFsaWRVUkwoVVJMKCksIHZhbGlkKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
bGlibmljZSBjdXJyZW50bHkgZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBJUHY2IGFkZHJlc3NlcyB2
ZXJ5IHdlbGwuCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkVVJMLmhvc3QoKS5zdGFydHNXaXRo
KCdbJykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHZh
bGlkVVJMLnNldFVzZXIoc2VydmVyLnVzZXJuYW1lKTsKKyAgICAgICAgICAgICAgICB2YWxpZFVS
TC5zZXRQYXNzd29yZChzZXJ2ZXIuY3JlZGVudGlhbCk7CisgICAgICAgICAgICAgICAgYm9vbCBy
ZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93
ZWJydGNCaW4uZ2V0KCksICJhZGQtdHVybi1zZXJ2ZXIiLCB2YWxpZFVSTC5zdHJpbmcoKS51dGY4
KCkuZGF0YSgpLCAmcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAg
ICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVuYWJsZSB0byB1c2UgVFVSTiBzZXJ2ZXI6ICVz
IiwgdmFsaWRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICB9CisgICAg
ICAgICAgICBpZiAoIXN0dW5TZXQgJiYgdXJsLnByb3RvY29sKCkuc3RhcnRzV2l0aCgic3R1biIp
KSB7CisgICAgICAgICAgICAgICAgYXV0byB2YWxpZCA9IHVybC5zdHJpbmcoKS5pc29sYXRlZENv
cHkoKS5yZXBsYWNlKCJzdHVuOiIsICJzdHVuOi8vIik7CisgICAgICAgICAgICAgICAgVVJMIHZh
bGlkVVJMKFVSTCgpLCB2YWxpZCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGxpYm5pY2Ug
Y3VycmVudGx5IGRvZXNuJ3Qgc2VlbSB0byBoYW5kbGUgSVB2NiBhZGRyZXNzZXMgdmVyeSB3ZWxs
LgorICAgICAgICAgICAgICAgIGlmICh2YWxpZFVSTC5ob3N0KCkuc3RhcnRzV2l0aCgnWycpKQor
ICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB2YWxpZFVSTC5z
ZXRVc2VyKHNlcnZlci51c2VybmFtZSk7CisgICAgICAgICAgICAgICAgdmFsaWRVUkwuc2V0UGFz
c3dvcmQoc2VydmVyLmNyZWRlbnRpYWwpOworICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldCht
X3dlYnJ0Y0Jpbi5nZXQoKSwgInN0dW4tc2VydmVyIiwgdmFsaWRVUkwuc3RyaW5nKCkudXRmOCgp
LmRhdGEoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgc3R1blNldCA9IHRydWU7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXSVA6IGh0dHBzOi8vZ2l0bGFi
LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVz
dHMvMzAyCisgICAgR1NUX0ZJWE1FKCIlenUgY3VzdG9tIGNlcnRpZmljYXRlcyBub3QgcHJvcGFn
YXRlZCB0byB3ZWJydGNiaW4iLCBjb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5zaXplKCkpOwor
CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9Q
TEFZSU5HKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJFbmQtcG9p
bnQgcmVhZHkiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpyZXN0YXJ0SWNlKCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJyZXN0YXJ0aW5nIElDRSIpOworICAgIC8vIFdJUCBpbiBodHRwczovL2dpdGxhYi5m
cmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3Rz
LzE4NzcKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gb3B0aW9ucyhnc3Rfc3RydWN0dXJl
X25ldygid2VicnRjYmluLW9mZmVyLW9wdGlvbnMiLCAiaWNlLXJlc3RhcnQiLCBHX1RZUEVfQk9P
TEVBTiwgVFJVRSwgbnVsbHB0cikpOworICAgIGluaXRpYXRlKHRydWUsIFdURk1vdmUob3B0aW9u
cykpOworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UlRDU2RwVHlwZSwgU3Ry
aW5nPj4gZmV0Y2hEZXNjcmlwdGlvbihHc3RFbGVtZW50KiB3ZWJydGNCaW4sIGNvbnN0IGNoYXIq
IG5hbWUpCit7CisgICAgaWYgKCF3ZWJydGNCaW4pCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVzY3JpcHRpb247
CisgICAgZ19vYmplY3RfZ2V0KHdlYnJ0Y0JpbiwgbWFrZVN0cmluZyhuYW1lLCAiLWRlc2NyaXB0
aW9uIikudXRmOCgpLmRhdGEoKSwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKyAg
ICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgR1VuaXF1ZVB0
cjxjaGFyPiBzZHBTdHJpbmcoZ3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoZGVzY3JpcHRpb24tPnNk
cCkpOworICAgIEdTVF9UUkFDRV9PQkpFQ1Qod2VicnRjQmluLCAiJXMtZGVzY3JpcHRpb24gU0RQ
OiAlcyIsIG5hbWUsIHNkcFN0cmluZy5nZXQoKSk7CisgICAgcmV0dXJuIHsgeyBmcm9tU2Vzc2lv
bkRlc2NyaXB0aW9uVHlwZSgqZGVzY3JpcHRpb24uZ2V0KCkpLCBzZHBTdHJpbmcuZ2V0KCkgfSB9
OworfQorCitzdGF0aWMgR3N0V2ViUlRDU2lnbmFsaW5nU3RhdGUgZmV0Y2hTaWduYWxpbmdTdGF0
ZShHc3RFbGVtZW50KiB3ZWJydGNCaW4pCit7CisgICAgR3N0V2ViUlRDU2lnbmFsaW5nU3RhdGUg
c3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KHdlYnJ0Y0JpbiwgInNpZ25hbGluZy1zdGF0ZSIsICZz
dGF0ZSwgbnVsbHB0cik7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIEdVbmlx
dWVQdHI8Y2hhcj4gZGVzYyhnX2VudW1fdG9fc3RyaW5nKEdTVF9UWVBFX1dFQlJUQ19TSUdOQUxJ
TkdfU1RBVEUsIHN0YXRlKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVCh3ZWJydGNCaW4sICJTaWdu
YWxpbmcgc3RhdGUgc2V0IHRvICVzIiwgZGVzYy5nZXQoKSk7CisjZW5kaWYKKyAgICByZXR1cm4g
c3RhdGU7Cit9CisKK2VudW0gY2xhc3MgR2F0aGVyU2lnbmFsaW5nU3RhdGUgeyBObywgWWVzIH07
CitzdGF0aWMgc3RkOjpvcHRpb25hbDxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkRlc2NyaXB0aW9u
U3RhdGVzPiBkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKEdzdEVsZW1lbnQqIHdlYnJ0Y0Jpbiwg
R2F0aGVyU2lnbmFsaW5nU3RhdGUgZ2F0aGVyU2lnbmFsaW5nU3RhdGUgPSBHYXRoZXJTaWduYWxp
bmdTdGF0ZTo6Tm8pCit7CisgICAgc3RkOjpvcHRpb25hbDxSVENTZHBUeXBlPiBjdXJyZW50TG9j
YWxEZXNjcmlwdGlvblNkcFR5cGUsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSwgY3Vy
cmVudFJlbW90ZURlc2NyaXB0aW9uU2RwVHlwZSwgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2Rw
VHlwZTsKKyAgICBTdHJpbmcgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHAsIHBlbmRpbmdMb2Nh
bERlc2NyaXB0aW9uU2RwLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHAsIHBlbmRpbmdSZW1v
dGVEZXNjcmlwdGlvblNkcDsKKyAgICBpZiAoYXV0byBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9
IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAiY3VycmVudC1sb2NhbCIpKSB7CisgICAgICAg
IGF1dG8gW3NkcFR5cGUsIGRlc2NyaXB0aW9uXSA9ICpjdXJyZW50TG9jYWxEZXNjcmlwdGlvbjsK
KyAgICAgICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAg
ICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAg
ICB9CisgICAgaWYgKGF1dG8gcGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gPSBmZXRjaERlc2NyaXB0
aW9uKHdlYnJ0Y0JpbiwgInBlbmRpbmctbG9jYWwiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBl
LCBkZXNjcmlwdGlvbl0gPSAqcGVuZGluZ0xvY2FsRGVzY3JpcHRpb247CisgICAgICAgIHBlbmRp
bmdMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSA9IHNkcFR5cGU7CisgICAgICAgIHBlbmRpbmdMb2Nh
bERlc2NyaXB0aW9uU2RwID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChh
dXRvIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmlu
LCAiY3VycmVudC1yZW1vdGUiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlv
bl0gPSAqY3VycmVudFJlbW90ZURlc2NyaXB0aW9uOworICAgICAgICBjdXJyZW50UmVtb3RlRGVz
Y3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgY3VycmVudFJlbW90ZURlc2NyaXB0
aW9uU2RwID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChhdXRvIHBlbmRp
bmdSZW1vdGVEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAicGVuZGlu
Zy1yZW1vdGUiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAqcGVu
ZGluZ1JlbW90ZURlc2NyaXB0aW9uOworICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25T
ZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwID0g
V1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxSVENTaWdu
YWxpbmdTdGF0ZT4gc2lnbmFsaW5nU3RhdGU7CisgICAgaWYgKGdhdGhlclNpZ25hbGluZ1N0YXRl
ID09IEdhdGhlclNpZ25hbGluZ1N0YXRlOjpZZXMpCisgICAgICAgIHNpZ25hbGluZ1N0YXRlID0g
dG9TaWduYWxpbmdTdGF0ZShmZXRjaFNpZ25hbGluZ1N0YXRlKHdlYnJ0Y0JpbikpOworCisgICAg
cmV0dXJuIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6RGVzY3JpcHRpb25TdGF0ZXMgeworICAgICAg
ICBzaWduYWxpbmdTdGF0ZSwKKyAgICAgICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHBUeXBl
LCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcCwKKyAgICAgICAgcGVuZGluZ0xvY2FsRGVzY3Jp
cHRpb25TZHBUeXBlLCBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvblNkcCwKKyAgICAgICAgY3VycmVu
dFJlbW90ZURlc2NyaXB0aW9uU2RwVHlwZSwgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwLAor
ICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nUmVtb3RlRGVz
Y3JpcHRpb25TZHAKKyAgICB9OworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRv
U2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0
aW9uKQoreworICAgIHNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uLCB0cnVlLCBbcHJvdGVjdGVk
VGhpcyA9IFJlZigqdGhpcyldIHsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlvbnMgPSBkZXNjcmlw
dGlvbnNGcm9tV2ViUlRDQmluKHByb3RlY3RlZFRoaXMtPm1fd2VicnRjQmluLmdldCgpLCBHYXRo
ZXJTaWduYWxpbmdTdGF0ZTo6WWVzKTsKKyAgICAgICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJh
bnNwb3J0PiB0cmFuc3BvcnQ7CisgICAgICAgIGdfb2JqZWN0X2dldChwcm90ZWN0ZWRUaGlzLT5t
X3dlYnJ0Y0Jpbi5nZXQoKSwgInNjdHAtdHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwg
bnVsbHB0cik7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5k
LnNldExvY2FsRGVzY3JpcHRpb25TdWNjZWVkZWQoV1RGTW92ZShkZXNjcmlwdGlvbnMpLCB0cmFu
c3BvcnQgPyBtYWtlVW5pcXVlPEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kPihXVEZNb3Zl
KHRyYW5zcG9ydCkpIDogbnVsbHB0cik7CisgICAgfSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRo
aXMpXShjb25zdCBHRXJyb3IqIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci0+
Y29kZSA9PSBHU1RfV0VCUlRDX0VSUk9SX0lOVkFMSURfU1RBVEUpCisgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRMb2NhbERlc2NyaXB0aW9uRmFp
bGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIHNldCBsb2NhbCBh
bnN3ZXIgc2RwOiBubyBwZW5kaW5nIHJlbW90ZSBkZXNjcmlwdGlvbi4iX3MgfSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5k
LnNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJV
bmFibGUgdG8gYXBwbHkgc2Vzc2lvbiBsb2NhbCBkZXNjcmlwdGlvbiJfcyB9KTsKKyAgICB9KTsK
K30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRSZW1vdGVEZXNjcmlwdGlvblN1
Y2NlZWRlZCgpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWNr
aW5nIHJlbW90ZSBkZXNjcmlwdGlvbiIpOworICAgIGF1dG8gZGVzY3JpcHRpb25zID0gZGVzY3Jp
cHRpb25zRnJvbVdlYlJUQ0JpbihtX3dlYnJ0Y0Jpbi5nZXQoKSwgR2F0aGVyU2lnbmFsaW5nU3Rh
dGU6Olllcyk7CisgICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiB0cmFuc3BvcnQ7
CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAic2N0cC10cmFuc3BvcnQiLCAm
dHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uQmFja2Vu
ZC5zZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZChXVEZNb3ZlKGRlc2NyaXB0aW9ucyksIHRy
YW5zcG9ydCA/IG1ha2VVbmlxdWU8R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ+KFdURk1v
dmUodHJhbnNwb3J0KSkgOiBudWxscHRyKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50Ojpkb1NldFJlbW90ZURlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYg
ZGVzY3JpcHRpb24pCit7CisgICAgc2V0RGVzY3JpcHRpb24oJmRlc2NyaXB0aW9uLCBmYWxzZSwg
W3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnNl
dFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKCk7CisgICAgfSwgW3Byb3RlY3RlZFRoaXMgPSBS
ZWYoKnRoaXMpXShjb25zdCBHRXJyb3IqIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAmJiBl
cnJvci0+Y29kZSA9PSBHU1RfV0VCUlRDX0VSUk9SX0lOVkFMSURfU1RBVEUpCisgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRSZW1vdGVEZXNjcmlw
dGlvbkZhaWxlZChFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBzZXQg
cmVtb3RlIGFuc3dlciBzZHAiX3MgfSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldFJlbW90ZURlc2NyaXB0aW9uRmFp
bGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFwcGx5IHNlc3Npb24g
cmVtb3RlIGRlc2NyaXB0aW9uIl9zIH0pOworICAgIH0pOworI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAorICAgIHN0YXJ0TG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKworc3RydWN0IFNldERl
c2NyaXB0aW9uQ2FsbERhdGEgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsK
KyAgICBTZXREZXNjcmlwdGlvbkNhbGxEYXRhKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQmIGVuZFBv
aW50LCBGdW5jdGlvbjx2b2lkKCk+JiYgc3VjY2Vzc0NhbGxiYWNrLCBGdW5jdGlvbjx2b2lkKGNv
bnN0IEdFcnJvciopPiYmIGZhaWx1cmVDYWxsYmFjaykKKyAgICAgICAgOiBzdWNjZXNzQ2FsbGJh
Y2soV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spKQorICAgICAgICAsIGZhaWx1cmVDYWxsYmFjayhX
VEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpCisgICAgICAgICwgZW5kUG9pbnQoZW5kUG9pbnQpIHsg
fQorCisgICAgRnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2s7CisgICAgRnVuY3Rpb248
dm9pZChjb25zdCBHRXJyb3IqKT4gZmFpbHVyZUNhbGxiYWNrOworICAgIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQmIGVuZFBvaW50OworfTsKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpz
ZXREZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uLCBi
b29sIGlzTG9jYWwsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzdWNjZXNzQ2FsbGJhY2ssIEZ1bmN0aW9u
PHZvaWQoY29uc3QgR0Vycm9yKik+JiYgZmFpbHVyZUNhbGxiYWNrKQoreworICAgIEdzdFNEUE1l
c3NhZ2UqIG1lc3NhZ2U7CisgICAgYXV0byBzZHBUeXBlID0gUlRDU2RwVHlwZTo6T2ZmZXI7CisK
KyAgICBpZiAoZGVzY3JpcHRpb24pIHsKKyAgICAgICAgaWYgKGdzdF9zZHBfbWVzc2FnZV9uZXdf
ZnJvbV90ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRlc2NyaXB0aW9uLT5zZHAo
KS5jaGFyYWN0ZXJzOCgpKSwgJm1lc3NhZ2UpICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAgICAg
IGZhaWx1cmVDYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorICAgICAgICBzZHBUeXBlID0gZGVzY3JpcHRpb24tPnR5cGUoKTsKKyAgICB9IGVsc2UgaWYg
KGdzdF9zZHBfbWVzc2FnZV9uZXcoJm1lc3NhZ2UpICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAg
ZmFpbHVyZUNhbGxiYWNrKG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
aWYgKCFpc0xvY2FsKQorICAgICAgICBzdG9yZVJlbW90ZU1MaW5lSW5mbyhtZXNzYWdlKTsKKwor
ICAgIGF1dG8gdHlwZSA9IHRvU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShzZHBUeXBlKTsKKyAgICBH
U1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDcmVhdGluZyAlcyBzZXNzaW9uIGZv
ciBTRFAgJXMiLCBpc0xvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLCBnc3Rfd2VicnRjX3NkcF90
eXBlX3RvX3N0cmluZyh0eXBlKSk7CisKKyAgICBHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbj4gc2Vzc2lvbkRlc2NyaXB0aW9uKGdzdF93ZWJydGNfc2Vzc2lvbl9kZXNjcmlw
dGlvbl9uZXcodHlwZSwgbWVzc2FnZSkpOworICAgIGF1dG8gc2lnbmFsTmFtZSA9IG1ha2VTdHJp
bmcoInNldC0iLCBpc0xvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLCAiLWRlc2NyaXB0aW9uIik7
CisgICAgYXV0byBkYXRhID0gbWFrZVVuaXF1ZTxTZXREZXNjcmlwdGlvbkNhbGxEYXRhPigqdGhp
cywgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOwor
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgc2lnbmFsTmFtZS5h
c2NpaSgpLmRhdGEoKSwgc2Vzc2lvbkRlc2NyaXB0aW9uLmdldCgpLCBnc3RfcHJvbWlzZV9uZXdf
d2l0aF9jaGFuZ2VfZnVuYyhbXShHc3RQcm9taXNlKiByYXdQcm9taXNlLCBncG9pbnRlciB1c2Vy
RGF0YSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2V0RGVzY3JpcHRpb25DYWxsRGF0YT4g
ZGF0YShyZWludGVycHJldF9jYXN0PFNldERlc2NyaXB0aW9uQ2FsbERhdGEqPih1c2VyRGF0YSkp
OworICAgICAgICBhdXRvIHByb21pc2UgPSBhZG9wdEdSZWYocmF3UHJvbWlzZSk7CisgICAgICAg
IGF1dG8gcmVzdWx0ID0gZ3N0X3Byb21pc2Vfd2FpdChwcm9taXNlLmdldCgpKTsKKyAgICAgICAg
Y29uc3QgYXV0byogcmVwbHkgPSBnc3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZS5nZXQoKSk7
CisgICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQgfHwgKHJl
cGx5ICYmIGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlcGx5LCAiZXJyb3IiKSkpIHsKKyAgICAg
ICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIGlmIChyZXBs
eSkgeworICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJlcGx5LCAiZXJyb3IiLCBH
X1RZUEVfRVJST1IsICZlcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAg
R1NUX0VSUk9SX09CSkVDVChkYXRhLT5lbmRQb2ludC5waXBlbGluZSgpLCAiVW5hYmxlIHRvIHNl
dCBkZXNjcmlwdGlvbiwgZXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZXJyb3IgPSBlcnJvci5nZXQoKSwgcHJv
dGVjdGVkVGhpcyA9IFJlZihkYXRhLT5lbmRQb2ludCksIGZhaWx1cmVDYWxsYmFjayA9IFdURk1v
dmUoZGF0YS0+ZmFpbHVyZUNhbGxiYWNrKV0geworICAgICAgICAgICAgICAgIGlmIChwcm90ZWN0
ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICAgICAgICAgIGZhaWx1cmVDYWxsYmFjayhlcnJvcik7CisgICAgICAgICAgICB9KTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90
ZWN0ZWRUaGlzID0gUmVmKGRhdGEtPmVuZFBvaW50KSwgc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92
ZShkYXRhLT5zdWNjZXNzQ2FsbGJhY2spXSB7CisgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhp
cy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc3Vj
Y2Vzc0NhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAgIH0sIGRhdGEucmVsZWFzZSgpLCBudWxs
cHRyKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcmVSZW1vdGVNTGlu
ZUluZm8oR3N0U0RQTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBtX3JlbW90ZU1MaW5lSW5mb3Mu
Y2xlYXIoKTsKKyAgICB1bnNpZ25lZCB0b3RhbE1lZGlhcyA9IGdzdF9zZHBfbWVzc2FnZV9tZWRp
YXNfbGVuKG1lc3NhZ2UpOworICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5yZXNlcnZlQ2FwYWNpdHko
dG90YWxNZWRpYXMpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlN0
b3JpbmcgJXUgcmVtb3RlIHBlbmRpbmcgbWxpbmVzIiwgdG90YWxNZWRpYXMpOworICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE1lZGlhczsgaSsrKSB7CisgICAgICAgIGNvbnN0IEdz
dFNEUE1lZGlhKiBtZWRpYSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEobWVzc2FnZSwgaSk7
CisgICAgICAgIGNvbnN0IGNoYXIqIHR5cCA9IGdzdF9zZHBfbWVkaWFfZ2V0X21lZGlhKG1lZGlh
KTsKKyAgICAgICAgaWYgKCFnX3N0cl9lcXVhbCh0eXAsICJhdWRpbyIpICYmICFnX3N0cl9lcXVh
bCh0eXAsICJ2aWRlbyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyNpZm5kZWYgR1NUX0RJ
U0FCTEVfR1NUX0RFQlVHCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbWVkaWFSZXByZXNlbnRh
dGlvbihnc3Rfc2RwX21lZGlhX2FzX3RleHQobWVkaWEpKTsKKyAgICAgICAgR1NUX0xPR19PQkpF
Q1QobV9waXBlbGluZS5nZXQoKSwgIlByb2Nlc3NpbmcgbWVkaWE6XG4lcyIsIG1lZGlhUmVwcmVz
ZW50YXRpb24uZ2V0KCkpOworI2VuZGlmCisgICAgICAgIGNvbnN0IGNoYXIqIG1pZCA9IGdzdF9z
ZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZV92YWwobWVkaWEsICJtaWQiKTsKKyAgICAgICAgaWYgKCFt
aWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBib29sIGlzSW5hY3RpdmUgPSBm
YWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgZ3N0X3NkcF9tZWRpYV9h
dHRyaWJ1dGVzX2xlbihtZWRpYSk7IGlpKyspIHsKKyAgICAgICAgICAgIGNvbnN0IEdzdFNEUEF0
dHJpYnV0ZSogYXR0ciA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZShtZWRpYSwgaWkpOwor
ICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXR0ci0+a2V5LCAiaW5hY3RpdmUiKSkgeworICAg
ICAgICAgICAgICAgIGlzSW5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpc0luYWN0aXZlKSB7CisgICAg
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTa2lwcGluZyBpbmFj
dGl2ZSBtZWRpYSIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAg
ICBtX21lZGlhRm9yTWlkLnNldChTdHJpbmcobWlkKSwgZ19zdHJfZXF1YWwodHlwLCAiYXVkaW8i
KSA/IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvIDogUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VHlwZTo6VmlkZW8pOworCisgICAgICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9w
Lm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTkwNworICAg
ICAgICBpZiAoc2RwTWVkaWFIYXNBdHRyaWJ1dGVLZXkobWVkaWEsICJpY2UtbGl0ZSIpKSB7Cisg
ICAgICAgICAgICBHUmVmUHRyPEdPYmplY3Q+IGljZTsKKyAgICAgICAgICAgIGdfb2JqZWN0X2dl
dChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImljZS1hZ2VudCIsICZpY2Uub3V0UHRyKCksIG51bGxwdHIp
OworICAgICAgICAgICAgZ19vYmplY3Rfc2V0KGljZS5nZXQoKSwgImljZS1saXRlIiwgVFJVRSwg
bnVsbHB0cik7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0
X2NhcHNfbmV3X2VtcHR5KCkpOworICAgICAgICBWZWN0b3I8aW50PiBwYXlsb2FkVHlwZXM7Cisg
ICAgICAgIHVuc2lnbmVkIHRvdGFsRm9ybWF0cyA9IGdzdF9zZHBfbWVkaWFfZm9ybWF0c19sZW4o
bWVkaWEpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJNZWRp
YSAlcyBoYXMgJXUgZm9ybWF0cyIsIHR5cCwgdG90YWxGb3JtYXRzKTsKKyAgICAgICAgZm9yICh1
bnNpZ25lZCBqID0gMDsgaiA8IHRvdGFsRm9ybWF0czsgaisrKSB7CisgICAgICAgICAgICBhdXRv
IGZvcm1hdCA9IFN0cmluZyhnc3Rfc2RwX21lZGlhX2dldF9mb3JtYXQobWVkaWEsIGopKTsKKyAg
ICAgICAgICAgIGF1dG8gcGF5bG9hZFR5cGUgPSBwYXJzZUludGVnZXI8aW50Pihmb3JtYXQpOwor
ICAgICAgICAgICAgaWYgKCFwYXlsb2FkVHlwZSB8fCAhKnBheWxvYWRUeXBlKSB7CisgICAgICAg
ICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJJbnZhbGlkIHBh
eWxvYWQgdHlwZTogJXMiLCBmb3JtYXQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAg
Y29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIGZvcm1hdENhcHMgPSBh
ZG9wdEdSZWYoZ3N0X3NkcF9tZWRpYV9nZXRfY2Fwc19mcm9tX21lZGlhKG1lZGlhLCAqcGF5bG9h
ZFR5cGUpKTsKKyAgICAgICAgICAgIGlmICghZm9ybWF0Q2FwcykgeworICAgICAgICAgICAgICAg
IEdTVF9XQVJOSU5HX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTm8gY2FwcyBmb3VuZCBmb3Ig
cGF5bG9hZCB0eXBlICVkIiwgKnBheWxvYWRUeXBlKTsKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVsYXkgU0RQIGF0dHJpYnV0ZXMg
dG8gdGhlIGNhcHMsIHRoaXMgaXMgc3BlY2lhbGx5IHVzZWZ1bCBzbyB0aGF0IGVsZW1lbnRzIGlu
CisgICAgICAgICAgICAvLyB3ZWJydGNiaW4gd2lsbCBiZSBhYmxlIHRvIGVuYWJsZSBSVFAgaGVh
ZGVyIGV4dGVuc2lvbnMuCisgICAgICAgICAgICBnc3Rfc2RwX21lZGlhX2F0dHJpYnV0ZXNfdG9f
Y2FwcyhtZWRpYSwgZm9ybWF0Q2Fwcy5nZXQoKSk7CisKKyAgICAgICAgICAgIGdzdF9jYXBzX2Fw
cGVuZChjYXBzLmdldCgpLCBmb3JtYXRDYXBzLmxlYWtSZWYoKSk7CisgICAgICAgICAgICBtX3B0
Q291bnRlciA9IHN0ZDo6bWF4KG1fcHRDb3VudGVyLCAqcGF5bG9hZFR5cGUgKyAxKTsKKyAgICAg
ICAgICAgIHBheWxvYWRUeXBlcy5hcHBlbmQoKnBheWxvYWRUeXBlKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHVuc2lnbmVkIHRvdGFsQ2FwcyA9IGdzdF9jYXBzX2dldF9zaXplKGNhcHMuZ2V0KCkp
OworICAgICAgICBpZiAodG90YWxDYXBzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGog
PSAwOyBqIDwgdG90YWxDYXBzOyBqKyspIHsKKyAgICAgICAgICAgICAgICBHc3RTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgaik7CisgICAg
ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNhdGlv
bi94LXJ0cCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiQ2FjaGluZyBwYXlsb2FkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFU
LCBjYXBzLmdldCgpKTsKKyAgICAgICAgICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5hcHBlbmQoeyBX
VEZNb3ZlKGNhcHMpLCBmYWxzZSwgV1RGTW92ZShwYXlsb2FkVHlwZXMpIH0pOworICAgICAgICB9
CisgICAgfQorfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNvbmZpZ3VyZUFuZExp
bmtTb3VyY2UoUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyJiBzb3VyY2UpCit7
CisgICAgYXV0byBjYXBzID0gc291cmNlLmFsbG93ZWRDYXBzKCk7CisgICAgc3RkOjpvcHRpb25h
bDxzdGQ6OnBhaXI8UGVuZGluZ01MaW5lSW5mbywgR1JlZlB0cjxHc3RDYXBzPj4+IGZvdW5kOwor
ICAgIGZvciAoYXV0byYgbUxpbmVJbmZvIDogbV9yZW1vdGVNTGluZUluZm9zKSB7CisgICAgICAg
IGlmIChtTGluZUluZm8uaXNVc2VkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
Zm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplKG1MaW5lSW5mby5jYXBz
LmdldCgpKTsgaSsrKSB7CisgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19n
ZXRfc3RydWN0dXJlKG1MaW5lSW5mby5jYXBzLmdldCgpLCBpKTsKKyAgICAgICAgICAgIGF1dG8g
Y2FwczIgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0
cnVjdHVyZSksIG51bGxwdHIpKTsKKyAgICAgICAgICAgIGF1dG8gaW50ZXJzZWN0ZWQgPSBhZG9w
dEdSZWYoZ3N0X2NhcHNfaW50ZXJzZWN0KGNhcHMuZ2V0KCksIGNhcHMyLmdldCgpKSk7CisgICAg
ICAgICAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5KGludGVyc2VjdGVkLmdldCgpKSkgeworICAg
ICAgICAgICAgICAgIGZvdW5kID0gc3RkOjptYWtlX3BhaXIobUxpbmVJbmZvLCBXVEZNb3ZlKGlu
dGVyc2VjdGVkKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAg
ICAgIH0KKyAgICAgICAgaWYgKGZvdW5kLmhhc192YWx1ZSgpKQorICAgICAgICAgICAgYnJlYWs7
CisgICAgfQorCisgICAgYm9vbCBwYXlsb2FkVHlwZVdhc1NldCA9IGZhbHNlOworICAgIGlmIChm
b3VuZCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJVbnVz
ZWQgYW5kIGNvbXBhdGlibGUgY2FwcyBmb3VuZCBmb3IgJSIgR1NUX1BUUl9GT1JNQVQgIi4uLiAl
IiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSwgZm91bmQtPnNlY29uZC5nZXQoKSk7CisgICAg
ICAgIHBheWxvYWRUeXBlV2FzU2V0ID0gc291cmNlLnNldFBheWxvYWRUeXBlKGZvdW5kLT5zZWNv
bmQpOworICAgICAgICBmb3VuZC0+Zmlyc3QuaXNVc2VkID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAg
ICAgICAgcGF5bG9hZFR5cGVXYXNTZXQgPSBzb3VyY2Uuc2V0UGF5bG9hZFR5cGUoY2Fwcyk7CisK
KyAgICBpZiAoIXBheWxvYWRUeXBlV2FzU2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAo
IXNvdXJjZS5wYWQoKSkgeworICAgICAgICBzb3VyY2Uuc2V0U2lua1BhZChyZXF1ZXN0UGFkKG1f
cmVxdWVzdFBhZENvdW50ZXIsIHNvdXJjZS5hbGxvd2VkQ2FwcygpKSk7CisgICAgICAgIG1fcmVx
dWVzdFBhZENvdW50ZXIrKzsKKyAgICB9CisKKyAgICBhdXRvJiBzaW5rUGFkID0gc291cmNlLnBh
ZCgpOworICAgIFJFTEVBU0VfQVNTRVJUKCFnc3RfcGFkX2lzX2xpbmtlZChzaW5rUGFkLmdldCgp
KSk7CisgICAgYXV0byBzb3VyY2VCaW4gPSBzb3VyY2UuYmluKCk7CisgICAgZ3N0X2Jpbl9hZGQo
R1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBzb3VyY2VCaW4uZ2V0KCkpOworICAgIHNv
dXJjZS5saW5rKCk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBhZElkKGdzdF9wYWRfZ2V0X25h
bWUoc2lua1BhZC5nZXQoKSkpOworICAgIGF1dG8gZG90RmlsZU5hbWUgPSBtYWtlU3RyaW5nKEdT
VF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwgIi5vdXRnb2luZy0iLCBwYWRJZC5nZXQo
KSk7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBl
bGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgp
LmRhdGEoKSk7Cit9CisKK0dSZWZQdHI8R3N0UGFkPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpy
ZXF1ZXN0UGFkKHVuc2lnbmVkIG1saW5lSW5kZXgsIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGFs
bG93ZWRDYXBzKQoreworICAgIGF1dG8gcGFkSWQgPSBtYWtlU3RyaW5nKCJzaW5rXyIsIG1saW5l
SW5kZXgpOworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19jb3B5KGFsbG93ZWRD
YXBzLmdldCgpKSk7CisKKyAgICBnc3RfY2Fwc19tYXBfaW5fcGxhY2UoY2Fwcy5nZXQoKSwgW10o
R3N0Q2Fwc0ZlYXR1cmVzKiwgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGdwb2ludGVyIHVzZXJE
YXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIGF1dG8qIGVuZFBvaW50ID0gcmVpbnRlcnByZXRf
Y2FzdDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50Kj4odXNlckRhdGEpOworICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChzdHJ1Y3R1cmUsICJwYXlsb2FkIiwgR19UWVBFX0lOVCwgZW5kUG9pbnQtPm1f
cHRDb3VudGVyKyssIG51bGxwdHIpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9LCB0aGlz
KTsKKworICAgIC8vIEZJWE1FOiBSZXN0cmljdGluZyBjYXBzIGFuZCBjb2RlYy1wcmVmZXJlbmNl
cyBicmVha3MgY2FwcyBuZWdvdGlhdGlvbiBvZiBvdXRnb2luZyBzb3VyY2VzIGluCisgICAgLy8g
c29tZSBjYXNlIChqaXRzaSkuCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgp
LCAiUmVxdWVzdGluZyBwYWQgJXMgcmVzdHJpY3RlZCB0byAlIiBHU1RfUFRSX0ZPUk1BVCwgcGFk
SWQudXRmOCgpLmRhdGEoKSwgY2Fwcy5nZXQoKSk7CisgICAgYXV0byogcGFkVGVtcGxhdGUgPSBn
c3RfZWxlbWVudF9nZXRfcGFkX3RlbXBsYXRlKG1fd2VicnRjQmluLmdldCgpLCAic2lua18ldSIp
OworICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZCht
X3dlYnJ0Y0Jpbi5nZXQoKSwgcGFkVGVtcGxhdGUsIHBhZElkLnV0ZjgoKS5kYXRhKCksIGNhcHMu
Z2V0KCkpKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiB0cmFuc2NlaXZl
cjsKKyAgICBnX29iamVjdF9nZXQoc2lua1BhZC5nZXQoKSwgInRyYW5zY2VpdmVyIiwgJnRyYW5z
Y2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9zZXQodHJhbnNjZWl2ZXIu
Z2V0KCksICJjb2RlYy1wcmVmZXJlbmNlcyIsIGNhcHMuZ2V0KCksIG51bGxwdHIpOworICAgIHJl
dHVybiBzaW5rUGFkOworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYWNr
KEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIHNlbmRlciwgTWVkaWFTdHJlYW1UcmFjayYgdHJh
Y2ssIGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKQoreworICAgIEdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ6OlNvdXJjZSBzb3VyY2U7CisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+
IHJ0Y1NlbmRlcjsKKworICAgIGlmICh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNBdWRpbygpKSB7
CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyBvdXRn
b2luZyBhdWRpbyBzb3VyY2UiKTsKKyAgICAgICAgYXV0byBhdWRpb1NvdXJjZSA9IFJlYWx0aW1l
T3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygp
KTsKKyAgICAgICAgY29uZmlndXJlQW5kTGlua1NvdXJjZShhdWRpb1NvdXJjZSk7CisKKyAgICAg
ICAgcnRjU2VuZGVyID0gYXVkaW9Tb3VyY2UtPnNlbmRlcigpOworICAgICAgICBzb3VyY2UgPSBX
VEZNb3ZlKGF1ZGlvU291cmNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VS
VCh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNWaWRlbygpKTsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIG91dGdvaW5nIHZpZGVvIHNvdXJjZSIpOwor
ICAgICAgICBhdXRvIHZpZGVvU291cmNlID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0
cmVhbWVyOjpjcmVhdGUodHJhY2sucHJpdmF0ZVRyYWNrKCkpOworICAgICAgICBjb25maWd1cmVB
bmRMaW5rU291cmNlKHZpZGVvU291cmNlKTsKKworICAgICAgICBydGNTZW5kZXIgPSB2aWRlb1Nv
dXJjZS0+c2VuZGVyKCk7CisgICAgICAgIHNvdXJjZSA9IFdURk1vdmUodmlkZW9Tb3VyY2UpOwor
ICAgIH0KKworICAgIHNlbmRlci5zZXRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKKworICAgIGlm
IChhdXRvIHJ0cFNlbmRlciA9IHNlbmRlci5ydGNTZW5kZXIoKSkgeworICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBbHJlYWR5IGhhcyBhIHNlbmRlci4iKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc2VuZGVyLnNldFJUQ1NlbmRlcihXVEZN
b3ZlKHJ0Y1NlbmRlcikpOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgp
LCAiU2VuZGVyIGNvbmZpZ3VyZWQiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5k
JiBzZW5kZXIpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVt
b3ZpbmcgdHJhY2siKTsKKyAgICBhdXRvIGJpbiA9IHNlbmRlci5zdG9wU291cmNlKCk7CisgICAg
aWYgKGJpbikKKyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUu
Z2V0KCkpLCBiaW4uZ2V0KCkpOworICAgIHNlbmRlci5jbGVhclNvdXJjZSgpOworICAgIG9uTmVn
b3RpYXRpb25OZWVkZWQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb0Ny
ZWF0ZU9mZmVyKGNvbnN0IFJUQ09mZmVyT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICAvLyBodHRw
czovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21l
cmdlX3JlcXVlc3RzLzE4NzcKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gb2ZmZXJPcHRp
b25zKGdzdF9zdHJ1Y3R1cmVfbmV3KCJ3ZWJydGNiaW4tb2ZmZXItb3B0aW9ucyIsICJpY2UtcmVz
dGFydCIsIEdfVFlQRV9CT09MRUFOLCBvcHRpb25zLmljZVJlc3RhcnQsIG51bGxwdHIpKTsKKyAg
ICAvLyBGSVhNRTogUGx1bWIgb3B0aW9ucy52b2ljZUFjdGl2aXR5RGV0ZWN0aW9uLgorICAgIGlu
aXRpYXRlKHRydWUsIFdURk1vdmUob2ZmZXJPcHRpb25zKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVBbnN3ZXIoKQoreworICAgIGluaXRpYXRlKGZhbHNlLCBu
dWxscHRyKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWF0ZShib29s
IGlzSW5pdGlhdG9yLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBvcHRpb25zKQoreworICAg
IG1faXNJbml0aWF0b3IgPSBpc0luaXRpYXRvcjsKKyAgICBjb25zdCBjaGFyKiB0eXBlID0gaXNJ
bml0aWF0b3IgPyAib2ZmZXIiIDogImFuc3dlciI7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiQ3JlYXRpbmcgJXMiLCB0eXBlKTsKKyAgICBhdXRvIHNpZ25hbE5hbWUg
PSBtYWtlU3RyaW5nKCJjcmVhdGUtIiwgdHlwZSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KG1fd2VicnRjQmluLmdldCgpLCBzaWduYWxOYW1lLmFzY2lpKCkuZGF0YSgpLCBvcHRpb25zLnJl
bGVhc2UoKSwgZ3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSog
cmF3UHJvbWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byogZW5kcG9pbnQg
PSByZWludGVycHJldF9jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqPih1c2VyRGF0YSk7Cisg
ICAgICAgIGF1dG8gcHJvbWlzZSA9IGFkb3B0R1JlZihyYXdQcm9taXNlKTsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBnc3RfcHJvbWlzZV93YWl0KHByb21pc2UuZ2V0KCkpOworICAgICAgICBpZiAo
cmVzdWx0ICE9IEdTVF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEKSB7CisgICAgICAgICAgICBlbmRw
b2ludC0+Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uRmFpbGVkKHsgfSk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBhdXRvKiByZXBseSA9IGdzdF9wcm9t
aXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVw
bHkpOworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQocmVwbHksICJlcnJvciIp
KSB7CisgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gcHJvbWlzZUVycm9yOworICAg
ICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksICJlcnJvciIsIEdfVFlQRV9FUlJPUiwg
JnByb21pc2VFcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBHVW5pcXVlUHRy
PEdFcnJvcj4gZXJyb3IocHJvbWlzZUVycm9yLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBlbmRw
b2ludC0+Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uRmFpbGVkKFdURk1vdmUoZXJyb3IpKTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIqIHR5cGUg
PSBlbmRwb2ludC0+bV9pc0luaXRpYXRvciA/ICJvZmZlciIgOiAiYW5zd2VyIjsKKyAgICAgICAg
R1VuaXF1ZU91dFB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IHNlc3Npb25EZXNjcmlw
dGlvbjsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksIHR5cGUsIEdTVF9UWVBFX1dF
QlJUQ19TRVNTSU9OX0RFU0NSSVBUSU9OLCAmc2Vzc2lvbkRlc2NyaXB0aW9uLm91dFB0cigpLCBu
dWxscHRyKTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICAgICAgR1VuaXF1
ZVB0cjxjaGFyPiBzZHAoZ3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoc2Vzc2lvbkRlc2NyaXB0aW9u
LT5zZHApKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChlbmRwb2ludC0+cGlwZWxpbmUoKSwg
IkNyZWF0ZWQgJXM6ICVzIiwgdHlwZSwgc2RwLmdldCgpKTsKKyNlbmRpZgorICAgICAgICBHVW5p
cXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVzY3JpcHRpb24oc2Vzc2lvbkRl
c2NyaXB0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIGVuZHBvaW50LT5jcmVhdGVTZXNzaW9uRGVz
Y3JpcHRpb25TdWNjZWVkZWQoV1RGTW92ZShkZXNjcmlwdGlvbikpOworICAgIH0sIHRoaXMsIG51
bGxwdHIpKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnZXRTdGF0cyhHc3RQ
YWQqIHBhZCwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQoreworICAgIG1fc3RhdHND
b2xsZWN0b3ItPmdldFN0YXRzKFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgcHJvdGVjdGVk
VGhpcyA9IFJlZigqdGhpcyldKGF1dG8mJiByZXBvcnQpIG11dGFibGUgeworICAgICAgICBBU1NF
UlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVk
KCkgfHwgIXJlcG9ydCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBwcm9taXNlLT5y
ZXNvbHZlPElETEludGVyZmFjZTxSVENTdGF0c1JlcG9ydD4+KHJlcG9ydC5yZWxlYXNlTm9uTnVs
bCgpKTsKKyAgICB9LCBwYWQpOworfQorCitNZWRpYVN0cmVhbSYgR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6bWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFtKFN0cmluZyBsYWJlbCkKK3sKKyAgICBhdXRv
IG1lZGlhU3RyZWFtID0gbV9yZW1vdGVTdHJlYW1zQnlJZC5lbnN1cmUobGFiZWwsIFtsYWJlbCwg
dGhpc10oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1
bWVudD4oKm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNvbm5lY3Rpb24oKS5zY3JpcHRFeGVjdXRp
b25Db250ZXh0KCkpOworICAgICAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZShkb2N1bWVu
dCwgTWVkaWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoZG9jdW1lbnQubG9nZ2VyKCksIHsgfSwgV1RG
TW92ZShsYWJlbCkpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKm1lZGlhU3RyZWFtLml0ZXJhdG9y
LT52YWx1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRSZW1vdGVTdHJl
YW0oR3N0UGFkKiBwYWQpCit7CisgICAgbV9wZW5kaW5nSW5jb21pbmdTdHJlYW1zKys7CisKKyAg
ICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9xdWVyeV9jYXBzKHBhZCwgbnVsbHB0cikp
OworICAgIGNvbnN0IGNoYXIqIG1lZGlhVHlwZSA9IGNhcHNNZWRpYVR5cGUoY2Fwcy5nZXQoKSk7
CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIHJlbW90ZSAl
cyBzdHJlYW0gdG8gJSIgR1NUX1BUUl9GT1JNQVQgIiAldSBwZW5kaW5nIGluY29taW5nIHN0cmVh
bXMsIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBtZWRpYVR5cGUsIHBhZCwgbV9wZW5kaW5nSW5j
b21pbmdTdHJlYW1zLCBjYXBzLmdldCgpKTsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJh
bnNjZWl2ZXI+IHJ0Y1RyYW5zY2VpdmVyOworICAgIGdfb2JqZWN0X2dldChwYWQsICJ0cmFuc2Nl
aXZlciIsICZydGNUcmFuc2NlaXZlci5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICBhdXRvKiB0
cmFuc2NlaXZlciA9IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmV4aXN0aW5nVHJhbnNjZWl2ZXIo
WyZdKGF1dG8mIHRyYW5zY2VpdmVyQmFja2VuZCkgeworICAgICAgICByZXR1cm4gcnRjVHJhbnNj
ZWl2ZXIuZ2V0KCkgPT0gdHJhbnNjZWl2ZXJCYWNrZW5kLnJ0Y1RyYW5zY2VpdmVyKCk7CisgICAg
fSk7CisgICAgaWYgKCF0cmFuc2NlaXZlcikgeworICAgICAgICBhdXRvIHR5cGUgPSBkb0NhcHNI
YXZlVHlwZShjYXBzLmdldCgpLCAiYXVkaW8iKSA/IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6
OkF1ZGlvIDogUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW87CisgICAgICAgIHRyYW5z
Y2VpdmVyID0gJm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLm5ld1JlbW90ZVRyYW5zY2VpdmVyKG1h
a2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJ0Y1RyYW5z
Y2VpdmVyKSksIHR5cGUpOworICAgIH0KKworICAgIEdVbmlxdWVPdXRQdHI8R3N0V2ViUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNC
aW4uZ2V0KCksICJyZW1vdGUtZGVzY3JpcHRpb24iLCAmZGVzY3JpcHRpb24ub3V0UHRyKCksIG51
bGxwdHIpOworCisgICAgdW5zaWduZWQgbUxpbmVJbmRleDsKKyAgICBnX29iamVjdF9nZXQocnRj
VHJhbnNjZWl2ZXIuZ2V0KCksICJtbGluZWluZGV4IiwgJm1MaW5lSW5kZXgsIG51bGxwdHIpOwor
ICAgIGNvbnN0IGF1dG8qIG1lZGlhID0gZ3N0X3NkcF9tZXNzYWdlX2dldF9tZWRpYShkZXNjcmlw
dGlvbi0+c2RwLCBtTGluZUluZGV4KTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHNkcChnc3Rfc2Rw
X21lZGlhX2FzX3RleHQobWVkaWEpKTsKKyAgICBhdXRvIHNkcFN0cmluZyA9IG1ha2VTdHJpbmco
c2RwLmdldCgpKTsKKworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IG5hbWUoZ3N0X3BhZF9nZXRfbmFt
ZShwYWQpKTsKKyAgICBTdHJpbmcgbGFiZWwobmFtZS5nZXQoKSk7CisgICAgYXV0byBrZXkgPSBt
YWtlU3RyaW5nKCJtc2lkOiIpOworICAgIGF1dG8gbGluZXMgPSBzZHBTdHJpbmcuc3BsaXQoJ1xu
Jyk7CisgICAgZm9yIChhdXRvJiBsaW5lIDogbGluZXMpIHsKKyAgICAgICAgYXV0byBpID0gbGlu
ZS5maW5kKGtleSk7CisgICAgICAgIGlmIChpICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBh
dXRvIHRtcCA9IGxpbmUuc3Vic3RyaW5nKGkgKyBrZXkuYXNjaWkoKS5sZW5ndGgoKSk7CisgICAg
ICAgICAgICBsYWJlbCA9IHRtcC5zdWJzdHJpbmcoMCwgdG1wLmZpbmQoJyAnKSk7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9w
aXBlbGluZS5nZXQoKSwgIm1zaWQ6ICVzIiwgbGFiZWwuYXNjaWkoKS5kYXRhKCkpOworCisgICAg
R3N0RWxlbWVudCogYmluID0gbnVsbHB0cjsKKyAgICBhdXRvJiB0cmFjayA9IHRyYW5zY2VpdmVy
LT5yZWNlaXZlcigpLnRyYWNrKCk7CisgICAgYXV0byYgc291cmNlID0gdHJhY2sucHJpdmF0ZVRy
YWNrKCkuc291cmNlKCk7CisgICAgaWYgKHNvdXJjZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkK
KyAgICAgICAgYmluID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0
cmVhbWVyJj4oc291cmNlKS5iaW4oKTsKKyAgICBlbHNlIGlmIChzb3VyY2UuaXNJbmNvbWluZ1Zp
ZGVvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9D
QVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBiaW4pOworICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1Jl
Zihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChiaW4sICJzaW5rIikpOworICAgIGdzdF9wYWRf
bGluayhwYWQsIHNpbmtQYWQuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0
aF9wYXJlbnQoYmluKTsKKworICAgIHRyYWNrLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgc291cmNl
LnNldE11dGVkKGZhbHNlKTsKKworICAgIGF1dG8mIG1lZGlhU3RyZWFtID0gbWVkaWFTdHJlYW1G
cm9tUlRDU3RyZWFtKGxhYmVsKTsKKyAgICBtZWRpYVN0cmVhbS5hZGRUcmFja0Zyb21QbGF0Zm9y
bSh0cmFjayk7CisgICAgbV9wZW5kaW5nU3RyZWFtcy5hcHBlbmQoJm1lZGlhU3RyZWFtKTsKKwor
ICAgIGF1dG8gZG90RmlsZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVs
aW5lLmdldCgpKSwgIi5pbmNvbWluZy0iLCBtZWRpYVR5cGUsICctJywgR1NUX09CSkVDVF9OQU1F
KHBhZCkpOworICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1f
cGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0
ZjgoKS5kYXRhKCkpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVJl
bW90ZVN0cmVhbShHc3RQYWQqKQoreworICAgIEdTVF9GSVhNRV9PQkpFQ1QobV9waXBlbGluZS5n
ZXQoKSwgInJlbW92ZVJlbW90ZVN0cmVhbSIpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHMoY29uc3QgU3RyaW5nJiBr
aW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQsIEdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ6OlNvdXJjZSYmIHNvdXJjZSkKK3sKKyAgICBpZiAoIW1fd2VicnRjQmluKQorICAg
ICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVs
aW5lLmdldCgpLCAiJXp1IHN0cmVhbXMgaW4gaW5pdCBkYXRhIiwgaW5pdC5zdHJlYW1zLnNpemUo
KSk7CisKKyAgICAvLyBGSVhNRTogU2hvdWxkIHdlIGJ1aWxkIHRoZSBjYXBzIGZyb20gdGhlIGlu
aXQuc2VuZEVuY29kaW5ncz8gUHJvYmxlbSBpcyB0aGVyZSBpcyBubworICAgIC8vIGVuY29kaW5n
TmFtZSBvciBjbG9ja1JhdGUgaW4gUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzLgorICAgIFZlY3Rv
cjxzdGQ6OnBhaXI8Y29uc3QgY2hhciosIGludD4+IGVuY29kaW5nczsKKyAgICBjb25zdCBjaGFy
KiBtZWRpYSA9IGtpbmQudXRmOCgpLmRhdGEoKTsKKyAgICBpZiAoa2luZCA9PSAidmlkZW8iX3Mp
IHsKKyAgICAgICAgZW5jb2RpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMyk7CisgICAgICAg
IGVuY29kaW5ncy5hcHBlbmQoeyAiVlA4IiwgOTAwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy5h
cHBlbmQoeyAiVlA5IiwgOTAwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy5hcHBlbmQoeyAiSDI2
NCIsIDkwMDAwIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5ncy5yZXNlcnZlSW5p
dGlhbENhcGFjaXR5KDEpOworICAgICAgICBlbmNvZGluZ3MuYXBwZW5kKHsgIk9QVVMiLCA0ODAw
MCB9KTsKKyAgICB9CisKKyAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Vt
cHR5KCkpOworICAgIGZvciAoYXV0byYgW2VuY29kaW5nTmFtZSwgY2xvY2tSYXRlXSA6IGVuY29k
aW5ncykgeworICAgICAgICBnc3RfY2Fwc19hcHBlbmQoY2Fwcy5nZXQoKSwgZ3N0X2NhcHNfbmV3
X3NpbXBsZSgiYXBwbGljYXRpb24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCBtZWRp
YSwgImVuY29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBlbmNvZGluZ05hbWUsCisgICAgICAg
ICAgICAicGF5bG9hZCIsIEdfVFlQRV9JTlQsIG1fcHRDb3VudGVyKyssICJjbG9jay1yYXRlIiwg
R19UWVBFX0lOVCwgY2xvY2tSYXRlLCBudWxscHRyKSk7CisgICAgfQorCisgICAgYXV0byBkaXJl
Y3Rpb24gPSBmcm9tUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oaW5pdC5kaXJlY3Rpb24pOwor
I2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRlc2Mo
Z19lbnVtX3RvX3N0cmluZyhHU1RfVFlQRV9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElP
TiwgZGlyZWN0aW9uKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAi
QWRkaW5nICVzIHRyYW5zY2VpdmVyIGZvciBwYXlsb2FkICUiIEdTVF9QVFJfRk9STUFULCBkZXNj
LmdldCgpLCBjYXBzLmdldCgpKTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IE5vbmUgb2YgdGhp
cyAoZXhjZXB0ZWQgZGlyZWN0aW9uKSBpcyBwYXNzZWQgdG8gd2VicnRjYmluIHlldC4KKyAgICBH
VW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaW5pdERhdGEoZ3N0X3N0cnVjdHVyZV9uZXcoInRyYW5z
Y2VpdmVyLWluaXQtZGF0YSIsICJkaXJlY3Rpb24iLCBHU1RfVFlQRV9XRUJSVENfUlRQX1RSQU5T
Q0VJVkVSX0RJUkVDVElPTiwgZGlyZWN0aW9uLCBudWxscHRyKSk7CisKKyAgICBHVmFsdWUgc3Ry
ZWFtSWRzVmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgZ192YWx1ZV9pbml0KCZzdHJlYW1JZHNW
YWx1ZSwgR1NUX1RZUEVfTElTVCk7CisgICAgZm9yIChhdXRvJiBzdHJlYW0gOiBpbml0LnN0cmVh
bXMpIHsKKyAgICAgICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOworICAgICAgICBnX3Zh
bHVlX2luaXQoJnZhbHVlLCBHX1RZUEVfU1RSSU5HKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfc3Ry
aW5nKCZ2YWx1ZSwgc3RyZWFtLT5pZCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBnc3RfdmFs
dWVfbGlzdF9hcHBlbmRfdmFsdWUoJnN0cmVhbUlkc1ZhbHVlLCAmdmFsdWUpOworICAgICAgICBn
X3ZhbHVlX3Vuc2V0KCZ2YWx1ZSk7CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1
ZShpbml0RGF0YS5nZXQoKSwgInN0cmVhbS1pZHMiLCAmc3RyZWFtSWRzVmFsdWUpOworCisgICAg
R1ZhbHVlIGVuY29kaW5nc1ZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgm
ZW5jb2RpbmdzVmFsdWUsIEdTVF9UWVBFX0xJU1QpOworICAgIGlmIChraW5kID09ICJhdWRpbyIp
IHsKKyAgICAgICAgaWYgKCFpbml0LnNlbmRFbmNvZGluZ3MuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBhdXRvIGVuY29kaW5nRGF0YSA9IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoaW5pdC5z
ZW5kRW5jb2RpbmdzWzBdKTsKKyAgICAgICAgICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5J
VDsKKyAgICAgICAgICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdTVF9UWVBFX1NUUlVDVFVSRSk7
CisgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSgmdmFsdWUsIGVuY29kaW5nRGF0
YS5nZXQoKSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUoJmVuY29k
aW5nc1ZhbHVlLCAmdmFsdWUpOworICAgICAgICAgICAgZ192YWx1ZV91bnNldCgmdmFsdWUpOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbmNvZGluZyA6IGlu
aXQuc2VuZEVuY29kaW5ncykgeworICAgICAgICAgICAgYXV0byBlbmNvZGluZ0RhdGEgPSBmcm9t
UlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGVuY29kaW5nKTsKKyAgICAgICAgICAgIEdWYWx1ZSB2YWx1
ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICAgICAgICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdTVF9U
WVBFX1NUUlVDVFVSRSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSgmdmFs
dWUsIGVuY29kaW5nRGF0YS5nZXQoKSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBl
bmRfdmFsdWUoJmVuY29kaW5nc1ZhbHVlLCAmdmFsdWUpOworICAgICAgICAgICAgZ192YWx1ZV91
bnNldCgmdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVfdGFrZV92
YWx1ZShpbml0RGF0YS5nZXQoKSwgImVuY29kaW5ncyIsICZlbmNvZGluZ3NWYWx1ZSk7CisKKyAg
ICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBydGNUcmFuc2NlaXZlcjsKKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJhZGQtdHJhbnNjZWl2ZXIi
LCBkaXJlY3Rpb24sIGNhcHMuZ2V0KCksICZydGNUcmFuc2NlaXZlci5vdXRQdHIoKSk7CisgICAg
aWYgKCFydGNUcmFuc2NlaXZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAg
IGF1dG8gdHJhbnNjZWl2ZXIgPSBtYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZD4oV1RGTW92ZShydGNUcmFuc2NlaXZlcikpOworICAgIHJldHVybiBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpCYWNrZW5kcyB7IHRyYW5zY2VpdmVyLT5jcmVhdGVTZW5kZXJCYWNrZW5kKG1f
cGVlckNvbm5lY3Rpb25CYWNrZW5kLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUoaW5pdERhdGEp
KSwgdHJhbnNjZWl2ZXItPmNyZWF0ZVJlY2VpdmVyQmFja2VuZCgpLCBXVEZNb3ZlKHRyYW5zY2Vp
dmVyKSB9OworfQorCitzdGQ6Om9wdGlvbmFsPEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkJhY2tl
bmRzPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcm
IHRyYWNrS2luZCwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiBpbml0KQoreworICAgIHJl
dHVybiBjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKHRyYWNrS2luZCwgaW5pdCwgbnVsbHB0cik7
Cit9CisKK0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpjcmVhdGVTb3VyY2VGb3JUcmFjayhNZWRpYVN0cmVhbVRyYWNrJiB0cmFjaykKK3sK
KyAgICBpZiAodHJhY2sucHJpdmF0ZVRyYWNrKCkuaGFzQXVkaW8oKSkKKyAgICAgICAgcmV0dXJu
IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZh
dGVUcmFjaygpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHRyYWNrLnByaXZhdGVUcmFjaygpLmhh
c1ZpZGVvKCkpOworICAgIHJldHVybiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXI6OmNyZWF0ZSh0cmFjay5wcml2YXRlVHJhY2soKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFk
ZFRyYW5zY2VpdmVyKE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBjb25zdCBSVENSdHBUcmFuc2Nl
aXZlckluaXQmIGluaXQpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHMo
dHJhY2sua2luZCgpLCBpbml0LCBjcmVhdGVTb3VyY2VGb3JUcmFjayh0cmFjaykpOworfQorCit2
b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhHU3Ry
ZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiwgTWVkaWFTdHJlYW1UcmFjayYpCit7CisgICAgR1NUX0ZJ
WE1FX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAic2V0U2VuZGVyU291cmNlRnJvbVRyYWNrIik7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0
cFRyYW5zY2VpdmVyQmFja2VuZD4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dHJhbnNjZWl2ZXJC
YWNrZW5kRnJvbVNlbmRlcihHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBiYWNrZW5kKQorewor
ICAgIEdSZWZQdHI8R0FycmF5PiB0cmFuc2NlaXZlcnM7CisgICAgZ19zaWduYWxfZW1pdF9ieV9u
YW1lKG1fd2VicnRjQmluLmdldCgpLCAiZ2V0LXRyYW5zY2VpdmVycyIsICZ0cmFuc2NlaXZlcnMu
b3V0UHRyKCkpOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTG9v
a2luZyBmb3Igc2VuZGVyICVwIGluICV1IGV4aXN0aW5nIHRyYW5zY2VpdmVycyIsIGJhY2tlbmQu
cnRjU2VuZGVyKCksIHRyYW5zY2VpdmVycy0+bGVuKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAw
OyBpIDwgdHJhbnNjZWl2ZXJzLT5sZW47IGkrKykgeworICAgICAgICBHc3RXZWJSVENSVFBUcmFu
c2NlaXZlciogY3VycmVudCA9IGdfYXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdldCgpLCBHc3RX
ZWJSVENSVFBUcmFuc2NlaXZlciosIGkpOworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNl
bmRlcj4gc2VuZGVyOworICAgICAgICBnX29iamVjdF9nZXQoY3VycmVudCwgInNlbmRlciIsICZz
ZW5kZXIub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgICAgIGlmICghc2VuZGVyKQorICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgIGlmIChzZW5kZXIuZ2V0KCkgPT0gYmFja2VuZC5ydGNT
ZW5kZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRw
VHJhbnNjZWl2ZXJCYWNrZW5kPihjdXJyZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRJY2VDYW5kaWRhdGUoR1N0
cmVhbWVySWNlQ2FuZGlkYXRlJiBjYW5kaWRhdGUsIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRk
SWNlQ2FuZGlkYXRlQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNU
KG1fcGlwZWxpbmUuZ2V0KCksICJBZGRpbmcgSUNFIGNhbmRpZGF0ZSAlcyIsIGNhbmRpZGF0ZS5j
YW5kaWRhdGUudXRmOCgpLmRhdGEoKSk7CisKKyAgICBpZiAoIWNhbmRpZGF0ZS5jYW5kaWRhdGUu
c3RhcnRzV2l0aCgiY2FuZGlkYXRlOiIpKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Rh
c2sgPSBjcmVhdGVTaGFyZWRUYXNrPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlk
YXRlQ2FsbGJhY2tGdW5jdGlvbj4oV1RGTW92ZShjYWxsYmFjaykpXSgpIG11dGFibGUgeworICAg
ICAgICAgICAgdGFzay0+cnVuKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiRXhwZWN0IGxp
bmU6IGNhbmRpZGF0ZTo8Y2FuZGlkYXRlLXN0cj4iIH0pOworICAgICAgICB9KTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGF1dG8gcGFyc2VkQ2FuZGlkYXRlID0gcGFyc2VJY2VDYW5k
aWRhdGVTRFAoY2FuZGlkYXRlLmNhbmRpZGF0ZSk7CisgICAgaWYgKCFwYXJzZWRDYW5kaWRhdGUp
IHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChbdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZN
b3ZlKGNhbGxiYWNrKSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICB0YXNrLT5ydW4oRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJFcnJvciBwcm9jZXNzaW5nIElDRSBjYW5kaWRhdGUiIH0p
OworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBp
bnZhbGlkIHNkcE1MaW5lSW5kZXggZXhjZXB0aW9uIG5vdCByZWxheWVkIGZyb20gd2VicnRjYmlu
LgorICAgIC8vIEZJWE1FOiBJZGVhbGx5IHRoaXMgc2hvdWxkIHBhc3MgdGhlIHJlc3VsdC9lcnJv
ciB0byBhIEdzdFByb21pc2Ugb2JqZWN0LgorICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dl
YnJ0Y0Jpbi5nZXQoKSwgImFkZC1pY2UtY2FuZGlkYXRlIiwgY2FuZGlkYXRlLnNkcE1MaW5lSW5k
ZXgsIGNhbmRpZGF0ZS5jYW5kaWRhdGUudXRmOCgpLmRhdGEoKSk7CisgICAgY2FsbE9uTWFpblRo
cmVhZChbdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpBZGRJ
Y2VDYW5kaWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxiYWNrKSksIGRlc2NyaXB0
aW9ucyA9IGRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCkpXSgpIG11
dGFibGUgeworICAgICAgICB0YXNrLT5ydW4oV1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAgICB9
KTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6Y3JlYXRlRGF0YUNoYW5uZWwoY29uc3QgU3RyaW5nJiBsYWJlbCwgY29u
c3QgUlRDRGF0YUNoYW5uZWxJbml0JiBvcHRpb25zKQoreworICAgIGlmICghbV93ZWJydGNCaW4p
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgYXV0byBpbml0ID0gR1N0cmVhbWVyRGF0
YUNoYW5uZWxIYW5kbGVyOjpmcm9tUlRDRGF0YUNoYW5uZWxJbml0KG9wdGlvbnMpOworICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNyZWF0aW5nIGRhdGEgY2hhbm5lbCBm
b3IgaW5pdCBvcHRpb25zICUiIEdTVF9QVFJfRk9STUFULCBpbml0LmdldCgpKTsKKyAgICBHUmVm
UHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBjaGFubmVsOworICAgIGdfc2lnbmFsX2VtaXRfYnlf
bmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImNyZWF0ZS1kYXRhLWNoYW5uZWwiLCBsYWJlbC51dGY4
KCkuZGF0YSgpLCBpbml0LmdldCgpLCAmY2hhbm5lbC5vdXRQdHIoKSk7CisgICAgaWYgKCFjaGFu
bmVsKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEY6Om1ha2VVbmlx
dWU8R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyPihXVEZNb3ZlKGNoYW5uZWwpKTsKK30KKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkRhdGFDaGFubmVsKEdzdFdlYlJUQ0RhdGFD
aGFubmVsKiBkYXRhQ2hhbm5lbCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJJbmNvbWluZyBkYXRhIGNoYW5uZWwiKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0Rh
dGFDaGFubmVsPiBjaGFubmVsID0gZGF0YUNoYW5uZWw7CisgICAgY2FsbE9uTWFpblRocmVhZChb
cHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIGRhdGFDaGFubmVsID0gV1RGTW92ZShjaGFubmVs
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90ZWN0ZWRUaGlzLT5t
X3BpcGVsaW5lLmdldCgpLCAiSW5jb21pbmcgZGF0YSBjaGFubmVsIDEiKTsKKyAgICAgICAgaWYg
KHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKHByb3RlY3RlZFRoaXMtPm1fcGlwZWxpbmUuZ2V0KCksICJJbmNv
bWluZyBkYXRhIGNoYW5uZWwgMiIpOworICAgICAgICBhdXRvJiBjb25uZWN0aW9uID0gcHJvdGVj
dGVkVGhpcy0+bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29ubmVjdGlvbigpOworICAgICAgICBj
b25uZWN0aW9uLmRpc3BhdGNoRXZlbnQoR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGFu
bmVsRXZlbnQoKmNvbm5lY3Rpb24uZG9jdW1lbnQoKSwgV1RGTW92ZShkYXRhQ2hhbm5lbCkpKTsK
KyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjbG9zZSgpCit7Cisg
ICAgLy8gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lu
cy1iYWQvLS9pc3N1ZXMvMTE4MQorICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIkNsb3NpbmciKTsKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9SRUFEWSk7CisKKyNpZiAhUkVM
RUFTRV9MT0dfRElTQUJMRUQKKyAgICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wKCkKK3sKKyNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKyAgICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKKworICAgIGlmICghbV9w
aXBlbGluZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVs
aW5lLmdldCgpLCAiU3RvcHBpbmciKTsKKyAgICB0ZWFyZG93blBpcGVsaW5lKCk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3VzcGVuZCgpCit7CisgICAgaWYgKCFtX3BpcGVs
aW5lKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJTdXNwZW5kaW5nIik7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxp
bmUuZ2V0KCksIEdTVF9TVEFURV9QQVVTRUQpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OnJlc3VtZSgpCit7CisgICAgaWYgKCFtX3BpcGVsaW5lKQorICAgICAgICByZXR1cm47
CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJSZXN1bWluZyIpOwor
ICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExB
WUlORyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25OZWdvdGlhdGlvbk5l
ZWRlZCgpCit7CisgICAgbV9pc05lZ290aWF0aW9uTmVlZGVkID0gdHJ1ZTsKKworICAgIEdTVF9E
RUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNoZWNraW5nIG5lZ290aWF0aW9uIHN0YXR1
cyIpOworCisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyld
IHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHByb3RlY3RlZFRoaXMtPm1fcGlwZWxp
bmUuZ2V0KCksICJOZWdvdGlhdGlvbiBuZWVkZWQhIik7CisgICAgICAgIHByb3RlY3RlZFRoaXMt
Pm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLm1hcmtBc05lZWRpbmdOZWdvdGlhdGlvbigwKTsKKyAg
ICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUNvbm5lY3Rpb25D
aGFuZ2UoKQoreworICAgIEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZTsKKyAgICBn
X29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCksICJpY2UtY29ubmVjdGlvbi1zdGF0ZSIsICZz
dGF0ZSwgbnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJl
ZigqdGhpcyksIGNvbm5lY3Rpb25TdGF0ZSA9IHRvUlRDSWNlQ29ubmVjdGlvblN0YXRlKHN0YXRl
KV0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGF1dG8mIGNvbm5lY3Rpb24gPSBwcm90ZWN0ZWRUaGlzLT5tX3Bl
ZXJDb25uZWN0aW9uQmFja2VuZC5jb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChjb25uZWN0aW9u
LmljZUNvbm5lY3Rpb25TdGF0ZSgpICE9IGNvbm5lY3Rpb25TdGF0ZSkKKyAgICAgICAgICAgIGNv
bm5lY3Rpb24udXBkYXRlSWNlQ29ubmVjdGlvblN0YXRlKGNvbm5lY3Rpb25TdGF0ZSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VHYXRoZXJpbmdDaGFu
Z2UoKQoreworICAgIEdzdFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIHN0YXRlOworICAgIGdfb2Jq
ZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImljZS1nYXRoZXJpbmctc3RhdGUiLCAmc3RhdGUs
IG51bGxwdHIpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRo
aXMpLCBzdGF0ZV0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8mIGNvbm5lY3Rpb24gPSBwcm90ZWN0ZWRU
aGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChz
dGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfQ09NUExFVEUpCisgICAgICAg
ICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5kb25lR2F0aGVyaW5n
Q2FuZGlkYXRlcygpOworICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9H
QVRIRVJJTkdfU1RBVEVfR0FUSEVSSU5HKQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJ
Y2VHYXRoZXJpbmdTdGF0ZShSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5nKTsKKyAgICAg
ICAgZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX05FVykK
KyAgICAgICAgICAgIGNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUoUlRDSWNlR2F0
aGVyaW5nU3RhdGU6Ok5ldyk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6b25JY2VDYW5kaWRhdGUoZ3VpbnQgc2RwTUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5k
aWRhdGUpCit7CisgICAgLy8gRklYTUU6IEdldCBtaWQgZnJvbSBjYW5kaWRhdGU/CisgICAgR1Vu
aXF1ZU91dFB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IGRlc2NyaXB0aW9uOworICAg
IGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImxvY2FsLWRlc2NyaXB0aW9uIiwgJmRl
c2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAg
ICAgICByZXR1cm47CisKKyAgICBjb25zdCBHc3RTRFBNZWRpYSogbWVkaWEgPSBnc3Rfc2RwX21l
c3NhZ2VfZ2V0X21lZGlhKGRlc2NyaXB0aW9uLT5zZHAsIHNkcE1MaW5lSW5kZXgpOworICAgIFN0
cmluZyBjYW5kaWRhdGVNaWQoZ3N0X3NkcF9tZWRpYV9nZXRfYXR0cmlidXRlX3ZhbChtZWRpYSwg
Im1pZCIpKTsKKyAgICBTdHJpbmcgY2FuZGlkYXRlU0RQKGNhbmRpZGF0ZSk7CisgICAgY2FsbE9u
TWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIG1pZCA9IFdURk1vdmUoY2Fu
ZGlkYXRlTWlkKSwgc2RwID0gV1RGTW92ZShjYW5kaWRhdGVTRFApLCBzZHBNTGluZUluZGV4LCBk
ZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgp
KV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0
aW9uQmFja2VuZC5uZXdJQ0VDYW5kaWRhdGUoV1RGTW92ZShzZHApLCBXVEZNb3ZlKG1pZCksIHNk
cE1MaW5lSW5kZXgsIHsgfSwgV1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAgICB9KTsKK30KKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNj
ZWVkZWQoR1VuaXF1ZVB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRp
b24pCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyks
IGRlc2NyaXB0aW9uID0gV1RGTW92ZShkZXNjcmlwdGlvbildIHsKKyAgICAgICAgaWYgKHByb3Rl
Y3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEdV
bmlxdWVQdHI8Y2hhcj4gc2RwKGdzdF9zZHBfbWVzc2FnZV9hc190ZXh0KGRlc2NyaXB0aW9uLT5z
ZHApKTsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1faXNJbml0aWF0b3IpCisgICAgICAg
ICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlclN1
Y2NlZWRlZChzZHAuZ2V0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm90ZWN0ZWRU
aGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJTdWNjZWVkZWQoc2RwLmdl
dCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVT
ZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1ZVB0cjxHRXJyb3I+JiYgZXJyb3IpCit7Cisg
ICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIGVycm9yID0g
V1RGTW92ZShlcnJvcildIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgp
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gZXhjID0gRXhjZXB0aW9uIHsg
T3BlcmF0aW9uRXJyb3IsIGVycm9yID8gZXJyb3ItPm1lc3NhZ2UgOiAiVW5rbm93biBFcnJvciIg
fTsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPm1faXNJbml0aWF0b3IpCisgICAgICAgICAg
ICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlckZhaWxl
ZChXVEZNb3ZlKGV4YykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJGYWlsZWQoV1RGTW92ZShleGMp
KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb2xsZWN0VHJh
bnNjZWl2ZXJzKCkKK3sKKyAgICBHUmVmUHRyPEdBcnJheT4gdHJhbnNjZWl2ZXJzOworICAgIGdf
c2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC10cmFuc2NlaXZlcnMi
LCAmdHJhbnNjZWl2ZXJzLm91dFB0cigpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwg
dHJhbnNjZWl2ZXJzLT5sZW47IGkrKykgeworICAgICAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZl
ciogY3VycmVudCA9IGdfYXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdldCgpLCBHc3RXZWJSVENS
VFBUcmFuc2NlaXZlciosIGkpOworCisgICAgICAgIGF1dG8qIGV4aXN0aW5nVHJhbnNjZWl2ZXIg
PSBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0
cmFuc2NlaXZlckJhY2tlbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50ID09IHRyYW5z
Y2VpdmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgICAgICB9KTsKKyAgICAgICAgaWYg
KGV4aXN0aW5nVHJhbnNjZWl2ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBH
UmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiByZWNlaXZlcjsKKyAgICAgICAgR1VuaXF1ZU91
dFB0cjxjaGFyPiBtaWQ7CisgICAgICAgIGdfb2JqZWN0X2dldChjdXJyZW50LCAicmVjZWl2ZXIi
LCAmcmVjZWl2ZXIub3V0UHRyKCksICJtaWQiLCAmbWlkLm91dFB0cigpLCBudWxscHRyKTsKKwor
ICAgICAgICBpZiAoIXJlY2VpdmVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAg
aWYgKCFtaWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BlZXJDb25uZWN0
aW9uQmFja2VuZC5uZXdSZW1vdGVUcmFuc2NlaXZlcihXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKGN1cnJlbnQpKSwgbV9tZWRpYUZvck1pZC5n
ZXQobWlkLmdldCgpKSk7CisgICAgfQorfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2
b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZygpCit7Cisg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiZ2V0LXN0YXRzIiwg
bnVsbHB0ciwgZ3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSog
cmF3UHJvbWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9taXNlID0g
YWRvcHRHUmVmKHJhd1Byb21pc2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9taXNl
X3dhaXQocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0Vf
UkVTVUxUX1JFUExJRUQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3QgYXV0
byogcmVwbHkgPSBnc3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZS5nZXQoKSk7CisgICAgICAg
IFJFTEVBU0VfQVNTRVJUKHJlcGx5KTsKKyAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2Zp
ZWxkKHJlcGx5LCAiZXJyb3IiKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRv
KiBlbmRQb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVyTWVkaWFFbmRwb2ludCo+KHVz
ZXJEYXRhKTsKKyAgICAgICAgZW5kUG9pbnQtPm9uU3RhdHNEZWxpdmVyZWQocmVwbHkpOworICAg
IH0sIHRoaXMsIG51bGxwdHIpKTsKK30KKworY2xhc3MgUlRDU3RhdHNMb2dnZXIgeworcHVibGlj
OgorICAgIGV4cGxpY2l0IFJUQ1N0YXRzTG9nZ2VyKGNvbnN0IEdzdFN0cnVjdHVyZSogc3RhdHMp
CisgICAgICAgIDogbV9zdGF0cyhzdGF0cykKKyAgICB7IH0KKworICAgIFN0cmluZyB0b0pTT05T
dHJpbmcoKSBjb25zdCB7IHJldHVybiBnc3RTdHJ1Y3R1cmVUb0pTT05TdHJpbmcobV9zdGF0cyk7
IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIG1fc3RhdHM7Cit9OworCit2
b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnByb2Nlc3NTdGF0cyhjb25zdCBHVmFsdWUqIHZh
bHVlKQoreworICAgIGlmICghR1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRSh2YWx1ZSkpCisgICAg
ICAgIHJldHVybjsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3Zh
bHVlX2dldF9zdHJ1Y3R1cmUodmFsdWUpOworICAgIEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5
cGU7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZ
UEVfV0VCUlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBKdXN0IGNoZWNrIGEgc2luZ2xlIHRpbWVzdGFtcCwgaW5ib3VuZCBSVFAg
Zm9yIGluc3RhbmNlLgorICAgIGlmICghbV9zdGF0c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wICYm
IHN0YXRzVHlwZSA9PSBHU1RfV0VCUlRDX1NUQVRTX0lOQk9VTkRfUlRQKSB7CisgICAgICAgIGRv
dWJsZSB0aW1lc3RhbXA7CisgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUoc3Ry
dWN0dXJlLCAidGltZXN0YW1wIiwgJnRpbWVzdGFtcCkpIHsKKyAgICAgICAgICAgIGF1dG8gdHMg
PSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKHRpbWVzdGFtcCk7CisgICAgICAgICAgICBtX3N0
YXRzRmlyc3REZWxpdmVyZWRUaW1lc3RhbXAgPSB0czsKKworICAgICAgICAgICAgaWYgKCFpc1N0
b3BwZWQoKSAmJiBtX3N0YXRzTG9nVGltZXIucmVwZWF0SW50ZXJ2YWwoKSAhPSBzdGF0c0xvZ0lu
dGVydmFsKHRzKSkgeworICAgICAgICAgICAgICAgIG1fc3RhdHNMb2dUaW1lci5zdG9wKCk7Cisg
ICAgICAgICAgICAgICAgbV9zdGF0c0xvZ1RpbWVyLnN0YXJ0UmVwZWF0aW5nKHN0YXRzTG9nSW50
ZXJ2YWwodHMpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChs
b2dnZXIoKS53aWxsTG9nKGxvZ0NoYW5uZWwoKSwgV1RGTG9nTGV2ZWw6OkRlYnVnKSkgeworICAg
ICAgICAvLyBTdGF0cyBhcmUgdmVyeSB2ZXJib3NlLCBsZXQncyBvbmx5IGRpc3BsYXkgdGhlbSBp
biBpbnNwZWN0b3IgY29uc29sZSBpbiB2ZXJib3NlIG1vZGUuCisgICAgICAgIGxvZ2dlcigpLmRl
YnVnKExvZ1dlYlJUQywKKyAgICAgICAgICAgIExvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIoIkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQiLCAib25TdGF0c0RlbGl2ZXJlZCIsIGxvZ0lkZW50aWZpZXIo
KSksCisgICAgICAgICAgICBSVENTdGF0c0xvZ2dlciB7IHN0cnVjdHVyZSB9KTsKKyAgICB9IGVs
c2UgeworICAgICAgICBsb2dnZXIoKS5sb2dBbHdheXMoTG9nV2ViUlRDU3RhdHMsCisgICAgICAg
ICAgICBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKCJHU3RyZWFtZXJNZWRpYUVuZHBvaW50Iiwg
Im9uU3RhdHNEZWxpdmVyZWQiLCBsb2dJZGVudGlmaWVyKCkpLAorICAgICAgICAgICAgUlRDU3Rh
dHNMb2dnZXIgeyBzdHJ1Y3R1cmUgfSk7CisgICAgfQorfQorCisKK3ZvaWQgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6b25TdGF0c0RlbGl2ZXJlZChjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0YXRzKQor
eworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBzdGF0c0NvcHkoZ3N0X3N0cnVjdHVyZV9j
b3B5KHN0YXRzKSk7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigq
dGhpcyksIHRoaXMsIHN0YXRzID0gV1RGTW92ZShzdGF0c0NvcHkpXSB7CisgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfZm9yZWFjaChzdGF0cy5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0U3RydWN0dXJlRm9y
ZWFjaEZ1bmM+KFtdKEdRdWFyaywgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdXNlckRh
dGEpIC0+IGdib29sZWFuIHsKKyAgICAgICAgICAgIGF1dG8qIGVuZFBvaW50ID0gcmVpbnRlcnBy
ZXRfY2FzdDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50Kj4odXNlckRhdGEpOworICAgICAgICAgICAg
ZW5kUG9pbnQtPnByb2Nlc3NTdGF0cyh2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsK
KyAgICAgICAgfSksIHRoaXMpOworICAgIH0pOworfQorI2VuZGlmCisKKyNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RhcnRMb2dnaW5nU3Rh
dHMoKQoreworICAgIGlmIChtX3N0YXRzTG9nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9z
dGF0c0xvZ1RpbWVyLnN0b3AoKTsKKyAgICBtX3N0YXRzTG9nVGltZXIuc3RhcnRSZXBlYXRpbmco
c3RhdHNMb2dJbnRlcnZhbChTZWNvbmRzOjpuYW4oKSkpOworfQorCit2b2lkIEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OnN0b3BMb2dnaW5nU3RhdHMoKQoreworICAgIG1fc3RhdHNMb2dUaW1lci5z
dG9wKCk7Cit9CisKK1dURkxvZ0NoYW5uZWwmIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmxvZ0No
YW5uZWwoKSBjb25zdAoreworICAgIHJldHVybiBMb2dXZWJSVEM7Cit9CisKK1NlY29uZHMgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RhdHNMb2dJbnRlcnZhbChTZWNvbmRzIHJlcG9ydFRpbWVz
dGFtcCkgY29uc3QKK3sKKyAgICBpZiAobG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIFdU
RkxvZ0xldmVsOjpJbmZvKSkKKyAgICAgICAgcmV0dXJuIDJfczsKKworICAgIGlmIChyZXBvcnRU
aW1lc3RhbXAgLSBtX3N0YXRzRmlyc3REZWxpdmVyZWRUaW1lc3RhbXAgPiAxNV9zKQorICAgICAg
ICByZXR1cm4gMTBfczsKKworICAgIHJldHVybiA0X3M7Cit9CisjZW5kaWYKKwordm9pZCBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0
aW9uPHZvaWQoU3RyaW5nJiYpPiYmIGNhbGxiYWNrKQoreworICAgIC8vIFRPRE86IGNvbGxlY3Qg
c3RhdHMgYW5kIGxvb2t1cCBJbmJvdW5kUnRwICJkZWNvZGVyX2ltcGxlbWVudGF0aW9uIiBmaWVs
ZC4KKyAgICBjYWxsYmFjayh7IH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUeXBlPgorc3RydWN0IExvZ0FyZ3VtZW50OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IExv
Z0FyZ3VtZW50PFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyPiB7CisgICAgc3RhdGljIFN0cmluZyB0
b1N0cmluZyhjb25zdCBXZWJDb3JlOjpSVENTdGF0c0xvZ2dlciYgbG9nZ2VyKQorICAgIHsKKyAg
ICAgICAgcmV0dXJuIFN0cmluZyhsb2dnZXIudG9KU09OU3RyaW5nKCkpOworICAgIH0KK307CisK
K307IC8vIG5hbWVzcGFjZSBXVEYKKyNlbmRpZiAvLyAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKwor
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
TWVkaWFFbmRwb2ludC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ2MTQwNmJkZTcwZDQ1YTU3YjRlMjVkZWE5ZjA5
YjA0M2U3MjE0OGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmgKQEAgLTAsMCArMSwx
OTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclN0YXRzQ29s
bGVjdG9yLmgiCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJU
Q1J0cFJlY2VpdmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1
ZVB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJlY2Vp
dmVyQmFja2VuZDsKK2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDsKK2NsYXNz
IE1lZGlhU3RyZWFtVHJhY2s7CitjbGFzcyBSVENTZXNzaW9uRGVzY3JpcHRpb247CitjbGFzcyBS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI7CisKK2NsYXNzIEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R1N0cmVhbWVyTWVkaWFF
bmRwb2ludCwgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4KKyNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKyAgICAsIHByaXZhdGUgTG9nZ2VySGVscGVyCisjZW5kaWYKK3sKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ+IGNyZWF0ZShHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQmIHBlZXJDb25uZWN0aW9uKSB7IHJldHVybiBhZG9wdFJlZigq
bmV3IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQocGVlckNvbm5lY3Rpb24pKTsgfQorICAgIHZpcnR1
YWwgfkdTdHJlYW1lck1lZGlhRW5kcG9pbnQoKTsKKworICAgIGJvb2wgc2V0Q29uZmlndXJhdGlv
bihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYpOworICAgIHZvaWQgcmVzdGFydEljZSgpOwor
CisgICAgdm9pZCBkb1NldExvY2FsRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uKik7CisgICAgdm9pZCBkb1NldFJlbW90ZURlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbiYpOworICAgIHZvaWQgZG9DcmVhdGVPZmZlcihjb25zdCBSVENPZmZlck9wdGlv
bnMmKTsKKyAgICB2b2lkIGRvQ3JlYXRlQW5zd2VyKCk7CisKKyAgICB2b2lkIGdldFN0YXRzKEdz
dFBhZCosIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJU
Q0RhdGFDaGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWwoY29uc3QgU3RyaW5nJiwgY29u
c3QgUlRDRGF0YUNoYW5uZWxJbml0Jik7CisgICAgdm9pZCBvbkRhdGFDaGFubmVsKEdzdFdlYlJU
Q0RhdGFDaGFubmVsKik7CisKKyAgICB2b2lkIGFkZEljZUNhbmRpZGF0ZShHU3RyZWFtZXJJY2VD
YW5kaWRhdGUmLCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNr
JiYpOworCisgICAgdm9pZCBjbG9zZSgpOworICAgIHZvaWQgc3RvcCgpOworICAgIGJvb2wgaXNT
dG9wcGVkKCkgY29uc3QgeyByZXR1cm4gIW1fcGlwZWxpbmU7IH0KKworICAgIHZvaWQgc3VzcGVu
ZCgpOworICAgIHZvaWQgcmVzdW1lKCk7CisKKyAgICB2b2lkIGdhdGhlckRlY29kZXJJbXBsZW1l
bnRhdGlvbk5hbWUoRnVuY3Rpb248dm9pZChTdHJpbmcmJik+JiYpOworICAgIGJvb2wgaXNOZWdv
dGlhdGlvbk5lZWRlZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZWdvdGlhdGlvbk5lZWRlZDsgfQor
CisgICAgdm9pZCBjb25maWd1cmVBbmRMaW5rU291cmNlKFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lciYpOworCisgICAgYm9vbCBhZGRUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kJiwgTWVkaWFTdHJlYW1UcmFjayYsIGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKTsK
KyAgICB2b2lkIHJlbW92ZVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmKTsKKworICAg
IHN0cnVjdCBCYWNrZW5kcyB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kPiBzZW5kZXJCYWNrZW5kOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0
cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiByZWNlaXZlckJhY2tlbmQ7CisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+IHRyYW5zY2VpdmVyQmFj
a2VuZDsKKyAgICB9OworICAgIHN0ZDo6b3B0aW9uYWw8QmFja2VuZHM+IGFkZFRyYW5zY2VpdmVy
KGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmKTsK
KyAgICBzdGQ6Om9wdGlvbmFsPEJhY2tlbmRzPiBhZGRUcmFuc2NlaXZlcihNZWRpYVN0cmVhbVRy
YWNrJiwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0Jik7CisgICAgc3RkOjp1bmlxdWVfcHRy
PEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4gdHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNl
bmRlcihHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJik7CisKKyAgICB2b2lkIHNldFNlbmRlclNv
dXJjZUZyb21UcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiwgTWVkaWFTdHJlYW1UcmFj
ayYpOworCisgICAgdm9pZCBjb2xsZWN0VHJhbnNjZWl2ZXJzKCk7CisKKyAgICB2b2lkIGNyZWF0
ZVNlc3Npb25EZXNjcmlwdGlvblN1Y2NlZWRlZChHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbj4mJik7CisgICAgdm9pZCBjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQo
R1VuaXF1ZVB0cjxHRXJyb3I+JiYpOworCisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25z
dCB7IHJldHVybiBtX3BpcGVsaW5lLmdldCgpOyB9CisgICAgYm9vbCBoYW5kbGVNZXNzYWdlKEdz
dE1lc3NhZ2UqKTsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHZvaWQgcHJvY2Vz
c1N0YXRzKGNvbnN0IEdWYWx1ZSopOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKKyAgICB2b2lkIG9uU3RhdHNEZWxpdmVyZWQoY29uc3QgR3N0U3RydWN0
dXJlKik7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBHU3RyZWFtZXJNZWRpYUVuZHBvaW50KEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYpOworCisgICAgYm9vbCBpbml0aWFsaXplUGlw
ZWxpbmUoKTsKKyAgICB2b2lkIHRlYXJkb3duUGlwZWxpbmUoKTsKKyAgICB2b2lkIGRpc3Bvc2VF
bGVtZW50Q2hhaW4oR3N0RWxlbWVudCopOworCisgICAgdm9pZCBzZXREZXNjcmlwdGlvbihjb25z
dCBSVENTZXNzaW9uRGVzY3JpcHRpb24qLCBib29sIGlzTG9jYWwsIEZ1bmN0aW9uPHZvaWQoKT4m
JiBzdWNjZXNzQ2FsbGJhY2ssIEZ1bmN0aW9uPHZvaWQoY29uc3QgR0Vycm9yKik+JiYgZmFpbHVy
ZUNhbGxiYWNrKTsKKyAgICB2b2lkIGluaXRpYXRlKGJvb2wgaXNJbml0aWF0b3IsIEdVbmlxdWVQ
dHI8R3N0U3RydWN0dXJlPiYmKTsKKworICAgIHZvaWQgb25OZWdvdGlhdGlvbk5lZWRlZCgpOwor
ICAgIHZvaWQgb25JY2VDb25uZWN0aW9uQ2hhbmdlKCk7CisgICAgdm9pZCBvbkljZUdhdGhlcmlu
Z0NoYW5nZSgpOworICAgIHZvaWQgb25JY2VDYW5kaWRhdGUoZ3VpbnQgc2RwTUxpbmVJbmRleCwg
Z2NoYXJhcnJheSBjYW5kaWRhdGUpOworCisgICAgTWVkaWFTdHJlYW0mIG1lZGlhU3RyZWFtRnJv
bVJUQ1N0cmVhbShTdHJpbmcgbGFiZWwpOworCisgICAgdm9pZCBhZGRSZW1vdGVTdHJlYW0oR3N0
UGFkKik7CisgICAgdm9pZCByZW1vdmVSZW1vdGVTdHJlYW0oR3N0UGFkKik7CisKKyAgICBzdGQ6
Om9wdGlvbmFsPEJhY2tlbmRzPiBjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKGNvbnN0IFN0cmlu
ZyYga2luZCwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiwgR1N0cmVhbWVyUnRwU2VuZGVy
QmFja2VuZDo6U291cmNlJiYpOworICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJj
ZSBjcmVhdGVTb3VyY2VGb3JUcmFjayhNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICB2b2lkIHN0
b3JlUmVtb3RlTUxpbmVJbmZvKEdzdFNEUE1lc3NhZ2UqKTsKKworICAgIEdSZWZQdHI8R3N0UGFk
PiByZXF1ZXN0UGFkKHVuc2lnbmVkIG1saW5lSW5kZXgsIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4m
KTsKKworICAgIHZvaWQgc2V0UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQoKTsKKworI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHZvaWQgZ2F0aGVyU3RhdHNGb3JMb2dnaW5nKCk7Cisg
ICAgdm9pZCBzdGFydExvZ2dpbmdTdGF0cygpOworICAgIHZvaWQgc3RvcExvZ2dpbmdTdGF0cygp
OworCisgICAgY29uc3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xv
Z2dlci5nZXQoKTsgfQorICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KKyAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05h
bWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiR1N0cmVhbWVyTWVkaWFFbmRwb2ludCI7IH0KKyAg
ICBXVEZMb2dDaGFubmVsJiBsb2dDaGFubmVsKCkgY29uc3QgZmluYWw7CisKKyAgICBTZWNvbmRz
IHN0YXRzTG9nSW50ZXJ2YWwoU2Vjb25kcykgY29uc3Q7CisjZW5kaWYKKworICAgIEhhc2hNYXA8
U3RyaW5nLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlPiBtX21lZGlhRm9yTWlkOworICAgIFJl
YWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgbWVkaWFUeXBlRm9yTWlkKGNvbnN0IGNoYXIqIG1pZCk7
CisKKyAgICBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmIG1fcGVlckNvbm5lY3Rpb25C
YWNrZW5kOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV93ZWJydGNCaW47CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxN
ZWRpYVN0cmVhbT4+IG1fcmVtb3RlU3RyZWFtc0J5SWQ7CisKKyAgICBzdHJ1Y3QgUGVuZGluZ01M
aW5lSW5mbyB7CisgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAgICAgICAgYm9vbCBp
c1VzZWQ7CisgICAgICAgIFZlY3RvcjxpbnQ+IHBheWxvYWRUeXBlczsKKyAgICB9OworICAgIFZl
Y3RvcjxQZW5kaW5nTUxpbmVJbmZvPiBtX3JlbW90ZU1MaW5lSW5mb3M7CisKKyAgICBSZWY8R1N0
cmVhbWVyU3RhdHNDb2xsZWN0b3I+IG1fc3RhdHNDb2xsZWN0b3I7CisKKyAgICB1bnNpZ25lZCBt
X3JlcXVlc3RQYWRDb3VudGVyIHsgMCB9OworICAgIGludCBtX3B0Q291bnRlciB7IDk2IH07CisK
KyAgICB1bnNpZ25lZCBtX21saW5lSW5kZXggeyAwIH07CisKKyAgICBWZWN0b3I8UmVmPFJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcj4+IG1fc291cmNlczsKKworICAgIFZlY3Rv
cjxSZWZQdHI8TWVkaWFTdHJlYW0+PiBtX3BlbmRpbmdTdHJlYW1zOworICAgIHVuc2lnbmVkIG1f
cGVuZGluZ0luY29taW5nU3RyZWFtcyB7IDAgfTsKKworICAgIGJvb2wgbV9pc0luaXRpYXRvciB7
IGZhbHNlIH07CisgICAgYm9vbCBtX2lzTmVnb3RpYXRpb25OZWVkZWQgeyBmYWxzZSB9OworCisj
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgVGltZXIgbV9zdGF0c0xvZ1RpbWVyOworICAg
IFNlY29uZHMgbV9zdGF0c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wOworICAgIFJlZjxjb25zdCBM
b2dnZXI+IG1fbG9nZ2VyOworICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllcjsKKyNlbmRp
ZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzg0ZWNkZGFmNjYyZjQwNjE5NmFjZWVmYjdhNGQ1
MzRhNjcyYmE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApAQCAt
MCwwICsxLDM3MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgor
CisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwVHJh
bnNjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiSWNlQ2FuZGlkYXRlLmgiCisjaW5jbHVkZSAi
SlNSVENTdGF0c1JlcG9ydC5oIgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9u
LmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENJY2VDYW5kaWRh
dGUuaCIKKyNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlJUQ1J0cENh
cGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIlJUQ1J0cFJlY2VpdmVyLmgiCisjaW5jbHVkZSAiUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0
cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ+IGNyZWF0ZUdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVy
Q29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCit7CisgICAgZW5zdXJlR1N0cmVhbWVySW5pdGlh
bGl6ZWQoKTsKKyAgICBpZiAoIWlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKCJ3ZWJydGMiKSkg
eworICAgICAgICBXVEZMb2dBbHdheXMoIkdzdFdlYlJUQyBwbHVnaW4gbm90IGZvdW5kLiBNYWtl
IHN1cmUgdG8gaW5zdGFsbCBnc3QtcGx1Z2lucy1iYWQgPj0gMS4yMCB3aXRoIHRoZSB3ZWJydGMg
cGx1Z2luIGVuYWJsZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICBy
ZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZD4ocGVl
ckNvbm5lY3Rpb24pOworfQorCitDcmVhdGVQZWVyQ29ubmVjdGlvbkJhY2tlbmQgUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpjcmVhdGUgPSBjcmVhdGVHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ7CisKK3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OnJlY2VpdmVyQ2FwYWJpbGl0aWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25z
dCBTdHJpbmcmIGtpbmQpCit7CisgICAgUlRDUnRwQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsK
KyAgICBjYXBhYmlsaXRpZXMuaGVhZGVyRXh0ZW5zaW9ucy5hcHBlbmQoeyAiaHR0cDovL3d3dy5p
ZXRmLm9yZy9pZC9kcmFmdC1ob2xtZXItcm1jYXQtdHJhbnNwb3J0LXdpZGUtY2MtZXh0ZW5zaW9u
cy0wMSIgfSk7CisgICAgaWYgKGtpbmQgPT0gImF1ZGlvIl9zKSB7CisgICAgICAgIGNhcGFiaWxp
dGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gImF1ZGlvL09QVVMiLAorICAgICAgICAg
ICAgLmNsb2NrUmF0ZSA9IDQ4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMiwKKyAgICAg
ICAgICAgIC5zZHBGbXRwTGluZSA9ICIiCisgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJ1cm46M2dwcDp2aWRl
by1vcmllbnRhdGlvbiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsg
Lm1pbWVUeXBlID0gInZpZGVvL1ZQOCIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAs
CisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVz
LmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5j
bG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlk
PTAiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9
ICJ2aWRlby9WUDkiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAg
ICAgLnNkcEZtdHBMaW5lID0gInByb2ZpbGUtaWQ9MSIgfSk7CisgICAgICAgIGNhcGFiaWxpdGll
cy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL0gyNjQiLAorICAgICAgICAgICAg
LmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7Cisg
ICAgfQorICAgIHJldHVybiBjYXBhYmlsaXRpZXM7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDUnRw
Q2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRlckNhcGFiaWxpdGllcyhT
Y3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBraW5kKQoreworICAgIFJUQ1J0
cENhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7CisgICAgY2FwYWJpbGl0aWVzLmhlYWRlckV4dGVu
c2lvbnMuYXBwZW5kKHsgImh0dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQtaG9sbWVyLXJtY2F0
LXRyYW5zcG9ydC13aWRlLWNjLWV4dGVuc2lvbnMtMDEiIH0pOworICAgIGlmIChraW5kID09ICJh
dWRpbyJfcykgeworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlw
ZSA9ICJhdWRpby9PUFVTIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA0ODAwMCwKKyAgICAg
ICAgICAgIC5jaGFubmVscyA9IDIsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIiB9KTsK
KyAgICB9IGVsc2UgeworICAgICAgICBjYXBhYmlsaXRpZXMuaGVhZGVyRXh0ZW5zaW9ucy5hcHBl
bmQoeyAidXJuOjNncHA6dmlkZW8tb3JpZW50YXRpb24iIH0pOworICAgICAgICBjYXBhYmlsaXRp
ZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDgiLAorICAgICAgICAgICAg
LmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7Cisg
ICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL1ZQ
OSIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10
cExpbmUgPSAicHJvZmlsZS1pZD0wIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5h
cHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUg
PSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlkPTEiIH0pOwor
ICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9I
MjY0IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBG
bXRwTGluZSA9ICIiIH0pOworICAgIH0KKyAgICByZXR1cm4gY2FwYWJpbGl0aWVzOworfQorCitH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZChSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCisgICAgOiBQZWVyQ29ubmVj
dGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCisgICAgLCBtX2VuZHBvaW50KEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmNyZWF0ZSgqdGhpcykpCit7CisgICAgZGlzYWJsZUlDRUNhbmRpZGF0ZUZp
bHRlcmluZygpOworfQorCitHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6On5HU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpzdXNwZW5kKCkKK3sKKyAgICBtX2VuZHBvaW50LT5zdXNwZW5k
KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN1bWUoKQor
eworICAgIG1fZW5kcG9pbnQtPnJlc3VtZSgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6cmVzdGFydEljZSgpCit7CisgICAgbV9lbmRwb2ludC0+cmVzdGFydElj
ZSgpOworfQorCitib29sIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0Q29uZmln
dXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24pCit7Cisg
ICAgcmV0dXJuIG1fZW5kcG9pbnQtPnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyhSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVs
bHB0ciwgV1RGTW92ZShwcm9taXNlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRw
U2VuZGVyQmFja2VuZCYgYmFja2VuZEZyb21SVFBTZW5kZXIoUlRDUnRwU2VuZGVyJiBzZW5kZXIp
Cit7CisgICAgQVNTRVJUKCFzZW5kZXIuaXNTdG9wcGVkKCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJj4oKnNlbmRlci5iYWNrZW5kKCkpOworfQor
Cit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwU2Vu
ZGVyJiBzZW5kZXIsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBpZiAo
IXNlbmRlci5iYWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0
ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRv
JiBiYWNrZW5kID0gYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKTsKKyAgICBHUmVmUHRyPEdz
dFBhZD4gcGFkOworICAgIGlmIChSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIq
IHNvdXJjZSA9IGJhY2tlbmQuYXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5w
YWQoKTsKKyAgICBlbHNlIGlmIChSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIq
IHNvdXJjZSA9IGJhY2tlbmQudmlkZW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5w
YWQoKTsKKyAgICBtX2VuZHBvaW50LT5nZXRTdGF0cyhwYWQuZ2V0KCksIFdURk1vdmUocHJvbWlz
ZSkpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMo
UlRDUnRwUmVjZWl2ZXImIHJlY2VpdmVyLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2Up
Cit7CisgICAgaWYgKCFyZWNlaXZlci5iYWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+
Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBHc3RFbGVtZW50KiBiaW4gPSBudWxscHRyOworICAgIGF1dG8mIHNvdXJjZSA9
IHJlY2VpdmVyLnRyYWNrKCkucHJpdmF0ZVRyYWNrKCkuc291cmNlKCk7CisgICAgaWYgKHNvdXJj
ZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgYmluID0gc3RhdGljX2Nhc3Q8UmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4oc291cmNlKS5iaW4oKTsKKyAgICBl
bHNlIGlmIChzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0
YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSku
YmluKCk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
CisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KGJpbiwgInNpbmsiKSk7CisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRf
cGVlcihzaW5rUGFkLmdldCgpKSk7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMoc3JjUGFkLmdl
dCgpLCBXVEZNb3ZlKHByb21pc2UpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRp
b24qIGRlc2NyaXB0aW9uKQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0TG9jYWxEZXNjcmlwdGlv
bihkZXNjcmlwdGlvbik7CisgICAgbV9pc0xvY2FsRGVzY3JpcHRpb25TZXQgPSB0cnVlOworfQor
Cit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRSZW1vdGVEZXNjcmlw
dGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIG1f
ZW5kcG9pbnQtPmRvU2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOworICAgIG1faXNS
ZW1vdGVEZXNjcmlwdGlvblNldCA9IHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpkb0NyZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYmIG9wdGlvbnMpCit7
CisgICAgbV9lbmRwb2ludC0+ZG9DcmVhdGVPZmZlcihvcHRpb25zKTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlv
bnMmJikKK3sKKyAgICBpZiAoIW1faXNSZW1vdGVEZXNjcmlwdGlvblNldCkgeworICAgICAgICBj
cmVhdGVBbnN3ZXJGYWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJObyByZW1v
dGUgZGVzY3JpcHRpb24gc2V0IiB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2Vu
ZHBvaW50LT5kb0NyZWF0ZUFuc3dlcigpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6Y2xvc2UoKQoreworICAgIG1fZW5kcG9pbnQtPmNsb3NlKCk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb1N0b3AoKQoreworICAgIG1fZW5k
cG9pbnQtPnN0b3AoKTsKKyAgICBtX3BlbmRpbmdSZWNlaXZlcnMuY2xlYXIoKTsKK30KKwordm9p
ZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0lj
ZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNr
KQoreworICAgIHVuc2lnbmVkIHNkcE1MaW5lSW5kZXggPSBjYW5kaWRhdGUuc2RwTUxpbmVJbmRl
eCgpID8gY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgoKS52YWx1ZSgpIDogMDsKKyAgICBhdXRvIHJ0
Y0NhbmRpZGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJJY2VDYW5kaWRhdGU+KCpuZXcg
R1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsgc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0
ZSgpIH0pOworICAgIG1fZW5kcG9pbnQtPmFkZEljZUNhbmRpZGF0ZSgqcnRjQ2FuZGlkYXRlLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKK1JlZjxSVENSdHBSZWNlaXZlcj4gR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVh
bWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiYmIGJhY2tlbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5k
LCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCit7CisgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKm1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
KworICAgIGF1dG8gc291cmNlID0gYmFja2VuZC0+Y3JlYXRlU291cmNlKHRyYWNrS2luZCwgdHJh
Y2tJZCk7CisgICAgLy8gUmVtb3RlIHNvdXJjZSBpcyBpbml0aWFsbHkgbXV0ZWQgYW5kIHdpbGwg
YmUgdW5tdXRlZCB3aGVuIHJlY2VpdmluZyB0aGUgZmlyc3QgcGFja2V0LgorICAgIHNvdXJjZS0+
c2V0TXV0ZWQodHJ1ZSk7CisgICAgYXV0byB0cmFja0lEID0gc291cmNlLT5wZXJzaXN0ZW50SUQo
KTsKKyAgICBhdXRvIHJlbW90ZVRyYWNrUHJpdmF0ZSA9IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjpjcmVhdGUoZG9jdW1lbnQubG9nZ2VyKCksIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZSh0cmFj
a0lEKSk7CisgICAgYXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShk
b2N1bWVudCwgV1RGTW92ZShyZW1vdGVUcmFja1ByaXZhdGUpKTsKKworICAgIHJldHVybiBSVENS
dHBSZWNlaXZlcjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHJlbW90ZVRyYWNrKSwgV1RGTW92ZShi
YWNrZW5kKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNv
bnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykKK3sK
KyAgICByZXR1cm4gbV9lbmRwb2ludC0+Y3JlYXRlRGF0YUNoYW5uZWwobGFiZWwsIG9wdGlvbnMp
OworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxSVENSdHBTZW5kZXI+IGZpbmRFeGlzdGluZ1Nl
bmRlcihjb25zdCBWZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj4mIHRyYW5zY2VpdmVy
cywgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgc2VuZGVyQmFja2VuZCkKK3sKKyAgICBBU1NF
UlQoc2VuZGVyQmFja2VuZC5ydGNTZW5kZXIoKSk7CisgICAgZm9yIChhdXRvJiB0cmFuc2NlaXZl
ciA6IHRyYW5zY2VpdmVycykgeworICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFuc2NlaXZlci0+
c2VuZGVyKCk7CisgICAgICAgIGlmICghc2VuZGVyLmlzU3RvcHBlZCgpICYmIHNlbmRlckJhY2tl
bmQucnRjU2VuZGVyKCkgPT0gYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKS5ydGNTZW5kZXIo
KSkKKyAgICAgICAgICAgIHJldHVybiBSZWYoc2VuZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+PiBHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBGaXhl
ZFZlY3RvcjxTdHJpbmc+JiYgbWVkaWFTdHJlYW1JZHMpCit7CisgICAgYXV0byBzZW5kZXJCYWNr
ZW5kID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+KCp0aGlzLCBu
dWxscHRyLCBudWxscHRyKTsKKyAgICBpZiAoIW1fZW5kcG9pbnQtPmFkZFRyYWNrKCpzZW5kZXJC
YWNrZW5kLCB0cmFjaywgbWVkaWFTdHJlYW1JZHMpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgVHlwZUVycm9yLCAiVW5hYmxlIHRvIGFkZCB0cmFjayJfcyB9OworCisgICAgaWYgKGF1dG8g
c2VuZGVyID0gZmluZEV4aXN0aW5nU2VuZGVyKG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5z
Y2VpdmVycygpLCAqc2VuZGVyQmFja2VuZCkpIHsKKyAgICAgICAgYmFja2VuZEZyb21SVFBTZW5k
ZXIoKnNlbmRlcikudGFrZVNvdXJjZSgqc2VuZGVyQmFja2VuZCk7CisgICAgICAgIHNlbmRlci0+
c2V0VHJhY2soUmVmKHRyYWNrKSk7CisgICAgICAgIHNlbmRlci0+c2V0TWVkaWFTdHJlYW1JZHMo
V1RGTW92ZShtZWRpYVN0cmVhbUlkcykpOworICAgICAgICByZXR1cm4gc2VuZGVyLnJlbGVhc2VO
b25OdWxsKCk7CisgICAgfQorCisgICAgYXV0byB0cmFuc2NlaXZlckJhY2tlbmQgPSBtX2VuZHBv
aW50LT50cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKCpzZW5kZXJCYWNrZW5kKTsKKworICAg
IGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgUmVm
KHRyYWNrKSwgV1RGTW92ZShzZW5kZXJCYWNrZW5kKSk7CisgICAgc2VuZGVyLT5zZXRNZWRpYVN0
cmVhbUlkcyhXVEZNb3ZlKG1lZGlhU3RyZWFtSWRzKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNy
ZWF0ZVJlY2VpdmVyKHRyYW5zY2VpdmVyQmFja2VuZC0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCks
IHRyYWNrLmtpbmQoKSwgdHJhY2suaWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0
cFRyYW5zY2VpdmVyOjpjcmVhdGUoc2VuZGVyLmNvcHlSZWYoKSwgV1RGTW92ZShyZWNlaXZlciks
IFdURk1vdmUodHJhbnNjZWl2ZXJCYWNrZW5kKSk7CisgICAgbV9wZWVyQ29ubmVjdGlvbi5hZGRJ
bnRlcm5hbFRyYW5zY2VpdmVyKFdURk1vdmUodHJhbnNjZWl2ZXIpKTsKKyAgICByZXR1cm4gc2Vu
ZGVyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRy
YW5zY2VpdmVyPj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZl
ckZyb21UcmFja09yS2luZChUJiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVy
SW5pdCYgaW5pdCkKK3sKKyAgICBhdXRvIGJhY2tlbmRzID0gbV9lbmRwb2ludC0+YWRkVHJhbnNj
ZWl2ZXIodHJhY2tPcktpbmQsIGluaXQpOworICAgIGlmICghYmFja2VuZHMpCisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsICJVbmFibGUgdG8gYWRkIHRyYW5z
Y2VpdmVyIl9zIH07CisKKyAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKG1f
cGVlckNvbm5lY3Rpb24sIFdURk1vdmUodHJhY2tPcktpbmQpLCBXVEZNb3ZlKGJhY2tlbmRzLT5z
ZW5kZXJCYWNrZW5kKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKFdURk1v
dmUoYmFja2VuZHMtPnJlY2VpdmVyQmFja2VuZCksIHNlbmRlci0+dHJhY2tLaW5kKCksIHNlbmRl
ci0+dHJhY2tJZCgpKTsKKyAgICBhdXRvIHRyYW5zY2VpdmVyID0gUlRDUnRwVHJhbnNjZWl2ZXI6
OmNyZWF0ZShXVEZNb3ZlKHNlbmRlciksIFdURk1vdmUocmVjZWl2ZXIpLCBXVEZNb3ZlKGJhY2tl
bmRzLT50cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVy
bmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNj
ZWl2ZXI7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IEdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFj
a0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4g
YWRkVHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQoU3RyaW5nIHsgdHJhY2tLaW5kIH0sIGluaXQp
OworfQorCitFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2VpdmVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYm
IHRyYWNrLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQpCit7CisgICAgcmV0dXJu
IGFkZFRyYW5zY2VpdmVyRnJvbVRyYWNrT3JLaW5kKFdURk1vdmUodHJhY2spLCBpbml0KTsKK30K
Kwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFNlbmRlclNvdXJjZUZy
b21UcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJh
Y2smIHRyYWNrKQoreworICAgIG1fZW5kcG9pbnQtPnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhz
ZW5kZXIsIHRyYWNrKTsKK30KKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJSdHBUcmFuc2NlaXZl
ckJhY2tlbmQmIGJhY2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIoUlRDUnRwVHJhbnNjZWl2ZXImIHRy
YW5zY2VpdmVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBUcmFuc2Nl
aXZlckJhY2tlbmQmPigqdHJhbnNjZWl2ZXIuYmFja2VuZCgpKTsKK30KKworUlRDUnRwVHJhbnNj
ZWl2ZXIqIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZXhpc3RpbmdUcmFuc2NlaXZl
cihXVEY6OkZ1bmN0aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJik+JiYg
bWF0Y2hpbmdGdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV9wZWVy
Q29ubmVjdGlvbi5jdXJyZW50VHJhbnNjZWl2ZXJzKCkpIHsKKyAgICAgICAgaWYgKG1hdGNoaW5n
RnVuY3Rpb24oYmFja2VuZEZyb21SVFBUcmFuc2NlaXZlcigqdHJhbnNjZWl2ZXIpKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cmFuc2NlaXZlci5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVyJiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6Om5ld1JlbW90ZVRyYW5zY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQ+JiYgdHJhbnNjZWl2ZXJCYWNrZW5kLCBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlIHR5cGUpCit7CisgICAgYXV0byB0cmFja0tpbmQgPSB0eXBlID09IFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1ZGlvIl9zIDogInZpZGVvIl9zOworICAgIGF1dG8g
c2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgdHJhY2tLaW5k
LCB0cmFuc2NlaXZlckJhY2tlbmQtPmNyZWF0ZVNlbmRlckJhY2tlbmQoKnRoaXMsIG51bGxwdHIs
IG51bGxwdHIpKTsKKyAgICBhdXRvIHJlY2VpdmVyID0gY3JlYXRlUmVjZWl2ZXIodHJhbnNjZWl2
ZXJCYWNrZW5kLT5jcmVhdGVSZWNlaXZlckJhY2tlbmQoKSwgdHJhY2tLaW5kLCBzZW5kZXItPnRy
YWNrSWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVh
dGUoV1RGTW92ZShzZW5kZXIpLCBXVEZNb3ZlKHJlY2VpdmVyKSwgV1RGTW92ZSh0cmFuc2NlaXZl
ckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIo
dHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2ZXIuZ2V0KCk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJhbnNjZWl2
ZXJzKCkKK3sKKyAgICBtX2VuZHBvaW50LT5jb2xsZWN0VHJhbnNjZWl2ZXJzKCk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZW1vdmVUcmFjayhSVENSdHBTZW5k
ZXImIHNlbmRlcikKK3sKKyAgICBtX2VuZHBvaW50LT5yZW1vdmVUcmFjayhiYWNrZW5kRnJvbVJU
UFNlbmRlcihzZW5kZXIpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcygpCit7CisgICAgZm9yIChh
dXRvJiB0cmFuc2NlaXZlciA6IG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5zY2VpdmVycygp
KSB7CisgICAgICAgIGlmICghdHJhbnNjZWl2ZXItPnNlbmRlcigpLmlzU3RvcHBlZCgpKSB7Cisg
ICAgICAgICAgICBpZiAoYXV0byogdmlkZW9Tb3VyY2UgPSBiYWNrZW5kRnJvbVJUUFNlbmRlcih0
cmFuc2NlaXZlci0+c2VuZGVyKCkpLnZpZGVvU291cmNlKCkpCisgICAgICAgICAgICAgICAgdmlk
ZW9Tb3VyY2UtPnNldEFwcGx5Um90YXRpb24odHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisK
K3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnYXRoZXJEZWNvZGVySW1wbGVt
ZW50YXRpb25OYW1lKEZ1bmN0aW9uPHZvaWQoU3RyaW5nJiYpPiYmIGNhbGxiYWNrKQoreworICAg
IG1fZW5kcG9pbnQtPmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUoV1RGTW92ZShjYWxs
YmFjaykpOworfQorCitib29sIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6aXNOZWdv
dGlhdGlvbk5lZWRlZCh1aW50MzJfdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lbmRwb2ludC0+
aXNOZWdvdGlhdGlvbk5lZWRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFlYTFhMjYwMTZkNzVm
MGJlM2ZkOTgwNjgyOTYwODhiOWUyYWU1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZC5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVk
ZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJj
ZS5oIgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ7CitjbGFz
cyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ7CitjbGFzcyBHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kOworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOworY2xhc3MgUlRD
UnRwUmVjZWl2ZXI7CitjbGFzcyBSVENSdHBSZWNlaXZlckJhY2tlbmQ7CitjbGFzcyBSVENTZXNz
aW9uRGVzY3JpcHRpb247CitjbGFzcyBSVENTdGF0c1JlcG9ydDsKK2NsYXNzIFJlYWx0aW1lSW5j
b21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjsKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcjsKK2NsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VHU3RyZWFtZXI7CitjbGFz
cyBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI7CisKK3N0cnVjdCBHU3RyZWFtZXJJY2VDYW5kaWRh
dGUgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICB1bnNpZ25lZCBz
ZHBNTGluZUluZGV4OworICAgIFN0cmluZyBjYW5kaWRhdGU7Cit9OworCitjbGFzcyBHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUGVlckNvbm5lY3Rpb25CYWNr
ZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mKTsKKyAg
ICB+R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKCk7CisKK3ByaXZhdGU6CisgICAgdm9p
ZCBjbG9zZSgpIGZpbmFsOworICAgIHZvaWQgZG9DcmVhdGVPZmZlcihSVENPZmZlck9wdGlvbnMm
JikgZmluYWw7CisgICAgdm9pZCBkb0NyZWF0ZUFuc3dlcihSVENBbnN3ZXJPcHRpb25zJiYpIGZp
bmFsOworICAgIHZvaWQgZG9TZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbiopIGZpbmFsOworICAgIHZvaWQgZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBS
VENTZXNzaW9uRGVzY3JpcHRpb24mKSBmaW5hbDsKKyAgICB2b2lkIGRvQWRkSWNlQ2FuZGlkYXRl
KFJUQ0ljZUNhbmRpZGF0ZSYsIEFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrJiYpIGZpbmFsOworICAg
IHZvaWQgZG9TdG9wKCkgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVs
SGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJU
Q0RhdGFDaGFubmVsSW5pdCYpIGZpbmFsOworICAgIHZvaWQgcmVzdGFydEljZSgpIGZpbmFsOwor
ICAgIGJvb2wgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBm
aW5hbDsKKyAgICB2b2lkIGdldFN0YXRzKFJlZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFsOwor
ICAgIHZvaWQgZ2V0U3RhdHMoUlRDUnRwU2VuZGVyJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJikg
ZmluYWw7CisgICAgdm9pZCBnZXRTdGF0cyhSVENSdHBSZWNlaXZlciYsIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYpIGZpbmFsOworCisgICAgdm9pZCBlbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBT
dHJpbmcmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVv
U291cmNlcygpIGZpbmFsOworCisgICAgdm9pZCBnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25O
YW1lKEZ1bmN0aW9uPHZvaWQoU3RyaW5nJiYpPiYmKSBmaW5hbDsKKworICAgIGJvb2wgaXNOZWdv
dGlhdGlvbk5lZWRlZCh1aW50MzJfdCkgY29uc3QgZmluYWw7CisKKyAgICBzdGQ6Om9wdGlvbmFs
PGJvb2w+IGNhblRyaWNrbGVJY2VDYW5kaWRhdGVzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfTsK
KworICAgIGZyaWVuZCBjbGFzcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OworICAgIGZyaWVuZCBj
bGFzcyBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOworICAgIFJUQ1BlZXJDb25uZWN0aW9uJiBj
b25uZWN0aW9uKCkgeyByZXR1cm4gbV9wZWVyQ29ubmVjdGlvbjsgfQorCisgICAgdm9pZCBnZXRT
dGF0c1N1Y2NlZWRlZChjb25zdCBEZWZlcnJlZFByb21pc2UmLCBSZWY8UlRDU3RhdHNSZXBvcnQ+
JiYpOworCisgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFNlbmRlcj4+IGFkZFRyYWNrKE1lZGlh
U3RyZWFtVHJhY2smLCBGaXhlZFZlY3RvcjxTdHJpbmc+JiYpIGZpbmFsOworICAgIHZvaWQgcmVt
b3ZlVHJhY2soUlRDUnRwU2VuZGVyJikgZmluYWw7CisKKyAgICBFeGNlcHRpb25PcjxSZWY8UlRD
UnRwVHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENS
dHBUcmFuc2NlaXZlckluaXQmKSBmaW5hbDsKKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJh
bnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlcihSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiwgY29uc3Qg
UlRDUnRwVHJhbnNjZWl2ZXJJbml0JikgZmluYWw7CisgICAgdm9pZCBzZXRTZW5kZXJTb3VyY2VG
cm9tVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYsIE1lZGlhU3RyZWFtVHJhY2smKTsK
KworICAgIFJUQ1J0cFRyYW5zY2VpdmVyKiBleGlzdGluZ1RyYW5zY2VpdmVyKFdURjo6RnVuY3Rp
b248Ym9vbChHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmKT4mJik7CisgICAgUlRDUnRw
VHJhbnNjZWl2ZXImIG5ld1JlbW90ZVRyYW5zY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFt
ZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+JiYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpOwor
CisgICAgdm9pZCBjb2xsZWN0VHJhbnNjZWl2ZXJzKCkgZmluYWw7CisKK3ByaXZhdGU6CisgICAg
Ym9vbCBpc0xvY2FsRGVzY3JpcHRpb25TZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzTG9j
YWxEZXNjcmlwdGlvblNldDsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBFeGNl
cHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlckZyb21UcmFja09y
S2luZChUJiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpOworCisg
ICAgUmVmPFJUQ1J0cFJlY2VpdmVyPiBjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0
cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiYmLCBjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29u
c3QgU3RyaW5nJiB0cmFja0lkKTsKKworICAgIHZvaWQgc3VzcGVuZCgpIGZpbmFsOworICAgIHZv
aWQgcmVzdW1lKCkgZmluYWw7CisKKyAgICBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gbV9l
bmRwb2ludDsKKyAgICBib29sIG1faXNMb2NhbERlc2NyaXB0aW9uU2V0IHsgZmFsc2UgfTsKKyAg
ICBib29sIG1faXNSZW1vdGVEZXNjcmlwdGlvblNldCB7IGZhbHNlIH07CisKKyAgICBWZWN0b3I8
c3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lckljZUNhbmRpZGF0ZT4+IG1fcGVuZGluZ0NhbmRpZGF0
ZXM7CisgICAgVmVjdG9yPFJlZjxSVENSdHBSZWNlaXZlcj4+IG1fcGVuZGluZ1JlY2VpdmVyczsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOWMxMzQzYjEzOWY1YmE5MmY0MTU1ZjNkMDUwNTA1ZDJjZmFmY2Q3
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NiBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdF
Ql9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5z
Zm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0
cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JUQ1J0cFBhcmFtZXRlcnMgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5k
OjpnZXRQYXJhbWV0ZXJzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7
IH07Cit9CisKK1ZlY3RvcjxSVENSdHBDb250cmlidXRpbmdTb3VyY2U+IEdTdHJlYW1lclJ0cFJl
Y2VpdmVyQmFja2VuZDo6Z2V0Q29udHJpYnV0aW5nU291cmNlcygpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8UlRDUnRwU3luY2hy
b25pemF0aW9uU291cmNlPiBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFN5bmNocm9u
aXphdGlvblNvdXJjZXMoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IEdTdHJlYW1lclJ0cFJlY2Vp
dmVyQmFja2VuZDo6Y3JlYXRlU291cmNlKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBT
dHJpbmcmIHRyYWNrSWQpCit7CisgICAgaWYgKHRyYWNrS2luZCA9PSAidmlkZW8iX3MpCisgICAg
ICAgIHJldHVybiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0
cmFja0lkLmlzb2xhdGVkQ29weSgpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHRyYWNrS2luZCA9
PSAiYXVkaW8iX3MpOworICAgIHJldHVybiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXI6OmNyZWF0ZSh0cmFja0lkLmlzb2xhdGVkQ29weSgpKTsKK30KKworUmVmPFJUQ1J0cFRy
YW5zZm9ybUJhY2tlbmQ+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6cnRjUnRwVHJhbnNm
b3JtQmFja2VuZCgpCit7CisgICAgcmV0dXJuIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3Jt
QmFja2VuZDo6Y3JlYXRlKG1fcnRjUmVjZWl2ZXIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRD
RHRsc1RyYW5zcG9ydEJhY2tlbmQ+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6ZHRsc1Ry
YW5zcG9ydEJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4g
dHJhbnNwb3J0OworICAgIGdfb2JqZWN0X2dldChtX3J0Y1JlY2VpdmVyLmdldCgpLCAidHJhbnNw
b3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIHRyYW5zcG9y
dCA/IG1ha2VVbmlxdWU8R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ+KHRyYW5zcG9ydCkg
OiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZl
ckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2M2E3NTk3Yjk4Mjc2
NzZkZTAzM2ExOWJjNDNmY2RhMmY4MTMzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJh
Y2tlbmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENSdHBS
ZWNlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kIGZp
bmFsIDogcHVibGljIFJUQ1J0cFJlY2VpdmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNr
ZW5kKEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+JiYgcnRjUmVjZWl2ZXIpCisgICAgICAg
IDogbV9ydGNSZWNlaXZlcihXVEZNb3ZlKHJ0Y1JlY2VpdmVyKSkKKyAgICB7CisgICAgfQorCisg
ICAgR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHJ0Y1JlY2VpdmVyKCkgeyByZXR1cm4gbV9ydGNSZWNl
aXZlci5nZXQoKTsgfQorICAgIFJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGVTb3VyY2Uo
Y29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCk7CisKK3ByaXZh
dGU6CisgICAgUlRDUnRwUGFyYW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkgZmluYWw7CisgICAgVmVj
dG9yPFJUQ1J0cENvbnRyaWJ1dGluZ1NvdXJjZT4gZ2V0Q29udHJpYnV0aW5nU291cmNlcygpIGNv
bnN0IGZpbmFsOworICAgIFZlY3RvcjxSVENSdHBTeW5jaHJvbml6YXRpb25Tb3VyY2U+IGdldFN5
bmNocm9uaXphdGlvblNvdXJjZXMoKSBjb25zdCBmaW5hbDsKKyAgICBSZWY8UlRDUnRwVHJhbnNm
b3JtQmFja2VuZD4gcnRjUnRwVHJhbnNmb3JtQmFja2VuZCgpIGZpbmFsOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBm
aW5hbDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IG1fcnRjUmVjZWl2ZXI7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9y
bUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5l
MjkwODJmZWNhNGQ0OGE4MzcwMzY5NzkxNzY3ZGJhZGFlMzNmOTBiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
UnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VC
X1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRw
UmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGUgbWVkaWFUeXBlRnJvbVJlY2VpdmVy
KGNvbnN0IEdzdFdlYlJUQ1JUUFJlY2VpdmVyJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGU6OlZpZGVvOworfQor
CitHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFJlY2Vp
dmVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiYg
cnRjUmVjZWl2ZXIpCisgICAgOiBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKG1lZGlhVHlw
ZUZyb21SZWNlaXZlcigqcnRjUmVjZWl2ZXIpLCBTaWRlOjpSZWNlaXZlcikKKyAgICAsIG1fcnRj
UmVjZWl2ZXIocnRjUmVjZWl2ZXIpCit7Cit9CisKK0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNm
b3JtQmFja2VuZDo6fkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCgpCit7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpzZXRUcmFuc2Zv
cm1hYmxlRnJhbWVDYWxsYmFjayhDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIHNldElucHV0
Q2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJh
bWUoKQoreworICAgIEFTU0VSVChtZWRpYVR5cGUoKSA9PSBNZWRpYVR5cGU6OlZpZGVvKTsKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLjg1ODY2NzZhMDZiN2FiOWViMGIzMmU3ZGY3YzYzNDgxNWE4Yzk3OWYKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaApAQCAtMCwwICsxLDQ4
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5k
LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlIDx3dGYvRm9y
d2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJlY2Vp
dmVyVHJhbnNmb3JtQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1C
YWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJh
bnNmb3JtQmFja2VuZD4gY3JlYXRlKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+
JiByZWNlaXZlcikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJSdHBSZWNlaXZlclRy
YW5zZm9ybUJhY2tlbmQocmVjZWl2ZXIpKTsgfQorICAgIH5HU3RyZWFtZXJSdHBSZWNlaXZlclRy
YW5zZm9ybUJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJSdHBS
ZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZl
cj4mKTsKKworICAgIC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lkIHNldFRyYW5z
Zm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVxdWVz
dEtleUZyYW1lKCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiBt
X3J0Y1JlY2VpdmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOTZiY2JhOTI1
ZmU5ZGZmN2Y2ZTU2YTU1MTY1MmQ4NWUyYjgzMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVy
QmFja2VuZC5jcHAKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisKKyNpbmNsdWRlICJHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdT
dHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3Jt
QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAi
SlNET01Qcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDUnRwU2VuZGVyLmgiCisj
aW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUnVu
dGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2U+Citz
dGF0aWMgaW5saW5lIGJvb2wgdXBkYXRlVHJhY2tTb3VyY2UoU291cmNlJiBzb3VyY2UsIE1lZGlh
U3RyZWFtVHJhY2sqIHRyYWNrKQoreworICAgIGlmICghdHJhY2spIHsKKyAgICAgICAgc291cmNl
LnN0b3AoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBzb3VyY2Uu
c2V0VHJhY2sodHJhY2stPnByaXZhdGVUcmFjaygpKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kOjpzdGFydFNvdXJjZSgpCit7CisgICAgc3dpdGNoT24obV9zb3VyY2UsIFtd
KFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAg
ICAgICAgc291cmNlLT5zdGFydCgpOworICAgIH0sIFtdKFJlZjxSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgc291cmNlLT5zdGFydCgpOwor
ICAgIH0sIFtdKHN0ZDo6bnVsbHB0cl90JikgeworICAgIH0pOworfQorCitXQVJOX1VOVVNFRF9S
RVRVUk4gR1JlZlB0cjxHc3RFbGVtZW50PiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzdG9w
U291cmNlKCkKK3sKKyAgICBzd2l0Y2hPbihtX3NvdXJjZSwgW10oUmVmPFJlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0b3Ao
KTsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8R3N0RWxlbWVudD4oc291cmNlLT5iaW4oKSk7Cisg
ICAgfSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJj
ZSkgeworICAgICAgICBzb3VyY2UtPnN0b3AoKTsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8R3N0
RWxlbWVudD4oc291cmNlLT5iaW4oKSk7CisgICAgfSwgW10oc3RkOjpudWxscHRyX3QmKSB7Cisg
ICAgICAgIHJldHVybiBHUmVmUHRyPEdzdEVsZW1lbnQ+KG51bGxwdHIpOworICAgIH0pOworICAg
IHJldHVybiBudWxscHRyOworfQorCitib29sIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJl
cGxhY2VUcmFjayhSVENSdHBTZW5kZXImIHNlbmRlciwgTWVkaWFTdHJlYW1UcmFjayogdHJhY2sp
Cit7CisgICAgaWYgKCF0cmFjaykgeworICAgICAgICBhdXRvIHN0b3BwZWRTb3VyY2UgPSBzdG9w
U291cmNlKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzZW5kZXIu
dHJhY2soKSkgeworICAgICAgICBzd2l0Y2hPbihtX3NvdXJjZSwgWyZdKFJlZjxSZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgICAgIEFTU0VS
VCh0cmFjay0+c291cmNlKCkudHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1
ZGlvKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAgICAgICAgc291cmNlLT5z
ZXRTb3VyY2UodHJhY2stPnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3Rh
cnQoKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFjay0+c291cmNlKCkudHlw
ZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKTsKKyAgICAgICAgICAgIHNv
dXJjZS0+c3RvcCgpOworICAgICAgICAgICAgc291cmNlLT5zZXRTb3VyY2UodHJhY2stPnByaXZh
dGVUcmFjaygpKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICAgICAgfSwgW10o
c3RkOjpudWxscHRyX3QmKSB7CisgICAgICAgIH0pOworICAgIH0KKworICAgIG1fcGVlckNvbm5l
Y3Rpb25CYWNrZW5kLT5zZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soKnRoaXMsICp0cmFjayk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK1JUQ1J0cFNlbmRQYXJhbWV0ZXJzIEdTdHJlYW1lclJ0cFNl
bmRlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMoKSBjb25zdAoreworICAgIHJldHVybiB0b1JUQ1J0
cFNlbmRQYXJhbWV0ZXJzKG1faW5pdERhdGEuZ2V0KCkpOworfQorCit2b2lkIEdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQ6OnNldFBhcmFtZXRlcnMoY29uc3QgUlRDUnRwU2VuZFBhcmFtZXRlcnMm
LCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQoreworICAgIGlmICghbV9ydGNT
ZW5kZXIpIHsKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoTm90U3VwcG9ydGVkRXJyb3IpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBwcm9taXNl
LnJlc29sdmUoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFJUQ0RUTUZTZW5kZXJCYWNrZW5kPiBH
U3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpjcmVhdGVEVE1GQmFja2VuZCgpCit7CisgICAgcmV0
dXJuIG1ha2VVbmlxdWU8R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ+KCk7Cit9CisKK1JlZjxS
VENSdHBUcmFuc2Zvcm1CYWNrZW5kPiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpydGNSdHBU
cmFuc2Zvcm1CYWNrZW5kKCkKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNm
b3JtQmFja2VuZDo6Y3JlYXRlKG1fcnRjU2VuZGVyKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kOjpzZXRNZWRpYVN0cmVhbUlkcyhjb25zdCBGaXhlZFZlY3RvcjxTdHJpbmc+
JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRHRs
c1RyYW5zcG9ydEJhY2tlbmQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmR0bHNUcmFuc3Bv
cnRCYWNrZW5kKCkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IHRyYW5z
cG9ydDsKKyAgICBnX29iamVjdF9nZXQobV9ydGNTZW5kZXIuZ2V0KCksICJ0cmFuc3BvcnQiLCAm
dHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJhbnNwb3J0ID8gbWFr
ZVVuaXF1ZTxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KSA6IG51bGxw
dHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MzMxMDgxY2Y3YjIyNGFiNTY1NWNjMzY4
OTU4MTNhMGIzMjY2ZWZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oCkBAIC0w
LDAgKzEsMTIxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2lu
Y2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIkdVbmlx
dWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5j
bHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAi
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQgZmluYWwg
OiBwdWJsaWMgUlRDUnRwU2VuZGVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZChHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQmIGJhY2tlbmQsIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiYm
IHJ0Y1NlbmRlciwgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEpCisgICAgICAg
IDogbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQoV2Vha1B0ciB7ICZiYWNrZW5kIH0pCisgICAgICAg
ICwgbV9ydGNTZW5kZXIoV1RGTW92ZShydGNTZW5kZXIpKQorICAgICAgICAsIG1faW5pdERhdGEo
V1RGTW92ZShpbml0RGF0YSkpCisgICAgeworICAgIH0KKworICAgIHVzaW5nIFNvdXJjZSA9IHN0
ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcj4sIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+PjsK
KyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZCYgYmFja2VuZCwgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYgcnRjU2VuZGVyLCBT
b3VyY2UmJiBzb3VyY2UsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmIGluaXREYXRhKQorICAg
ICAgICA6IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kKFdlYWtQdHIgeyAmYmFja2VuZCB9KQorICAg
ICAgICAsIG1fcnRjU2VuZGVyKFdURk1vdmUocnRjU2VuZGVyKSkKKyAgICAgICAgLCBtX3NvdXJj
ZShXVEZNb3ZlKHNvdXJjZSkpCisgICAgICAgICwgbV9pbml0RGF0YShXVEZNb3ZlKGluaXREYXRh
KSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRSVENTZW5kZXIoR1JlZlB0cjxHc3RXZWJS
VENSVFBTZW5kZXI+JiYgcnRjU2VuZGVyKSB7IG1fcnRjU2VuZGVyID0gV1RGTW92ZShydGNTZW5k
ZXIpOyB9CisgICAgR3N0V2ViUlRDUlRQU2VuZGVyKiBydGNTZW5kZXIoKSB7IHJldHVybiBtX3J0
Y1NlbmRlci5nZXQoKTsgfQorCisgICAgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVh
bWVyKiBhdWRpb1NvdXJjZSgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbiht
X3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNl
R1N0cmVhbWVyPiYgc291cmNlKSB7IHJldHVybiBzb3VyY2UucHRyKCk7IH0sCisgICAgICAgICAg
ICBbXSAoY29uc3QgYXV0byYpIC0+IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
ciogeyByZXR1cm4gbnVsbHB0cjsgfQorICAgICAgICApOworICAgIH0KKworICAgIFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciogdmlkZW9Tb3VyY2UoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9zb3VyY2UsCisgICAgICAgICAgICBbXSAoUmVmPFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeyByZXR1cm4gc291
cmNlLnB0cigpOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSAtPiBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIqIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICAgICAg
KTsKKyAgICB9CisKKyAgICBib29sIGhhc1NvdXJjZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChjb25zdCBzdGQ6
Om51bGxwdHJfdCYpIHsgcmV0dXJuIGZhbHNlOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1
dG8mKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgICk7CisgICAgfQorCisgICAgdm9pZCBjbGVh
clNvdXJjZSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzU291cmNlKCkpOworICAgICAgICBt
X3NvdXJjZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBzZXRTb3VyY2UoU291cmNlJiYg
c291cmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFoYXNTb3VyY2UoKSk7CisgICAgICAgIG1f
c291cmNlID0gV1RGTW92ZShzb3VyY2UpOworICAgICAgICBBU1NFUlQoaGFzU291cmNlKCkpOwor
ICAgIH0KKworICAgIHZvaWQgdGFrZVNvdXJjZShHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBi
YWNrZW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhY2tlbmQuaGFzU291cmNlKCkpOworICAg
ICAgICBzZXRTb3VyY2UoV1RGTW92ZShiYWNrZW5kLm1fc291cmNlKSk7CisgICAgfQorCisgICAg
V0FSTl9VTlVTRURfUkVUVVJOIEdSZWZQdHI8R3N0RWxlbWVudD4gc3RvcFNvdXJjZSgpOworCitw
cml2YXRlOgorICAgIGJvb2wgcmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYsIE1lZGlhU3RyZWFt
VHJhY2sqKSBmaW5hbDsKKyAgICBSVENSdHBTZW5kUGFyYW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkg
Y29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFJUQ1J0cFNlbmRQYXJh
bWV0ZXJzJiwgRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpIGZpbmFsOworICAgIHN0ZDo6dW5p
cXVlX3B0cjxSVENEVE1GU2VuZGVyQmFja2VuZD4gY3JlYXRlRFRNRkJhY2tlbmQoKSBmaW5hbDsK
KyAgICBSZWY8UlRDUnRwVHJhbnNmb3JtQmFja2VuZD4gcnRjUnRwVHJhbnNmb3JtQmFja2VuZCgp
IGZpbmFsOworICAgIHZvaWQgc2V0TWVkaWFTdHJlYW1JZHMoY29uc3QgRml4ZWRWZWN0b3I8U3Ry
aW5nPiYpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFja2Vu
ZD4gZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBmaW5hbDsKKworICAgIHZvaWQgc3RhcnRTb3VyY2Uo
KTsKKworICAgIFdlYWtQdHI8R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kPiBtX3BlZXJD
b25uZWN0aW9uQmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9ydGNT
ZW5kZXI7CisgICAgU291cmNlIG1fc291cmNlOworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJl
PiBtX2luaXREYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2Vu
ZGVyVHJhbnNmb3JtQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5mNjZjNGRlYzFiYjAzYTMyNzdkOTJiMDY1NDI5YzY0MDcyYmUxNDNlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHAKQEAgLTAsMCArMSw1OSBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJM
RShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBHU3RyZWFt
ZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGUgbWVkaWFUeXBlRnJvbVNlbmRl
cihjb25zdCBHc3RXZWJSVENSVFBTZW5kZXImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cisg
ICAgcmV0dXJuIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZTo6VmlkZW87Cit9CisK
K0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFNlbmRlclRy
YW5zZm9ybUJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiBydGNTZW5k
ZXIpCisgICAgOiBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKG1lZGlhVHlwZUZyb21TZW5k
ZXIoKnJ0Y1NlbmRlciksIFNpZGU6OlNlbmRlcikKKyAgICAsIG1fcnRjU2VuZGVyKHJ0Y1NlbmRl
cikKK3sKK30KKworR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJlYW1l
clJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoKQoreworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNl
bmRlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxi
YWNrJiYgY2FsbGJhY2spCit7CisgICAgc2V0SW5wdXRDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNr
KSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJU
cmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJhbWUoKQoreworICAgIEFTU0VSVChtZWRpYVR5
cGUoKSA9PSBNZWRpYVR5cGU6OlZpZGVvKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIwYTU3NmRiMTI2ODNlNzU4
OTc4NDJkMTRhNzk1OGE0OTBlOTI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9y
bUJhY2tlbmQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRp
bHMuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdTdHJlYW1lclNlbmRlclRyYW5zZm9ybWVyOworCitjbGFzcyBHU3RyZWFtZXJSdHBT
ZW5kZXJUcmFuc2Zvcm1CYWNrZW5kIGZpbmFsIDogcHVibGljIEdTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0
YXRpYyBSZWY8R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZD4gY3JlYXRlKGNvbnN0
IEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiYgc2VuZGVyKSB7IHJldHVybiBhZG9wdFJlZigq
bmV3IEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoc2VuZGVyKSk7IH0KKyAgICB+
R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIGV4
cGxpY2l0IEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoY29uc3QgR1JlZlB0cjxH
c3RXZWJSVENSVFBTZW5kZXI+Jik7CisKKyAgICAvLyBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kCisg
ICAgdm9pZCBzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayhDYWxsYmFjayYmKSBmaW5hbDsK
KyAgICB2b2lkIHJlcXVlc3RLZXlGcmFtZSgpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJS
VENSVFBTZW5kZXI+IG1fcnRjU2VuZGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZDUzYWQwNDA0ZTZiODY4YWJkMmE2YTU0YzQ2MDYzMWMwN2UxNjEzYgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMjkgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lclJ0
cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUlRDUnRwQ29kZWNDYXBhYmlsaXR5LmgiCisjaW5jbHVkZSA8
d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtp
dF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0
X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kKEdS
ZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+JiYgcnRjVHJhbnNjZWl2ZXIpCisgICAgOiBt
X3J0Y1RyYW5zY2VpdmVyKFdURk1vdmUocnRjVHJhbnNjZWl2ZXIpKQoreworICAgIGdfb2JqZWN0
X3NldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiZG8tbmFjayIsIHRydWUsICJmZWMtdHlwZSIs
IEdTVF9XRUJSVENfRkVDX1RZUEVfVUxQX1JFRCwgbnVsbHB0cik7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+IEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJU
Q1JUUFJlY2VpdmVyPiByZWNlaXZlcjsKKyAgICBnX29iamVjdF9nZXQobV9ydGNUcmFuc2NlaXZl
ci5nZXQoKSwgInJlY2VpdmVyIiwgJnJlY2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBy
ZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4oV1RGTW92
ZShyZWNlaXZlcikpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwU2VuZGVyQmFj
a2VuZD4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVTZW5kZXJCYWNrZW5k
KEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgYmFja2VuZCwgR1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZDo6U291cmNlJiYgc291cmNlLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBp
bml0RGF0YSkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVyOworICAg
IGdfb2JqZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAic2VuZGVyIiwgJnNlbmRlci5v
dXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kPihiYWNrZW5kLCBXVEZNb3ZlKHNlbmRlciksIFdURk1vdmUoc291cmNl
KSwgV1RGTW92ZShpbml0RGF0YSkpOworfQorCitSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBH
U3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAg
R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZ3N0RGlyZWN0aW9uOworICAgIGdfb2Jq
ZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiZGlyZWN0aW9uIiwgJmdzdERpcmVjdGlv
biwgbnVsbHB0cik7CisgICAgcmV0dXJuIHRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZ3N0
RGlyZWN0aW9uKTsKK30KKworc3RkOjpvcHRpb25hbDxSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlv
bj4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjdXJyZW50RGlyZWN0aW9uKCkgY29u
c3QKK3sKKyAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlvbiBnc3REaXJlY3Rpb247
CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJjdXJyZW50LWRpcmVj
dGlvbiIsICZnc3REaXJlY3Rpb24sIG51bGxwdHIpOworICAgIGlmICghZ3N0RGlyZWN0aW9uKQor
ICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiB0b1JUQ1J0cFRyYW5zY2Vp
dmVyRGlyZWN0aW9uKGdzdERpcmVjdGlvbik7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kOjpzZXREaXJlY3Rpb24oUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZGly
ZWN0aW9uKQoreworICAgIGdfb2JqZWN0X3NldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiZGly
ZWN0aW9uIiwgZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKGRpcmVjdGlvbiksIG51bGxw
dHIpOworfQorCitTdHJpbmcgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjptaWQoKQor
eworICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gbWlkOworICAgIGdfb2JqZWN0X2dldChtX3J0Y1Ry
YW5zY2VpdmVyLmdldCgpLCAibWlkIiwgJm1pZC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0
dXJuIG1pZC5nZXQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6
OnN0b3AoKQoreworICAgIC8vIEZJWE1FOiB3ZWJydGNiaW4gdHJhbnNjZWl2ZXJzIGNhbid0IGJl
IHN0b3BwZWQgeWV0LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgR1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzdG9wcGVkKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTog
d2VicnRjYmluIHRyYW5zY2VpdmVycyBjYW4ndCBiZSBzdG9wcGVkIHlldC4KKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgV0FSTl9VTlVTRURfUkVUVVJOIEV4Y2VwdGlvbk9y
PEdzdENhcHMqPiB0b1J0cENvZGVjQ2FwYWJpbGl0eShjb25zdCBSVENSdHBDb2RlY0NhcGFiaWxp
dHkmIGNvZGVjKQoreworICAgIGlmICghY29kZWMubWltZVR5cGUuc3RhcnRzV2l0aCgidmlkZW8v
IikgJiYgIWNvZGVjLm1pbWVUeXBlLnN0YXJ0c1dpdGgoImF1ZGlvLyIpKQorICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yLCAiUlRDUnRwQ29kZWNDYXBh
YmlsaXR5IGJhZCBtaW1lVHlwZSIgfTsKKworICAgIGF1dG8gY29tcG9uZW50cyA9IGNvZGVjLm1p
bWVUeXBlLnNwbGl0KCcvJyk7CisgICAgYXV0byogY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUo
ImFwcGxpY2F0aW9uL3gtcnRwIiwgIm1lZGlhIiwgR19UWVBFX1NUUklORywgY29tcG9uZW50c1sw
XS5hc2NpaSgpLmRhdGEoKSwgImVuY29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBjb21wb25l
bnRzWzFdLmFzY2lpKCkuZGF0YSgpLCBudWxscHRyKTsKKyAgICBnc3RfY2Fwc19zZXRfc2ltcGxl
KGNhcHMsICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgY29kZWMuY2xvY2tSYXRlLCBudWxscHRy
KTsKKyAgICBpZiAoY29kZWMuY2hhbm5lbHMpCisgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUo
Y2FwcywgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgKmNvZGVjLmNoYW5uZWxzLCBudWxscHRyKTsK
KworICAgIGlmICghY29kZWMuc2RwRm10cExpbmUuaXNFbXB0eSgpKQorICAgICAgICBHU1RfRklY
TUUoIlVucHJvY2Vzc2VkIFNEUCBGbXRwTGluZTogJXMiLCBjb2RlYy5zZHBGbXRwTGluZS51dGY4
KCkuZGF0YSgpKTsKKyAgICBHU1RfREVCVUcoIkNvZGVjIGNhcGFiaWxpdHk6ICUiIEdTVF9QVFJf
Rk9STUFULCBjYXBzKTsKKyAgICByZXR1cm4gY2FwczsKK30KKworRXhjZXB0aW9uT3I8dm9pZD4g
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXRDb2RlY1ByZWZlcmVuY2VzKGNvbnN0
IFZlY3RvcjxSVENSdHBDb2RlY0NhcGFiaWxpdHk+JiBjb2RlY3MpCit7CisgICAgYXV0byBnc3RD
b2RlY3MgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkpOworICAgIGZvciAoYXV0byYg
Y29kZWMgOiBjb2RlY3MpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSB0b1J0cENvZGVjQ2FwYWJp
bGl0eShjb2RlYyk7CisgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICAgICAgZ3N0X2NhcHNf
YXBwZW5kKGdzdENvZGVjcy5nZXQoKSwgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAg
ICB9CisgICAgZ19vYmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJjb2RlYy1wcmVm
ZXJlbmNlcyIsIGdzdENvZGVjcy5nZXQoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIHsgfTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWE3NzMwNGIwNmU0MTgwZmM3MDcx
NDdmNTQ4ODY5ODU4ODE2YTY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
LmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2Fs
aWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRw
U2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJSVENSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ7CisKK2NsYXNzIEdTdHJlYW1lclJ0
cFRyYW5zY2VpdmVyQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENSdHBUcmFuc2NlaXZlckJhY2tl
bmQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZChHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiYm
KTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+IGNy
ZWF0ZVJlY2VpdmVyQmFja2VuZCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kPiBjcmVhdGVTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZCYsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYmLCBHVW5pcXVlUHRy
PEdzdFN0cnVjdHVyZT4mJik7CisKKyAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcnRjVHJh
bnNjZWl2ZXIoKSB7IHJldHVybiBtX3J0Y1RyYW5zY2VpdmVyLmdldCgpOyB9CisKK3ByaXZhdGU6
CisgICAgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgZmluYWw7
CisgICAgc3RkOjpvcHRpb25hbDxSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbj4gY3VycmVudERp
cmVjdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0RGlyZWN0aW9uKFJUQ1J0cFRyYW5z
Y2VpdmVyRGlyZWN0aW9uKSBmaW5hbDsKKyAgICBTdHJpbmcgbWlkKCkgZmluYWw7CisgICAgdm9p
ZCBzdG9wKCkgZmluYWw7CisgICAgYm9vbCBzdG9wcGVkKCkgY29uc3QgZmluYWw7CisgICAgRXhj
ZXB0aW9uT3I8dm9pZD4gc2V0Q29kZWNQcmVmZXJlbmNlcyhjb25zdCBWZWN0b3I8UlRDUnRwQ29k
ZWNDYXBhYmlsaXR5PiYpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2Nl
aXZlcj4gbV9ydGNUcmFuc2NlaXZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOTliNGE2YTM3ZTVmYjAzY2U5ODM2MzA2Y2JlZmNkZmQ5YTVhMGY1MwotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6
c2V0SW5wdXRDYWxsYmFjayhDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIExvY2tlciBob2xk
TG9jayB7IG1faW5wdXRDYWxsYmFja0xvY2sgfTsKKyAgICBtX2lucHV0Q2FsbGJhY2sgPSBXVEZN
b3ZlKGNhbGxiYWNrKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpj
bGVhclRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKCkKK3sKKyAgICBzZXRJbnB1dENhbGxiYWNr
KHsgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6cHJvY2Vzc1Ry
YW5zZm9ybWVkRnJhbWUoUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zv
cm1CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk1NDQ4ZmM3ZDMy
NjE4Zjc4ZTdlODE1ZmMxNWUxNDk2MTFiMmIzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKworI2luY2x1ZGUgIlJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0
cFRyYW5zZm9ybUJhY2tlbmQgOiBwdWJsaWMgUlRDUnRwVHJhbnNmb3JtQmFja2VuZCB7Citwcm90
ZWN0ZWQ6CisgICAgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZChNZWRpYVR5cGUsIFNpZGUp
OworICAgIHZvaWQgc2V0SW5wdXRDYWxsYmFjayhDYWxsYmFjayYmKTsKKworcHJvdGVjdGVkOgor
ICAgIE1lZGlhVHlwZSBtZWRpYVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX21lZGlhVHlw
ZTsgfQorCitwcml2YXRlOgorICAgIC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lk
IHByb2Nlc3NUcmFuc2Zvcm1lZEZyYW1lKFJUQ1J0cFRyYW5zZm9ybWFibGVGcmFtZSYpIGZpbmFs
OworICAgIHZvaWQgY2xlYXJUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjaygpIGZpbmFsOworICAg
IFNpZGUgc2lkZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2lkZTsgfQorCisgICAgTWVkaWFU
eXBlIG1fbWVkaWFUeXBlOworICAgIFNpZGUgbV9zaWRlOworCisgICAgTG9jayBtX2lucHV0Q2Fs
bGJhY2tMb2NrOworICAgIENhbGxiYWNrIG1faW5wdXRDYWxsYmFjazsKKworICAgIExvY2sgbV9v
dXRwdXRDYWxsYmFja0xvY2s7Cit9OworCitpbmxpbmUgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFj
a2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZChNZWRpYVR5cGUgbWVkaWFUeXBlLCBT
aWRlIHNpZGUpCisgICAgOiBtX21lZGlhVHlwZShtZWRpYVR5cGUpCisgICAgLCBtX3NpZGUoc2lk
ZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0Y2ZlZDczYjc2
M2MyMGFmOTA3OTJmMjY0Yzk1ZDMyYjg0NjhlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZC5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclNjdHBUcmFu
c3BvcnRCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
c3RhdGljIGlubGluZSBSVENTY3RwVHJhbnNwb3J0U3RhdGUgdG9SVENTY3RwVHJhbnNwb3J0U3Rh
dGUoR3N0V2ViUlRDU0NUUFRyYW5zcG9ydFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3Rh
dGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0NUUF9UUkFOU1BPUlRfU1RBVEVfTkVXOgorICAg
IGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9DT05ORUNUSU5HOgorICAgICAg
ICByZXR1cm4gUlRDU2N0cFRyYW5zcG9ydFN0YXRlOjpDb25uZWN0aW5nOworICAgIGNhc2UgR1NU
X1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBS
VENTY3RwVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0NU
UF9UUkFOU1BPUlRfU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDU2N0cFRyYW5zcG9y
dFN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lclNjdHBUcmFu
c3BvcnRCYWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4mJiB0cmFuc3BvcnQp
CisgICAgOiBtX2JhY2tlbmQoV1RGTW92ZSh0cmFuc3BvcnQpKQoreworICAgIEFTU0VSVChtX2Jh
Y2tlbmQpOworfQorCitHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lclNj
dHBUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICB1bnJlZ2lzdGVyQ2xpZW50KCk7Cit9CisKK1Vu
aXF1ZVJlZjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJh
Y2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RU
TFNUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICBnX29iamVjdF9nZXQobV9iYWNrZW5kLmdldCgp
LCAidHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJu
IG1ha2VVbmlxdWVSZWY8R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ+KHRyYW5zcG9ydCk7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50
KENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50
ID0gY2xpZW50OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCks
ICJub3RpZnk6OnN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJh
Y2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFuZ2VkKCk7CisgICAg
fSksIHRoaXMpOworfQorCit2b2lkIEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjp1bnJl
Z2lzdGVyQ2xpZW50KCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2Rh
dGEobV9iYWNrZW5kLmdldCgpLCB0aGlzKTsKKyAgICBtX2NsaWVudC5jbGVhcigpOworfQorCit2
b2lkIEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQoKQoreworICAg
IGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdFdlYlJUQ1NDVFBUcmFu
c3BvcnRTdGF0ZSB0cmFuc3BvcnRTdGF0ZTsKKyAgICBndWludDE2IG1heENoYW5uZWxzOworICAg
IHVpbnQ2NF90IG1heE1lc3NhZ2VTaXplOworICAgIGdfb2JqZWN0X2dldChtX2JhY2tlbmQuZ2V0
KCksICJzdGF0ZSIsICZ0cmFuc3BvcnRTdGF0ZSwgIm1heC1tZXNzYWdlLXNpemUiLCAmbWF4TWVz
c2FnZVNpemUsICJtYXgtY2hhbm5lbHMiLCAmbWF4Q2hhbm5lbHMsIG51bGxwdHIpOworICAgIGNh
bGxPbk1haW5UaHJlYWQoW3RoaXMsIHRyYW5zcG9ydFN0YXRlLCBtYXhDaGFubmVscywgbWF4TWVz
c2FnZVNpemVdIHsKKyAgICAgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBtX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENTY3RwVHJhbnNwb3J0U3Rh
dGUodHJhbnNwb3J0U3RhdGUpLCBtYXhNZXNzYWdlU2l6ZSwgbWF4Q2hhbm5lbHMpOworICAgIH0p
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTgwZmM4NDk4YzA1YzM5N2Rj
YjA2YzcwYzQzMzA4YjAyOTBmMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tl
bmQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEln
YWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENTY3RwVHJh
bnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK3R5cGVkZWYgc3Ry
dWN0IF9Hc3RXZWJSVENTQ1RQVHJhbnNwb3J0IEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ7CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQg
ZmluYWwgOiBwdWJsaWMgUlRDU2N0cFRyYW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vh
a1B0cjxHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZD4geworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lclNjdHBUcmFuc3BvcnRC
YWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4mJik7CisgICAgfkdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHN0YXRlQ2hh
bmdlZCgpOworCitwcml2YXRlIDoKKyAgICAvLyBSVENTY3RwVHJhbnNwb3J0QmFja2VuZAorICAg
IGNvbnN0IHZvaWQqIGJhY2tlbmQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0
KCk7IH0KKyAgICBVbmlxdWVSZWY8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+IGR0bHNUcmFuc3Bv
cnRCYWNrZW5kKCkgZmluYWw7CisgICAgdm9pZCByZWdpc3RlckNsaWVudChDbGllbnQmKSBmaW5h
bDsKKyAgICB2b2lkIHVucmVnaXN0ZXJDbGllbnQoKSBmaW5hbDsKKworICAgIEdSZWZQdHI8R3N0
V2ViUlRDU0NUUFRyYW5zcG9ydD4gbV9iYWNrZW5kOworICAgIFdlYWtQdHI8Q2xpZW50PiBtX2Ns
aWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9y
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclN0YXRzQ29sbGVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2M2NjYxNDE0MDZlM2FjYmU0Nzkx
MjE1Nzk5YWY2OTNmZTAxMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwCkBA
IC0wLDAgKzEsMjY5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCIKKworI2lm
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdV
bmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKKyNpbmNsdWRl
ICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNp
bmNsdWRlIDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJ
CisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhU
RVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFV
TFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlN0YXRzJiBz
dGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZG91YmxlIHRpbWVz
dGFtcDsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHN0cnVjdHVyZSwgInRpbWVz
dGFtcCIsICZ0aW1lc3RhbXApKQorICAgICAgICBzdGF0cy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7
CisgICAgc3RhdHMuaWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiaWQi
KTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENSVFBTdHJlYW1TdGF0cyhSVENTdGF0
c1JlcG9ydDo6UnRwU3RyZWFtU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICBzdGF0
cy50cmFuc3BvcnRJZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJ0cmFu
c3BvcnQtaWQiKTsKKyAgICBzdGF0cy5jb2RlY0lkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5n
KHN0cnVjdHVyZSwgImNvZGVjLWlkIik7CisKKyAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICBpZiAo
Z3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUsICJzc3JjIiwgJnZhbHVlKSkKKyAgICAg
ICAgc3RhdHMuc3NyYyA9IHZhbHVlOworCisgICAgLy8gRklYTUU6CisgICAgLy8gc3RhdHMudHJh
bnNwb3J0SWQKKyAgICAvLyBzdGF0cy5jb2RlY0lkCisgICAgLy8gc3RhdHMubWVkaWFUeXBlCisg
ICAgLy8gc3RhdHMua2luZAorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ0NvZGVjU3Rh
dHMoUlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAg
ICB1bnNpZ25lZCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1
cmUsICJwYXlsb2FkLXR5cGUiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5wYXlsb2FkVHlwZSA9
IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50KHN0cnVjdHVyZSwgImNsb2Nr
LXJhdGUiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5jbG9ja1JhdGUgPSB2YWx1ZTsKKworICAg
IC8vIEZJWE1FOgorICAgIC8vIHN0YXRzLm1pbWVUeXBlID0KKyAgICAvLyBzdGF0cy5jaGFubmVs
cyA9CisgICAgLy8gc3RhdHMuc2RwRm10cExpbmUgPQorICAgIC8vIHN0YXRzLmltcGxlbWVudGF0
aW9uID0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMo
UlRDU3RhdHNSZXBvcnQ6OkluYm91bmRSdHBTdHJlYW1TdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZpbGxSVENSVFBTdHJlYW1TdGF0cyhzdGF0cywg
c3RydWN0dXJlKTsKKworICAgIHVpbnQ2NF90IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJl
X2dldF91aW50NjQoc3RydWN0dXJlLCAicGFja2V0cy1yZWNlaXZlZCIsICZ2YWx1ZSkpCisgICAg
ICAgIHN0YXRzLnBhY2tldHNSZWNlaXZlZCA9IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJl
X2dldF91aW50NjQoc3RydWN0dXJlLCAiYnl0ZXMtcmVjZWl2ZWQiLCAmdmFsdWUpKQorICAgICAg
ICBzdGF0cy5ieXRlc1JlY2VpdmVkID0gdmFsdWU7CisKKyAgICB1bnNpZ25lZCBwYWNrZXRzTG9z
dDsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUsICJwYWNrZXRzLWxv
c3QiLCAmcGFja2V0c0xvc3QpKQorICAgICAgICBzdGF0cy5wYWNrZXRzTG9zdCA9IHBhY2tldHNM
b3N0OworCisgICAgZG91YmxlIGppdHRlcjsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91
YmxlKHN0cnVjdHVyZSwgImppdHRlciIsICZqaXR0ZXIpKQorICAgICAgICBzdGF0cy5qaXR0ZXIg
PSBqaXR0ZXI7CisKKyAgICAvLyBGSVhNRToKKyAgICAvLyBzdGF0cy5mcmFjdGlvbkxvc3QgPQor
ICAgIC8vIHN0YXRzLnBhY2tldHNEaXNjYXJkZWQgPQorICAgIC8vIHN0YXRzLnBhY2tldHNSZXBh
aXJlZCA9CisgICAgLy8gc3RhdHMuYnVyc3RQYWNrZXRzTG9zdCA9CisgICAgLy8gc3RhdHMuYnVy
c3RQYWNrZXRzRGlzY2FyZGVkID0KKyAgICAvLyBzdGF0cy5idXJzdExvc3NDb3VudCA9CisgICAg
Ly8gc3RhdHMuYnVyc3REaXNjYXJkQ291bnQgPQorICAgIC8vIHN0YXRzLmJ1cnN0TG9zc1JhdGUg
PQorICAgIC8vIHN0YXRzLmJ1cnN0RGlzY2FyZFJhdGUgPQorICAgIC8vIHN0YXRzLmdhcExvc3NS
YXRlID0KKyAgICAvLyBzdGF0cy5nYXBEaXNjYXJkUmF0ZSA9CisgICAgLy8gc3RhdHMuZnJhbWVz
RGVjb2RlZCA9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsT3V0Ym91bmRSVFBTdHJlYW1T
dGF0cyhSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cyYgc3RhdHMsIGNvbnN0
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZpbGxSVENSVFBTdHJlYW1TdGF0cyhz
dGF0cywgc3RydWN0dXJlKTsKKworICAgIHVpbnQ2NF90IHZhbHVlOworICAgIGlmIChnc3Rfc3Ry
dWN0dXJlX2dldF91aW50NjQoc3RydWN0dXJlLCAicGFja2V0cy1zZW50IiwgJnZhbHVlKSkKKyAg
ICAgICAgc3RhdHMucGFja2V0c1NlbnQgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9n
ZXRfdWludDY0KHN0cnVjdHVyZSwgImJ5dGVzLXNlbnQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0
cy5ieXRlc1NlbnQgPSB2YWx1ZTsKKworICAgIC8vIEZJWE1FCisgICAgLy8gc3RhdHMudGFyZ2V0
Qml0cmF0ZSA9CisgICAgLy8gc3RhdHMuZnJhbWVzRW5jb2RlZCA9Cit9CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBmaWxsUlRDUGVlckNvbm5lY3Rpb25TdGF0cyhSVENTdGF0c1JlcG9ydDo6UGVlckNv
bm5lY3Rpb25TdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQorewor
ICAgIGZpbGxSVENTdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIGludCB2YWx1ZTsKKyAg
ICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgImRhdGEtY2hhbm5lbHMtb3Bl
bmVkIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuZGF0YUNoYW5uZWxzT3BlbmVkID0gdmFsdWU7
CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJkYXRhLWNoYW5uZWxz
LWNsb3NlZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLmRhdGFDaGFubmVsc0Nsb3NlZCA9IHZh
bHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKFJUQ1N0
YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQoreworICAgIGZpbGxSVENTdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIC8v
IEZJWE1FCit9CisKK3N0YXRpYyBnYm9vbGVhbiBmaWxsUmVwb3J0Q2FsbGJhY2soR1F1YXJrLCBj
b25zdCBHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBpZiAoIUdTVF9W
QUxVRV9IT0xEU19TVFJVQ1RVUkUodmFsdWUpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAg
IGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUo
dmFsdWUpOworICAgIEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7CisgICAgaWYgKCFnc3Rf
c3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VCUlRDX1NUQVRTX1RZ
UEUsICZzdGF0c1R5cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIERP
TU1hcEFkYXB0ZXImIHJlcG9ydCA9ICpyZWludGVycHJldF9jYXN0PERPTU1hcEFkYXB0ZXIqPih1
c2VyRGF0YSk7CisKKyAgICBzd2l0Y2ggKHN0YXRzVHlwZSkgeworICAgIGNhc2UgR1NUX1dFQlJU
Q19TVEFUU19DT0RFQzogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6Q29kZWNTdGF0cyBzdGF0
czsKKyAgICAgICAgZmlsbFJUQ0NvZGVjU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAg
IHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpD
b2RlY1N0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUDogeworICAgICAgICBS
VENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzIHN0YXRzOworICAgICAgICBmaWxs
SW5ib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQu
c2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0
cFN0cmVhbVN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19PVVRCT1VORF9SVFA6IHsKKyAgICAg
ICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAg
IGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICBy
ZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0
Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUkVNT1RFX0lOQk9VTkRf
UlRQOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMgc3Rh
dHM7CisgICAgICAgIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7
CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRz
UmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykp
OworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1JFTU9U
RV9PVVRCT1VORF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3Ry
ZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRz
LCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlv
bmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBX
VEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJS
VENfU1RBVFNfQ1NSQzoKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0YXRzOiBjc3Jj
Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19QRUVSX0NPTk5F
Q1RJT046IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHMgc3Rh
dHM7CisgICAgICAgIGZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0
c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfVFJBTlNQ
T1JUOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cyBzdGF0czsKKyAg
ICAgICAgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICBy
ZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6VHJh
bnNwb3J0U3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1NUUkVBTToKKyAgICAgICAgR1NUX0ZJ
WE1FKCJEZXByZWNhdGVkIHN0YXRzOiBzdHJlYW0iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBHU1RfV0VCUlRDX1NUQVRTX0RBVEFfQ0hBTk5FTDoKKyAgICAgICAgR1NUX0ZJWE1FKCJNaXNz
aW5nIGRhdGEtY2hhbm5lbCBzdGF0cyBzdXBwb3J0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR1NUX1dFQlJUQ19TVEFUU19DQU5ESURBVEVfUEFJUjoKKyAgICBjYXNlIEdTVF9XRUJSVENf
U1RBVFNfTE9DQUxfQ0FORElEQVRFOgorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19SRU1PVEVf
Q0FORElEQVRFOgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2FuZGlkYXRlIHN0YXRzIHN1
cHBvcnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX0NFUlRJ
RklDQVRFOgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2VydGlmaWNhdGUgc3RhdHMgc3Vw
cG9ydCIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKwor
c3RydWN0IENhbGxiYWNrSG9sZGVyIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FU
RUQ7CisgICAgQ2FsbGJhY2tIb2xkZXIoR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OkNvbGxlY3Rv
ckNhbGxiYWNrJiYgY29sbGVjdG9yQ2FsbGJhY2spCisgICAgICAgIDogY2FsbGJhY2soV1RGTW92
ZShjb2xsZWN0b3JDYWxsYmFjaykpCisgICAgeworICAgIH0KKyAgICBHU3RyZWFtZXJTdGF0c0Nv
bGxlY3Rvcjo6Q29sbGVjdG9yQ2FsbGJhY2sgY2FsbGJhY2s7Cit9OworCit2b2lkIEdTdHJlYW1l
clN0YXRzQ29sbGVjdG9yOjpnZXRTdGF0cyhDb2xsZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBH
c3RQYWQqIHBhZCkKK3sKKyAgICBpZiAoIW1fd2VicnRjQmluKSB7CisgICAgICAgIGNhbGxiYWNr
KG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBob2xkZXIgPSBX
VEY6Om1ha2VVbmlxdWU8Q2FsbGJhY2tIb2xkZXI+KFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBh
dXRvKiBwcm9taXNlID0gZ3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJv
bWlzZSogcmF3UHJvbWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9t
aXNlID0gYWRvcHRHUmVmKHJhd1Byb21pc2UpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2Fs
bGJhY2tIb2xkZXI+IGhvbGRlcihyZWludGVycHJldF9jYXN0PENhbGxiYWNrSG9sZGVyKj4odXNl
ckRhdGEpKTsKKyAgICAgICAgaWYgKGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZS5nZXQoKSkgIT0g
R1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpIHsKKyAgICAgICAgICAgIGhvbGRlci0+Y2FsbGJh
Y2sobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBj
b25zdCBhdXRvKiBzdGF0cyA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsK
KyAgICAgICAgaWYgKCFzdGF0cykgeworICAgICAgICAgICAgaG9sZGVyLT5jYWxsYmFjayhudWxs
cHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWRBbmRXYWl0KFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgaG9sZGVyID0gaG9s
ZGVyLmdldCgpXSB7CisgICAgICAgICAgICBob2xkZXItPmNhbGxiYWNrKFJUQ1N0YXRzUmVwb3J0
OjpjcmVhdGUoWyZdKGF1dG8mIG1hcEFkYXB0ZXIpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBh
dXRvKiBzdGF0cyA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsKKyAgICAg
ICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2goc3RhdHMsIGZpbGxSZXBvcnRDYWxsYmFj
aywgJm1hcEFkYXB0ZXIpOworICAgICAgICAgICAgfSkpOworICAgICAgICB9KTsKKyAgICB9LCBo
b2xkZXIucmVsZWFzZSgpLCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93
ZWJydGNCaW4uZ2V0KCksICJnZXQtc3RhdHMiLCBwYWQsIHByb21pc2UpOworfQorCit9OyAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTQyNzM1NTNmODI1MTM3MjYxZmE5NDc2YmZlMGFlMTcyYmQwODFiNgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVy
LmgiCisKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYv
UmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUlRDU3RhdHNSZXBvcnQ7CisKK2NsYXNzIEdTdHJlYW1l
clN0YXRzQ29sbGVjdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdTdHJlYW1lclN0
YXRzQ29sbGVjdG9yLCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiB7CitwdWJsaWM6Cisg
ICAgdXNpbmcgQ29sbGVjdG9yQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0
cjxSVENTdGF0c1JlcG9ydD4mJik+OworICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyU3RhdHNDb2xs
ZWN0b3I+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyU3RhdHNDb2xs
ZWN0b3IoKSk7IH0KKworICAgIHZvaWQgc2V0RWxlbWVudChHc3RFbGVtZW50KiBlbGVtZW50KSB7
IG1fd2VicnRjQmluID0gZWxlbWVudDsgfQorICAgIHZvaWQgZ2V0U3RhdHMoQ29sbGVjdG9yQ2Fs
bGJhY2smJiwgR3N0UGFkKik7CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBt
X3dlYnJ0Y0JpbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0
aWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lcldlYlJUQ1V0aWxzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZmMxNDlhM2E4Y2NhYWEzNzhjM2E1
OTdhOTIyZGVjMDJlNmVhMGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwCkBAIC0w
LDAgKzEsNDQ4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKworI2luY2x1ZGUgIlJUQ0ljZUNh
bmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJUQ0ljZVByb3RvY29sLmgiCisKKyNpbmNsdWRlIDxvcGVu
c3NsL2JuLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3Nz
bC5oPgorI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorI2luY2x1ZGUg
PHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNv
bnZlcnNpb24uaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfd2VicnRjX3V0
aWxzX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfdXRpbHNf
ZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIFJUQ0ljZUNvbXBv
bmVudCB0b1JUQ0ljZUNvbXBvbmVudChpbnQgY29tcG9uZW50KQoreworICAgIHJldHVybiBjb21w
b25lbnQgPT0gMSA/IFJUQ0ljZUNvbXBvbmVudDo6UnRwIDogUlRDSWNlQ29tcG9uZW50OjpSdGNw
OworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDSWNlUHJvdG9jb2w+IHRvUlRD
SWNlUHJvdG9jb2woY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKK3sKKyAgICBpZiAocHJvdG9jb2wu
aXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIGlmIChwcm90b2NvbCA9PSAidWRw
IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVByb3RvY29sOjpVZHA7CisgICAgQVNTRVJUKHByb3Rv
Y29sID09ICJ0Y3AiKTsKKyAgICByZXR1cm4gUlRDSWNlUHJvdG9jb2w6OlRjcDsKK30KKworc3Rh
dGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU+IHRvUlRDSWNl
VGNwQ2FuZGlkYXRlVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUuaXNF
bXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIGlmICh0eXBlID09ICJhY3RpdmUiKQor
ICAgICAgICByZXR1cm4gUlRDSWNlVGNwQ2FuZGlkYXRlVHlwZTo6QWN0aXZlOworICAgIGlmICh0
eXBlID09ICJwYXNzaXZlIikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU6
OlBhc3NpdmU7CisgICAgQVNTRVJUKHR5cGUgPT0gInNvIik7CisgICAgcmV0dXJuIFJUQ0ljZVRj
cENhbmRpZGF0ZVR5cGU6OlNvOworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRD
SWNlQ2FuZGlkYXRlVHlwZT4gdG9SVENJY2VDYW5kaWRhdGVUeXBlKGNvbnN0IFN0cmluZyYgdHlw
ZSkKK3sKKyAgICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAg
aWYgKHR5cGUgPT0gImhvc3QiKQorICAgICAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6
SG9zdDsKKyAgICBpZiAodHlwZSA9PSAic3JmbHgiKQorICAgICAgICByZXR1cm4gUlRDSWNlQ2Fu
ZGlkYXRlVHlwZTo6U3JmbHg7CisgICAgaWYgKHR5cGUgPT0gInByZmx4IikKKyAgICAgICAgcmV0
dXJuIFJUQ0ljZUNhbmRpZGF0ZVR5cGU6OlByZmx4OworICAgIEFTU0VSVCh0eXBlID09ICJyZWxh
eSIpOworICAgIHJldHVybiBSVENJY2VDYW5kaWRhdGVUeXBlOjpSZWxheTsKK30KKworUmVmUHRy
PFJUQ0Vycm9yPiB0b1JUQ0Vycm9yKEdFcnJvciogcnRjRXJyb3IpCit7CisgICAgYXV0byBkZXRh
aWwgPSB0b1JUQ0Vycm9yRGV0YWlsVHlwZShzdGF0aWNfY2FzdDxHc3RXZWJSVENFcnJvcj4ocnRj
RXJyb3ItPmNvZGUpKTsKKyAgICBpZiAoIWRldGFpbCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisgICAgcmV0dXJuIFJUQ0Vycm9yOjpjcmVhdGUoKmRldGFpbCwgcnRjRXJyb3ItPm1lc3NhZ2Up
OworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSB0b1dlYlJUQ0JpdFJhdGVQcmlvcml0eShSVENQ
cmlvcml0eVR5cGUgcHJpb3JpdHkpCit7CisgICAgc3dpdGNoIChwcmlvcml0eSkgeworICAgIGNh
c2UgUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93OgorICAgICAgICByZXR1cm4gMC41OworICAgIGNh
c2UgUlRDUHJpb3JpdHlUeXBlOjpMb3c6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgUlRD
UHJpb3JpdHlUeXBlOjpNZWRpdW06CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgUlRDUHJp
b3JpdHlUeXBlOjpIaWdoOgorICAgICAgICByZXR1cm4gNDsKKyAgICB9CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZnJv
bVJUQ0VuY29kaW5nUGFyYW1ldGVycyhjb25zdCBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMmIHBh
cmFtZXRlcnMpCit7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IHJ0Y1BhcmFtZXRlcnMo
Z3N0X3N0cnVjdHVyZV9uZXcoImVuY29kaW5nLXBhcmFtZXRlcnMiLCAiYWN0aXZlIiwgR19UWVBF
X0JPT0xFQU4sIHBhcmFtZXRlcnMuYWN0aXZlLAorICAgICAgICAicmlkIiwgR19UWVBFX1NUUklO
RywgcGFyYW1ldGVycy5yaWQudXRmOCgpLmRhdGEoKSwgImJpdHJhdGUtcHJpb3JpdHkiLCBHX1RZ
UEVfRE9VQkxFLCB0b1dlYlJUQ0JpdFJhdGVQcmlvcml0eShwYXJhbWV0ZXJzLnByaW9yaXR5KSwg
bnVsbHB0cikpOworCisgICAgaWYgKHBhcmFtZXRlcnMuc3NyYykKKyAgICAgICAgZ3N0X3N0cnVj
dHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgInNzcmMiLCBHX1RZUEVfVUxPTkcsIHBhcmFt
ZXRlcnMuc3NyYywgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5tYXhCaXRyYXRlKQor
ICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAibWF4LWJpdHJh
dGUiLCBHX1RZUEVfVUxPTkcsIHBhcmFtZXRlcnMubWF4Qml0cmF0ZSwgbnVsbHB0cik7CisKKyAg
ICBpZiAocGFyYW1ldGVycy5tYXhGcmFtZXJhdGUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJtYXgtZnJhbWVyYXRlIiwgR19UWVBFX1VMT05HLCBwYXJh
bWV0ZXJzLm1heEZyYW1lcmF0ZSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5zY2Fs
ZVJlc29sdXRpb25Eb3duQnkpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRl
cnMuZ2V0KCksICJzY2FsZS1yZXNvbHV0aW9uLWRvd24tYnkiLCBHX1RZUEVfRE9VQkxFLCBwYXJh
bWV0ZXJzLnNjYWxlUmVzb2x1dGlvbkRvd25CeSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1l
dGVycy5uZXR3b3JrUHJpb3JpdHkpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFt
ZXRlcnMuZ2V0KCksICJuZXR3b3JrLXByaW9yaXR5IiwgR19UWVBFX0lOVCwgKnBhcmFtZXRlcnMu
bmV0d29ya1ByaW9yaXR5LCBudWxscHRyKTsKKworICAgIHJldHVybiBydGNQYXJhbWV0ZXJzOwor
fQorCitzdGF0aWMgaW5saW5lIFJUQ1ByaW9yaXR5VHlwZSBmcm9tV2ViUlRDQml0UmF0ZVByaW9y
aXR5KGRvdWJsZSBwcmlvcml0eSkKK3sKKyAgICBpZiAocHJpb3JpdHkgPCAwLjcpCisgICAgICAg
IHJldHVybiBSVENQcmlvcml0eVR5cGU6OlZlcnlMb3c7CisgICAgaWYgKHByaW9yaXR5IDwgMS41
KQorICAgICAgICByZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpMb3c7CisgICAgaWYgKHByaW9yaXR5
IDwgMi41KQorICAgICAgICByZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpNZWRpdW07CisgICAgcmV0
dXJuIFJUQ1ByaW9yaXR5VHlwZTo6SGlnaDsKK30KKworc3RhdGljIGlubGluZSBSVENSdHBFbmNv
ZGluZ1BhcmFtZXRlcnMgdG9SVENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3QgR3N0U3RydWN0dXJl
KiBydGNQYXJhbWV0ZXJzKQoreworICAgIFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycyBwYXJhbWV0
ZXJzOworCisgICAgdW5zaWduZWQgc3NyYzsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWlu
dChydGNQYXJhbWV0ZXJzLCAic3NyYyIsICZzc3JjKSkKKyAgICAgICAgcGFyYW1ldGVycy5zc3Jj
ID0gc3NyYzsKKworICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJ0Y1BhcmFtZXRlcnMsICJhY3RpdmUi
LCBHX1RZUEVfQk9PTEVBTiwgJihwYXJhbWV0ZXJzLmFjdGl2ZSksIG51bGxwdHIpOworCisgICAg
dWludDY0X3QgbWF4Qml0cmF0ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHJ0
Y1BhcmFtZXRlcnMsICJtYXgtYml0cmF0ZSIsICZtYXhCaXRyYXRlKSkKKyAgICAgICAgcGFyYW1l
dGVycy5tYXhCaXRyYXRlID0gbWF4Qml0cmF0ZTsKKworICAgIHVpbnQ2NF90IG1heEZyYW1lcmF0
ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHJ0Y1BhcmFtZXRlcnMsICJtYXgt
ZnJhbWVyYXRlIiwgJm1heEZyYW1lcmF0ZSkpCisgICAgICAgIHBhcmFtZXRlcnMubWF4RnJhbWVy
YXRlID0gbWF4RnJhbWVyYXRlOworCisgICAgcGFyYW1ldGVycy5yaWQgPSBnc3Rfc3RydWN0dXJl
X2dldF9zdHJpbmcocnRjUGFyYW1ldGVycywgInJpZCIpOworCisgICAgZG91YmxlIHNjYWxlUmVz
b2x1dGlvbkRvd25CeTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHJ0Y1BhcmFt
ZXRlcnMsICJzY2FsZS1yZXNvbHV0aW9uLWRvd24tYnkiLCAmc2NhbGVSZXNvbHV0aW9uRG93bkJ5
KSkKKyAgICAgICAgcGFyYW1ldGVycy5zY2FsZVJlc29sdXRpb25Eb3duQnkgPSBzY2FsZVJlc29s
dXRpb25Eb3duQnk7CisKKyAgICBkb3VibGUgYml0cmF0ZVByaW9yaXR5OworICAgIGlmIChnc3Rf
c3RydWN0dXJlX2dldF9kb3VibGUocnRjUGFyYW1ldGVycywgImJpdHJhdGUtcHJpb3JpdHkiLCAm
Yml0cmF0ZVByaW9yaXR5KSkKKyAgICAgICAgcGFyYW1ldGVycy5wcmlvcml0eSA9IGZyb21XZWJS
VENCaXRSYXRlUHJpb3JpdHkoYml0cmF0ZVByaW9yaXR5KTsKKworICAgIGludCBuZXR3b3JrUHJp
b3JpdHk7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChydGNQYXJhbWV0ZXJzLCAibmV0
d29yay1wcmlvcml0eSIsICZuZXR3b3JrUHJpb3JpdHkpKQorICAgICAgICBwYXJhbWV0ZXJzLm5l
dHdvcmtQcmlvcml0eSA9IHN0YXRpY19jYXN0PFJUQ1ByaW9yaXR5VHlwZT4obmV0d29ya1ByaW9y
aXR5KTsKKworICAgIHJldHVybiBwYXJhbWV0ZXJzOworfQorCitSVENSdHBTZW5kUGFyYW1ldGVy
cyB0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSogcnRjUGFyYW1ldGVy
cykKK3sKKyAgICBpZiAoIXJ0Y1BhcmFtZXRlcnMpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBSVENSdHBTZW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIGF1dG8qIGVuY29kaW5ncyA9
IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHJ0Y1BhcmFtZXRlcnMsICJlbmNvZGluZ3MiKTsKKyAg
ICB1bnNpZ25lZCBzaXplID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUoZW5jb2RpbmdzKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGF1
dG8qIHZhbHVlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlKGVuY29kaW5ncywgaSk7CisgICAg
ICAgIHBhcmFtZXRlcnMuZW5jb2RpbmdzLmFwcGVuZCh0b1JUQ0VuY29kaW5nUGFyYW1ldGVycyhH
U1RfU1RSVUNUVVJFX0NBU1QodmFsdWUpKSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEhhbmRs
ZSBydGNQYXJhbWV0ZXJzLmRlZ3JhZGF0aW9uX3ByZWZlcmVuY2UuCisgICAgcmV0dXJuIHBhcmFt
ZXRlcnM7Cit9CisKKworc3RhdGljIHZvaWQgZW5zdXJlRGVidWdDYXRlZ29yeUluaXRpYWxpemVk
KCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxs
X29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Vi
a2l0X3dlYnJ0Y191dGlsc19kZWJ1ZywgIndlYmtpdHdlYnJ0Y3V0aWxzIiwgMCwgIldlYktpdCBX
ZWJSVEMgdXRpbGl0aWVzIik7CisgICAgfSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDSWNlQ2Fu
ZGlkYXRlOjpGaWVsZHM+IHBhcnNlSWNlQ2FuZGlkYXRlU0RQKGNvbnN0IFN0cmluZyYgc2RwKQor
eworICAgIGVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpOworICAgIEdTVF9ERUJVRygi
UGFyc2luZyBJQ0UgQ2FuZGlkYXRlOiAlcyIsIHNkcC51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAo
IXNkcC5zdGFydHNXaXRoKCJjYW5kaWRhdGU6IikpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBTdHJpbmcgZm91bmRhdGlvbjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRJZCA9IDA7CisgICAg
U3RyaW5nIHRyYW5zcG9ydDsKKyAgICB1bnNpZ25lZCBwcmlvcml0eSA9IDA7CisgICAgU3RyaW5n
IGFkZHJlc3M7CisgICAgdWludDMyX3QgcG9ydCA9IDA7CisgICAgU3RyaW5nIHR5cGU7CisgICAg
U3RyaW5nIHRjcHR5cGU7CisgICAgU3RyaW5nIHJlbGF0ZWRBZGRyZXNzOworICAgIGd1aW50MTYg
cmVsYXRlZFBvcnQgPSAwOworICAgIFN0cmluZyB1c2VybmFtZUZyYWdtZW50OworICAgIGF1dG8g
dG9rZW5zID0gc2RwLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3Vic3RyaW5nKDEwKS5zcGxp
dCgnICcpOworCisgICAgZm9yIChhdXRvIGl0ID0gdG9rZW5zLmJlZ2luKCk7IGl0ICE9IHRva2Vu
cy5lbmQoKTsgKytpdCkgeworICAgICAgICBhdXRvIGkgPSBzdGQ6OmRpc3RhbmNlKHRva2Vucy5i
ZWdpbigpLCBpdCk7CisgICAgICAgIGF1dG8gdG9rZW4gPSAqaXQ7CisgICAgICAgIHN3aXRjaCAo
aSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBmb3VuZGF0aW9uID0gdG9rZW47Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKGF1dG8g
dmFsdWUgPSBwYXJzZUludGVnZXI8dW5zaWduZWQ+KHRva2VuKSkKKyAgICAgICAgICAgICAgICBj
b21wb25lbnRJZCA9ICp2YWx1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBy
ZXR1cm4geyB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAg
ICAgIHRyYW5zcG9ydCA9IHRva2VuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
MzoKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVkPih0
b2tlbikpCisgICAgICAgICAgICAgICAgcHJpb3JpdHkgPSAqdmFsdWU7CisgICAgICAgICAgICBl
bHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIDQ6CisgICAgICAgICAgICBhZGRyZXNzID0gdG9rZW47CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJz
ZUludGVnZXI8dW5zaWduZWQ+KHRva2VuKSkKKyAgICAgICAgICAgICAgICBwb3J0ID0gKnZhbHVl
OworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChpdCArIDEgPT0g
dG9rZW5zLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgICAg
IGl0Kys7CisgICAgICAgICAgICBpZiAodG9rZW4gPT0gInR5cCIpCisgICAgICAgICAgICAgICAg
dHlwZSA9ICppdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJyYWRkciIpCisgICAg
ICAgICAgICAgICAgcmVsYXRlZEFkZHJlc3MgPSAqaXQ7CisgICAgICAgICAgICBlbHNlIGlmICh0
b2tlbiA9PSAicnBvcnQiKQorICAgICAgICAgICAgICAgIHJlbGF0ZWRQb3J0ID0gcGFyc2VJbnRl
Z2VyPHVuc2lnbmVkPigqaXQpLnZhbHVlX29yKDApOworICAgICAgICAgICAgZWxzZSBpZiAodG9r
ZW4gPT0gInRjcHR5cGUiKQorICAgICAgICAgICAgICAgIHRjcHR5cGUgPSAqaXQ7CisgICAgICAg
ICAgICBlbHNlIGlmICh0b2tlbiA9PSAidWZyYWciKQorICAgICAgICAgICAgICAgIHVzZXJuYW1l
RnJhZ21lbnQgPSAqaXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFJUQ0lj
ZUNhbmRpZGF0ZTo6RmllbGRzIGZpZWxkczsKKyAgICBmaWVsZHMuZm91bmRhdGlvbiA9IGZvdW5k
YXRpb247CisgICAgZmllbGRzLmNvbXBvbmVudCA9IHRvUlRDSWNlQ29tcG9uZW50KGNvbXBvbmVu
dElkKTsKKyAgICBmaWVsZHMucHJpb3JpdHkgPSBwcmlvcml0eTsKKyAgICBmaWVsZHMucHJvdG9j
b2wgPSB0b1JUQ0ljZVByb3RvY29sKHRyYW5zcG9ydCk7CisgICAgaWYgKCFhZGRyZXNzLmlzRW1w
dHkoKSkgeworICAgICAgICBmaWVsZHMuYWRkcmVzcyA9IGFkZHJlc3M7CisgICAgICAgIGZpZWxk
cy5wb3J0ID0gcG9ydDsKKyAgICB9CisgICAgZmllbGRzLnR5cGUgPSB0b1JUQ0ljZUNhbmRpZGF0
ZVR5cGUodHlwZSk7CisgICAgZmllbGRzLnRjcFR5cGUgPSB0b1JUQ0ljZVRjcENhbmRpZGF0ZVR5
cGUodGNwdHlwZSk7CisgICAgaWYgKCFyZWxhdGVkQWRkcmVzcy5pc0VtcHR5KCkpIHsKKyAgICAg
ICAgZmllbGRzLnJlbGF0ZWRBZGRyZXNzID0gcmVsYXRlZEFkZHJlc3M7CisgICAgICAgIGZpZWxk
cy5yZWxhdGVkUG9ydCA9IHJlbGF0ZWRQb3J0OworICAgIH0KKyAgICBmaWVsZHMudXNlcm5hbWVG
cmFnbWVudCA9IHVzZXJuYW1lRnJhZ21lbnQ7CisgICAgcmV0dXJuIGZpZWxkczsKK30KKworc3Rh
dGljIFN0cmluZyB4NTA5U2VyaWFsaXplKFg1MDkqIHg1MDkpCit7CisgICAgQklPKiBiaW8gPSBC
SU9fbmV3KEJJT19zX21lbSgpKTsKKyAgICBpZiAoIWJpbykKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIGF1dG8gc2NvcGVFeGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAg
IEJJT19mcmVlKGJpbyk7CisgICAgfSk7CisKKyAgICBpZiAoIVBFTV93cml0ZV9iaW9fWDUwOShi
aW8sIHg1MDkpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZl
cjsKKyAgICBidWZmZXIucmVzZXJ2ZUNhcGFjaXR5KDQwOTYpOworICAgIGludCBsZW5ndGggPSBC
SU9fcmVhZChiaW8sIGJ1ZmZlci5kYXRhKCksIDQwOTYpOworICAgIGlmICghbGVuZ3RoKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5n
dGgpOworfQorCitzdGF0aWMgU3RyaW5nIHByaXZhdGVLZXlTZXJpYWxpemUoRVZQX1BLRVkqIHBy
aXZhdGVLZXkpCit7CisgICAgQklPKiBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAgICBp
ZiAoIWJpbykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gc2NvcGVFeGl0ID0gV1RG
OjptYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgfSk7CisK
KyAgICBpZiAoIVBFTV93cml0ZV9iaW9fUHJpdmF0ZUtleShiaW8sIHByaXZhdGVLZXksIG51bGxw
dHIsIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzZXJ2ZUNhcGFjaXR5KDQw
OTYpOworICAgIGludCBsZW5ndGggPSBCSU9fcmVhZChiaW8sIGJ1ZmZlci5kYXRhKCksIDQwOTYp
OworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIFN0
cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpOworfQorCitzdGQ6Om9wdGlvbmFsPFJlZjxSVEND
ZXJ0aWZpY2F0ZT4+IGdlbmVyYXRlQ2VydGlmaWNhdGUoUmVmPFNlY3VyaXR5T3JpZ2luPiYmIG9y
aWdpbiwgY29uc3QgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9u
JiBpbmZvKQoreworICAgIGVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpOworICAgIEVW
UF9QS0VZKiBwcml2YXRlS2V5ID0gRVZQX1BLRVlfbmV3KCk7CisgICAgaWYgKCFwcml2YXRlS2V5
KSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gY3JlYXRlIHByaXZhdGUga2V5Iik7
CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBzY29wZUV4aXQgPSBXVEY6
Om1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgRVZQX1BLRVlfZnJlZShwcml2YXRlS2V5KTsK
KyAgICB9KTsKKworICAgIHN3aXRjaCAoaW5mby50eXBlKSB7CisgICAgY2FzZSBQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb246OlR5cGU6OkVDRFNBUDI1Njogewor
ICAgICAgICBFQ19LRVkqIGVjS2V5ID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKE5JRF9YOV82
Ml9wcmltZTI1NnYxKTsKKyAgICAgICAgLy8gRW5zdXJlIGN1cnZlIG5hbWUgaXMgaW5jbHVkZWQg
d2hlbiBFQyBrZXkgaXMgc2VyaWFsaXplZC4KKyAgICAgICAgLy8gV2l0aG91dCB0aGlzIGNhbGws
IE9wZW5TU0wgdmVyc2lvbnMgYmVmb3JlIDEuMS4wIHdpbGwgY3JlYXRlCisgICAgICAgIC8vIGNl
cnRpZmljYXRlcyB0aGF0IGRvbid0IHdvcmsgZm9yIFRMUy4KKyAgICAgICAgLy8gVGhpcyBpcyBh
IG5vLW9wIGZvciBCb3JpbmdTU0wgYW5kIE9wZW5TU0wgMS4xLjArCisgICAgICAgIEVDX0tFWV9z
ZXRfYXNuMV9mbGFnKGVjS2V5LCBPUEVOU1NMX0VDX05BTUVEX0NVUlZFKTsKKyAgICAgICAgaWYg
KCFwcml2YXRlS2V5IHx8ICFlY0tleSB8fCAhRUNfS0VZX2dlbmVyYXRlX2tleShlY0tleSkgfHwg
IUVWUF9QS0VZX2Fzc2lnbl9FQ19LRVkocHJpdmF0ZUtleSwgZWNLZXkpKSB7CisgICAgICAgICAg
ICBFQ19LRVlfZnJlZShlY0tleSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9
CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6
Q2VydGlmaWNhdGVJbmZvcm1hdGlvbjo6VHlwZTo6UlNBU1NBUEtDUzF2MTU6IHsKKyAgICAgICAg
UlNBKiByc2EgPSBSU0FfbmV3KCk7CisgICAgICAgIGlmICghcnNhKQorICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgICAgICBCSUdOVU0qIGV4cG9uZW50ID0gQk5fbmV3KCk7CisgICAgICAg
IGludCBwdWJsaWNFeHBvbmVudCA9IGluZm8ucnNhUGFyYW1ldGVycyA/IGluZm8ucnNhUGFyYW1l
dGVycy0+cHVibGljRXhwb25lbnQgOiA2NTUzNzsKKyAgICAgICAgYXV0byBtb2R1bHVzTGVuZ3Ro
ID0gaW5mby5yc2FQYXJhbWV0ZXJzID8gaW5mby5yc2FQYXJhbWV0ZXJzLT5tb2R1bHVzTGVuZ3Ro
IDogMjA0ODsKKyAgICAgICAgaWYgKCFCTl9zZXRfd29yZChleHBvbmVudCwgcHVibGljRXhwb25l
bnQpIHx8ICFSU0FfZ2VuZXJhdGVfa2V5X2V4KHJzYSwgbW9kdWx1c0xlbmd0aCwgZXhwb25lbnQs
IG51bGxwdHIpCisgICAgICAgICAgICB8fCAhRVZQX1BLRVlfYXNzaWduX1JTQShwcml2YXRlS2V5
LCByc2EpKSB7CisgICAgICAgICAgICBSU0FfZnJlZShyc2EpOworICAgICAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICAgICAgfQorICAgICAgICBCTl9mcmVlKGV4cG9uZW50KTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIH0KKworICAgIFg1MDkqIHg1MDkgPSBYNTA5X25ldygpOworICAgIGlm
ICgheDUwOSkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBjZXJ0aWZp
Y2F0ZSIpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGF1dG8gY2VydFNjb3Bl
RXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7
CisgICAgfSk7CisKKyAgICBYNTA5X3NldF92ZXJzaW9uKHg1MDksIDIpOworCisgICAgLy8gU2V0
IGEgcmFuZG9tIDY0IGJpdCBpbnRlZ2VyIGFzIHNlcmlhbCBudW1iZXIuCisgICAgQklHTlVNKiBz
ZXJpYWxOdW1iZXIgPSBCTl9uZXcoKTsKKyAgICBCTl9wc2V1ZG9fcmFuZChzZXJpYWxOdW1iZXIs
IDY0LCAwLCAwKTsKKyAgICBBU04xX0lOVEVHRVIqIGFzbjFTZXJpYWxOdW1iZXIgPSBYNTA5X2dl
dF9zZXJpYWxOdW1iZXIoeDUwOSk7CisgICAgQk5fdG9fQVNOMV9JTlRFR0VSKHNlcmlhbE51bWJl
ciwgYXNuMVNlcmlhbE51bWJlcik7CisgICAgQk5fZnJlZShzZXJpYWxOdW1iZXIpOworCisgICAg
Ly8gU2V0IGEgcmFuZG9tIDggYnl0ZSBiYXNlNjQgc3RyaW5nIGFzIGlzc3Vlci9zdWJqZWN0Lgor
ICAgIFg1MDlfTkFNRSogbmFtZSA9IFg1MDlfTkFNRV9uZXcoKTsKKyAgICBWZWN0b3I8dWludDhf
dD4gYnVmZmVyOworICAgIGJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDgpOworICAgIFdU
Rjo6Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoYnVmZmVyLmRhdGEoKSwgOCk7CisgICAg
YXV0byBjb21tb25OYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVyKTsKKyAgICBYNTA5
X05BTUVfYWRkX2VudHJ5X2J5X05JRChuYW1lLCBOSURfY29tbW9uTmFtZSwgTUJTVFJJTkdfQVND
LCAoY29uc3QgZ3VjaGFyKiljb21tb25OYW1lLmFzY2lpKCkuZGF0YSgpLCAtMSwgLTEsIDApOwor
ICAgIFg1MDlfc2V0X3N1YmplY3RfbmFtZSh4NTA5LCBuYW1lKTsKKyAgICBYNTA5X3NldF9pc3N1
ZXJfbmFtZSh4NTA5LCBuYW1lKTsKKyAgICBYNTA5X05BTUVfZnJlZShuYW1lKTsKKworICAgIC8v
IEZhbGxiYWNrIHRvIDMwIGRheXMsIG1heCBvdXQgYXQgb25lIHllYXIuCisgICAgdWludDY0X3Qg
ZXhwaXJlcyA9IGluZm8uZXhwaXJlcy52YWx1ZV9vcigyNTkyMDAwKTsKKyAgICBleHBpcmVzID0g
c3RkOjptaW48dWludDY0X3Q+KGV4cGlyZXMsIDMxNTM2MDAwMDAwKTsKKyAgICBYNTA5X2dtdGlt
ZV9hZGooWDUwOV9nZXRtX25vdEJlZm9yZSh4NTA5KSwgMCk7CisgICAgWDUwOV9nbXRpbWVfYWRq
KFg1MDlfZ2V0bV9ub3RBZnRlcih4NTA5KSwgZXhwaXJlcyk7CisgICAgWDUwOV9zZXRfcHVia2V5
KHg1MDksIHByaXZhdGVLZXkpOworCisgICAgaWYgKCFYNTA5X3NpZ24oeDUwOSwgcHJpdmF0ZUtl
eSwgRVZQX3NoYTI1NigpKSkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIHNpZ24g
Y2VydGlmaWNhdGUiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvIHBl
bSA9IHg1MDlTZXJpYWxpemUoeDUwOSk7CisgICAgR1NUX0RFQlVHKCJHZW5lcmF0ZWQgY2VydGlm
aWNhdGUgUEVNOiAlcyIsIHBlbS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0byBzZXJpYWxpemVk
UHJpdmF0ZUtleSA9IHByaXZhdGVLZXlTZXJpYWxpemUocHJpdmF0ZUtleSk7CisgICAgVmVjdG9y
PFJUQ0NlcnRpZmljYXRlOjpEdGxzRmluZ2VycHJpbnQ+IGZpbmdlcnByaW50czsKKyAgICAvLyBG
SVhNRTogRmlsbCBmaW5nZXJwcmludHMuCisgICAgYXV0byBleHBpcmF0aW9uVGltZSA9IFdURjo6
V2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkgKyBXVEY6OlNlY29uZHMoZXhwaXJl
cyk7CisgICAgcmV0dXJuIFJUQ0NlcnRpZmljYXRlOjpjcmVhdGUoV1RGTW92ZShvcmlnaW4pLCBl
eHBpcmF0aW9uVGltZS5taWxsaXNlY29uZHMoKSwgV1RGTW92ZShmaW5nZXJwcmludHMpLCBXVEZN
b3ZlKHBlbSksIFdURk1vdmUoc2VyaWFsaXplZFByaXZhdGVLZXkpKTsKK30KKworYm9vbCBzZHBN
ZWRpYUhhc0F0dHJpYnV0ZUtleShjb25zdCBHc3RTRFBNZWRpYSogbWVkaWEsIGNvbnN0IGNoYXIq
IGtleSkKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSBnc3Rfc2RwX21lZGlhX2F0dHJpYnV0ZXNfbGVu
KG1lZGlhKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAg
ICAgY29uc3QgYXV0byogYXR0cmlidXRlID0gZ3N0X3NkcF9tZWRpYV9nZXRfYXR0cmlidXRlKG1l
ZGlhLCBpKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXR0cmlidXRlLT5rZXksIGtleSkpCisg
ICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
V2ViUlRDVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjg4ZmE0ZGIwNDdhZmY4YWRhYjhkOTI5OWM1N2I5
ZWNjNWRhMThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaApAQCAtMCwwICsxLDI2NyBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHVW5p
cXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24u
aCIKKyNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJSVENCdW5k
bGVQb2xpY3kuaCIKKyNpbmNsdWRlICJSVENDZXJ0aWZpY2F0ZS5oIgorI2luY2x1ZGUgIlJUQ0R0
bHNUcmFuc3BvcnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgorI2luY2x1ZGUgIlJUQ0ljZUNv
bm5lY3Rpb25TdGF0ZS5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFBvbGljeS5oIgorI2lu
Y2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFN0YXRlLmgiCisjaW5jbHVkZSAiUlRDUnRwU2VuZFBhcmFt
ZXRlcnMuaCIKKyNpbmNsdWRlICJSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbi5oIgorI2luY2x1
ZGUgIlJUQ1NkcFR5cGUuaCIKKyNpbmNsdWRlICJSVENTaWduYWxpbmdTdGF0ZS5oIgorCisjZGVm
aW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4K
KyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lu
bGluZSBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB0b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0
aW9uKEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBz
d2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJf
RElSRUNUSU9OX05PTkU6CisgICAgICAgIC8vIMKvXF8o44OEKV8vwq8KKyAgICAgICAgcmV0dXJu
IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBjYXNlIEdTVF9XRUJS
VENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9JTkFDVElWRToKKyAgICAgICAgcmV0dXJuIFJU
Q1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBjYXNlIEdTVF9XRUJSVENf
UlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5ET05MWToKKyAgICAgICAgcmV0dXJuIFJUQ1J0
cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kb25seTsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQ
X1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9SRUNWT05MWToKKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRy
YW5zY2VpdmVyRGlyZWN0aW9uOjpSZWN2b25seTsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RS
QU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5EUkVDVjoKKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5z
Y2VpdmVyRGlyZWN0aW9uOjpTZW5kcmVjdjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OkluYWN0
aXZlOworfQorCitpbmxpbmUgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZnJvbVJU
Q1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVj
dGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgUlRDUnRwVHJhbnNj
ZWl2ZXJEaXJlY3Rpb246OkluYWN0aXZlOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBf
VFJBTlNDRUlWRVJfRElSRUNUSU9OX0lOQUNUSVZFOworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2
ZXJEaXJlY3Rpb246OlNlbmRvbmx5OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJB
TlNDRUlWRVJfRElSRUNUSU9OX1NFTkRPTkxZOworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2ZXJE
aXJlY3Rpb246OlJlY3Zvbmx5OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlND
RUlWRVJfRElSRUNUSU9OX1JFQ1ZPTkxZOworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2ZXJEaXJl
Y3Rpb246OlNlbmRyZWN2OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlW
RVJfRElSRUNUSU9OX1NFTkRSRUNWOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05f
Tk9ORTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENTRFBUeXBlIHRvU2Vzc2lvbkRlc2Ny
aXB0aW9uVHlwZShSVENTZHBUeXBlIHNkcFR5cGUpCit7CisgICAgc3dpdGNoIChzZHBUeXBlKSB7
CisgICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENf
U0RQX1RZUEVfT0ZGRVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpQcmFuc3dlcjoKKyAgICAgICAg
cmV0dXJuIEdTVF9XRUJSVENfU0RQX1RZUEVfUFJBTlNXRVI7CisgICAgY2FzZSBSVENTZHBUeXBl
OjpBbnN3ZXI6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX0FOU1dFUjsKKyAg
ICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19T
RFBfVFlQRV9ST0xMQkFDSzsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX09GRkVSOworfQorCitzdGF0aWMg
aW5saW5lIFJUQ1NkcFR5cGUgZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5cGUoY29uc3QgR3N0V2Vi
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBhdXRvIHR5cGUgPSBk
ZXNjcmlwdGlvbi50eXBlOworICAgIGlmICh0eXBlID09IEdTVF9XRUJSVENfU0RQX1RZUEVfT0ZG
RVIpCisgICAgICAgIHJldHVybiBSVENTZHBUeXBlOjpPZmZlcjsKKyAgICBpZiAodHlwZSA9PSBH
U1RfV0VCUlRDX1NEUF9UWVBFX0FOU1dFUikKKyAgICAgICAgcmV0dXJuIFJUQ1NkcFR5cGU6OkFu
c3dlcjsKKyAgICBBU1NFUlQodHlwZSA9PSBHU1RfV0VCUlRDX1NEUF9UWVBFX1BSQU5TV0VSKTsK
KyAgICByZXR1cm4gUlRDU2RwVHlwZTo6UHJhbnN3ZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRD
U2lnbmFsaW5nU3RhdGUgdG9TaWduYWxpbmdTdGF0ZShHc3RXZWJSVENTaWduYWxpbmdTdGF0ZSBz
dGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05B
TElOR19TVEFURV9TVEFCTEU6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6U3Rh
YmxlOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9MT0NBTF9PRkZF
UjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlTG9jYWxPZmZlcjsKKyAg
ICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NUQVRFX0hBVkVfTE9DQUxfUFJBTlNXRVI6Cisg
ICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsUHJhbnN3ZXI7CisgICAg
Y2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX1JFTU9URV9PRkZFUjoKKyAgICAg
ICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlUmVtb3RlT2ZmZXI7CisgICAgY2FzZSBH
U1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX1JFTU9URV9QUkFOU1dFUjoKKyAgICAgICAg
cmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlUmVtb3RlUHJhbnN3ZXI7CisgICAgY2FzZSBH
U1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENTaWdu
YWxpbmdTdGF0ZTo6Q2xvc2VkOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpTdGFibGU7Cit9CisKK3N0YXRp
YyBpbmxpbmUgUlRDSWNlQ29ubmVjdGlvblN0YXRlIHRvUlRDSWNlQ29ubmVjdGlvblN0YXRlKEdz
dFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7
CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX05FVzoKKyAgICAgICAg
cmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6TmV3OworICAgIGNhc2UgR1NUX1dFQlJUQ19J
Q0VfQ09OTkVDVElPTl9TVEFURV9DSEVDS0lORzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5l
Y3Rpb25TdGF0ZTo6Q2hlY2tpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9O
X1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6
Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT01Q
TEVURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNvbXBsZXRlZDsK
KyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfRkFJTEVEOgorICAgICAg
ICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpGYWlsZWQ7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJU
Q0ljZUNvbm5lY3Rpb25TdGF0ZTo6RGlzY29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19J
Q0VfQ09OTkVDVElPTl9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0
aW9uU3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsKK30KKworc3RhdGlj
IGlubGluZSBSVENEdGxzVHJhbnNwb3J0U3RhdGUgdG9SVENEdGxzVHJhbnNwb3J0U3RhdGUoR3N0
V2ViUlRDRFRMU1RyYW5zcG9ydFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsK
KyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVfTkVXOgorICAgICAgICBy
ZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpOZXc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RU
TFNfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJh
bnNwb3J0U3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQ
T1JUX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0
ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19EVExTX1RSQU5TUE9SVF9TVEFURV9D
TE9TRUQ6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJhbnNwb3J0U3RhdGU6OkNsb3NlZDsKKyAg
ICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVfRkFJTEVEOgorICAgICAgICBy
ZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpGYWlsZWQ7CisgICAgfQorCisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlubGluZSBSVENJY2VUcmFuc3Bv
cnRTdGF0ZSB0b1JUQ0ljZVRyYW5zcG9ydFN0YXRlKEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0
ZSBzdGF0ZSkKK3sKKyAgICAvLyBGSVhNRTogTm8gR3N0V2ViUlRDSUNFVHJhbnNwb3J0U3RhdGUg
PworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJ
T05fU1RBVEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6Ok5ldzsK
KyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkc6CisgICAg
ICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmc7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJU
Q0ljZVRyYW5zcG9ydFN0YXRlOjpDb25uZWN0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9D
T05ORUNUSU9OX1NUQVRFX0NPTVBMRVRFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9y
dFN0YXRlOjpDb21wbGV0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NU
QVRFX0ZBSUxFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpGYWlsZWQ7
CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRDoK
KyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpEaXNjb25uZWN0ZWQ7CisgICAg
Y2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NMT1NFRDoKKyAgICAgICAgcmV0
dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6Ok5l
dzsKK30KKworc3RhdGljIGlubGluZSBSVENJY2VHYXRoZXJpbmdTdGF0ZSB0b1JUQ0ljZUdhdGhl
cmluZ1N0YXRlKEdzdFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIHN0YXRlKQoreworICAgIHN3aXRj
aCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9ORVc6
CisgICAgICAgIHJldHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6TmV3OworICAgIGNhc2UgR1NU
X1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX0dBVEhFUklORzoKKyAgICAgICAgcmV0dXJuIFJU
Q0ljZUdhdGhlcmluZ1N0YXRlOjpHYXRoZXJpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9H
QVRIRVJJTkdfU1RBVEVfQ09NUExFVEU6CisgICAgICAgIHJldHVybiBSVENJY2VHYXRoZXJpbmdT
dGF0ZTo6Q29tcGxldGU7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENCdW5kbGVQb2xpY3kgYnVuZGxlUG9saWN5
RnJvbUNvbmZpZ3VyYXRpb24oY29uc3QgTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZp
Z3VyYXRpb24pCit7CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkgewor
ICAgIGNhc2UgUlRDQnVuZGxlUG9saWN5OjpCYWxhbmNlZDoKKyAgICAgICAgcmV0dXJuIEdTVF9X
RUJSVENfQlVORExFX1BPTElDWV9CQUxBTkNFRDsKKyAgICBjYXNlIFJUQ0J1bmRsZVBvbGljeTo6
TWF4Q29tcGF0OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19CVU5ETEVfUE9MSUNZX01BWF9D
T01QQVQ7CisgICAgY2FzZSBSVENCdW5kbGVQb2xpY3k6Ok1heEJ1bmRsZToKKyAgICAgICAgcmV0
dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElDWV9NQVhfQlVORExFOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExF
X1BPTElDWV9OT05FOworfQorCitzdGF0aWMgaW5saW5lIEdzdFdlYlJUQ0lDRVRyYW5zcG9ydFBv
bGljeSBpY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29uZmlndXJhdGlvbihjb25zdCBNZWRpYUVuZHBv
aW50Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmZpZ3Vy
YXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7CisgICAgY2FzZSBSVENJY2VUcmFuc3BvcnRQb2xp
Y3k6OkFsbDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lf
QUxMOworICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0UG9saWN5OjpSZWxheToKKyAgICAgICAgcmV0
dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lfUkVMQVk7CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJUQ19JQ0Vf
VFJBTlNQT1JUX1BPTElDWV9BTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxS
VENFcnJvckRldGFpbFR5cGU+IHRvUlRDRXJyb3JEZXRhaWxUeXBlKEdzdFdlYlJUQ0Vycm9yIGNv
ZGUpCit7CisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0RB
VEFfQ0hBTk5FTF9GQUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRhaWxUeXBlOjpE
YXRhQ2hhbm5lbEZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0RUTFNfRkFJTFVS
RToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6RHRsc0ZhaWx1cmU7CisgICAg
Y2FzZSBHU1RfV0VCUlRDX0VSUk9SX0ZJTkdFUlBSSU5UX0ZBSUxVUkU6CisgICAgICAgIHJldHVy
biBSVENFcnJvckRldGFpbFR5cGU6OkZpbmdlcnByaW50RmFpbHVyZTsKKyAgICBjYXNlIEdTVF9X
RUJSVENfRVJST1JfU0NUUF9GQUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRhaWxU
eXBlOjpTY3RwRmFpbHVyZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfU0RQX1NZTlRBWF9F
UlJPUjoKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6U2RwU3ludGF4RXJyb3I7
CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0hBUkRXQVJFX0VOQ09ERVJfTk9UX0FWQUlMQUJM
RToKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfRU5DT0RFUl9FUlJPUjoKKyAgICAgICAgLy8g
RklYTUUKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4geyB9OworICAgIH07Cit9CisKK1Jl
ZlB0cjxSVENFcnJvcj4gdG9SVENFcnJvcihHRXJyb3IqKTsKKworR1VuaXF1ZVB0cjxHc3RTdHJ1
Y3R1cmU+IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3QgUlRDUnRwRW5jb2RpbmdQYXJh
bWV0ZXJzJik7CitSVENSdHBTZW5kUGFyYW1ldGVycyB0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKGNv
bnN0IEdzdFN0cnVjdHVyZSopOworCitzdGQ6Om9wdGlvbmFsPFJlZjxSVENDZXJ0aWZpY2F0ZT4+
IGdlbmVyYXRlQ2VydGlmaWNhdGUoUmVmPFNlY3VyaXR5T3JpZ2luPiYmLCBjb25zdCBQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb24mKTsKKworYm9vbCBzZHBNZWRp
YUhhc0F0dHJpYnV0ZUtleShjb25zdCBHc3RTRFBNZWRpYSosIGNvbnN0IGNoYXIqIGtleSk7CisK
K30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVy
LmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4IGFi
OWM3MDkyZTY1ZjUxMTUyMDEzYzEyYmE0ODAyN2ZkNzBiODI0YjQuLjg1MjVmNDk1MjRiNTkxNmJk
NWFjY2M1NDU0NWEwNjk0MTA0MjE1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFt
ZXIuY21ha2UKQEAgLTEsMTIgKzEsMjkgQEAKIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dF
Ql9BVURJTykKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RP
UklFUworICAgICAgICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIi
CiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNl
IgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2Vt
ZSIKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNw
cAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJh
bnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKKyAgICAgICAgTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNw
cAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNl
aXZlckJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAKKyAgICAg
ICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNm
b3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcAorICAgICAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2Vu
ZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3Rh
dHNDb2xsZWN0b3IuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lcldlYlJUQ1V0aWxzLmNwcAorCiAgICAgICAgIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFT
dHJlYW1BdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKwogICAgICAgICBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCkBAIC02MCw2
ICs3Nyw3IEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJl
RGV2aWNlTWFuYWdlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckNhcHR1cmVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEaXNwbGF5Q2FwdHVyZURldmljZU1hbmFnZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRp
YVN0cmVhbVNvdXJjZS5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTY3LDcgKzg1LDEzIEBAIGlmIChF
TkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKICAgICAgICAgcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZUF1ZGlvU291cmNlR1N0cmVhbWVy
LmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1l
VmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckdTdHJlYW1lci5jcHAK
KyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lci5jcHAKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVf
RlJBTUVXT1JLX0hFQURFUlMKQEAgLTE0Niw3ICsxNzAsNyBAQCBpZiAoRU5BQkxFX1ZJREVPKQog
ICAgICAgICApCiAgICAgZW5kaWYgKCkKIAotICAgIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNIE9S
IEVOQUJMRV9XRUJfUlRDKQorICAgIGlmIChVU0VfTElCV0VCUlRDKQogICAgICAgICBsaXN0KEFQ
UEVORCBXZWJDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgICAgICAgICAke0dT
VFJFQU1FUl9DT0RFQ1BBUlNFUlNfSU5DTFVERV9ESVJTfQogICAgICAgICApCkBAIC0xNTUsNiAr
MTc5LDIxIEBAIGlmIChFTkFCTEVfVklERU8pCiAgICAgICAgICAgICAgICAgJHtHU1RSRUFNRVJf
Q09ERUNQQVJTRVJTX0xJQlJBUklFU30KICAgICAgICAgICAgICkKICAgICAgICAgZW5kaWYgKCkK
KyAgICBlbHNlaWYgKFVTRV9HU1RSRUFNRVJfV0VCUlRDKQorICAgICAgICBsaXN0KEFQUEVORCBX
ZWJDb3JlX1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICAgICAke0dTVFJFQU1F
Ul9SVFBfSU5DTFVERV9ESVJTfQorICAgICAgICAgICAgJHtHU1RSRUFNRVJfU0RQX0lOQ0xVREVf
RElSU30KKyAgICAgICAgICAgICR7R1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlN9CisgICAg
ICAgICkKKyAgICAgICAgaWYgKE5PVCBVU0VfR1NUUkVBTUVSX0ZVTEwpCisgICAgICAgICAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUworICAgICAgICAgICAgICAgICR7R1NUUkVBTUVS
X1JUUF9MSUJSQVJJRVN9CisgICAgICAgICAgICAgICAgJHtHU1RSRUFNRVJfU0RQX0xJQlJBUklF
U30KKyAgICAgICAgICAgICAgICAke0dTVFJFQU1FUl9XRUJSVENfTElCUkFSSUVTfQorICAgICAg
ICAgICAgKQorICAgICAgICBlbmRpZiAoKQorCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVf
TElCUkFSSUVTIE9wZW5TU0w6OkNyeXB0bykKICAgICBlbmRpZiAoKQogZW5kaWYgKCkKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291
cmNlUHJvdmlkZXJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIuY3BwCmluZGV4IGI0ZDVmNjcw
M2U5MjllZGYxN2YxMDllZjY0ODEzMGFjZTAzOGNhYzQuLmExYWNlOTc2MWRhMmNlMmFhZDQ2NDIx
YjliZTZkZjhkM2E5ZTU0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dzdHJlYW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdT
dHJlYW1lci5jcHAKQEAgLTEwMCwxMCArMTAwLDU4IEBAIEF1ZGlvU291cmNlUHJvdmlkZXJHU3Ry
ZWFtZXI6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIoTWVkaWFTdHJlYW1UcmFja1ByaXZh
CiAKICAgICBtX2F1ZGlvU2lua0JpbiA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbigi
dGVlIG5hbWU9YXVkaW9UZWUiLCB0cnVlLCBudWxscHRyKTsKIAotICAgIGdzdF9iaW5fYWRkX21h
bnkoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBzcmMsIG1fYXVkaW9TaW5rQmluLmdl
dCgpLCBudWxscHRyKTsKLSAgICBnc3RfZWxlbWVudF9saW5rKHNyYywgbV9hdWRpb1NpbmtCaW4u
Z2V0KCkpOworICAgIGF1dG8qIGRlY29kZWJpbiA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJkZWNv
ZGViaW4zIiwgbnVsbHB0cik7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRlY29kZWJp
biwgInBhZC1hZGRlZCIsIEdfQ0FMTEJBQ0soK1tdKEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFt
ZXIqIHByb3ZpZGVyLCBHc3RQYWQqIHBhZCkgeworICAgICAgICBhdXRvIHBhZENhcHMgPSBhZG9w
dEdSZWYoZ3N0X3BhZF9xdWVyeV9jYXBzKHBhZCwgbnVsbHB0cikpOworICAgICAgICBib29sIGlz
QXVkaW8gPSBkb0NhcHNIYXZlVHlwZShwYWRDYXBzLmdldCgpLCAiYXVkaW8iKTsKKyAgICAgICAg
aWYgKHdlYmtpdEdzdENoZWNrVmVyc2lvbigxLCAxOCwgMCkpCisgICAgICAgICAgICBSRUxFQVNF
X0FTU0VSVChpc0F1ZGlvKTsKKyAgICAgICAgZWxzZSBpZiAoIWlzQXVkaW8pCisgICAgICAgICAg
ICByZXR1cm47CisKKyAgICAgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50
X2dldF9zdGF0aWNfcGFkKHByb3ZpZGVyLT5tX2F1ZGlvU2lua0Jpbi5nZXQoKSwgInNpbmsiKSk7
CisgICAgICAgIGdzdF9wYWRfbGluayhwYWQsIHNpbmtQYWQuZ2V0KCkpOworICAgICAgICBnc3Rf
ZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KHByb3ZpZGVyLT5tX2F1ZGlvU2lua0Jpbi5n
ZXQoKSk7CisgICAgfSksIHRoaXMpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NB
U1QobV9waXBlbGluZS5nZXQoKSksIHNyYywgZGVjb2RlYmluLCBtX2F1ZGlvU2lua0Jpbi5nZXQo
KSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfbGluayhzcmMsIGRlY29kZWJpbik7CisKKyAg
ICBhdXRvIGJ1cyA9IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUo
bV9waXBlbGluZS5nZXQoKSkpKTsKKyAgICBBU1NFUlQoYnVzKTsKKworICAgIGdzdF9idXNfc2V0
X3N5bmNfaGFuZGxlcihidXMuZ2V0KCksIFtdKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2Us
IGdwb2ludGVyIHVzZXJEYXRhKSAtPiBHc3RCdXNTeW5jUmVwbHkgeworICAgICAgICBhdXRvKiBk
ZWNvZGViaW4gPSBHU1RfRUxFTUVOVF9DQVNUKHVzZXJEYXRhKTsKKyAgICAgICAgaWYgKEdTVF9N
RVNTQUdFX1RZUEUobWVzc2FnZSkgIT0gR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT04gfHwg
R1NUX01FU1NBR0VfU1JDKG1lc3NhZ2UpICE9IEdTVF9PQkpFQ1RfQ0FTVChkZWNvZGViaW4pKSB7
CisgICAgICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICAgICAgICAgIHJl
dHVybiBHU1RfQlVTX0RST1A7CisgICAgICAgIH0KKworICAgICAgICBHUmVmUHRyPEdzdFN0cmVh
bUNvbGxlY3Rpb24+IGNvbGxlY3Rpb247CisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVh
bV9jb2xsZWN0aW9uKG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91dFB0cigpKTsKKyAgICAgICAgaWYg
KCFjb2xsZWN0aW9uKSB7CisgICAgICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsK
KyAgICAgICAgICAgIHJldHVybiBHU1RfQlVTX0RST1A7CisgICAgICAgIH0KKworICAgICAgICB1
bnNpZ25lZCBzaXplID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplKGNvbGxlY3Rpb24u
Z2V0KCkpOworICAgICAgICBHTGlzdCogc3RyZWFtcyA9IG51bGxwdHI7CisgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGF1dG8qIHN0cmVh
bSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtKGNvbGxlY3Rpb24uZ2V0KCksIGkp
OworICAgICAgICAgICAgYXV0byBzdHJlYW1UeXBlID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5
cGUoc3RyZWFtKTsKKyAgICAgICAgICAgIGlmIChzdHJlYW1UeXBlID09IEdTVF9TVFJFQU1fVFlQ
RV9BVURJTykgeworICAgICAgICAgICAgICAgIHN0cmVhbXMgPSBnX2xpc3RfYXBwZW5kKHN0cmVh
bXMsIGNvbnN0X2Nhc3Q8Y2hhcio+KGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKHN0cmVhbXMpIHsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQoZGVj
b2RlYmluLCBnc3RfZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zKHN0cmVhbXMpKTsKKyAgICAgICAg
ICAgIGdfbGlzdF9mcmVlKHN0cmVhbXMpOworICAgICAgICB9CiAKLSAgICBjb25uZWN0U2ltcGxl
QnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCkpOworICAgICAgICBnc3RfbWVzc2Fn
ZV91bnJlZihtZXNzYWdlKTsKKyAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAgICB9LCBn
c3Rfb2JqZWN0X3JlZihkZWNvZGViaW4pLCBnc3Rfb2JqZWN0X3VucmVmKTsKIH0KICNlbmRpZgog
CkBAIC0xMjAsMTAgKzE2OCw4IEBAIEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6On5BdWRp
b1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKCkKIAogICAgIHNldENsaWVudChudWxscHRyKTsKICNp
ZiBFTkFCTEUoTUVESUFfU1RSRUFNKQotICAgIGlmIChtX3BpcGVsaW5lKSB7Ci0gICAgICAgIGRp
c2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5nZXQoKSk7CisgICAg
aWYgKG1fcGlwZWxpbmUpCiAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5l
LmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7Ci0gICAgfQogI2VuZGlmCiB9CiAKQEAgLTM0NSw3ICsz
OTEsNiBAQCB2b2lkIEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OmhhbmRsZU5ld0RlaW50
ZXJsZWF2ZVBhZChHc3RQYWQqIHBhZCkKIAogICAgIEdRdWFyayBxdWFyayA9IGdfcXVhcmtfZnJv
bV9zdGF0aWNfc3RyaW5nKCJwZWVyIik7CiAgICAgZ19vYmplY3Rfc2V0X3FkYXRhKEdfT0JKRUNU
KHBhZCksIHF1YXJrLCBzaW5rUGFkLmdldCgpKTsKLQogICAgIG1fZGVpbnRlcmxlYXZlU291cmNl
UGFkcysrOwogICAgIEdRdWFyayBjaGFubmVsSWRRdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNf
c3RyaW5nKCJjaGFubmVsLWlkIik7CiAgICAgZ19vYmplY3Rfc2V0X3FkYXRhKEdfT0JKRUNUKHNp
bmspLCBjaGFubmVsSWRRdWFyaywgR0lOVF9UT19QT0lOVEVSKG1fZGVpbnRlcmxlYXZlU291cmNl
UGFkcykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVh
bWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgK
aW5kZXggNmYyODg3MmFmYjExNzZlNTEzZDJiZGY1NWE2MjIxZDRmNmZiMGFlNy4uZGQzMTNiMzE0
MjQwNmNhZjU3OTRlYWM3Y2MyYWY4ZDY0ZTU0NWFhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCkBAIC0zMiwxOSArMzIsMTYgQEAgY2xhc3MgR1N0
cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBmaW5hbDogcHVibGljIEF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24gewogcHVibGljOgogICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24o
R3N0QXVkaW9JbmZvJiYgaW5mbykKICAgICAgICAgOiBtX2luZm8oV1RGTW92ZShpbmZvKSkKLSAg
ICAgICAgLCBtX2NhcHMoYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykp
KQogICAgIHsKICAgICB9CiAKICAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGNv
bnN0IEdzdEF1ZGlvSW5mbyYgaW5mbykKICAgICAgICAgOiBtX2luZm8oaW5mbykKLSAgICAgICAg
LCBtX2NhcHMoYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpKQogICAg
IHsKICAgICB9CiAKICAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKEdzdEF1ZGlv
SW5mbyogaW5mbykKICAgICAgICAgOiBtX2luZm8oKmluZm8pCi0gICAgICAgICwgbV9jYXBzKGFk
b3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZtX2luZm8pKSkKICAgICB7CiAgICAgfQog
CkBAIC05OSw3ICs5NiwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdT
dHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG90aGVyKSB7IHJldHVybiBnc3RfYXVkaW9f
aW5mb19pc19lcXVhbCgmbV9pbmZvLCAmb3RoZXIubV9pbmZvKTsgfQogICAgIGJvb2wgb3BlcmF0
b3IhPShjb25zdCBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1
cm4gIW9wZXJhdG9yID09IChvdGhlcik7IH0KIAotICAgIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4m
IGNhcHMoKSBjb25zdCB7IHJldHVybiBtX2NhcHM7IH0KKyAgICBjb25zdCBHUmVmUHRyPEdzdENh
cHM+JiBjYXBzKCkKKyAgICB7CisgICAgICAgIGlmICghbV9jYXBzKQorICAgICAgICAgICAgbV9j
YXBzID0gYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpOworICAgICAg
ICByZXR1cm4gbV9jYXBzOworICAgIH0KICAgICBjb25zdCBHc3RBdWRpb0luZm8mIGdldEluZm8o
KSBjb25zdCB7IHJldHVybiBtX2luZm87IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0
cmVhbWVyLmNwcAppbmRleCAyM2FjMTI1NzY2MjE5N2ZhNGVhYzk3YTk5N2NiNWQwZmVlZTc0Mzkw
Li45OWQ1MjczMDZiZWQxNGVmNTIxODJiMmJjMjhjNGQzMGEzNjcwNjMzIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dS
ZWZQdHJHU3RyZWFtZXIuY3BwCkBAIC0yNyw2ICsyNywxMiBAQAogI2luY2x1ZGUgPGdzdC9nbC9l
Z2wvZ3N0ZWdsaW1hZ2UuaD4KICNlbmRpZgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisj
ZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMu
aD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYg
ewogCiB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0TWluaU9iamVjdD4gYWRvcHRHUmVmKEdzdE1pbmlP
YmplY3QqIHB0cikKQEAgLTU2OSw2ICs1NzUsMTQzIEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZH
UHRyPEdzdEVHTEltYWdlPihHc3RFR0xJbWFnZSogcHRyKQogCiAjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUl9HTCkKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCit0ZW1wbGF0ZSA8PiBHUmVm
UHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQUmVjZWl2ZXIq
IHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4ocHRyLCBH
UmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBSZWNlaXZlciogcmVm
R1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4oR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOwor
CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2Vi
UlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVm
UHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFNlbmRlciogcHRy
KQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4ocHRyLCBHUmVmUHRy
QWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBTZW5kZXIqIHJlZkdQdHI8R3N0
V2ViUlRDUlRQU2VuZGVyPihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sKKyAgICBpZiAocHRy
KQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJu
IHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVy
PihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rf
b2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQ
VHJhbnNjZWl2ZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcHRyKQorewor
ICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihwdHIsIEdSZWZQdHJB
ZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiByZWZHUHRy
PEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcHRyKQor
eworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpFQ1QocHRyKSk7
CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RX
ZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sKKyAg
ICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRl
IDw+IEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGFkb3B0R1JlZihHc3RXZWJSVENEYXRh
Q2hhbm5lbCogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVs
PihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RhdGFDaGFu
bmVsKiByZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCog
cHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChwdHIp
KTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdz
dFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCogcHRyKQoreworICAgIGlm
IChwdHIpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdS
ZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RUTFNUcmFu
c3BvcnQqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0
PihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RUTFNUcmFu
c3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5z
cG9ydCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9P
QkpFQ1QocHRyKSk7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0KiBw
dHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQor
Cit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gYWRvcHRHUmVmKEdz
dFdlYlJUQ0lDRVRyYW5zcG9ydCogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJU
Q0lDRVRyYW5zcG9ydD4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RX
ZWJSVENJQ0VUcmFuc3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJS
VENJQ0VUcmFuc3BvcnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0
X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUg
PD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJQ0VUcmFu
c3BvcnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0
cik7Cit9CisKK3RlbXBsYXRlPD4gR1JlZlB0cjxHc3RQcm9taXNlPiBhZG9wdEdSZWYoR3N0UHJv
bWlzZSogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFByb21pc2U+KHB0ciwgR1JlZlB0
ckFkb3B0KTsKK30KKwordGVtcGxhdGU8PiBHc3RQcm9taXNlKiByZWZHUHRyPEdzdFByb21pc2U+
KEdzdFByb21pc2UqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3Jl
ZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGU8PiB2
b2lkIGRlcmVmR1B0cjxHc3RQcm9taXNlPihHc3RQcm9taXNlKiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCisjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCmluZGV4IDA3OGQzYzU2Mzk3NGY2YTJi
M2FmMWViODM5ODY0OTg3OTQ1ZmE3ZDguLjlhNTI2OWM1ZmI5ZDhjNmE3NzM2ZTdkZmJmMmE4MzYy
M2EzMDUwYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaApAQCAtMzMsNiArMzMsMTYgQEAg
dHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7CiB0eXBlZGVmIHN0cnVj
dCBfR3N0RUdMSW1hZ2UgR3N0RUdMSW1hZ2U7CiAjZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQordHlwZWRlZiBzdHJ1Y3QgX0dzdFByb21pc2UgR3N0UHJvbWlzZTsKK3R5cGVkZWYg
c3RydWN0IF9Hc3RXZWJSVENEVExTVHJhbnNwb3J0IEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ7Cit0
eXBlZGVmIHN0cnVjdCBfR3N0V2ViUlRDRGF0YUNoYW5uZWwgR3N0V2ViUlRDRGF0YUNoYW5uZWw7
Cit0eXBlZGVmIHN0cnVjdCBfR3N0V2ViUlRDSUNFVHJhbnNwb3J0IEdzdFdlYlJUQ0lDRVRyYW5z
cG9ydDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENSVFBSZWNlaXZlciBHc3RXZWJSVENSVFBS
ZWNlaXZlcjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENSVFBTZW5kZXIgR3N0V2ViUlRDUlRQ
U2VuZGVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyIEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyOworI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+
IEdSZWZQdHI8R3N0UGx1Z2luPiBhZG9wdEdSZWYoR3N0UGx1Z2luKiBwdHIpOwpAQCAtMTQ2LDYg
KzE1NiwzNyBAQCB0ZW1wbGF0ZTw+IEdzdEVHTEltYWdlKiByZWZHUHRyPEdzdEVHTEltYWdlPihH
c3RFR0xJbWFnZSogcHRyKTsKIHRlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0RUdMSW1hZ2U+
KEdzdEVHTEltYWdlKiBwdHIpOwogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
K3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IGFkb3B0R1JlZihHc3RX
ZWJSVENSVFBSZWNlaXZlciopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHJl
ZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKik7Cit0ZW1w
bGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4oR3N0V2ViUlRDUlRQ
UmVjZWl2ZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IGFk
b3B0R1JlZihHc3RXZWJSVENSVFBTZW5kZXIqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFNl
bmRlciogcmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KEdzdFdlYlJUQ1JUUFNlbmRlciopOwor
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPihHc3RXZWJSVENS
VFBTZW5kZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZl
cj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKik7Cit0ZW1wbGF0ZSA8PiBHc3RX
ZWJSVENSVFBUcmFuc2NlaXZlciogcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0
V2ViUlRDUlRQVHJhbnNjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdl
YlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciopOworCit0ZW1wbGF0
ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBhZG9wdEdSZWYoR3N0V2ViUlRDRGF0
YUNoYW5uZWwqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RhdGFDaGFubmVsKiByZWZHUHRyPEdz
dFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCopOwordGVtcGxhdGUgPD4g
dm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+KEdzdFdlYlJUQ0RhdGFDaGFubmVs
Kik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gYWRvcHRH
UmVmKEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RUTFNU
cmFuc3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1Ry
YW5zcG9ydCopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5z
cG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCopOworCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdz
dFdlYlJUQ0lDRVRyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCopOwor
dGVtcGxhdGUgPD4gR3N0V2ViUlRDSUNFVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdlYlJUQ0lDRVRy
YW5zcG9ydD4oR3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVm
R1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCopOworCit0
ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFByb21pc2U+IGFkb3B0R1JlZihHc3RQcm9taXNlKik7Cit0
ZW1wbGF0ZSA8PiBHc3RQcm9taXNlKiByZWZHUHRyPEdzdFByb21pc2U+KEdzdFByb21pc2UqKTsK
K3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFByb21pc2U+KEdzdFByb21pc2UqKTsKKwor
I2VuZGlmCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
U3RyZWFtZXJDb21tb24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKaW5kZXggOWY0OTVkZGY5MDJkZjRmZmRmNTNhZmU4
YzBmNjc0ZjU2Y2JmNWZlMS4uYThjYmU1YzcyZTIzMDIxY2ZlNDdjODJhYTFkZWNjMzhlMzY0MjYx
YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dTdHJlYW1lckNvbW1vbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAKQEAgLTE4OSw2ICsxODksOSBAQCBjb25z
dCBjaGFyKiBjYXBzTWVkaWFUeXBlKGNvbnN0IEdzdENhcHMqIGNhcHMpCiAgICAgaWYgKGdzdF9z
dHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1jZW5jIikgfHwgZ3N0
X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LWNiY3MiKSB8fCBn
c3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtd2VibS1lbmMi
KSkKICAgICAgICAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJv
cmlnaW5hbC1tZWRpYS10eXBlIik7CiAjZW5kaWYKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNf
bmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cCIpKQorICAgICAgICByZXR1cm4gZ3N0
X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm1lZGlhIik7CisKICAgICByZXR1cm4g
Z3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOwogfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQ
dHJHU3RyZWFtZXIuaAppbmRleCBiZjc0ZWNmMDJjYzIyZjYwNmViY2I5ZmU4NWMwMzRiMjZjNDA2
NDQxLi5lNTI0NzFjYTdlYTYyYTMxNThjNTIzMzM2MDYzNTJlYzYzMTUyYTM3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdT
dHJlYW1lci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HVW5pcXVlUHRyR1N0cmVhbWVyLmgKQEAgLTMwLDYgKzMwLDEyIEBACiAjaW5jbHVkZSA8Z3N0
L3ZpZGVvL3ZpZGVvLmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgogCisjaWYg
ZGVmaW5lZChCVUlMRElOR19XZWJDb3JlKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNkZWZp
bmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRlIDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgor
I3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjZW5kaWYKKwogI2lmIFVTRShXUEVfVklERU9f
UExBTkVfRElTUExBWV9ETUFCVUYpCiAjaW5jbHVkZSA8d3BlL2V4dGVuc2lvbnMvdmlkZW8tcGxh
bmUtZGlzcGxheS1kbWFidWYuaD4KICNlbmRpZgpAQCAtNDksNiArNTUsMTAgQEAgV1RGX0RFRklO
RV9HUFRSX0RFTEVURVIoR3N0Qnl0ZVJlYWRlciwgZ3N0X2J5dGVfcmVhZGVyX2ZyZWUpCiBXVEZf
REVGSU5FX0dQVFJfREVMRVRFUihHc3RWaWRlb0NvbnZlcnRlciwgZ3N0X3ZpZGVvX2NvbnZlcnRl
cl9mcmVlKQogV1RGX0RFRklORV9HUFRSX0RFTEVURVIoR3N0QXVkaW9Db252ZXJ0ZXIsIGdzdF9h
dWRpb19jb252ZXJ0ZXJfZnJlZSkKIAorI2lmIGRlZmluZWQoQlVJTERJTkdfV2ViQ29yZSkgJiYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCitXVEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RXZWJSVENT
ZXNzaW9uRGVzY3JpcHRpb24sIGdzdF93ZWJydGNfc2Vzc2lvbl9kZXNjcmlwdGlvbl9mcmVlKQor
I2VuZGlmCisKICNpZiBVU0UoV1BFX1ZJREVPX1BMQU5FX0RJU1BMQVlfRE1BQlVGKQogV1RGX0RF
RklORV9HUFRSX0RFTEVURVIoc3RydWN0IHdwZV92aWRlb19wbGFuZV9kaXNwbGF5X2RtYWJ1Zl9z
b3VyY2UsIHdwZV92aWRlb19wbGFuZV9kaXNwbGF5X2RtYWJ1Zl9zb3VyY2VfZGVzdHJveSkKICNl
bmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCmluZGV4IGVjMzJiYTg1Y2NmODQ3MjUz
ODM1MjY4MTg1OWM0MDc3ZWJkNDk5MmQuLjE4MjY2ZjEyMmM0YjE4Njc0YTFmNzliYWI5MWYwNTQ5
NjdmY2I3MDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKQEAgLTM4LDcgKzM4LDcg
QEAKIAogI2lmIFBMQVRGT1JNKENPQ09BKQogI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tBdWRp
b1NvdXJjZVByb3ZpZGVyQ29jb2EuaCIKLSNlbGlmIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJM
RShNRURJQV9TVFJFQU0pICYmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjZWxp
ZiBFTkFCTEUoV0VCX0FVRElPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoR1NUUkVB
TUVSKQogI2luY2x1ZGUgIkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIuaCIKICNlbHNlCiAj
aW5jbHVkZSAiV2ViQXVkaW9Tb3VyY2VQcm92aWRlci5oIgpAQCAtMTk5LDcgKzE5OSw3IEBAIFJl
ZlB0cjxXZWJBdWRpb1NvdXJjZVByb3ZpZGVyPiBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3Jl
YXRlQXVkaW9Tb3VyY2VQcm92aWRlCiAKICNpZiBQTEFURk9STShDT0NPQSkKICAgICByZXR1cm4g
TWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYTo6Y3JlYXRlKCp0aGlzKTsK
LSNlbGlmIFVTRShMSUJXRUJSVEMpICYmIFVTRShHU1RSRUFNRVIpCisjZWxpZiBVU0UoR1NUUkVB
TUVSKQogICAgIHJldHVybiBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpjcmVhdGUoKnRo
aXMpOwogI2Vsc2UKICAgICByZXR1cm4gbnVsbHB0cjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAppbmRleCAyNmVlNDI2M2I5ZGI4NzgxZGJhZTYxZTFhMzAx
MmVmN2RjNzA5NzI1Li4zNWU2NWMwZWIwYmQ0ODFkM2Y4NWE5ZGQwNWI2NmJmOTU2OTBlN2UxIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCkBAIC0yOSwy
OSArMjksNDYgQEAKICNpbmNsdWRlICJMaWJXZWJSVENBdWRpb0Zvcm1hdC5oIgogI2VuZGlmCiAK
LSNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KLQogbmFtZXNwYWNlIFdlYkNvcmUgewog
CiAjaWYgVVNFKExJQldFQlJUQykKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IEF1ZGlvQ2FwdHVy
ZVNhbXBsZVJhdGUgPSBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlUmF0ZTsKK3N0YXRpYyBj
b25zdGV4cHIgc2l6ZV90IHNfYXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IExpYldlYlJUQ0F1ZGlv
Rm9ybWF0OjpzYW1wbGVSYXRlOwogI2Vsc2UKLXN0YXRpYyBjb25zdGV4cHIgc2l6ZV90IEF1ZGlv
Q2FwdHVyZVNhbXBsZVJhdGUgPSA0ODAwMDsKK3N0YXRpYyBjb25zdGV4cHIgc2l6ZV90IHNfYXVk
aW9DYXB0dXJlU2FtcGxlUmF0ZSA9IDQ4MDAwOwogI2VuZGlmCiAKIEdTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXI6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIoR1N0cmVhbWVyQ2FwdHVyZURldmljZSBkZXZp
Y2UpCi0gICAgOiBHU3RyZWFtZXJDYXB0dXJlcihkZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19u
ZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgQXVkaW9DYXB0dXJl
U2FtcGxlUmF0ZSwgbnVsbHB0cikpKQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoZGV2aWNlLCBh
ZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLCAicmF0ZSIsIEdfVFlQ
RV9JTlQsIHNfYXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSwgbnVsbHB0cikpKQogewogfQogCiBHU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVyOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKCkKLSAgICA6IEdTdHJl
YW1lckNhcHR1cmVyKCJhcHBzcmMiLCBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVk
aW8veC1yYXciLCAicmF0ZSIsIEdfVFlQRV9JTlQsIEF1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51
bGxwdHIpKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6TWljcm9waG9uZSkKKyAgICA6IEdT
dHJlYW1lckNhcHR1cmVyKCJhcHBzcmMiLCBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgi
YXVkaW8veC1yYXciLCAicmF0ZSIsIEdfVFlQRV9JTlQsIHNfYXVkaW9DYXB0dXJlU2FtcGxlUmF0
ZSwgbnVsbHB0cikpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNyb3Bob25lKQogewog
fQogCiBHc3RFbGVtZW50KiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpjcmVhdGVDb252ZXJ0ZXIo
KQogewotICAgIHJldHVybiBtYWtlR1N0cmVhbWVyQmluKCJhdWRpb2NvbnZlcnQgISBhdWRpb3Jl
c2FtcGxlIiwgdHJ1ZSk7CisgICAgYXV0byogYmluID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7Cisg
ICAgYXV0byogYXVkaW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb2Nv
bnZlcnQiLCBudWxscHRyKTsKKyAgICBhdXRvKiBhdWRpb3Jlc2FtcGxlID0gZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9tYWtlKCJhdWRpb3Jlc2FtcGxlIiwgbnVsbHB0cik7CisgICAgZ3N0X2Jpbl9hZGRf
bWFueShHU1RfQklOX0NBU1QoYmluKSwgYXVkaW9jb252ZXJ0LCBhdWRpb3Jlc2FtcGxlLCBudWxs
cHRyKTsKKyAgICBnc3RfZWxlbWVudF9saW5rKGF1ZGlvY29udmVydCwgYXVkaW9yZXNhbXBsZSk7
CisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyAgICBpZiAoYXV0byogd2VicnRjZHNwID0g
bWFrZUdTdHJlYW1lckVsZW1lbnQoIndlYnJ0Y2RzcCIsIG51bGxwdHIpKSB7CisgICAgICAgIGdf
b2JqZWN0X3NldCh3ZWJydGNkc3AsICJlY2hvLWNhbmNlbCIsIGZhbHNlLCAidm9pY2UtZGV0ZWN0
aW9uIiwgdHJ1ZSwgbnVsbHB0cik7CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChi
aW4pLCB3ZWJydGNkc3ApOworICAgICAgICBnc3RfZWxlbWVudF9saW5rKHdlYnJ0Y2RzcCwgYXVk
aW9jb252ZXJ0KTsKKyAgICB9CisjZW5kaWYKKworICAgIGlmIChhdXRvIHBhZCA9IGFkb3B0R1Jl
Zihnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkKEdTVF9CSU5fQ0FTVChiaW4pLCBHU1RfUEFEX1NS
QykpKQorICAgICAgICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1QoYmluKSwg
Z3N0X2dob3N0X3BhZF9uZXcoInNyYyIsIHBhZC5nZXQoKSkpOworICAgIGlmIChhdXRvIHBhZCA9
IGFkb3B0R1JlZihnc3RfYmluX2ZpbmRfdW5saW5rZWRfcGFkKEdTVF9CSU5fQ0FTVChiaW4pLCBH
U1RfUEFEX1NJTkspKSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1RfRUxFTUVOVF9D
QVNUKGJpbiksIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgcGFkLmdldCgpKSk7CisKKyAgICBy
ZXR1cm4gYmluOwogfQogCiBib29sIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OnNldFNhbXBsZVJh
dGUoaW50IHNhbXBsZVJhdGUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcApp
bmRleCBjOWUwZDVlYjYwZTJiYzM4ZWYzYTlhNWQ1MzJjNDM4ODAxMDk2ZjRlLi4xOTYxNjY3MThk
ODI1NmYzNDAyZTliZTJmNjExODQxNDI0ZGFhMWNkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJDYXB0dXJlci5jcHAKQEAgLTEwMCw3ICsxMDAsNyBAQCBHc3RFbGVtZW50KiBHU3RyZWFtZXJD
YXB0dXJlcjo6Y3JlYXRlU291cmNlKCkKICAgICAgICAgbV9zcmMgPSBtYWtlRWxlbWVudChtX3Nv
dXJjZUZhY3RvcnkpOwogICAgICAgICBBU1NFUlQobV9zcmMpOwogICAgICAgICBpZiAoR1NUX0lT
X0FQUF9TUkMobV9zcmMuZ2V0KCkpKQotICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fc3JjLmdl
dCgpLCAiaXMtbGl2ZSIsIHRydWUsICJmb3JtYXQiLCBHU1RfRk9STUFUX1RJTUUsIG51bGxwdHIp
OworICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fc3JjLmdldCgpLCAiaXMtbGl2ZSIsIHRydWUs
ICJmb3JtYXQiLCBHU1RfRk9STUFUX1RJTUUsICJkby10aW1lc3RhbXAiLCB0cnVlLCBudWxscHRy
KTsKIAogICAgICAgICBhdXRvIHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3Rh
dGljX3BhZChtX3NyYy5nZXQoKSwgInNyYyIpKTsKICAgICAgICAgaWYgKG1fZGV2aWNlVHlwZSA9
PSBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpDYW1lcmEpIHsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2Vu
ZGVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZhMWRlNTJi
ZDU4MTk0YzczNzZhNmExYTRmM2ZmZTRkZWRjMWE3MmEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNl
bmRlckJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNzYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJEVE1GU2Vu
ZGVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlIDx3dGYvTWFpblRo
cmVhZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1lckRUTUZTZW5kZXJCYWNr
ZW5kOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKK30KKworR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6On5HU3RyZWFtZXJEVE1GU2VuZGVy
QmFja2VuZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBHU3RyZWFtZXJE
VE1GU2VuZGVyQmFja2VuZDo6Y2FuSW5zZXJ0RFRNRigpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tl
bmQ6OnBsYXlUb25lKGNvbnN0IFN0cmluZyYsIHNpemVfdCwgc2l6ZV90KQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK1N0cmluZyBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6dG9u
ZXMoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30K
Kworc2l6ZV90IEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpkdXJhdGlvbigpIGNvbnN0Cit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKworc2l6ZV90IEdTdHJl
YW1lckRUTUZTZW5kZXJCYWNrZW5kOjppbnRlclRvbmVHYXAoKSBjb25zdAoreworICAgIG5vdElt
cGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRFRNRlNlbmRl
ckJhY2tlbmQ6Om9uVG9uZVBsYXllZChGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmIG9u
VG9uZVBsYXllZCkKK3sKKyAgICBtX29uVG9uZVBsYXllZCA9IFdURk1vdmUob25Ub25lUGxheWVk
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5k
LmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyRFRNRlNlbmRlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jNTc5NzA1MGNlYzliNGIwYWE2ZDll
ZmU5ODA4YWU1YzkwODhmYjMzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgK
QEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEg
Uy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdt
YSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisK
KyNpbmNsdWRlICJSVENEVE1GU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gVXNlIGVhZ2VyIGluaXRpYWxpemF0aW9u
IGZvciB0aGUgV2Vha1B0ckZhY3Rvcnkgc2luY2Ugd2UgY2FsbCBtYWtlV2Vha1B0cigpIGZyb20g
YW5vdGhlciB0aHJlYWQuCitjbGFzcyBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCBmaW5hbCA6
IHB1YmxpYyBSVENEVE1GU2VuZGVyQmFja2VuZCwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdTdHJl
YW1lckRUTUZTZW5kZXJCYWNrZW5kLCBXZWFrUHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdl
cj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0
IEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCk7CisgICAgfkdTdHJlYW1lckRUTUZTZW5kZXJC
YWNrZW5kKCk7CisKK3ByaXZhdGU6CisgICAgLy8gUlRDRFRNRlNlbmRlckJhY2tlbmQKKyAgICBi
b29sIGNhbkluc2VydERUTUYoKSBmaW5hbDsKKyAgICB2b2lkIHBsYXlUb25lKGNvbnN0IFN0cmlu
ZyYgdG9uZSwgc2l6ZV90IGR1cmF0aW9uLCBzaXplX3QgaW50ZXJUb25lR2FwKSBmaW5hbDsKKyAg
ICB2b2lkIG9uVG9uZVBsYXllZChGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiYmKSBmaW5h
bDsKKyAgICBTdHJpbmcgdG9uZXMoKSBjb25zdCBmaW5hbDsKKyAgICBzaXplX3QgZHVyYXRpb24o
KSBjb25zdCBmaW5hbDsKKyAgICBzaXplX3QgaW50ZXJUb25lR2FwKCkgY29uc3QgZmluYWw7CisK
KyAgICBGdW5jdGlvbjx2b2lkKGNvbnN0IFN0cmluZyYpPiBtX29uVG9uZVBsYXllZDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVk
aWFTdHJlYW1Tb3VyY2UuY3BwCmluZGV4IDk5NTRmYTY1ODMxM2E5YTQ1YTUyZTNjZjc2MWYxMDFm
MzRkOWFhZDUuLjA1YmEyMGY3MDRmZTdiNmMyMjZhZjc3MGFhYWExMTAxOTNjNTI4ZWIgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcApAQCAt
MzQsMTcgKzM0LDIzIEBACiAjaW5jbHVkZSAiVmlkZW9GcmFtZU1ldGFkYXRhR1N0cmVhbWVyLmgi
CiAjaW5jbHVkZSAiVmlkZW9UcmFja1ByaXZhdGVNZWRpYVN0cmVhbS5oIgogCisjaWYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVy
LmgiCisjZW5kaWYKKwogI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc3JjLmg+CisjaW5jbHVkZSA8
Z3N0L2Jhc2UvZ3N0Zmxvd2NvbWJpbmVyLmg+CiAjaW5jbHVkZSA8d3RmL1VVSUQuaD4KICNpbmNs
dWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAog
c3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRlIHZpZGVvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElD
X1BBRF9URU1QTEFURSgidmlkZW9fc3JjJXUiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElN
RVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTKCJ2aWRlby94LXJhdzt2aWRlby94LWgyNjQ7dmlkZW8v
eC12cDgiKSk7CisgICAgR1NUX1NUQVRJQ19DQVBTKCJ2aWRlby94LXJhdzt2aWRlby94LWgyNjQ7
dmlkZW8veC12cDg7dmlkZW8veC12cDk7YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcp
dmlkZW8iKSk7CiAKIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSBhdWRpb1NyY1RlbXBsYXRl
ID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoImF1ZGlvX3NyYyV1IiwgR1NUX1BBRF9TUkMsIEdT
VF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQUygiYXVkaW8veC1yYXcoQU5ZKTsi
KSk7CisgICAgR1NUX1NUQVRJQ19DQVBTKCJhdWRpby94LXJhdyhBTlkpO2FwcGxpY2F0aW9uL3gt
cnRwLCBtZWRpYT0oc3RyaW5nKWF1ZGlvIikpOwogCiBHU1RfREVCVUdfQ0FURUdPUllfU1RBVElD
KHdlYmtpdE1lZGlhU3RyZWFtU3JjRGVidWcpOwogI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Vi
a2l0TWVkaWFTdHJlYW1TcmNEZWJ1ZwpAQCAtMjIxLDcgKzIyNyw3IEBAIHB1YmxpYzoKIAogICAg
ICAgICBpZiAoZHJvcCkgewogICAgICAgICAgICAgbV9uZWVkc0Rpc2NvbnQgPSB0cnVlOwotICAg
ICAgICAgICAgR1NUX0lORk9fT0JKRUNUKG1fc3JjLmdldCgpLCAiJXMgcXVldWUgZnVsbCBhbHJl
YWR5Li4uIG5vdCBwdXNoaW5nIiwgbV90cmFjay5oYXNWaWRlbygpID8gIlZpZGVvIiA6ICJBdWRp
byIpOworICAgICAgICAgICAgR1NUX1RSQUNFX09CSkVDVChtX3NyYy5nZXQoKSwgIiVzIHF1ZXVl
IGZ1bGwgYWxyZWFkeS4uLiBub3QgcHVzaGluZyIsIG1fdHJhY2suaGFzVmlkZW8oKSA/ICJWaWRl
byIgOiAiQXVkaW8iKTsKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgfQogCkBAIC02NTIs
NiArNjU4LDcgQEAgdm9pZCB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFRyYWNrKFdlYktpdE1lZGlh
U3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0cmVhbVRyYWNrUHIKICAgICBjb25zdCBjaGFyKiBzb3Vy
Y2VUeXBlOwogICAgIHVuc2lnbmVkIGNvdW50ZXI7CiAgICAgR3N0U3RhdGljUGFkVGVtcGxhdGUq
IHBhZFRlbXBsYXRlOworCiAgICAgaWYgKHRyYWNrLT5oYXNBdWRpbygpKSB7CiAgICAgICAgIHBh
ZFRlbXBsYXRlID0gJmF1ZGlvU3JjVGVtcGxhdGU7CiAgICAgICAgIHNvdXJjZVR5cGUgPSAiYXVk
aW8iOwpAQCAtNjYzLDkgKzY3MCwxOSBAQCB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkVHJh
Y2soV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcgogICAgICAg
ICBjb3VudGVyID0gc2VsZi0+cHJpdi0+dmlkZW9QYWRDb3VudGVyLmV4Y2hhbmdlQWRkKDEpOwog
ICAgIH0KIAotICAgIGF1dG8gcGFkTmFtZSA9IG1ha2VTdHJpbmcoc291cmNlVHlwZSwgIl9zcmMi
LCBjb3VudGVyKTsKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyAgICBpZiAodHJhY2stPnNv
dXJjZSgpLmlzSW5jb21pbmdBdWRpb1NvdXJjZSgpKSB7CisgICAgICAgIGF1dG8mIHNvdXJjZSA9
IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciY+KHRyYWNr
LT5zb3VyY2UoKSk7CisgICAgICAgIHNvdXJjZS5yZWdpc3RlckNsaWVudCgpOworICAgIH0gZWxz
ZSBpZiAodHJhY2stPnNvdXJjZSgpLmlzSW5jb21pbmdWaWRlb1NvdXJjZSgpKSB7CisgICAgICAg
IGF1dG8mIHNvdXJjZSA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lciY+KHRyYWNrLT5zb3VyY2UoKSk7CisgICAgICAgIHNvdXJjZS5yZWdpc3RlckNsaWVu
dCgpOworICAgIH0KKyNlbmRpZgorCiAgICAgR1NUX0RFQlVHX09CSkVDVChzZWxmLCAiU2V0dXAg
JXMgc291cmNlIGZvciB0cmFjayAlcywgb25seSB0cmFjazogJXMiLCBzb3VyY2VUeXBlLCB0cmFj
ay0+aWQoKS51dGY4KCkuZGF0YSgpLCBib29sRm9yUHJpbnRpbmcob25seVRyYWNrKSk7CiAKKyAg
ICBhdXRvIHBhZE5hbWUgPSBtYWtlU3RyaW5nKHNvdXJjZVR5cGUsICJfc3JjIiwgY291bnRlcik7
CiAgICAgYXV0byBzb3VyY2UgPSBtYWtlVW5pcXVlPEludGVybmFsU291cmNlPihHU1RfRUxFTUVO
VF9DQVNUKHNlbGYpLCAqdHJhY2ssIHBhZE5hbWUpOwogICAgIGF1dG8qIGVsZW1lbnQgPSBzb3Vy
Y2UtPmdldCgpOwogICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChzZWxmKSwgZWxlbWVudCk7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwCmluZGV4IGZhYzQ3
MDVmYjhhN2NmMmRjMjNlYTUxMWIxNWZjZjQ4NTUyY2YzM2EuLmE3NmVmMWVmZmQxNmZhMjZiNmRl
MzU3NGY0NjRmNWQyMzNjOTVlZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRl
b0VuY29kZXIuY3BwCkBAIC0yOTcsOSArMjk3LDExIEBAIHN0YXRpYyB2b2lkIHdlYmtpdF93ZWJy
dGNfdmlkZW9fZW5jb2Rlcl9jbGFzc19pbml0KFdlYktpdFdlYnJ0Y1ZpZGVvRW5jb2RlckNsYXNz
CiAgICAgICAgICAgICBnX29iamVjdF9zZXQoc2VsZi0+cHJpdi0+cGFyc2VyLmdldCgpLCAiY29u
ZmlnLWludGVydmFsIiwgMSwgbnVsbHB0cik7CiAgICAgICAgIH0sICJ0YXJnZXQtYml0cmF0ZSIs
IHNldEJpdHJhdGVCaXRQZXJTZWMsICJpbnRlcnZhbC1pbnRyYWZyYW1lcyIpOwogICAgIEVuY29k
ZXJzOjpyZWdpc3RlckVuY29kZXIoWDI2NCwgIngyNjRlbmMiLCAiaDI2NHBhcnNlIiwgInZpZGVv
L3gtaDI2NCIsCi0gICAgICAgICJ2aWRlby94LWgyNjQsYWxpZ25tZW50PWF1LHN0cmVhbS1mb3Jt
YXQ9Ynl0ZS1zdHJlYW0scHJvZmlsZT1iYXNlbGluZSIsCisgICAgICAgICJ2aWRlby94LWgyNjQs
YWxpZ25tZW50PWF1LHN0cmVhbS1mb3JtYXQ9Ynl0ZS1zdHJlYW0scHJvZmlsZT1jb25zdHJhaW5l
ZC1iYXNlbGluZSIsCiAgICAgICAgIFtdKFdlYktpdFdlYnJ0Y1ZpZGVvRW5jb2Rlciogc2VsZikg
ewogICAgICAgICAgICAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1Qoc2VsZi0+cHJp
di0+ZW5jb2Rlci5nZXQoKSksICJ0dW5lIiwgInplcm9sYXRlbmN5Iik7CisgICAgICAgICAgICBn
c3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVChzZWxmLT5wcml2LT5lbmNvZGVyLmdldCgp
KSwgInNwZWVkLXByZXNldCIsICJ1bHRyYWZhc3QiKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3Nl
dChHX09CSkVDVChzZWxmLT5wcml2LT5lbmNvZGVyLmdldCgpKSwgImtleS1pbnQtbWF4IiwgMTUs
IE5VTEwpOwogICAgICAgICAgICAgZ19vYmplY3Rfc2V0KHNlbGYtPnByaXYtPnBhcnNlci5nZXQo
KSwgImNvbmZpZy1pbnRlcnZhbCIsIDEsIG51bGxwdHIpOwogICAgICAgICB9LCAiYml0cmF0ZSIs
IHNldEJpdHJhdGVLYml0UGVyU2VjLCAia2V5LWludC1tYXgiKTsKICAgICBFbmNvZGVyczo6cmVn
aXN0ZXJFbmNvZGVyKE9wZW5IMjY0LCAib3BlbmgyNjRlbmMiLCAiaDI2NHBhcnNlIiwgInZpZGVv
L3gtaDI2NCIsCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU2ZjU1YTJkNWZhM2IwNTc4
ZjU0MTgwMjZmZjk4NTk4YmVkYmE1NjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDczIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKwor
I2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvRGF0YS5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcihTdHJpbmcmJiBhdWRpb1RyYWNrSWQpCisgICAgOiBSZWFsdGltZU1lZGlhU291cmNl
KFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvLCBXVEZNb3ZlKGF1ZGlvVHJhY2tJZCkp
CisgICAgLCBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBzdGFydCgp
OworfQorCitSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6On5SZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoKQoreworICAgIHN0b3AoKTsKK30KKwordm9pZCBS
ZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0YSgp
Cit7CisgICAgb3BlblZhbHZlKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlR1N0cmVhbWVyOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgY2xvc2VWYWx2ZSgpOwor
fQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBSZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNhcGFiaWxpdGllcygpCit7CisgICAgcmV0dXJuIFJl
YWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OmVtcHR5Q2FwYWJpbGl0aWVzKCk7Cit9CisK
K2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgUmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlR1N0cmVhbWVyOjpzZXR0aW5ncygpCit7CisgICAgcmV0dXJuIG1fY3VycmVudFNldHRp
bmdzOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6ZGlz
cGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYgZ3N0U2FtcGxlKQoreworICAgIGF1dG8q
IGJ1ZmZlciA9IGdzdF9zYW1wbGVfZ2V0X2J1ZmZlcihnc3RTYW1wbGUuZ2V0KCkpOworICAgIEdT
dHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gZGVzY3JpcHRpb247CisgICAgR1N0cmVhbWVy
QXVkaW9EYXRhIGZyYW1lcyhXVEZNb3ZlKGdzdFNhbXBsZSksIGRlc2NyaXB0aW9uLmdldEluZm8o
KSk7CisKKyAgICBhdWRpb1NhbXBsZXNBdmFpbGFibGUoTWVkaWFUaW1lKEdTVF9USU1FX0FTX1VT
RUNPTkRTKEdTVF9CVUZGRVJfUFRTKGJ1ZmZlcikpLCBHX1VTRUNfUEVSX1NFQyksIGZyYW1lcywg
ZGVzY3JpcHRpb24sIDApOworfQorCit9CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NjY4ZGI1M2JjZjljMTZkMzAxYjgxNzJlNjhi
MTkxODkwN2ZkYWVjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oCkBAIC0wLDAgKzEsNTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdh
bGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJSZWFs
dGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNv
dXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlLCBwdWJsaWMg
UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+IGNyZWF0ZShTdHJpbmcmJiBh
dWRpb1RyYWNrSWQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlR1N0cmVhbWVyKFdURk1vdmUoYXVkaW9UcmFja0lkKSkpOyB9CisKK3Byb3RlY3RlZDoK
KyAgICBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoU3RyaW5nJiYpOworICAg
IH5SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoKTsKKworcHJpdmF0ZToKKyAg
ICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRh
KCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGZpbmFsOwor
ICAgIGNvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBmaW5hbDsK
KyAgICBib29sIGlzSW5jb21pbmdBdWRpb1NvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRy
dWU7IH0KKworICAgIC8vIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgQVBJCisgICAg
dm9pZCBkaXNwYXRjaFNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJikgZmluYWw7CisKKyAgICBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgbV9jdXJyZW50U2V0dGluZ3M7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4oV2ViQ29y
ZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKQorICAgIHN0YXRpYyBib29s
IGlzVHlwZShjb25zdCBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlJiBzb3VyY2UpIHsgcmV0
dXJuIHNvdXJjZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKTsgfQorU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19FTkQoKQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjRiMTY1NDJiNzc1MTAyZDI2ZjE1ZDIwZTZmZWY1ZTMzYzllZGQ3MQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDk0IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nU291cmNl
R1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgorI2luY2x1
ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVi
dWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1
ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFt
ZXI6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIG1fYmluID0gZ3N0
X2Jpbl9uZXcobnVsbHB0cik7CisgICAgbV92YWx2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFr
ZSgidmFsdmUiLCBudWxscHRyKTsKKyAgICBtX3RlZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFr
ZSgidGVlIiwgbnVsbHB0cik7CisgICAgZ19vYmplY3Rfc2V0KG1fdGVlLmdldCgpLCAiYWxsb3ct
bm90LWxpbmtlZCIsIHRydWUsIG51bGxwdHIpOworCisgICAgYXV0byogcXVldWUgPSBnc3RfZWxl
bWVudF9mYWN0b3J5X21ha2UoInF1ZXVlIiwgbnVsbHB0cik7CisgICAgZ3N0X2Jpbl9hZGRfbWFu
eShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3ZhbHZlLmdldCgpLCBxdWV1ZSwgbV90ZWUu
Z2V0KCksIG51bGxwdHIpOworCisgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KG1fdmFsdmUuZ2V0
KCksIHF1ZXVlLCBtX3RlZS5nZXQoKSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfc3luY19z
dGF0ZV93aXRoX3BhcmVudChtX3ZhbHZlLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0
YXRlX3dpdGhfcGFyZW50KHF1ZXVlKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhf
cGFyZW50KG1fdGVlLmdldCgpKTsKKworICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3ZhbHZlLmdldCgpLCAic2luayIpKTsKKyAgICBnc3Rf
ZWxlbWVudF9hZGRfcGFkKG1fYmluLmdldCgpLCBnc3RfZ2hvc3RfcGFkX25ldygic2luayIsIHNp
bmtQYWQuZ2V0KCkpKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
OjpjbG9zZVZhbHZlKCkgY29uc3QKK3sKKyAgICBpZiAobV92YWx2ZSkKKyAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fdmFsdmUuZ2V0KCksICJkcm9wIiwgdHJ1ZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQg
UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6b3BlblZhbHZlKCkgY29uc3QKK3sKKyAg
ICBpZiAobV92YWx2ZSkKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fdmFsdmUuZ2V0KCksICJkcm9w
IiwgZmFsc2UsIG51bGxwdHIpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXI6OnJlZ2lzdGVyQ2xpZW50KCkKK3sKKyAgICBHU1RfREVCVUcoIlJlZ2lzdGVyaW5nIG5l
dyBjbGllbnQiKTsKKyAgICBhdXRvKiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgi
cXVldWUiLCBudWxscHRyKTsKKyAgICBhdXRvKiBzaW5rID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJhcHBzaW5rIiwgbnVsbHB0cik7CisgICAgZ19vYmplY3Rfc2V0KHNpbmssICJlbmFibGUt
bGFzdC1zYW1wbGUiLCBGQUxTRSwgImVtaXQtc2lnbmFscyIsIFRSVUUsICJtYXgtYnVmZmVycyIs
IDEsIG51bGxwdHIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChzaW5rLCAibmV3LXNh
bXBsZSIsIEdfQ0FMTEJBQ0soK1tdKFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIqIHNl
bGYsIEdzdEVsZW1lbnQqIHNpbmspIC0+IEdzdEZsb3dSZXR1cm4geworICAgICAgICBhdXRvIHNh
bXBsZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfcHVsbF9zYW1wbGUoR1NUX0FQUF9TSU5LKHNp
bmspKSk7CisgICAgICAgIHNlbGYtPmRpc3BhdGNoU2FtcGxlKFdURk1vdmUoc2FtcGxlKSk7Cisg
ICAgICAgIHJldHVybiBHU1RfRkxPV19PSzsKKyAgICB9KSwgdGhpcyk7CisKKyAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQoc2luaywgIm5ldy1wcmVyb2xsIiwgR19DQUxMQkFDSygrW10oUmVh
bHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciogc2VsZiwgR3N0RWxlbWVudCogc2luaykgLT4g
R3N0Rmxvd1JldHVybiB7CisgICAgICAgIGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBf
c2lua19wdWxsX3ByZXJvbGwoR1NUX0FQUF9TSU5LKHNpbmspKSk7CisgICAgICAgIHNlbGYtPmRp
c3BhdGNoU2FtcGxlKFdURk1vdmUoc2FtcGxlKSk7CisgICAgICAgIHJldHVybiBHU1RfRkxPV19P
SzsKKyAgICB9KSwgdGhpcyk7CisKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVCht
X2Jpbi5nZXQoKSksIHF1ZXVlLCBzaW5rLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9saW5r
X21hbnkobV90ZWUuZ2V0KCksIHF1ZXVlLCBzaW5rLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVu
dF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KHF1ZXVlKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0
YXRlX3dpdGhfcGFyZW50KHNpbmspOworCisgICAgYXV0byBkb3RGaWxlTmFtZSA9IG1ha2VTdHJp
bmcoR1NUX09CSkVDVF9OQU1FKG1fYmluLmdldCgpKSwgIi5pbmNvbWluZyIpOworICAgIEdTVF9E
RUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBH
U1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJl
YW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjZkNjRjNDk3MGNjYjhkMTFiNzlhNWMyMGQ3ZjEzNTJlNmY0YWZi
YjMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEs
NTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdT
dHJlYW1lciB7CitwdWJsaWM6CisgICAgR3N0RWxlbWVudCogYmluKCkgeyByZXR1cm4gbV9iaW4u
Z2V0KCk7IH0KKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KCk7CisKK3Byb3RlY3RlZDoKKyAgICBS
ZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKCk7CisKKyAgICB2b2lkIGNsb3NlVmFsdmUo
KSBjb25zdDsKKyAgICB2b2lkIG9wZW5WYWx2ZSgpIGNvbnN0OworCisgICAgR1JlZlB0cjxHc3RF
bGVtZW50PiBtX3ZhbHZlOworCitwcml2YXRlOgorICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFNh
bXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJikgeyB9CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fYmluOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV90ZWU7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uM2Q2OGVlNWI5MTI2YmU2ZTdlODAyZmIyYmQxYzZhODk1YzRk
NTM3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBA
IC0wLDAgKzEsMTA3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIk1lZGlhU2Ft
cGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9GcmFtZU1ldGFkYXRhR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSA8Z3N0L3J0cC9ydHAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcihTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCisgICAgOiBSZWFsdGltZU1lZGlh
U291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvLCBXVEZNb3ZlKHZpZGVvVHJh
Y2tJZCkpCisgICAgLCBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBS
ZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgY29uc3RyYWludHM7CisgICAg
Y29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsKKyAgICBjb25zdHJhaW50cy5zZXRT
dXBwb3J0c0hlaWdodCh0cnVlKTsKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5ncyB7IH07CisgICAgbV9jdXJyZW50U2V0dGluZ3MtPnNldFN1cHBvcnRl
ZENvbnN0cmFpbnRzKFdURk1vdmUoY29uc3RyYWludHMpKTsKKworICAgIGF1dG8gc2lua1BhZCA9
IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX3ZhbHZlLmdldCgpLCAic2lu
ayIpKTsKKyAgICBnc3RfcGFkX2FkZF9wcm9iZShzaW5rUGFkLmdldCgpLCBzdGF0aWNfY2FzdDxH
c3RQYWRQcm9iZVR5cGU+KEdTVF9QQURfUFJPQkVfVFlQRV9CVUZGRVIpLCBbXShHc3RQYWQqLCBH
c3RQYWRQcm9iZUluZm8qIGluZm8sIGdwb2ludGVyKSAtPiBHc3RQYWRQcm9iZVJldHVybiB7Cisg
ICAgICAgIGF1dG8gdmlkZW9TYW1wbGVNZXRhZGF0YSA9IHN0ZDo6bWFrZV9vcHRpb25hbDxWaWRl
b1NhbXBsZU1ldGFkYXRhPih7IH0pOworICAgICAgICB2aWRlb1NhbXBsZU1ldGFkYXRhLT5yZWNl
aXZlVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCk7CisKKyAg
ICAgICAgYXV0byogYnVmZmVyID0gR1NUX0JVRkZFUl9DQVNUKEdTVF9QQURfUFJPQkVfSU5GT19E
QVRBKGluZm8pKTsKKyAgICAgICAgR3N0UlRQQnVmZmVyIHJ0cEJ1ZmZlciBHU1RfUlRQX0JVRkZF
Ul9JTklUOworICAgICAgICBpZiAoZ3N0X3J0cF9idWZmZXJfbWFwKGJ1ZmZlciwgR1NUX01BUF9S
RUFELCAmcnRwQnVmZmVyKSkgeworICAgICAgICAgICAgdmlkZW9TYW1wbGVNZXRhZGF0YS0+cnRw
VGltZXN0YW1wID0gZ3N0X3J0cF9idWZmZXJfZ2V0X3RpbWVzdGFtcCgmcnRwQnVmZmVyKTsKKyAg
ICAgICAgICAgIGdzdF9ydHBfYnVmZmVyX3VubWFwKCZydHBCdWZmZXIpOworICAgICAgICB9Cisg
ICAgICAgIGJ1ZmZlciA9IHdlYmtpdEdzdEJ1ZmZlclNldFZpZGVvU2FtcGxlTWV0YWRhdGEoYnVm
ZmVyLCBXVEZNb3ZlKHZpZGVvU2FtcGxlTWV0YWRhdGEpKTsKKyAgICAgICAgR1NUX1BBRF9QUk9C
RV9JTkZPX0RBVEEoaW5mbykgPSBidWZmZXI7CisgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JF
X09LOworICAgIH0sIG51bGxwdHIsIG51bGxwdHIpOworCisgICAgc3RhcnQoKTsKK30KKwordm9p
ZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0
YSgpCit7CisgICAgb3BlblZhbHZlKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlR1N0cmVhbWVyOjpzdG9wUHJvZHVjaW5nRGF0YSgpCit7CisgICAgY2xvc2VWYWx2ZSgp
OworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNhcGFiaWxpdGllcygpCit7CisgICAgcmV0dXJu
IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRpZXM6OmVtcHR5Q2FwYWJpbGl0aWVzKCk7Cit9
CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyOjpzZXR0aW5ncygpCit7CisgICAgaWYgKG1fY3VycmVudFNldHRp
bmdzKQorICAgICAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3MudmFsdWUoKTsKKworICAgIFJl
YWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyBjb25zdHJhaW50czsKKyAgICBj
b25zdHJhaW50cy5zZXRTdXBwb3J0c1dpZHRoKHRydWUpOworICAgIGNvbnN0cmFpbnRzLnNldFN1
cHBvcnRzSGVpZ2h0KHRydWUpOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHNl
dHRpbmdzOworICAgIGF1dG8mIHNpemUgPSB0aGlzLT5zaXplKCk7CisgICAgc2V0dGluZ3Muc2V0
V2lkdGgoc2l6ZS53aWR0aCgpKTsKKyAgICBzZXR0aW5ncy5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQo
KSk7CisgICAgc2V0dGluZ3Muc2V0U3VwcG9ydGVkQ29uc3RyYWludHMoY29uc3RyYWludHMpOwor
CisgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBXVEZNb3ZlKHNldHRpbmdzKTsKKyAgICByZXR1cm4g
bV9jdXJyZW50U2V0dGluZ3MudmFsdWUoKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+IHNldHRpbmdzKQoreworICAgIGlmIChzZXR0aW5ncy5j
b250YWluc0FueSh7IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6V2lkdGgsIFJl
YWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6SGVpZ2h0IH0pKQorICAgICAgICBtX2N1
cnJlbnRTZXR0aW5ncyA9IHN0ZDo6bnVsbG9wdDsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYm
IGdzdFNhbXBsZSkKK3sKKyAgICB2aWRlb1NhbXBsZUF2YWlsYWJsZShNZWRpYVNhbXBsZUdTdHJl
YW1lcjo6Y3JlYXRlV3JhcHBlZFNhbXBsZShnc3RTYW1wbGUpLCB7IH0pOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5hOWJjMzAwNjljZDMzMjA5MjMxOGJiZjc3OGFiOTNkOTE4NDgz
MWZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0w
LDAgKzEsNTggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJSZWFsdGltZUluY29t
aW5nU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lciA6IHB1YmxpYyBSZWFsdGltZU1lZGlhU291cmNlLCBwdWJsaWMgUmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+IGNyZWF0ZShTdHJpbmcmJiB2aWRlb1RyYWNr
SWQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0
cmVhbWVyKFdURk1vdmUodmlkZW9UcmFja0lkKSkpOyB9CisgICAgflJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcigpID0gZGVmYXVsdDsKKworcHJvdGVjdGVkOgorICAgIFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihTdHJpbmcmJik7CisKK3ByaXZhdGU6Cisg
ICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZSBBUEkKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0
YSgpIGZpbmFsOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEoKSAgZmluYWw7CisgICAgdm9p
ZCBzZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
OjpGbGFnPikgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGll
cyYgY2FwYWJpbGl0aWVzKCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzJiBzZXR0aW5ncygpIGZpbmFsOworICAgIGJvb2wgaXNJbmNvbWluZ1ZpZGVvU291cmNl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gUmVhbHRpbWVJbmNvbWlu
Z1NvdXJjZUdTdHJlYW1lciBBUEkKKyAgICB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0
U2FtcGxlPiYmKSBmaW5hbDsKKworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5nczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdl
YkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2UmIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmlzSW5j
b21pbmdWaWRlb1NvdXJjZSgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNl
bmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYmVjZGM1YWJkZTJmMTRjODM3MzM1ZGY2YmRhZjUyNjY5NzI4OGJmZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFs
dGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsOTYgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2lmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9DYXB0dXJlU291cmNl
LmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgorCitH
U1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOwor
I2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
cjo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFJlZjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4mJiBzb3VyY2UpCisgICAgOiBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXIoKQoreworICAgIG1fYWxsb3dlZENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3
X3NpbXBsZSgiYXBwbGljYXRpb24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAiYXVk
aW8iLAorICAgICAgICAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsICJPUFVTIiwgImNs
b2NrLXJhdGUiLCBHX1RZUEVfSU5ULCA0ODAwMCwgbnVsbHB0cikpOworCisgICAgbV9hdWRpb2Nv
bnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvY29udmVydCIsIG51bGxwdHIp
OworICAgIG1fYXVkaW9yZXNhbXBsZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9y
ZXNhbXBsZSIsIG51bGxwdHIpOworCisgICAgbV9lbmNvZGVyID0gbWFrZUdTdHJlYW1lckVsZW1l
bnQoIm9wdXNlbmMiLCBudWxscHRyKTsKKyAgICBpZiAoIW1fZW5jb2RlcikKKyAgICAgICAgcmV0
dXJuOworCisgICAgLy8gRklYTUU6IEVuYWJsZSBkdHggdG9vPworICAgIGdzdF91dGlsX3NldF9v
YmplY3RfYXJnKEdfT0JKRUNUKG1fZW5jb2Rlci5nZXQoKSksICJhdWRpby10eXBlIiwgInZvaWNl
Iik7CisKKyAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJydHBvcHVzcGF5
IiwgbnVsbHB0cik7CisgICAgaWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgcmV0dXJuOworCisg
ICAgZ19vYmplY3Rfc2V0KG1fcGF5bG9hZGVyLmdldCgpLCAiYXV0by1oZWFkZXItZXh0ZW5zaW9u
IiwgRkFMU0UsIG51bGxwdHIpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1Qo
bV9iaW4uZ2V0KCkpLCBtX2F1ZGlvY29udmVydC5nZXQoKSwgbV9hdWRpb3Jlc2FtcGxlLmdldCgp
LCBtX2VuY29kZXIuZ2V0KCksIG1fcGF5bG9hZGVyLmdldCgpLCBudWxscHRyKTsKKyAgICBzZXRT
b3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKK30KKworYm9vbCBSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGNh
cHMpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX2Jpbi5nZXQoKSwgIk91dGdvaW5nIGF1ZGlv
IHNvdXJjZSBwYXlsb2FkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKKyAg
ICBhdXRvKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMuZ2V0KCksIDAp
OworICAgIGlmIChjb25zdCBjaGFyKiBlbmNvZGluZ05hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9z
dHJpbmcoc3RydWN0dXJlLCAiZW5jb2RpbmctbmFtZSIpKSB7CisgICAgICAgIGlmICghZXF1YWwo
ZW5jb2RpbmdOYW1lLCAiT1BVUyIpKSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1f
YmluLmdldCgpLCAiVW5zdXBwb3J0ZWQgb3V0Z29pbmcgYXVkaW8gZW5jb2Rpbmc6ICVzIiwgZW5j
b2RpbmdOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJlbmNvZGluZy1u
YW1lIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYg
KGNvbnN0IGNoYXIqIHVzZUluYmFuZEZlYyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1
Y3R1cmUsICJ1c2VpbmJhbmRmZWMiKSkgeworICAgICAgICBpZiAoIXN0cmNtcCh1c2VJbmJhbmRG
ZWMsICIxIikpCisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9lbmNvZGVyLmdldCgpLCAiaW5i
YW5kLWZlYyIsIHRydWUsIG51bGxwdHIpOworICAgIH0KKworICAgIGlmIChjb25zdCBjaGFyKiBt
aW5QVGltZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJtaW5wdGltZSIp
KSB7CisgICAgICAgIFN0cmluZyB0aW1lKG1pblBUaW1lKTsKKyAgICAgICAgaWYgKGF1dG8gdmFs
dWUgPSBwYXJzZUludGVnZXJBbGxvd2luZ1RyYWlsaW5nSnVuazxpbnQ2NF90Pih0aW1lKSkKKyAg
ICAgICAgICAgIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwgIm1pbi1wdGltZSIsICp2
YWx1ZSAqIEdTVF9NU0VDT05ELCBudWxscHRyKTsKKyAgICB9CisKKyAgICBpbnQgcGF5bG9hZFR5
cGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJwYXlsb2FkIiwg
JnBheWxvYWRUeXBlKSkKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGF5bG9hZGVyLmdldCgpLCAi
cHQiLCBwYXlsb2FkVHlwZSwgbnVsbHB0cik7CisKKyAgICBnX29iamVjdF9zZXQobV9jYXBzRmls
dGVyLmdldCgpLCAiY2FwcyIsIGNhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgZ3N0X2VsZW1l
bnRfbGlua19tYW55KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIG1fdmFsdmUuZ2V0KCksIG1fYXVk
aW9jb252ZXJ0LmdldCgpLCBtX2F1ZGlvcmVzYW1wbGUuZ2V0KCksIG1fcHJlRW5jb2RlclF1ZXVl
LmdldCgpLCBtX2VuY29kZXIuZ2V0KCksIG1fcGF5bG9hZGVyLmdldCgpLCBtX3Bvc3RFbmNvZGVy
UXVldWUuZ2V0KCksIG51bGxwdHIpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5jMTkwMmI1ZjY5MTQyNTQ4YmExN2M3MDYzNDc2OGVlNWFjOWI1YmEx
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAg
KzEsNDQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBS
ZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIgZmluYWwgOiBwdWJsaWMgUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVm
PFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4gY3JlYXRlKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJiBhdWRpb1NvdXJjZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBS
ZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZShhdWRpb1NvdXJjZSkp
KTsgfQorCisgICAgYm9vbCBzZXRQYXlsb2FkVHlwZShjb25zdCBHUmVmUHRyPEdzdENhcHM+Jikg
ZmluYWw7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXIoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKworcHJpdmF0
ZToKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYXVkaW9jb252ZXJ0OworICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gbV9hdWRpb3Jlc2FtcGxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjIyNjcyMGIyYjRiYzA4ODI3MjU4M2MwNWU4MzIyMjI0MjI1ZjZhY2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDE0
OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCisj
aWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIK
KyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oIgorCisjZGVmaW5lIEdTVF9V
U0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBH
U1RfVVNFX1VOU1RBQkxFX0FQSQorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93
ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dl
YnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyKCkKK3sKKyAgICBtX2JpbiA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOworCisgICAgbV92
YWx2ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmFsdmUiLCBudWxscHRyKTsKKyAgICBt
X3ByZUVuY29kZXJRdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxs
cHRyKTsKKyAgICBtX3Bvc3RFbmNvZGVyUXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
InF1ZXVlIiwgbnVsbHB0cik7CisgICAgbV9jYXBzRmlsdGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJjYXBzZmlsdGVyIiwgbnVsbHB0cik7CisKKyAgICBnc3RfYmluX2FkZF9tYW55KEdT
VF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fdmFsdmUuZ2V0KCksIG1fcHJlRW5jb2RlclF1ZXVl
LmdldCgpLAorICAgICAgICBtX3Bvc3RFbmNvZGVyUXVldWUuZ2V0KCksIG1fY2Fwc0ZpbHRlci5n
ZXQoKSwgbnVsbHB0cik7CisKKyAgICBhdXRvIHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChtX2NhcHNGaWx0ZXIuZ2V0KCksICJzcmMiKSk7CisgICAgZ3N0X2Vs
ZW1lbnRfYWRkX3BhZChtX2Jpbi5nZXQoKSwgZ3N0X2dob3N0X3BhZF9uZXcoInNyYyIsIHNyY1Bh
ZC5nZXQoKSkpOworfQorCitSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6On5S
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIHN0b3AoKTsKKwor
ICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX2Jpbi5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOwor
ICAgIGlmIChhdXRvIHBpcGVsaW5lID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9wYXJlbnQo
bV9iaW4uZ2V0KCkpKSkKKyAgICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKHBpcGVs
aW5lLmdldCgpKSwgbV9iaW4uZ2V0KCkpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6c2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4m
JiBuZXdTb3VyY2UpCit7CisgICAgaWYgKG1fc291cmNlICYmICFtX2luaXRpYWxTZXR0aW5ncykK
KyAgICAgICAgbV9pbml0aWFsU2V0dGluZ3MgPSBtX3NvdXJjZS52YWx1ZSgpLT5zZXR0aW5ncygp
OworCisgICAgaWYgKG1fc291cmNlKQorICAgICAgICBtX3NvdXJjZS52YWx1ZSgpLT5yZW1vdmVP
YnNlcnZlcigqdGhpcyk7CisgICAgbV9zb3VyY2UgPSBXVEZNb3ZlKG5ld1NvdXJjZSk7CisgICAg
aW5pdGlhbGl6ZUZyb21UcmFjaygpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6c3RhcnQoKQoreworICAgIG1fc291cmNlLnZhbHVlKCktPmFkZE9ic2Vy
dmVyKCp0aGlzKTsKKyAgICBtX2lzU3RvcHBlZCA9IGZhbHNlOworfQorCit2b2lkIFJlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c3RvcCgpCit7CisgICAgaWYgKG1fc291cmNl
KSB7CisgICAgICAgIG1fc291cmNlLnZhbHVlKCktPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAg
ICAgICAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudChtX291dGdvaW5nU291cmNlLmdldCgpLCBnc3Rf
ZXZlbnRfbmV3X2VvcygpKTsKKworICAgICAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRl
KG1fYmluLmdldCgpLCB0cnVlKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fb3V0
Z29pbmdTb3VyY2UuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKworICAgICAgICBpZiAobV93ZWJy
dGNTaW5rUGFkKSB7CisgICAgICAgICAgICBhdXRvIHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxl
bWVudF9nZXRfc3RhdGljX3BhZChtX2Jpbi5nZXQoKSwgInNyYyIpKTsKKyAgICAgICAgICAgIGdz
dF9wYWRfdW5saW5rKHNyY1BhZC5nZXQoKSwgbV93ZWJydGNTaW5rUGFkLmdldCgpKTsKKworICAg
ICAgICAgICAgYXV0byBwYXJlbnQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGFyZW50X2VsZW1l
bnQobV93ZWJydGNTaW5rUGFkLmdldCgpKSk7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHBhcmVudC5nZXQoKSwgIlJlbW92aW5nIHBhZCAlIiBHU1RfUFRSX0ZPUk1BVCwgbV93ZWJydGNT
aW5rUGFkLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVzdF9w
YWQocGFyZW50LmdldCgpLCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworICAgICAgICB9CisKKyAg
ICAgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZShtX2Jpbi5nZXQoKSwgZmFsc2UpOwor
ICAgICAgICBtX3NvdXJjZS5yZXNldCgpOworICAgIH0KKyAgICBtX2lzU3RvcHBlZCA9IHRydWU7
Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2VN
dXRlZENoYW5nZWQoKQoreworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKyAg
ICBBU1NFUlQobV9tdXRlZCAhPSBtX3NvdXJjZS52YWx1ZSgpLT5tdXRlZCgpKTsKKyAgICBtX211
dGVkID0gbV9zb3VyY2UudmFsdWUoKS0+bXV0ZWQoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdv
aW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBp
ZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm47CisKKyAgICBtX2VuYWJsZWQgPSBtX3NvdXJj
ZS52YWx1ZSgpLT5lbmFibGVkKCk7CisgICAgaWYgKG1fdmFsdmUpCisgICAgICAgIGdfb2JqZWN0
X3NldChtX3ZhbHZlLmdldCgpLCAiZHJvcCIsICFtX2VuYWJsZWQsIG51bGxwdHIpOworfQorCit2
b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6aW5pdGlhbGl6ZUZyb21U
cmFjaygpCit7CisgICAgbV9tdXRlZCA9IG1fc291cmNlLnZhbHVlKCktPm11dGVkKCk7CisgICAg
bV9lbmFibGVkID0gbV9zb3VyY2UudmFsdWUoKS0+ZW5hYmxlZCgpOworICAgIG1fb3V0Z29pbmdT
b3VyY2UgPSB3ZWJraXRNZWRpYVN0cmVhbVNyY05ldygpOworICAgIGdzdF9iaW5fYWRkKEdTVF9C
SU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCkpOworICAgIHdlYmtp
dE1lZGlhU3RyZWFtU3JjQWRkVHJhY2soV0VCS0lUX01FRElBX1NUUkVBTV9TUkMobV9vdXRnb2lu
Z1NvdXJjZS5nZXQoKSksIG1fc291cmNlLT5wdHIoKSwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpsaW5rKCkKK3sKKyAgICBnc3RfZWxlbWVu
dF9saW5rKG1fcG9zdEVuY29kZXJRdWV1ZS5nZXQoKSwgbV9jYXBzRmlsdGVyLmdldCgpKTsKKwor
ICAgIGF1dG8gc3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1f
YmluLmdldCgpLCAic3JjIikpOworICAgIGdzdF9wYWRfbGluayhzcmNQYWQuZ2V0KCksIG1fd2Vi
cnRjU2lua1BhZC5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVu
dChtX2Jpbi5nZXQoKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyOjpzZXRTaW5rUGFkKGNvbnN0IEdSZWZQdHI8R3N0UGFkPiYgcGFkKQoreworICAgIG1f
d2VicnRjU2lua1BhZCA9IHBhZDsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVy
PiB0cmFuc2NlaXZlcjsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNTaW5rUGFkLmdldCgpLCAi
dHJhbnNjZWl2ZXIiLCAmdHJhbnNjZWl2ZXIub3V0UHRyKCksIG51bGxwdHIpOworICAgIGdfb2Jq
ZWN0X2dldCh0cmFuc2NlaXZlci5nZXQoKSwgInNlbmRlciIsICZtX3NlbmRlci5vdXRQdHIoKSwg
bnVsbHB0cik7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmIzZWFiYTk5NDk2YjQx
NmJjYTJjN2I1NWMxZjg2Zjg4YjBkMzkxMzMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlh
U291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw4NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZS5oIgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJl
YW1lciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxSZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXI+LCBwdWJsaWMgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVy
IHsKK3B1YmxpYzoKKyAgICB+UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCk7
CisKKyAgICB2b2lkIHN0YXJ0KCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgdm9pZCBzZXRTb3Vy
Y2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKyAgICBNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2UtPmdldCgpOyB9CisKKyAg
ICBjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBhbGxvd2VkQ2FwcygpIGNvbnN0IHsgcmV0dXJuIG1f
YWxsb3dlZENhcHM7IH0KKworICAgIHZvaWQgbGluaygpOworICAgIGNvbnN0IEdSZWZQdHI8R3N0
UGFkPiYgcGFkKCkgY29uc3QgeyByZXR1cm4gbV93ZWJydGNTaW5rUGFkOyB9CisgICAgdm9pZCBz
ZXRTaW5rUGFkKGNvbnN0IEdSZWZQdHI8R3N0UGFkPiYpOworCisgICAgR1JlZlB0cjxHc3RXZWJS
VENSVFBTZW5kZXI+IHNlbmRlcigpIGNvbnN0IHsgcmV0dXJuIG1fc2VuZGVyOyB9CisgICAgR1Jl
ZlB0cjxHc3RFbGVtZW50PiBiaW4oKSBjb25zdCB7IHJldHVybiBtX2JpbjsgfQorCisgICAgdmly
dHVhbCBib29sIHNldFBheWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSB7IHJldHVy
biBmYWxzZTsgfQorCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgUmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyKCk7CisKKyAgICB2b2lkIGluaXRpYWxpemVGcm9tVHJhY2soKTsK
KworICAgIGJvb2wgbV9lbmFibGVkIHsgdHJ1ZSB9OworICAgIGJvb2wgbV9tdXRlZCB7IGZhbHNl
IH07CisgICAgYm9vbCBtX2lzU3RvcHBlZCB7IGZhbHNlIH07CisgICAgc3RkOjpvcHRpb25hbDxS
ZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+PiBtX3NvdXJjZTsKKyAgICBzdGQ6Om9wdGlvbmFs
PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9pbml0aWFsU2V0dGluZ3M7CisgICAgR1Jl
ZlB0cjxHc3RFbGVtZW50PiBtX2JpbjsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fb3V0Z29p
bmdTb3VyY2U7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ZhbHZlOworICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gbV9wcmVFbmNvZGVyUXVldWU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBt
X2VuY29kZXI7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BheWxvYWRlcjsKKyAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IG1fcG9zdEVuY29kZXJRdWV1ZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1l
bnQ+IG1fY2Fwc0ZpbHRlcjsKKyAgICBHUmVmUHRyPEdzdENhcHM+IG1fYWxsb3dlZENhcHM7Cisg
ICAgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IG1fc2VuZGVyOworICAgIEdSZWZQdHI8R3N0
UGFkPiBtX3dlYnJ0Y1NpbmtQYWQ7CisKK3ByaXZhdGU6CisgICAgdm9pZCBzb3VyY2VNdXRlZENo
YW5nZWQoKTsKKyAgICB2b2lkIHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7CisKKyAgICAvLyBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgQVBJCisgICAgdm9pZCB0cmFja011dGVkQ2hh
bmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgc291cmNlTXV0ZWRDaGFu
Z2VkKCk7IH0KKyAgICB2b2lkIHRyYWNrRW5hYmxlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1By
aXZhdGUmKSBvdmVycmlkZSB7IHNvdXJjZUVuYWJsZWRDaGFuZ2VkKCk7IH0KKyAgICB2b2lkIHRy
YWNrU2V0dGluZ3NDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgb3ZlcnJpZGUgeyBp
bml0aWFsaXplRnJvbVRyYWNrKCk7IH0KKyAgICB2b2lkIHRyYWNrRW5kZWQoTWVkaWFTdHJlYW1U
cmFja1ByaXZhdGUmKSBvdmVycmlkZSB7IH0KK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi40YjhmNjM0YjIzNDAwN2IxZTk2MGJiYTFlNTY3MzkzZjYxMmNmMmNkCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxMTEg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2lm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyVmlkZW9DYXB0dXJl
U291cmNlLmgiCisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRw
b2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBv
aW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoUmVm
PE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHNvdXJjZSkKKyAgICA6IFJlYWx0aW1lT3V0Z29p
bmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpCit7CisgICAgcmVnaXN0ZXJXZWJLaXRHU3RyZWFtZXJF
bGVtZW50cygpOworCisgICAgbV92aWRlb0NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoInZpZGVvY29udmVydCIsIG51bGxwdHIpOworICAgIG1fZW5jb2RlciA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgid2VicnRjdmlkZW9lbmNvZGVyIiwgbnVsbHB0cik7CisgICAgZ3N0X2Jp
bl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3ZpZGVvQ29udmVydC5nZXQo
KSwgbV9lbmNvZGVyLmdldCgpLCBudWxscHRyKTsKKworICAgIGF1dG8qIHBhZFRlbXBsYXRlID0g
Z3N0X2VsZW1lbnRfZ2V0X3BhZF90ZW1wbGF0ZShtX2VuY29kZXIuZ2V0KCksICJzcmMiKTsKKyAg
ICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF90ZW1wbGF0ZV9nZXRfY2FwcyhwYWRUZW1w
bGF0ZSkpOworICAgIG1fYWxsb3dlZENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5
KCkpOworICAgIGdzdF9jYXBzX2ZvcmVhY2goY2Fwcy5nZXQoKSwgcmVpbnRlcnByZXRfY2FzdDxH
c3RDYXBzRm9yZWFjaEZ1bmM+KCtbXShHc3RDYXBzRmVhdHVyZXMqLCBHc3RTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byogc291cmNlID0gcmVp
bnRlcnByZXRfY2FzdDxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIqPih1c2Vy
RGF0YSk7CisgICAgICAgIGNvbnN0IGNoYXIqIG5hbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9uYW1l
KHN0cnVjdHVyZSk7CisgICAgICAgIGNvbnN0IGNoYXIqIGVuY29kaW5nTmFtZSA9IG51bGxwdHI7
CisgICAgICAgIGlmIChlcXVhbChuYW1lLCAidmlkZW8veC12cDgiKSkKKyAgICAgICAgICAgIGVu
Y29kaW5nTmFtZSA9ICJWUDgiOworICAgICAgICBlbHNlIGlmIChlcXVhbChuYW1lLCAidmlkZW8v
eC12cDkiKSkKKyAgICAgICAgICAgIGVuY29kaW5nTmFtZSA9ICJWUDkiOworICAgICAgICBlbHNl
IGlmIChlcXVhbChuYW1lLCAidmlkZW8veC1oMjY0IikpCisgICAgICAgICAgICBlbmNvZGluZ05h
bWUgPSAiSDI2NCI7CisgICAgICAgIGlmIChlbmNvZGluZ05hbWUpCisgICAgICAgICAgICBnc3Rf
Y2Fwc19hcHBlbmRfc3RydWN0dXJlKHNvdXJjZS0+bV9hbGxvd2VkQ2Fwcy5nZXQoKSwgZ3N0X3N0
cnVjdHVyZV9uZXcoImFwcGxpY2F0aW9uL3gtcnRwIiwgIm1lZGlhIiwgR19UWVBFX1NUUklORywg
InZpZGVvIiwgImVuY29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBlbmNvZGluZ05hbWUsICJj
bG9jay1yYXRlIiwgR19UWVBFX0lOVCwgOTAwMDAsIG51bGxwdHIpKTsKKyAgICB9KSwgdGhpcyk7
CisKKyAgICBzZXRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKK30KKworYm9vbCBSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8
R3N0Q2Fwcz4mIGNhcHMpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX2Jpbi5nZXQoKSwgIk91
dGdvaW5nIHZpZGVvIHNvdXJjZSBwYXlsb2FkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBz
LmdldCgpKTsKKyAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNh
cHMuZ2V0KCksIDApOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gZW5jb2RlckNhcHM7CisgICAgaWYg
KGNvbnN0IGNoYXIqIGVuY29kaW5nTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1
Y3R1cmUsICJlbmNvZGluZy1uYW1lIikpIHsKKyAgICAgICAgaWYgKGVxdWFsKGVuY29kaW5nTmFt
ZSwgIlZQOCIpKSB7CisgICAgICAgICAgICBlbmNvZGVyQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fw
c19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LXZwOCIpKTsKKyAgICAgICAgICAgIG1fcGF5bG9h
ZGVyID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoInJ0cHZwOHBheSIsIG51bGxwdHIpOworICAgICAg
ICB9IGVsc2UgaWYgKGVxdWFsKGVuY29kaW5nTmFtZSwgIlZQOSIpKSB7CisgICAgICAgICAgICBl
bmNvZGVyQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94
LXZwOSIpKTsKKyAgICAgICAgICAgIG1fcGF5bG9hZGVyID0gbWFrZUdTdHJlYW1lckVsZW1lbnQo
InJ0cHZwOXBheSIsIG51bGxwdHIpOworICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGVuY29kaW5n
TmFtZSwgIkgyNjQiKSkgeworICAgICAgICAgICAgZW5jb2RlckNhcHMgPSBhZG9wdEdSZWYoZ3N0
X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidmlkZW8veC1oMjY0IikpOworICAgICAgICAgICAgbV9w
YXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwaDI2NHBheSIsIG51bGxwdHIpOwor
ICAgICAgICAgICAgLy8gRklYTUU6IGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3Ry
ZWFtZXIvZ3N0LXBsdWdpbnMtZ29vZC8tL2lzc3Vlcy84OTMKKyAgICAgICAgICAgIC8vIGdzdF91
dGlsX3NldF9vYmplY3RfYXJnKEdfT0JKRUNUKG1fcGF5bG9hZGVyLmdldCgpKSwgImFnZ3JlZ2F0
ZS1tb2RlIiwgInplcm8tbGF0ZW5jeSIpOworICAgICAgICAgICAgLy8gZ19vYmplY3Rfc2V0KG1f
cGF5bG9hZGVyLmdldCgpLCAiY29uZmlnLWludGVydmFsIiwgLTEsIG51bGxwdHIpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX2Jpbi5nZXQoKSwgIlVu
c3VwcG9ydGVkIG91dGdvaW5nIHZpZGVvIGVuY29kaW5nOiAlcyIsIGVuY29kaW5nTmFtZSk7Cisg
ICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKG1fYmluLmdldCgpLCAiZW5jb2RpbmctbmFtZSBub3QgZm91bmQi
KTsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKworICAgIGlmICghbV9wYXlsb2FkZXIp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIEZJWE1FOiBSZS1lbmFibGUgdGhpcy4g
Q3VycmVudGx5IHRyaWdnZXJzIGNhcHMgbmVnb3RpYXRpb24gZXJyb3IuCisgICAgZ19vYmplY3Rf
c2V0KG1fcGF5bG9hZGVyLmdldCgpLCAiYXV0by1oZWFkZXItZXh0ZW5zaW9uIiwgRkFMU0UsIG51
bGxwdHIpOworCisgICAgZ19vYmplY3Rfc2V0KG1fZW5jb2Rlci5nZXQoKSwgImZvcm1hdCIsIGVu
Y29kZXJDYXBzLmdldCgpLCBudWxscHRyKTsKKworICAgIGludCBwYXlsb2FkVHlwZTsKKyAgICBp
ZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgInBheWxvYWQiLCAmcGF5bG9hZFR5
cGUpKQorICAgICAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJwdCIsIHBheWxv
YWRUeXBlLCBudWxscHRyKTsKKworICAgIGF1dG8gZmlsdGVyZWRDYXBzID0gYWRvcHRHUmVmKGdz
dF9jYXBzX25ld19mdWxsKGdzdF9zdHJ1Y3R1cmVfY29weShzdHJ1Y3R1cmUpLCBudWxscHRyKSk7
CisgICAgZ19vYmplY3Rfc2V0KG1fY2Fwc0ZpbHRlci5nZXQoKSwgImNhcHMiLCBmaWx0ZXJlZENh
cHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1fYmlu
LmdldCgpKSwgbV9wYXlsb2FkZXIuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueSht
X291dGdvaW5nU291cmNlLmdldCgpLCBtX3ZhbHZlLmdldCgpLCBtX3ZpZGVvQ29udmVydC5nZXQo
KSwgbV9wcmVFbmNvZGVyUXVldWUuZ2V0KCksCisgICAgICAgIG1fZW5jb2Rlci5nZXQoKSwgbV9w
YXlsb2FkZXIuZ2V0KCksIG1fcG9zdEVuY29kZXJRdWV1ZS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjgxNTFmZGNhMDIz
MzIyNDVhY2M5YWZmMjE1ZDI5NTBkMWVmNTM0N2YKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KworI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lciBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
R1N0cmVhbWVyPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHNvdXJjZSkg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXIoV1RGTW92ZShzb3VyY2UpKSk7IH0KKworICAgIHZvaWQgc2V0QXBwbHlSb3RhdGlvbihib29s
IHNob3VsZEFwcGx5Um90YXRpb24pIHsgbV9zaG91bGRBcHBseVJvdGF0aW9uID0gc2hvdWxkQXBw
bHlSb3RhdGlvbjsgfQorCisgICAgYm9vbCBzZXRQYXlsb2FkVHlwZShjb25zdCBHUmVmUHRyPEdz
dENhcHM+JikgZmluYWw7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsK
KworICAgIGJvb2wgbV9zaG91bGRBcHBseVJvdGF0aW9uIHsgZmFsc2UgfTsKKworcHJpdmF0ZToK
KyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmlkZW9Db252ZXJ0OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKaW5kZXggMjJlYTMzMjM5MGM1YzgyMmFkMzQyNTkwYTRh
MWUwYmYwYzUxOWQwOC4uMDVhNGIzYzUzM2I4ZTUzNzUwMmE0OGE3YWU0YTlkYzljYmY4MjVkOSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApAQCAtNTk5LDYgKzU5OSw5IEBAIHZv
aWQgSW50ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKFBhZ2UmIHBhZ2UpCiAgICAgcnRj
UHJvdmlkZXIuc2V0SDI2NVN1cHBvcnQodHJ1ZSk7CiAgICAgcnRjUHJvdmlkZXIuc2V0VlA5U3Vw
cG9ydCh0cnVlLCB0cnVlKTsKICAgICBydGNQcm92aWRlci5jbGVhckZhY3RvcnkoKTsKKyNlbGlm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorICAgIHBhZ2Uuc2V0dGluZ3MoKS5zZXRXZWJSVENFbmNy
eXB0aW9uRW5hYmxlZCh0cnVlKTsKKyAgICBwYWdlLnNldHRpbmdzKCkuc2V0UGVlckNvbm5lY3Rp
b25FbmFibGVkKHRydWUpOwogI2VuZGlmCiAKICAgICBwYWdlLnNldEZ1bGxzY3JlZW5BdXRvSGlk
ZUR1cmF0aW9uKDBfcyk7CkBAIC0xNjE1LDYgKzE2MTgsNyBAQCB2b2lkIEludGVybmFsczo6YXBw
bHlSb3RhdGlvbkZvck91dGdvaW5nVmlkZW9Tb3VyY2VzKFJUQ1BlZXJDb25uZWN0aW9uJiBjb25u
ZWN0aQogewogICAgIGNvbm5lY3Rpb24uYXBwbHlSb3RhdGlvbkZvck91dGdvaW5nVmlkZW9Tb3Vy
Y2VzKCk7CiB9CisKIHZvaWQgSW50ZXJuYWxzOjpzZXRXZWJSVENIMjY1U3VwcG9ydChib29sIHZh
bHVlKQogewogI2lmIFVTRShMSUJXRUJSVEMpCkBAIC0xNjIyLDYgKzE2MjYsOCBAQCB2b2lkIElu
dGVybmFsczo6c2V0V2ViUlRDSDI2NVN1cHBvcnQoYm9vbCB2YWx1ZSkKICAgICAgICAgcGFnZS0+
bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRIMjY1U3VwcG9ydCh2YWx1ZSk7CiAgICAgICAgIHBhZ2Ut
PmxpYldlYlJUQ1Byb3ZpZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAgICAgfQorI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2MzIsNiArMTYzOCw5IEBAIHZv
aWQgSW50ZXJuYWxzOjpzZXRXZWJSVENWUDlTdXBwb3J0KGJvb2wgc3VwcG9ydFZQOVByb2ZpbGUw
LCBib29sIHN1cHBvcnRWUDlQcm9mCiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCku
c2V0VlA5U3VwcG9ydChzdXBwb3J0VlA5UHJvZmlsZTAsIHN1cHBvcnRWUDlQcm9maWxlMik7CiAg
ICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAgICAgfQor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oc3VwcG9ydFZQOVByb2ZpbGUwKTsKKyAgICBVTlVTRURf
UEFSQU0oc3VwcG9ydFZQOVByb2ZpbGUyKTsKICNlbmRpZgogfQogCkBAIC0xNjQyLDYgKzE2NTEs
OCBAQCB2b2lkIEludGVybmFsczo6c2V0V2ViUlRDVlA5VlRCU3VwcG9ydChib29sIHZhbHVlKQog
ICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLnNldFZQOVZUQlN1cHBvcnQodmFsdWUp
OwogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLmNsZWFyRmFjdG9yeSgpOwogICAg
IH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNlbmRpZgogfQogCkBAIC0xNjgy
LDYgKzE2OTMsOCBAQCB2b2lkIEludGVybmFsczo6c2V0RW5hYmxlV2ViUlRDRW5jcnlwdGlvbihi
b29sIHZhbHVlKQogI2lmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGF1dG8qIHBhZ2UgPSBjb250
ZXh0RG9jdW1lbnQoKS0+cGFnZSgpKQogICAgICAgICBwYWdlLT5zZXR0aW5ncygpLnNldFdlYlJU
Q0VuY3J5cHRpb25FbmFibGVkKHZhbHVlKTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZhbHVl
KTsKICNlbmRpZgogfQogCkBAIC0xNjkyLDYgKzE3MDUsOCBAQCB2b2lkIEludGVybmFsczo6c2V0
VXNlRFRMUzEwKGJvb2wgdXNlRFRMUzEwKQogICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50
LT5wYWdlKCkpCiAgICAgICAgIHJldHVybjsKICAgICBkb2N1bWVudC0+cGFnZSgpLT5saWJXZWJS
VENQcm92aWRlcigpLnNldFVzZURUTFMxMCh1c2VEVExTMTApOworI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odXNlRFRMUzEwKTsKICNlbmRpZgogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2Uv
RmluZEdTdHJlYW1lci5jbWFrZSBiL1NvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNtYWtlCmlu
ZGV4IDlkOTdhNGI1MGNiMGY5ODBmNWI4NDA1N2MyYmFlZTg5OTc5OWRmNjYuLjQ4NjI1NTdhOTli
MzU5MmUwMDE5ZTc2YjI4YWU1NTFhY2Q4OTQ1ZjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9G
aW5kR1N0cmVhbWVyLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNtYWtl
CkBAIC0yNiw2ICsyNiw5IEBACiAjICBnc3RyZWFtZXItdmlkZW86ICAgICAgR1NUUkVBTUVSX1ZJ
REVPX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1ZJREVPX0xJQlJBUklFUwogIyAgZ3N0cmVh
bWVyLWNvZGVjcGFyc2VyOkdTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfSU5DTFVERV9ESVJTIGFuZCBH
U1RSRUFNRVJfQ09ERUNQQVJTRVJTX0xJQlJBUklFUwogIyAgZ3N0cmVhbWVyLWZ1bGw6ICAgICAg
IEdTVFJFQU1FUl9GVUxMX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX0ZVTExfTElCUkFSSUVT
CisjICBnc3RyZWFtZXItcnRwOiAgICAgICAgR1NUUkVBTUVSX1JUUF9JTkNMVURFX0RJUlMgYW5k
IEdTVFJFQU1FUl9SVFBfTElCUkFSSUVTCisjICBnc3RyZWFtZXItc2RwOiAgICAgICAgR1NUUkVB
TUVSX1NEUF9JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9TRFBfTElCUkFSSUVTCisjICBnc3Ry
ZWFtZXItd2VicnRjOiAgICAgR1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlMgYW5kIEdTVFJF
QU1FUl9XRUJSVENfTElCUkFSSUVTCiAjCiAjIENvcHlyaWdodCAoQykgMjAxMiBSYXBoYWVsIEt1
Ym8gZGEgQ29zdGEgPHJha3Vjb0B3ZWJraXQub3JnPgogIwpAQCAtMTA2LDYgKzEwOSw5IEBAIEZJ
TkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfUEJVVElMUyBnc3RyZWFtZXItcGJ1dGls
cy0xLjAgZ3N0cGJ1dGlscy0xLjApCiBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVS
X1RBRyBnc3RyZWFtZXItdGFnLTEuMCBnc3R0YWctMS4wKQogRklORF9HU1RSRUFNRVJfQ09NUE9O
RU5UKEdTVFJFQU1FUl9WSURFTyBnc3RyZWFtZXItdmlkZW8tMS4wIGdzdHZpZGVvLTEuMCkKIEZJ
TkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfQ09ERUNQQVJTRVJTIGdzdHJlYW1lci1j
b2RlY3BhcnNlcnMtMS4wIGdzdGNvZGVjcGFyc2Vycy0xLjApCitGSU5EX0dTVFJFQU1FUl9DT01Q
T05FTlQoR1NUUkVBTUVSX1JUUCBnc3RyZWFtZXItcnRwLTEuMCBnc3RydHAtMS4wKQorRklORF9H
U1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9TRFAgZ3N0cmVhbWVyLXNkcC0xLjAgZ3N0c2Rw
LTEuMCkKK0ZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfV0VCUlRDIGdzdHJlYW1l
ci13ZWJydGMtMS4wIGdzdHdlYnJ0Yy0xLjApCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIDMuIFByb2Nlc3MgdGhlIENPTVBPTkVOVFMgcGFz
c2VkIHRvIEZJTkRfUEFDS0FHRQpAQCAtMTQ4LDQgKzE1NCw2IEBAIG1hcmtfYXNfYWR2YW5jZWQo
CiAgICAgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVMKICAgICBHU1RSRUFNRVJfRlVM
TF9JTkNMVURFX0RJUlMKICAgICBHU1RSRUFNRVJfRlVMTF9MSUJSQVJJRVMKKyAgICBHU1RSRUFN
RVJfV0VCUlRDX0lOQ0xVREVfRElSUworICAgIEdTVFJFQU1FUl9XRUJSVENfTElCUkFSSUVTCiAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlIGIvU291cmNl
L2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZQppbmRleCA3N2U5NTg0NWU5OTEzYTU5NzhkYWQx
MGNmYzQzMDA5M2I0M2M3YWEzLi5jOGQwZmFmYjIzZmIxOGZjNTliOTFlMGNlMDRjMTRlZTQ1OWIy
NDc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UKQEAgLTI4LDYgKzI4LDEwIEBAIGlm
IChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgICAgICAgbGlzdChB
UFBFTkQgR1NUUkVBTUVSX0NPTVBPTkVOVFMgYXVkaW8gZmZ0KQogICAgICAgICAgIGVuZGlmICgp
CiAKKyAgICAgICAgICBpZiAoVVNFX0dTVFJFQU1FUl9XRUJfUlRDKQorICAgICAgICAgICAgICBs
aXN0KEFQUEVORCBHU1RSRUFNRVJfQ09NUE9ORU5UUyB3ZWJydGMpCisgICAgICAgICAgZW5kaWYg
KCkKKwogICAgICAgICAgIGZpbmRfcGFja2FnZShHU3RyZWFtZXIgMS4xNC4wIFJFUVVJUkVEIENP
TVBPTkVOVFMgJHtHU1RSRUFNRVJfQ09NUE9ORU5UU30pCiAKICAgICAgICAgICBpZiAoRU5BQkxF
X1dFQl9BVURJTykKQEAgLTQ5LDExICs1MywyMSBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJM
RV9XRUJfQVVESU8pCiAgICAgICAgICAgaWYgKFVTRV9HU1RSRUFNRVJfR0wgQU5EIE5PVCBQQ19H
U1RSRUFNRVJfR0xfRk9VTkQpCiAgICAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkdT
dHJlYW1lckdMIGlzIG5lZWRlZCBmb3IgVVNFX0dTVFJFQU1FUl9HTC4iKQogICAgICAgICAgIGVu
ZGlmICgpCisKKyAgICAgICAgICBpZiAoVVNFX0dTVFJFQU1FUl9XRUJSVEMgQU5EIChQQ19HU1RS
RUFNRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIjEuMjAiIE9SIE5PVCBQQ19HU1RSRUFNRVJfV0VC
UlRDX0ZPVU5EKSkKKyAgICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiR1N0cmVhbWVy
V2ViUlRDID49IDEuMjAgaXMgbmVlZGVkIGZvciBVU0VfR1NUUkVBTUVSX1dFQlJUQy4iKQorICAg
ICAgICAgIGVuZGlmICgpCiAgICAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAogaWYgKEVOQUJMRV9N
RURJQV9TVFJFQU0gQU5EIEVOQUJMRV9XRUJfUlRDKQotICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFVTRV9MSUJXRUJSVEMgVFJVRSkKKyAgICBpZiAoVVNFX0dTVFJFQU1FUl9XRUJSVEMpCisg
ICAgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJSVEMgRkFMU0UpCisKKyAg
ICAgICAgZmluZF9wYWNrYWdlKE9wZW5TU0wgUkVRVUlSRUQpCisgICAgZWxzZSAoKQorICAgICAg
ICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIFRSVUUpCisgICAgZW5kaWYg
KCkKIGVsc2UgKCkKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIEZB
TFNFKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0
aW9ucy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQppbmRl
eCAxZjFhMjEzYzIxMDEwZDMyYWNjMTdmYjkxY2I1MjBjMWJkMjM4ZWFiLi4yZjMwMGEwNzA2NDg5
MWY2NzZlY2FjNWQyZWFmZDdjYzg1Njg5MjkzIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0
cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmlu
aXRpb25zLmNtYWtlCkBAIC0xMCwzICsxMCw0IEBAIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9H
U1RSRUFNRVJfRlVMTCAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3Igc3RhdGljIEdTCiBX
RUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX05BVElWRV9WSURFTyAiVG9nZ2xlIG5h
dGl2ZSB2aWRlbyBzdXBwb3J0IGluIEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIiIFBSSVZBVEUgT0ZG
KQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9OQVRJVkVfQVVESU8gIlRvZ2ds
ZSBuYXRpdmUgYXVkaW8gc3VwcG9ydCBpbiBHU3RyZWFtZXIgbWVkaWEgcGxheWVyIiBQUklWQVRF
IE9GRikKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJfVEVYVF9TSU5LICJUb2dn
bGUgdGV4dCBzaW5rIHN1cHBvcnQgaW4gR1N0cmVhbWVyIG1lZGlhIHBsYXllciIgUFJJVkFURSBP
TikKK1dFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJfV0VCUlRDICJXaGV0aGVyIHRv
IGVuYWJsZSBzdXBwb3J0IGZvciBXZWJSVEMiIFBSSVZBVEUgT04pCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlIGIvU291cmNlL2NtYWtlL0dTdHJl
YW1lckRlcGVuZGVuY2llcy5jbWFrZQppbmRleCBmNDJjN2U3MDY5NzdiZjE2YzlmMjliZjNkZTMw
OGM1ZTk2ODAyOTk2Li4wOWI2YzI1ZThkNTkyZDU4ODRlODk0NmJhNmFmNThkMmZkYjE2MTlkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2UKQEAgLTEsMyArMSw0IEBA
CiBXRUJLSVRfT1BUSU9OX0RFUEVORChVU0VfR1NUUkVBTUVSX0dMIEVOQUJMRV9WSURFTykKIFdF
QktJVF9PUFRJT05fREVQRU5EKFVTRV9HU1RSRUFNRVJfTVBFR1RTIEVOQUJMRV9WSURFTykKIFdF
QktJVF9PUFRJT05fREVQRU5EKFVTRV9XUEVfVklERU9fUExBTkVfRElTUExBWV9ETUFCVUYgVVNF
X0dTVFJFQU1FUl9HTCkKK1dFQktJVF9PUFRJT05fREVQRU5EKFVTRV9HU1RSRUFNRVJfV0VCUlRD
IEVOQUJMRV9XRUJfUlRDKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hh
bmdlTG9nCmluZGV4IDg3YjBkNTc4ZDlhZGFiNWRmODYyNWMwNGQxN2E0ZDZjYjU2NWM1ZTEuLjc2
M2ZlZmI3NzdlNGVjNjVjMTI4OWRmNjBhMGUxMzBmZDJjMTFhNTEgMTAwNjQ0Ci0tLSBhL1Rvb2xz
L0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0w
Mi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAg
W0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNrZW5kCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NDAKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZsYXRwYWsvZmxh
dHBha3V0aWxzLnB5OgorICAgICAgICAoV2Via2l0RmxhdHBhay5ydW5faW5fc2FuZGJveCk6IEFs
bG93IGxpYm5pY2UgZGVidWcgbG9nIGVudmlyb25tZW50IHZhcmlhYmxlIGluIHJ1bnRpbWUgc2Fu
ZGJveC4KKwogMjAyMi0wMi0wNyAgSm9uYXRoYW4gQmVkYXJkICA8amJlZGFyZEBhcHBsZS5jb20+
CiAKICAgICAgICAgW0VXU10gVHJpZ2dlciBNYWMgYnVpbGRlcnMgb24gcHVsbC1yZXF1ZXN0cwpk
aWZmIC0tZ2l0IGEvVG9vbHMvZmxhdHBhay9mbGF0cGFrdXRpbHMucHkgYi9Ub29scy9mbGF0cGFr
L2ZsYXRwYWt1dGlscy5weQppbmRleCAwNzU2YjA5ZWNlNWVmYmIxY2E3YjU5YTMyYTZiODc3NGNj
YTczYTRkLi5hYjU3YjUzOTQzYmQ4ZTViNmIzMGE5YjU2MDM1NDIwNTE0NzU4ODVkIDEwMDY0NAot
LS0gYS9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQorKysgYi9Ub29scy9mbGF0cGFrL2Zs
YXRwYWt1dGlscy5weQpAQCAtODM4LDYgKzgzOCw3IEBAIGNsYXNzIFdlYmtpdEZsYXRwYWs6CiAg
ICAgICAgICAgICAiTUVTQSIsCiAgICAgICAgICAgICAiTElCR0wiLAogICAgICAgICAgICAgIlBJ
UEVXSVJFIiwKKyAgICAgICAgICAgICJOSUNFIiwKICAgICAgICAgICAgICJSVVNUIiwKICAgICAg
ICAgICAgICJTQ0NBQ0hFIiwKICAgICAgICAgICAgICJTUEEiLApkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDY1NzA3ZGExNmI2
ZWZjOTU5YWQyODVmNzNmYjM1YjQwZjBkMDNjZDcuLmY0OWMxNzYxM2JhMDNiMDE2ZDlmYTcxMWFi
MDU4YzUzNDI5YzBjZGEgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9M
YXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxOCBAQAorMjAyMi0wMi0xMiAgUGhpbGlw
cGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0g
SW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NDAKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dsaWIvVGVzdEV4cGVj
dGF0aW9uczogRmxhZyBtb3N0IFdlYlJUQyBhcyBmYWlsaW5nLiBEdXJpbmcgdGhpcyBmaXJzdCBk
ZXZlbG9wbWVudAorICAgICAgICBjeWNsZSBJIGZvY3VzZWQgbW9zdGx5IG9uIGZpeGluZyBjcmFz
aGVzIGFuZCBvbmx5IGZpeGVkIGEgZmV3IGZhaWx1cmVzLiBUaGUgcmVtYWluaW5nIG9uZXMKKyAg
ICAgICAgd2lsbCBiZSBhZHJlc3NlZCBpbiBmb2xsb3ctdXAgcGF0Y2hlcy4KKyAgICAgICAgKiBw
bGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNj
cmlwdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3Rl
ZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKwogMjAyMi0wMi0xOCAgQW50
b2luZSBRdWludCAgPGdyYW91dHNAd2Via2l0Lm9yZz4KIAogICAgICAgICBbZnJhbWUtcmF0ZV0g
W2N1c3RvbS1lZmZlY3RdIGFsbG93IHNldHRpbmcgZnJhbWVSYXRlIGFzIGFuIG9wdGlvbiBwYXNz
ZWQgdG8gZG9jdW1lbnQudGltZWxpbmUuYW5pbWF0ZSgpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
bGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggMmFmZmZkYjM4YTRiMWQ3ODc4ZTIxOGFlOTU2MjFk
NmY4MmY1ZTNmYy4uYzJmODMyMmU1Njk4YzcxMDVhN2MzNGUzYmVmNGMxNzk0MGFhODJhMCAxMDA2
NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCisrKyBi
L0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtODU3LDcgKzg1
Nyw3IEBAIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvdmlkZW8tY29uY3VycmVudC1wbGF5YmFj
ay5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLWludGVy
cnVwdGlvbi13aXRoLXJlc3VtZS1ub3QtYWxsb3dpbmctcGxheS5odG1sIFsgRmFpbHVyZSBdCiB3
ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLW11bHRpcGxlLWNvbmN1cnJlbnQtcGxheWJh
Y2suaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS93ZWJhdWRpby1i
YWNrZ3JvdW5kLXBsYXliYWNrLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMzE4MTEg
d2VicnRjL2NvbmN1cnJlbnRWaWRlb1BsYXliYWNrMi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMjMxODExIHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2NvbmN1cnJlbnRWaWRlb1Bs
YXliYWNrMi5odG1sIFsgRmFpbHVyZSBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVk
aWEvbWVkaWEtc2Vzc2lvbi9jYWxsQWN0aW9uSGFuZGxlci5odG1sIFsgVGltZW91dCBdCiB3ZWJr
aXQub3JnL2IvMjMxODExIG1lZGlhL21lZGlhLXNlc3Npb24vcGxheS1hZnRlci1zZWVrLmh0bWwg
WyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvcmVtb3RlLWNvbnRyb2wtY29t
bWFuZC1pcy11c2VyLWdlc3R1cmUuaHRtbCBbIFRpbWVvdXQgXQpAQCAtODcwLDEwICs4NzAsMTAg
QEAgd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS92aWRlby1zeXN0ZW0tc2xlZXAuaHRtbCBbIFRp
bWVvdXQgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSB3ZWJhdWRpby9hdWRpb2NvbnRleHQtc3RhdGUt
aW50ZXJydXB0ZWQuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSB3ZWJhdWRp
by9zdXNwZW5kLWNvbnRleHQtd2hpbGUtaW50ZXJydXB0ZWQuaHRtbCBbIFRpbWVvdXQgXQogCisj
IHJ2ZmMgcmVsYXRlZCBmYWlsdXJlcwogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92
aWRlby1ydmZjIFsgUGFzcyBdCiBmYXN0L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS1ydmZjLmh0
bWwgWyBQYXNzIEZhaWx1cmUgXQogd2VicnRjL3BlZXJDb25uZWN0aW9uLXJ2ZmMuaHRtbCBbIEZh
aWx1cmUgXQotd2VicnRjL2NhbnZhcy10by1wZWVyLWNvbm5lY3Rpb24uaHRtbCBbIEZhaWx1cmUg
XQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1ydmZjL3JlcXVlc3Qtdmlk
ZW8tZnJhbWUtY2FsbGJhY2std2VicnRjLmh0dHBzLmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvdmlkZW8tcnZmYy9yZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxi
YWNrLWJlZm9yZS14ci1zZXNzaW9uLmh0dHBzLmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvdmlkZW8tcnZmYy9yZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNr
LWR1cmluZy14ci1zZXNzaW9uLmh0dHBzLmh0bWwgWyBTa2lwIF0KQEAgLTg5MSw2ICs4OTEsOTUg
QEAgd2Via2l0Lm9yZy9iLzIzNDA4NCBtZWRpYS90cmFjay9hdWRpby10cmFjay1jb25maWd1cmF0
aW9uLmh0bWwgWyBGYWlsdXJlIF0KICMgYml0cmF0ZSBlc3RpbWF0aW9uLgogd2Via2l0Lm9yZy9i
LzIzNDA4NCBtZWRpYS90cmFjay92aWRlby10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWls
dXJlIF0KIAorIyBEYXRhQ2hhbm5lbCBHc3RXZWJSVEMgaW1wbGVtZW50YXRpb24gaW5jb21wbGV0
ZQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGF0YWNoYW5uZWwgWyBTa2lwIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgaHR0cC93cHQvd2VicnRjL3RyYW5zZmVyLWRhdGFjaGFubmVsLXNlcnZp
Y2Utd29ya2VyLmh0dHBzLmh0bWwgWyBTa2lwIF0KKworIyBUaGUgR3N0V2ViUlRDIGJhY2tlbmQg
ZG9lc24ndCBzdXBwb3J0IHRyYW5zZm9ybXMgeWV0Lgord2Via2l0Lm9yZy9iLzIzNTg4NSBodHRw
L3dwdC93ZWJydGMvYXVkaW92aWRlby1zY3JpcHQtdHJhbnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgaHR0cC93cHQvd2VicnRjL3ZpZGVvLXNjcmlwdC10cmFuc2Zvcm0t
a2V5ZnJhbWUtb25seS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0
L3dlYnJ0Yy92aWRlby1zY3JpcHQtdHJhbnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10
cmFuc2Zvcm0vc2NyaXB0LWF1ZGlvLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVu
Y29kZWQtdHJhbnNmb3JtL3NjcmlwdC1jaGFuZ2UtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lw
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93
ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2NyaXB0LW1ldGFkYXRhLXRyYW5zZm9ybS5odHRwcy5o
dG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3JtL3NjcmlwdC10cmFuc2Zvcm0uaHR0cHMu
aHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnJ0Yy1lbmNvZGVkLXRyYW5zZm9ybS9zY3JpcHQtd3JpdGUtdHdpY2UtdHJh
bnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KKword2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWFkZEljZUNhbmRpZGF0ZS5odG1sIFsgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24tYWRkVHJhY2stcmV1c2Utc2VuZGVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8y
MzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLWxvY2FsLW9mZmVy
Lmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24taGF2ZS1sb2NhbC1wcmFuc3dlci5odG1sIFsgQ3Jhc2ggXQord2Via2l0
Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhhdmUtcmVt
b3RlLW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLXJlbW90ZS1wcmFuc3dlci5odG1sIFsgQ3Jh
c2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLWljZWNhbmRpZGF0ZS1ldmVudC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1hbnN3ZXIuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLWNh
bGxiYWNrcy1zaW5nbGUtZGlhbG9nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1zaW5nbGUt
ZGlhbG9nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC10d28tZGlhbG9ncy5odG1sIFsgQ3Jh
c2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLXBhZ2UtY2FjaGUuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9t
ZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVseS1hc3NpZ25lZC10cmFuc2NlaXZl
ci1taWQuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldExvY2FsRGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLXN0YXRzU2VsZWN0b3IuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSBmYXN0L21lZGlhc3RyZWFtL2NoYW5nZS10cmFja3MtbWVkaWEtc3RyZWFtLWJlaW5nLXBsYXll
ZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy90
aGlyZC1wYXJ0eS1mcmFtZS1pY2UtY2FuZGlkYXRlLWZpbHRlcmluZy5odG1sIFsgRmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vi
cnRjLWV4dGVuc2lvbnMvUlRDUnRwUGFyYW1ldGVycy1tYXhGcmFtZXJhdGUuaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnJ0Yy1leHRlbnNpb25zL1JUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZS1jYXB0dXJlVGlt
ZXN0YW1wLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtcHJpb3JpdHkvUlRDUnRwUGFyYW1ldGVycy1lbmNv
ZGluZ3MuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbnNwZWN0b3IvcGFn
ZS9vdmVycmlkZVNldHRpbmctSUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZC5odG1sIFsgVGlt
ZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvbWVkaWEtY2FwYWJpbGl0aWVzL2RlY29kaW5nSW5mby53ZWJydGMuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21l
ZGlhLWNhcGFiaWxpdGllcy9lbmNvZGluZ0luZm8ud2VicnRjLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2FkZFRyYW5zY2VpdmVyLXRoZW4tYWRkVHJhY2suaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tbXV0ZWQtc3Rh
dHMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVl
ci1jb25uZWN0aW9uLWc3MjIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0aW9uLXdlYmF1ZGlvLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2F1ZGlvLXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tc2FtcGxlcmF0ZS1jaGFuZ2Uu
aHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2F1ZGlvLXZpZGVvLWVs
ZW1lbnQtcGxheWluZy5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy9jYW5kaWRhdGUtc3RhdHMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvY2FudmFzLXRvLXBlZXItY29ubmVjdGlvbi5odG1sIFsgVGltZW91dCBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IHdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy5odG1sIFsgRmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jbG9uZS1hdWRpby10cmFjay5odG1sIFsgVGlt
ZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jbG9zaW5nLXBlZXJjb25uZWN0aW9u
Lmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2RpcmVjdGlvbi1j
aGFuZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGlzYWJs
ZS1lbmNyeXB0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L2VwaGVtZXJhbC1jZXJ0aWZpY2F0ZXMtYW5kLWNuYW1lcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9maWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1hZnRlci1yZWxv
YWQuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvaDI2NC1wYWNr
ZXRpemF0aW9uLW1vZGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJy
dGMvbGlid2VicnRjL3NldExvY2FsRGVzY3JpcHRpb25DcmFzaC5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9tdWx0aS12aWRlby5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9uby1wb3J0LXplcm8taW4tdXBkLWNhbmRpZGF0ZXMu
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0
aW9uLWF1ZGlvLW11dGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJy
dGMvcGVlci1jb25uZWN0aW9uLWF1ZGlvLW11dGUyLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi1hdWRpby11bm11dGUuaHRtbCBbIFRp
bWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLWNyZWF0
ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLXJlbW90ZS1hdWRpby1tdXRlLmh0bWwgWyBUaW1l
b3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUt
YXVkaW8tbXV0ZTIuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMv
cGVlci1jb25uZWN0aW9uLXRyYWNrLWVuZC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IHdlYnJ0Yy9wZWVyY29ubmVjdGlvbi1wYWdlLWNhY2hlLWxvbmcuaHRtbCBbIFRpbWVv
dXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlcmNvbm5lY3Rpb24tcGFnZS1jYWNo
ZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZWNlaXZlci10
cmFjay1zaG91bGQtc3RheS1saXZlLWV2ZW4taWYtcmVjZWl2ZXItaXMtaW5hY3RpdmUuaHRtbCBb
IFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcmVsZWFzZS1hZnRlci1nZXR0
aW5nLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3Jl
bW90ZUF1ZGlvLW5ldmVyLXBsYXllZC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy9yZW1vdmUtdHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvdXRmOC1zZHAuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSB3ZWJydGMvdmlkZW8tYWRkVHJhbnNjZWl2ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tYXV0b3BsYXkuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tZ2V0UGFyYW1ldGVycy5odG1sIFsgRmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1tZWRpYXN0cmVhbXRyYWNrLXN0YXRz
Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW11dGUt
dnA4Lmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW11
dGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVj
ZWl2ZXJzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVv
LXJlcGxhY2UtdHJhY2stdG8tbnVsbC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy92aWRlby1yZXBsYWNlLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXVubXV0ZS5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tdnA4LXZpZGVvcmFuZ2UuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdnA4LXRoZW4taDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92cDktc3ZjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL3ZwOS5odG1sIFsgRmFpbHVyZSBdCisKICMvLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vCiAjIEVuZCBvZiBHU3RyZWFtZXItcmVsYXRlZCBidWdzCiAjLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTQxNiwxNCArMTUwNSwxNCBAQCB3ZWJr
aXQub3JnL2IvNzkyMDMgd2Via2l0Lm9yZy9iLzE4NjY3OCBmYXN0L21lZGlhc3RyZWFtL01lZGlh
U3RyZWFtLXZpZGVvLWVsZW1lbgogCiBmYXN0L21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy1hZGRF
dmVudExpc3RlbmVyLmh0bWwgWyBEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgXQogCi13ZWJraXQu
b3JnL2IvMTkxMDA2IHdlYnJ0Yy9zaW11bGNhc3QtaDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMTkxMDA2IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3NpbXVsY2FzdC1oMjY0
Lmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQogCiB3ZWJraXQub3JnL2IvMTkzNjQxIHdlYnJ0Yy92
aWRlby1zZXREaXJlY3Rpb24uaHRtbCBbIEZhaWx1cmUgUGFzcyBdCiAKIHdlYmtpdC5vcmcvYi8x
OTQ2MTEgaHR0cC93cHQvd2VicnRjL2dldFVzZXJNZWRpYS1wcm9jZXNzU3dhcHBpbmcuaHRtbCBb
IEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMjAxMjY3IFsgUmVsZWFzZSBdIHdlYnJ0Yy92aWRl
by1oMjY0Lmh0bWwgWyBUaW1lb3V0IEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzIyMjU4NSBbIERl
YnVnIF0gd2VicnRjL3ZpZGVvLWgyNjQuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMjI1
ODUgd2Via2l0Lm9yZy9iLzIzNTg4NSBbIERlYnVnIF0gd2VicnRjL3ZpZGVvLWgyNjQuaHRtbCBb
IENyYXNoIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMjEwMjcyIHdlYnJ0Yy9kYXRhY2hhbm5l
bC9tdWx0aXBsZS1jb25uZWN0aW9ucy5odG1sIFsgVGltZW91dCBQYXNzIF0KIApAQCAtMTQzNCw3
ICsxNTIzLDcgQEAgd2Via2l0Lm9yZy9iLzIxNTAwNyBbIERlYnVnIF0gd2VicnRjL2gyNjQtaGln
aC5odG1sIFsgU2xvdyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIxNjUzOCB3ZWJydGMvY2Fw
dHVyZUNhbnZhcy13ZWJydGMtc29mdHdhcmUtaDI2NC1iYXNlbGluZS5odG1sIFsgU2xvdyBGYWls
dXJlIF0KIAotd2Via2l0Lm9yZy9iLzIxNjc2MyB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMt
c29mdHdhcmUtaDI2NC1oaWdoLmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8y
MTY3NjMgd2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMtc29m
dHdhcmUtaDI2NC1oaWdoLmh0bWwgWyBDcmFzaCBGYWlsdXJlIFRpbWVvdXQgXQogCiB3ZWJraXQu
b3JnL2IvMjE4MjIxIHdlYnJ0Yy92cDktcHJvZmlsZTIuaHRtbCBbIFRpbWVvdXQgRmFpbHVyZSBd
CiAKQEAgLTIyMjUsMTMgKzIzMTQsMTMgQEAgd2Via2l0Lm9yZy9iLzE4NjEwMCBjc3MzL2NvbG9y
LWZpbHRlcnMvY29sb3ItZmlsdGVyLWNvbG9yLXByb3BlcnR5LWxpc3QtaXRlbS5odG0KIHdlYmtp
dC5vcmcvYi8xODYxMDAgZmFzdC9oaWRwaS9maWx0ZXJzLXR1cmJ1bGVuY2UuaHRtbCBbIEltYWdl
T25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE4NzA0NCB3ZWJhbmltYXRpb25zL29wYWNpdHkt
YW5pbWF0aW9uLXlpZWxkcy1jb21wb3NpdGluZy1zcGFuLmh0bWwgWyBGYWlsdXJlIF0KIAotd2Vi
a2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvZGF0YWNoYW5uZWwvbWRucy1pY2UtY2FuZGlkYXRlcy5o
dG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL2RhdGFjaGFubmVsL21kbnMtaWNlLWNhbmRpZGF0ZXMuaHRtbCBbIFRpbWVvdXQgRmFp
bHVyZSBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1hZGRUcmFjay5odG1sIFsg
RmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1kaXNhYmxlZC1ibGFj
ay5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcmVtb3Rl
LW11dGUuaHRtbCBbIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJl
cGxhY2UtbXV0ZWQtdHJhY2suaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzE4NzA2NCB3
ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1yZXBsYWNlLW11dGVkLXRyYWNrLmh0bWwg
WyBUaW1lb3V0IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy92aWRlby1kaXNhYmxlZC1ibGFjay5odG1sIFsgQ3Jhc2ggVGltZW91dCBdCit3
ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlbW90
ZS1tdXRlLmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRj
L3ZpZGVvLXJvdGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2Vi
cnRjL3ZpZGVvLXJvdGF0aW9uLW5vLWN2by5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJvdGF0aW9uLW5vLWN2by5o
dG1sIFsgRmFpbHVyZSBDcmFzaCBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby13
aXRoLWRhdGEtY2hhbm5lbC5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWdl
dFN0YXRzLmh0dHBzLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQogCkBAIC0yNTI2LDcgKzI2MTUsNyBA
QCBtZWRpYS92aWRlby1yZW1vdGUtY29udHJvbC1wbGF5cGF1c2UuaHRtbCBbIFNraXAgXQogCiB3
ZWJraXQub3JnL2IvMjA3MDYyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEt
c291cmNlL21lZGlhc291cmNlLXJlcGxheS5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAotd2Via2l0
Lm9yZy9iLzIyOTM0NiB3ZWJydGMvbXVsdGktYXVkaW8uaHRtbCBbIFRpbWVvdXQgUGFzcyBdCit3
ZWJraXQub3JnL2IvMjI5MzQ2IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL211bHRpLWF1ZGlv
Lmh0bWwgWyBUaW1lb3V0IFBhc3MgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMjk3MTUgWyBE
ZWJ1ZyBdIGZhc3QvbWVkaWFzdHJlYW0vZ2V0RGlzcGxheU1lZGlhLW1heC1jb25zdHJhaW50czMu
aHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzIyOTcxNSBbIERlYnVnIF0gZmFzdC9tZWRp
YXN0cmVhbS9zY3JlZW5jYXB0dXJlLXVzZXItZ2VzdHVyZS5odG1sIFsgVGltZW91dCBdCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNj
cmlwdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk1YTliNjE5MDA5YTc0MzJhMTI5MzZh
N2M2YTgxODkwODRkMmM3ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9u
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE5IEBACitUZXN0cyBSVENQZWVyQ29ubmVjdGlvbiBs
b2NhbERlc2NyaXB0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2Yg
IlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBw
Yy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3Vj
Y2VlZGVkMSwgcmVxdWVzdEZhaWxlZDEpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mg
cmVxdWVzdFN1Y2NlZWRlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9u
KHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgcmVxdWVzdEZhaWxl
ZDIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdEZhaWxlZCB3YXMgY2Fs
bGVkLgorUEFTUyBwYy5sb2NhbERlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5s
b2NhbERlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgbG9jYWwuIFdhcyB0PTAgMAorLgorUEFTUyBw
Yy5sb2NhbERlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0
aW9uLnNkcCBzaG91bGQgYmUgbG9jYWwuIFdhcyB0PTAgMAorLgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVE
ZXNjcmlwdGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3RlRGVzY3JpcHRpb24tZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjlkNTNlYzVjMjE2MGQwMzI3M2MxOTgxZjhlZDlmYTE4Mzg0ZmQwNzUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3RlRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsMTkgQEAKK1Rlc3RzIFJUQ1BlZXJDb25uZWN0aW9uIHJlbW90ZURlc2NyaXB0aW9u
LgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2Vz
LCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBwYy5zZXRSZW1vdGVEZXNj
cmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDEsIHJlcXVl
c3RGYWlsZWQxKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHJlcXVlc3RTdWNjZWVk
ZWQgd2FzIGNhbGxlZC4KK1BBU1MgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2Ny
aXB0aW9uKS50aGVuKHJlcXVlc3RTdWNjZWVkZWQyLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLgorUEFTUyByZXF1ZXN0RmFpbGVkIHdhcyBjYWxsZWQuCitQQVNTIHBj
LnJlbW90ZURlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5yZW1vdGVEZXNjcmlw
dGlvbi5zZHAgc2hvdWxkIGJlIHJlbW90ZS4gV2FzIHQ9MCAwCisuCitQQVNTIHBjLnJlbW90ZURl
c2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbi5zZHAg
c2hvdWxkIGJlIHJlbW90ZS4gV2FzIHQ9MCAwCisuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBp
cyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2Ny
aXB0aW9uLW9mZmVyLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZl
ci1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmNjNDE4MTBiOGRlMTkxZGRlZTU5YTBlYzU5YzM1
MTk5MWJlN2ZiYgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIv
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1v
ZmZlci1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwzOSBAQAorVGVzdCBSVENQZWVyQ29ubmVjdGlv
bi5zZXRSZW1vdGVEZXNjcmlwdGlvbiBjYWxsZWQgd2l0aCBhbiBSVENTZXNzaW9uRGVzY3JpcHRp
b24gb2YgdHlwZSAnb2ZmZXInCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBv
ZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCisqKiog
Q3JlYXRlIChyZW1vdGUpIG9mZmVyIHdpdGggYXVkaW8gKHJlbW90ZU9mZmVyMSkKKyoqKiBEb25l
LCBzdGFydCB0ZXN0aW5nIHdpdGggcmVtb3RlT2ZmZXIxCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRl
IGlzICdzdGFibGUnCitQQVNTIHBjLnJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGMu
cGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGMuY3VycmVudFJlbW90ZURl
c2NyaXB0aW9uIGlzIG51bGwKKworUEFTUyByZW1vdGVPZmZlcjEgc2V0IGFzIHJlbW90ZSBkZXNj
cmlwdGlvbgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1vdGUtb2ZmZXInCitG
QUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCBiZSBbb2JqZWN0IE9iamVjdF0uIFdhcyBb
b2JqZWN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbl0uCitGQUlMIHBjLnBlbmRpbmdSZW1vdGVEZXNj
cmlwdGlvbiBzaG91bGQgYmUgW29iamVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9u
RGVzY3JpcHRpb25dLgorUEFTUyBwYy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAor
CitQQVNTIHJlbW90ZU9mZmVyMSBzZXQgYXMgcmVtb3RlIGRlc2NyaXB0aW9uIChhZ2FpbikKK1BB
U1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9mZmVyJworCisqKiogVHJ5IHNl
dHRpbmcgbG9jYWwgZGVzY3JpcHRpb25zIHdpdGggYmFkIHR5cGVzIGZvciB0aGUgY3VycmVudCBz
dGF0ZQorUEFTUyBwcm9taXNlIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHt0eXBlOidhbnN3ZXIn
LCBzZHA6cmVtb3RlT2ZmZXIxLnNkcH0pOyByZWplY3RlZCB3aXRoIE9wZXJhdGlvbkVycm9yOiBV
bmFibGUgdG8gYXBwbHkgc2Vzc2lvbiByZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcHJvbWlzZSBw
Yy5zZXRSZW1vdGVEZXNjcmlwdGlvbih7dHlwZToncHJhbnN3ZXInLCBzZHA6cmVtb3RlT2ZmZXIx
LnNkcH0pOyByZWplY3RlZCB3aXRoIE9wZXJhdGlvbkVycm9yOiBVbmFibGUgdG8gYXBwbHkgc2Vz
c2lvbiByZW1vdGUgZGVzY3JpcHRpb24KKworKioqIENyZWF0ZSAocmVtb3RlKSBvZmZlciB3aXRo
IHZpZGVvIChyZW1vdGVPZmZlcjIpCisqKiogRG9uZSwgc3RhcnQgdGVzdGluZyB3aXRoIHJlbW90
ZU9mZmVyMgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1vdGUtb2ZmZXInCisK
K1BBU1MgcmVtb3RlT2ZmZXIyIHNldCBhcyByZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcGMuc2ln
bmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9mZmVyJworRkFJTCBwYy5yZW1vdGVEZXNjcmlw
dGlvbiBzaG91bGQgYmUgW29iamVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVz
Y3JpcHRpb25dLgorRkFJTCBwYy5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIGJlIFtv
YmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uXS4KK1BBU1Mg
cGMuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKKworUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUt
ZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLXN0YWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzAxNjZk
Y2E1NjNlY2U0N2Y0OGMwNzIyY2MwODdhM2UyZjk2NmM0ZQotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1zdGFibGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNTEgQEAKK1Rlc3RzIFJUQ1BlZXJDb25u
ZWN0aW9uIGluIHN0YWJsZSBzdGF0ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMuc2V0TG9jYWxEZXNj
cmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVl
c3RGYWlsZWQxKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldExvY2FsRGVzY3Jp
cHRpb24gZmFpbGVkLgorRkFJTCBlcnJvclJlYXNvbi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vz
c2lvbkRlc2NyaXB0aW9uRXJyb3IuIFdhcyBPcGVyYXRpb25FcnJvci4KK0ZBSUwgcGMubG9jYWxE
ZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMu
cmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQ
QVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldExvY2FsRGVzY3Jp
cHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZpbmlzaElmU3VjY2VlZGVkLCByZXF1ZXN0
RmFpbGVkMik7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRMb2NhbERlc2NyaXB0
aW9uIGZhaWxlZC4KK0ZBSUwgZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Np
b25EZXNjcmlwdGlvbkVycm9yLiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVz
Y3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJl
bW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFT
UyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlw
dGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RG
YWlsZWQzKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0
aW9uIGZhaWxlZC4KK0ZBSUwgZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Np
b25EZXNjcmlwdGlvbkVycm9yLiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVz
Y3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJl
bW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFT
UyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlw
dGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RG
YWlsZWQ0KTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0
aW9uIGZhaWxlZC4KK0ZBSUwgZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Np
b25EZXNjcmlwdGlvbkVycm9yLiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVz
Y3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJl
bW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFT
UyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0
aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgZmluaXNoSWZG
YWlsZWQpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0TG9jYWxEZXNjcmlwdGlv
biBzdWNjZWVkZWQuCitQQVNTIHBjLmxvY2FsRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitG
QUlMIHBjLmxvY2FsRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSBsb2NhbC4gV2FzIHQ9MCAwCisu
CitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdh
cyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1sb2NhbC1vZmZlciIKK0ZB
SUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVs
bC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4g
V2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNl
dFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2Vl
ZGVkMiwgZmluaXNoSWZGYWlsZWQpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0
UmVtb3RlRGVzY3JpcHRpb24gc3VjY2VlZGVkLgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNo
b3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5yZW1vdGVEZXNjcmlw
dGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24uc2RwIHNob3Vs
ZCBiZSByZW1vdGUuIFdhcyB0PTAgMAorLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAiaGF2
ZS1yZW1vdGUtb2ZmZXIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1Qg
Q09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGM2NmU1
ZDA0ZGFmNTcxODhhOTc3MjkyYzk4MTMzOWUyNWM3OTAwZWUuLjJiODliNmEwM2VhNDRiYTUyZGYw
YzhjMDA5MjNmMzlhZmZjNTliY2UgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VM
b2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3Jt
YW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2Yg
dGhlIEdzdFdlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD0yMzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBFbmFibGUgR3N0V2ViUlRDIGJ5IGRlZmF1bHQgaWYgYSByZWNlbnQtZW5v
dWdoICg+PSAxLjIwKSB2ZXJzaW9uIGlzIGF2YWlsYWJsZS4KKworICAgICAgICAqIFNvdXJjZS9j
bWFrZS9GaW5kR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFt
ZXJDaGVja3MuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRp
b25zLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMu
Y21ha2U6CisKIDIwMjItMDItMTcgIENvbW1pdCBRdWV1ZSAgPGNvbW1pdC1xdWV1ZUB3ZWJraXQu
b3JnPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjg5OTQ5Lgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452632</attachid>
            <date>2022-02-19 01:34:31 -0800</date>
            <delta_ts>2022-02-19 03:12:18 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220219013429.patch</filename>
            <type>text/plain</type>
            <size>327598</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMTMzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDJlMmI5YWU2MjQ5YWMyM2U3YjEzZGRj
ZmUxODY3MzJjYjI3YWQyMTMuLmMyMTRkZDNhZWMyN2U4MmJkM2U3MjY4NjcxOGFjY2Q5MGVjNzQ3
ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAyLTE3ICBNYXR0IFdvb2Ryb3cgIDxtYXR0
d29vZHJvd0BhcHBsZS5jb20+CiAKICAgICAgICAgRW5hYmxlIHN1YmdyaWQgYnkgZGVmYXVsdC4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCAzMTYwZDA5M2RjMzE3NzRmNTMzMTNjMTY0NWQ1YmI5OGE4N2M0YTQwLi4w
MDYzMzY4ZjVhMzZlYzJkYTIzZDg2NWFiY2RjZDg0YTNhYjdhY2VjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzc0IEBACisyMDIyLTAyLTEyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdh
bGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBJbml0aWFsIGltcG9ydCBvZiB0aGUgR3N0
V2ViUlRDIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcu
Y2dpP2lkPTIzNjU0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisg
ICAgICAgIEluaXRpYWwgR3N0V2ViUlRDIGJhY2tlbmQuIEEgbG90IG9mIGZlYXR1cmVzIHVuaW1w
bGVtZW50ZWQgc3RpbGwsIGJ1dCB3ZSB3aWxsIGluY3JlbWVudGFsbHkKKyAgICAgICAgaW1wcm92
ZSB0aGUgbGF5b3V0IHRlc3QgY292ZXJhZ2UgaW4gZm9sbG93LXVwIHBhdGNoZXMuIE1vc3Qgbm90
YWJsZSBzaG9ydC1jb21pbmdzIGN1cnJlbnRseToKKworICAgICAgICAtIERhdGFDaGFubmVsIHN1
cHBvcnQgaXMgaW5jb21wbGV0ZSAoYnVnIDIzNTg3OSkKKyAgICAgICAgLSBOZXR3b3JrIHRyYWZm
aWMgbm90IHJvdXRlZCB0aHJvdWdoIE5ldHdvcmsgcHJvY2VzcyB5ZXQKKyAgICAgICAgLSBTdGF0
cyBzdXBwb3J0IGluY29tcGxldGUKKyAgICAgICAgLSBEVE1GIHN1cHBvcnQgdW5pbXBsZW1lbnRl
ZAorICAgICAgICAtIElDRSByZXN0YXJ0cyBub3Qgc3VwcG9ydGVkIHlldAorICAgICAgICAtIFJl
LW5lZ290aWF0aW9uIHVubGlrZWx5IHRvIHdvcmsKKyAgICAgICAgLSBTaW11bGNhc3Qgbm90IGhh
bmRsZWQgeWV0CisgICAgICAgIC0gQmFsYW5jZWQgYnVuZGxlIG5vdCBzdXBwb3J0ZWQKKyAgICAg
ICAgLSBSVFggYW5kIEZFQyB1bi10ZXN0ZWQsIGJ1dCBzaG91bGRuJ3QgYmUgaGFyZCB0byBmaXgK
KworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcDoKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdlbmVyYXRlQ2VydGlmaWNhdGUp
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZSk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6OmZyb21SVENEYXRhQ2hhbm5lbEluaXQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyOjpjaGFubmVsRXZlbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjp+R1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFu
bmVsSGFuZGxlcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6c2VuZFN0cmluZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kUmF3RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2hlY2tTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnJlYWR5U3RhdGVDaGFuZ2VkKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlRGF0YSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uTWVzc2Fn
ZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6
Om9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
OjpvbkJ1ZmZlcmVkQW1vdW50TG93KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6cG9zdFRhc2spOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oOiBBZGRlZC4KKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFj
a2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQ6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQ6OmljZVRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFu
c3BvcnRCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZDo6fkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0Q2hhbmdlZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp1bnJl
Z2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJh
Y2tlbmQ6OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFu
c3BvcnRCYWNrZW5kOjpnYXRoZXJpbmdTdGF0ZUNoYW5nZWQpOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVk
aWFFbmRwb2ludC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWFsaXplUGlwZWxpbmUpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6fkdTdHJlYW1lck1lZGlhRW5kcG9pbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dGVhcmRvd25QaXBlbGluZSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpoYW5kbGVNZXNzYWdl
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRpc3Bvc2VFbGVt
ZW50Q2hhaW4pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0
Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpyZXN0YXJ0SWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmZldGNoRGVzY3JpcHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6ZmV0Y2hTaWduYWxpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpk
ZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb1NldFJlbW90ZURlc2Ny
aXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNldERlc2NyaXB0aW9uQ2FsbERhdGE6OlNldERl
c2NyaXB0aW9uQ2FsbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6c2V0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6c3RvcmVSZW1vdGVNTGluZUluZm8pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6Y29uZmlndXJlQW5kTGlua1NvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXF1ZXN0UGFkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlT2ZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVBbnN3ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aW5pdGlhdGUpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2V0U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6bWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFJlbW90ZVN0cmVhbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVSZW1vdGVTdHJl
YW0pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlVHJh
bnNjZWl2ZXJCYWNrZW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjphZGRUcmFuc2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpjcmVhdGVTb3VyY2VGb3JUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNlbmRl
cik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRJY2VDYW5k
aWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRl
RGF0YUNoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
b25EYXRhQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9w
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN1c3BlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVzdW1lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uTmVnb3RpYXRpb25OZWVkZWQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDb25uZWN0
aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9u
SWNlR2F0aGVyaW5nQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6Om9uSWNlQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvblN1Y2NlZWRlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25G
YWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y29sbGVj
dFRyYW5zY2VpdmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpnYXRoZXJTdGF0c0ZvckxvZ2dpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UlRDU3RhdHNMb2dn
ZXI6OlJUQ1N0YXRzTG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyOjp0
b0pTT05TdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6cHJvY2Vzc1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6Om9uU3RhdHNEZWxpdmVyZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6c3RhcnRMb2dnaW5nU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6c3RvcExvZ2dpbmdTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpsb2dDaGFubmVsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0YXRzTG9nSW50ZXJ2YWwgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyRGVjb2RlckltcGxl
bWVudGF0aW9uTmFtZSk6CisgICAgICAgIChXVEY6OkxvZ0FyZ3VtZW50PFdlYkNvcmU6OlJUQ1N0
YXRzTG9nZ2VyPjo6dG9TdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6aXNTdG9wcGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmlzTmVnb3RpYXRpb25OZWVkZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cGlwZWxpbmUgY29uc3QpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6Y3JlYXRlR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uQmFja2VuZDo6cmVjZWl2ZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpzZW5kZXJDYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6cmVzdGFydEljZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OnNldENvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyk6CisgICAgICAgIChXZWJD
b3JlOjpiYWNrZW5kRnJvbVJUUFNlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0UmVtb3RlRGVzY3Jp
cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
Ojpkb0NyZWF0ZU9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6ZG9DcmVhdGVBbnN3ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVh
dGVEYXRhQ2hhbm5lbEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6ZmluZEV4aXN0aW5nU2Vu
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
YWRkVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjphZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2VpdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0U2VuZGVyU291cmNl
RnJvbVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmJhY2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpleGlz
dGluZ1RyYW5zY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6bmV3UmVtb3RlVHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJhbnNjZWl2ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVtb3ZlVHJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphcHBs
eVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25O
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
aXNOZWdvdGlhdGlvbk5lZWRlZCBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmg6IEFkZGVkLgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVy
QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0
cFJlY2VpdmVyQmFja2VuZDo6Z2V0Q29udHJpYnV0aW5nU291cmNlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFN5bmNocm9uaXphdGlv
blNvdXJjZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kOjpjcmVhdGVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVy
QmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Om1lZGlhVHlwZUZyb21SZWNlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFJlY2VpdmVy
VHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZl
clRyYW5zZm9ybUJhY2tlbmQ6On5HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5k
OjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJU
cmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OnVwZGF0ZVRyYWNrU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ6OnN0YXJ0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0b3BTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6cmVwbGFjZVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c2V0UGFyYW1ldGVycyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpjcmVhdGVEVE1GQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpydGNS
dHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ6OnNldE1lZGlhU3RyZWFtSWRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmg6IEFk
ZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0
cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1l
ZGlhVHlwZUZyb21TZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVy
VHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0
cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxs
YmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNr
ZW5kOjpyZXF1ZXN0S2V5RnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQ6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVJlY2VpdmVy
QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ6OmNyZWF0ZVNlbmRlckJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRw
VHJhbnNjZWl2ZXJCYWNrZW5kOjpkaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjdXJyZW50RGlyZWN0aW9uIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c2V0RGly
ZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZDo6bWlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZDo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ6OnN0b3BwZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kOjpzZXRDb2RlY1ByZWZlcmVuY2VzKToKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaDogQWRk
ZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRw
VHJhbnNmb3JtQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UnRwVHJhbnNmb3JtQmFja2VuZDo6c2V0SW5wdXRDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpjbGVhclRyYW5zZm9ybWFibGVGcmFtZUNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6
OnByb2Nlc3NUcmFuc2Zvcm1lZEZyYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJh
bnNmb3JtQmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OnRvUlRDU2N0cFRyYW5zcG9ydFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBU
cmFuc3BvcnRCYWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnN0
YXRlQ2hhbmdlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxs
UlRDUlRQU3RyZWFtU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJUQ0NvZGVjU3RhdHMp
OgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEluYm91bmRSVFBTdHJlYW1TdGF0cyk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsT3V0Ym91bmRSVFBTdHJlYW1TdGF0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpmaWxsUlRDUGVlckNvbm5lY3Rpb25TdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUlRD
VHJhbnNwb3J0U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJlcG9ydENhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkNhbGxiYWNrSG9sZGVyOjpDYWxsYmFja0hvbGRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Z2V0U3RhdHMpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9y
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OmNy
ZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6c2V0RWxl
bWVudCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
V2ViUlRDVXRpbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlQ29tcG9u
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlUHJvdG9jb2wpOgorICAgICAgICAoV2Vi
Q29yZTo6dG9SVENJY2VUY3BDYW5kaWRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRD
SWNlQ2FuZGlkYXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0Vycm9yKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvV2ViUlRDQml0UmF0ZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6
OmZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVdlYlJU
Q0JpdFJhdGVQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0VuY29kaW5nUGFyYW1l
dGVycyk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCk6CisgICAgICAgIChX
ZWJDb3JlOjpwYXJzZUljZUNhbmRpZGF0ZVNEUCk6CisgICAgICAgIChXZWJDb3JlOjp4NTA5U2Vy
aWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnByaXZhdGVLZXlTZXJpYWxpemUpOgorICAgICAg
ICAoV2ViQ29yZTo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZSk6CisgICAgICAgIChXZWJDb3JlOjpzZHBN
ZWRpYUhhc0F0dHJpYnV0ZUtleSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0
b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmZyb21SVENS
dHBUcmFuc2NlaXZlckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0b1Nlc3Npb25EZXNj
cmlwdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9TaWduYWxpbmdTdGF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjp0b1JUQ0ljZUNvbm5lY3Rpb25TdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0R0
bHNUcmFuc3BvcnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZVRyYW5zcG9ydFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlR2F0aGVyaW5nU3RhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6YnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6aWNlVHJhbnNwb3J0UG9saWN5RnJvbUNvbmZpZ3VyYXRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6dG9SVENFcnJvckRldGFpbFR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL0dTdHJlYW1l
ci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3Zp
ZGVyR1N0cmVhbWVyOjpBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6On5BdWRpb1NvdXJjZVByb3ZpZGVy
R1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFt
ZXI6OmhhbmRsZU5ld0RlaW50ZXJsZWF2ZVBhZCk6CisgICAgICAgICogcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaDoKKyAgICAgICAgKiBw
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHA6CisgICAgICAg
IChXVEY6OmFkb3B0R1JlZik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDUlRQUmVj
ZWl2ZXI+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPik6
CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPik6CisgICAgICAgIChX
VEY6OmRlcmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KToKKyAgICAgICAgKFdURjo6cmVmR1B0
cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0
V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENE
YXRhQ2hhbm5lbD4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5u
ZWw+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0Pik6Cisg
ICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0Pik6CisgICAgICAg
IChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0Pik6CisgICAgICAgIChXVEY6OmRl
cmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6
Y2Fwc01lZGlhVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dV
bmlxdWVQdHJHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZTo6Y3JlYXRlQXVkaW9Tb3VyY2VQcm92aWRlcik6CisgICAgICAgICogcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0
dXJlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpjcmVhdGVD
b252ZXJ0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDYXB0dXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJDYXB0dXJlcjo6
Y3JlYXRlU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6fkdTdHJlYW1l
ckRUTUZTZW5kZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5k
ZXJCYWNrZW5kOjpjYW5JbnNlcnREVE1GKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRU
TUZTZW5kZXJCYWNrZW5kOjpwbGF5VG9uZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJE
VE1GU2VuZGVyQmFja2VuZDo6dG9uZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyRFRNRlNlbmRlckJhY2tlbmQ6OmR1cmF0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjppbnRlclRvbmVHYXAgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6Om9uVG9uZVBsYXllZCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5k
ZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHA6CisgICAgICAgICh3ZWJraXRNZWRp
YVN0cmVhbVNyY0FkZFRyYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcDoKKyAgICAgICAgKHdlYmtpdF93ZWJydGNf
dmlkZW9fZW5jb2Rlcl9jbGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXI6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6On5SZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzdGFydFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzdG9wUHJvZHVj
aW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI6OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5n
U291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmxvY2tW
YWx2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyOjpyZWxlYXNlVmFsdmUgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJl
YW1lcjo6YmluKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6
OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXI6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXR0aW5n
c0RpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmg6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyOjpjcmVhdGUpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxv
YWRUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6
flJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFNvdXJjZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0YXJ0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1l
cjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXI6OnNvdXJjZU11dGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6aW5p
dGlhbGl6ZUZyb21UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXI6OmxpbmspOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRn
b2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTaW5rUGFkKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291
cmNlR1N0cmVhbWVyOjpzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjphbGxvd2VkQ2FwcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnBhZCBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXI6OnNlbmRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXI6OmJpbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgor
ICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5h
bHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6
c2V0V2ViUlRDVlA5U3VwcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFdl
YlJUQ1ZQOVZUQlN1cHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRFbmFi
bGVXZWJSVENFbmNyeXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0VXNl
RFRMUzEwKToKKwogMjAyMi0wMi0xOCAgUGVuZyBMaXUgIDxwZW5nLmxpdTZAYXBwbGUuY29tPgog
CiAgICAgICAgIFtpT1NdW01vZGVybiBNZWRpYSBDb250cm9sc10gQWRkIGFuIGFsdGVybmF0aXZl
IG92ZXJmbG93IGljb24KZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNl
cy9XZWJQcmVmZXJlbmNlcy55YW1sIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dl
YlByZWZlcmVuY2VzLnlhbWwKaW5kZXggNGFhNjdhMzEyOTgwNGRhOWZmOGU2YTQ0OTQ1OTZjNDY2
MWZmOWUxNi4uYjY2Yzc0MGU4MDcyY2M1OWM1YmEyN2M1ZWU0MzM2NDE2ZjlmMWNmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlhbWwK
KysrIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlhbWwK
QEAgLTE3MjIsNyArMTcyMiw5IEBAIFBlZXJDb25uZWN0aW9uRW5hYmxlZDoKICAgICBXZWJLaXRM
ZWdhY3k6CiAgICAgICBkZWZhdWx0OiB0cnVlCiAgICAgV2ViS2l0OgotICAgICAgZGVmYXVsdDog
V2ViQ29yZTo6TGliV2ViUlRDUHJvdmlkZXI6OndlYlJUQ0F2YWlsYWJsZSgpCisgICAgICAiVVNF
KExJQldFQlJUQykiOiBXZWJDb3JlOjpMaWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxl
KCkKKyAgICAgICJVU0UoR1NUUkVBTUVSX1dFQlJUQykiOiB0cnVlCisgICAgICBkZWZhdWx0OiBm
YWxzZQogICAgIFdlYkNvcmU6CiAgICAgICBkZWZhdWx0OiB0cnVlCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55
YW1sIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJp
bWVudGFsLnlhbWwKaW5kZXggMmQyYzJiMzlkNjZlMmZjOWY3OGJkYmE0NTBkOTg4ZTI2MjZlMzc4
Yy4uZWJhYjE3M2E4MzNlNWEwZDY1ZGE4NGFlYTc2ZDZiZmE1ZGE1NzYxNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFs
LnlhbWwKKysrIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2Vz
RXhwZXJpbWVudGFsLnlhbWwKQEAgLTE2ODMsOSArMTY4MywxMSBAQCBXZWJSVENFbmNvZGVkVHJh
bnNmb3JtRW5hYmxlZDoKICAgICBXZWJLaXRMZWdhY3k6CiAgICAgICBkZWZhdWx0OiBmYWxzZQog
ICAgIFdlYktpdDoKLSAgICAgIGRlZmF1bHQ6IHRydWUKKyAgICAgICJVU0UoTElCV0VCUlRDKSI6
IHRydWUKKyAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgV2ViQ29yZToKLSAgICAgIGRlZmF1bHQ6
IHRydWUKKyAgICAgICJVU0UoTElCV0VCUlRDKSI6IHRydWUKKyAgICAgIGRlZmF1bHQ6IGZhbHNl
CiAKICMgRklYTUU6IElzIHRoaXMgaW1wbGVtZW50ZWQgZm9yIFdlYktpdExlZ2FjeT8gSWYgbm90
LCB0aGlzIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIFdlYktpdExlZ2FjeSBlbnRpcmVseS4KIFdl
YlJUQ0gyNjRMb3dMYXRlbmN5RW5jb2RlckVuYWJsZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9nbGliL0dSZWZQdHIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNwcApp
bmRleCAxYjlhZGUzZjkzNmVlNTY0ZDM4MmMwN2VmOTY2NTc2YWI2NjE5YjQxLi45MzEyYTNlODk0
YmQ4YTBkN2ExMWE2YTQ1Y2NiZDM2ODczZjhjNTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0
Zi9nbGliL0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAK
QEAgLTIyMyw2ICsyMjMsMjIgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1VyaSogcHRy
KQogfQogI2VuZGlmCiAKK3RlbXBsYXRlIDw+CitHQXJyYXkqIHJlZkdQdHIoR0FycmF5KiBwdHIp
Cit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19hcnJheV9yZWYocHRyKTsKKworICAgIHJldHVy
biBwdHI7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIGRlcmVmR1B0cihHQXJyYXkqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnX2FycmF5X3VucmVmKHB0cik7Cit9CisKIH0gLy8gbmFt
ZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdMSUIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RG
L3d0Zi9nbGliL0dSZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCmluZGV4
IGU3MjFmZDU1ZjQyYWMzZDc2YjQwMTc2MGUwYTE5Yjk5ZmUzZTBmOGIuLjY2NzM2MDc4N2FjNWY2
NDk2MGJlMWQ1NDYyZGRlNTlkNzM1NWY2YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2ds
aWIvR1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCkBAIC0yNTAs
NiArMjUwLDggQEAgdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdEYXRlVGltZSogcmVm
R1B0cihHRGF0ZVRpbWUqIHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9p
ZCBkZXJlZkdQdHIoR0RhdGVUaW1lKiBwdHIpOwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklW
QVRFIEdEQnVzTm9kZUluZm8qIHJlZkdQdHIoR0RCdXNOb2RlSW5mbyogcHRyKTsKIHRlbXBsYXRl
IDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHREJ1c05vZGVJbmZvKiBwdHIp
OwordGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdBcnJheSogcmVmR1B0cihHQXJyYXkq
KTsKK3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHQXJyYXkq
KTsKIAogI2lmIEhBVkUoR1VSSSkKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHVXJp
KiByZWZHUHRyKEdVcmkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKaW5kZXggZGZiOWJk
YWM1NjZiNzk2NWJhYWNmZTBjZmVlNzA2MTQzOGIxOTViMi4uOGM3NDRmY2QxMzc3MDA2ZmJiOTA3
NjZlYmIzYmM0Yzg0ZThkY2NiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKQEAgLTE4
MCw3ICsxODAsNyBAQCBzdGF0aWMgdm9pZCBnYXRoZXJEZWNvZGluZ0luZm8oRG9jdW1lbnQmIGRv
Y3VtZW50LCBNZWRpYURlY29kaW5nQ29uZmlndXJhdGlvbiYmCiAgICAgY29uZmlndXJhdGlvbi5j
YW5FeHBvc2VWUDkgPSBkb2N1bWVudC5zZXR0aW5ncygpLnZwOURlY29kZXJFbmFibGVkKCk7CiAj
ZW5kaWYKIAotI2lmIEVOQUJMRShXRUJfUlRDKQorI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
TElCV0VCUlRDKQogICAgIGlmIChjb25maWd1cmF0aW9uLnR5cGUgPT0gTWVkaWFEZWNvZGluZ1R5
cGU6OldlYlJUQykgewogICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkK
ICAgICAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuY3JlYXRlRGVjb2RpbmdDb25m
aWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlvbiksIFdURk1vdmUoZGVjb2RpbmdDYWxsYmFj
aykpOwpAQCAtMjAwLDcgKzIwMCw3IEBAIHN0YXRpYyB2b2lkIGdhdGhlckVuY29kaW5nSW5mbyhE
b2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhRW5jb2RpbmdDb25maWd1cmF0aW9uJiYKICAgICAgICAg
Y2FsbGJhY2soV1RGTW92ZShyZXN1bHQpKTsKICAgICB9OwogCi0jaWYgRU5BQkxFKFdFQl9SVEMp
CisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGNvbmZpZ3Vy
YXRpb24udHlwZSA9PSBNZWRpYUVuY29kaW5nVHlwZTo6V2ViUlRDKSB7CiAgICAgICAgIGlmIChh
dXRvKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+bGliV2ViUlRD
UHJvdmlkZXIoKS5jcmVhdGVFbmNvZGluZ0NvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0
aW9uKSwgV1RGTW92ZShlbmNvZGluZ0NhbGxiYWNrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKaW5kZXggNTA2ZjMzNzRiN2U2
ZDc2ZDU5OGY0OTUzZDg0OWMzOGVhYWM3MjdlOS4uN2I5YjViNjZkYTUxNTMyNGU2NjZjZjRiMWJh
M2Y1Y2QyZmFlMGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYURldmljZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFEZXZpY2VzLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkZyYW1l
LmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU01lZGlh
RGV2aWNlSW5mby5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVRyYWNr
U3VwcG9ydGVkQ29uc3RyYWludHMuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3MuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCmlu
ZGV4IDg2ZDc1NzM5OTJmNGQ1YmQ0YzM1M2RjYjYwOTcyNjRlOTg1ZDU3ZTguLjBlNzAxYmZkNDdl
OTI4NGJhMTc4MTY0MWQ5MjI3YTNhZjg1OWQ1NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAK
QEAgLTUzLDkgKzUzLDE0IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgog
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCisjaWYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNl
bmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiAhVVNFKExJQldFQlJUQykKKyNpZiAh
VVNFKExJQldFQlJUQykgJiYgIVVTRShHU1RSRUFNRVJfV0VCUlRDKQorCiBzdGF0aWMgc3RkOjp1
bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3JlYXRlTm9QZWVyQ29ubmVjdGlvbkJh
Y2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mKQogewogICAgIHJldHVybiBudWxscHRyOwpAQCAtNDM3
LDEzICs0NDIsMTkgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdlbmVyYXRlQ2VydGlm
aWNhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBDZXJ0aWYKICAgICAgICAgcHJvbWlzZS5y
ZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCiAgICAg
TGliV2ViUlRDQ2VydGlmaWNhdGVHZW5lcmF0b3I6OmdlbmVyYXRlQ2VydGlmaWNhdGUoZG9jdW1l
bnQuc2VjdXJpdHlPcmlnaW4oKSwgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKSwgaW5mbywgW3By
b21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAg
ICAgcHJvbWlzZS5zZXR0bGUoV1RGTW92ZShyZXN1bHQpKTsKICAgICB9KTsKKyNlbGlmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQorICAgIGF1dG8gY2VydGlmaWNhdGUgPSA6OldlYkNvcmU6OmdlbmVy
YXRlQ2VydGlmaWNhdGUoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwgaW5mbyk7CisgICAgaWYg
KGNlcnRpZmljYXRlLmhhc192YWx1ZSgpKQorICAgICAgICBwcm9taXNlLnJlc29sdmUoKmNlcnRp
ZmljYXRlKTsKKyAgICBlbHNlCisgICAgICAgIHByb21pc2UucmVqZWN0KE5vdFN1cHBvcnRlZEVy
cm9yKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKLSAgICBVTlVTRURfUEFS
QU0oZXhwaXJlcyk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShp
bmZvKTsKICAgICBwcm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7CiAjZW5kaWYKIH0K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi5jcHAKaW5kZXggNWJkZGZlYzdlNGRmYzlkOWMwMjk5YzllMjdjYTlkYzIyZGY2
NDEwNC4uOTBkZTYzOTkzNGVkNjFjNWMwYjEwMTJjMGFhNTM5N2RkMGQ4YjMyYSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgRXhjZXB0aW9uT3I8UmVmPFJUQ1BlZXJDb25uZWN0
aW9uPj4gUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZShEb2N1bWVudCYgZG9jdW1lbnQKICAgICBp
ZiAoIXBlZXJDb25uZWN0aW9uLT5pc0Nsb3NlZCgpKSB7CiAgICAgICAgIGlmIChhdXRvKiBwYWdl
ID0gZG9jdW1lbnQucGFnZSgpKSB7CiAgICAgICAgICAgICBwZWVyQ29ubmVjdGlvbi0+cmVnaXN0
ZXJUb0NvbnRyb2xsZXIocGFnZS0+cnRjQ29udHJvbGxlcigpKTsKLSNpZiAhTE9HX0RJU0FCTEVE
IHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorI2lmIFVTRShMSUJXRUJSVEMpICYmICghTE9HX0RJ
U0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRCkKICAgICAgICAgICAgIGlmICghcGFnZS0+
c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgICAgICAgICBwYWdlLT5saWJXZWJS
VENQcm92aWRlcigpLnNldExvZ2dpbmdMZXZlbChMb2dXZWJSVEMubGV2ZWwpOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hZWRhYWRkYzNjZjA4YWE5MWJkZGUyMTEzYzQzMTRkM2FjNGEzZDc5Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcApAQCAtMCwwICsxLDMxNCBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRD
VXRpbHMuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbC5oIgorI2luY2x1ZGUgIlJUQ0RhdGFD
aGFubmVsRXZlbnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgorI2luY2x1ZGUgIlJUQ1ByaW9y
aXR5VHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworR1NUX0RFQlVHX0NB
VEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NU
X0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gR1N0cmVhbWVyRGF0YUNoYW5uZWxI
YW5kbGVyOjpmcm9tUlRDRGF0YUNoYW5uZWxJbml0KGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYg
b3B0aW9ucykKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaW5pdChnc3Rfc3RydWN0
dXJlX25ldygib3B0aW9ucyIsICJwcm90b2NvbCIsIEdfVFlQRV9TVFJJTkcsIG9wdGlvbnMucHJv
dG9jb2wudXRmOCgpLmRhdGEoKSwgbnVsbHB0cikpOworCisgICAgaWYgKG9wdGlvbnMub3JkZXJl
ZCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgIm9yZGVyZWQiLCBHX1RZ
UEVfQk9PTEVBTiwgKm9wdGlvbnMub3JkZXJlZCwgbnVsbHB0cik7CisgICAgaWYgKG9wdGlvbnMu
bWF4UGFja2V0TGlmZVRpbWUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCks
ICJtYXgtcGFja2V0LWxpZmV0aW1lIiwgR19UWVBFX0lOVCwgKm9wdGlvbnMubWF4UGFja2V0TGlm
ZVRpbWUsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25zLm1heFJldHJhbnNtaXRzKQorICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAibWF4LXJldHJhbnNtaXRzIiwgR19UWVBF
X0lOVCwgKm9wdGlvbnMubWF4UmV0cmFuc21pdHMsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25z
Lm5lZ290aWF0ZWQpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJuZWdv
dGlhdGVkIiwgR19UWVBFX0JPT0xFQU4sICpvcHRpb25zLm5lZ290aWF0ZWQsIG51bGxwdHIpOwor
ICAgIGlmIChvcHRpb25zLmlkKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgp
LCAiaWQiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5pZCwgbnVsbHB0cik7CisKKyAgICBHc3RXZWJS
VENQcmlvcml0eVR5cGUgcHJpb3JpdHlUeXBlOworICAgIHN3aXRjaCAob3B0aW9ucy5wcmlvcml0
eSkgeworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93OgorICAgICAgICBwcmlvcml0
eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfVkVSWV9MT1c7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpMb3c6CisgICAgICAgIHByaW9yaXR5VHlwZSA9
IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9MT1c7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
UlRDUHJpb3JpdHlUeXBlOjpNZWRpdW06CisgICAgICAgIHByaW9yaXR5VHlwZSA9IEdTVF9XRUJS
VENfUFJJT1JJVFlfVFlQRV9NRURJVU07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlRDUHJp
b3JpdHlUeXBlOjpIaWdoOgorICAgICAgICBwcmlvcml0eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9S
SVRZX1RZUEVfSElHSDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVf
c2V0KGluaXQuZ2V0KCksICJwcmlvcml0eSIsIEdTVF9UWVBFX1dFQlJUQ19QUklPUklUWV9UWVBF
LCBwcmlvcml0eVR5cGUsIG51bGxwdHIpOworCisgICAgcmV0dXJuIGluaXQ7Cit9CisKK1JlZjxS
VENEYXRhQ2hhbm5lbEV2ZW50PiBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNoYW5uZWxF
dmVudChEb2N1bWVudCYgZG9jdW1lbnQsIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+JiYg
ZGF0YUNoYW5uZWwpCit7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBsYWJlbDsKKyAgICBHVW5p
cXVlT3V0UHRyPGNoYXI+IHByb3RvY29sOworICAgIGdib29sZWFuIG9yZGVyZWQsIG5lZ290aWF0
ZWQ7CisgICAgZ2ludCBtYXhQYWNrZXRMaWZlVGltZSwgbWF4UmV0cmFuc21pdHMsIGlkOworICAg
IGdfb2JqZWN0X2dldChkYXRhQ2hhbm5lbC5nZXQoKSwgIm9yZGVyZWQiLCAmb3JkZXJlZCwgImxh
YmVsIiwgJmxhYmVsLm91dFB0cigpLAorICAgICAgICAibWF4LXBhY2tldC1saWZldGltZSIsICZt
YXhQYWNrZXRMaWZlVGltZSwgIm1heC1yZXRyYW5zbWl0cyIsICZtYXhSZXRyYW5zbWl0cywKKyAg
ICAgICAgInByb3RvY29sIiwgJnByb3RvY29sLm91dFB0cigpLCAibmVnb3RpYXRlZCIsICZuZWdv
dGlhdGVkLCAiaWQiLCAmaWQsIG51bGxwdHIpOworCisgICAgUlRDRGF0YUNoYW5uZWxJbml0IGlu
aXQ7CisgICAgaW5pdC5vcmRlcmVkID0gb3JkZXJlZDsKKyAgICBpbml0Lm1heFBhY2tldExpZmVU
aW1lID0gbWF4UGFja2V0TGlmZVRpbWU7CisgICAgaW5pdC5tYXhSZXRyYW5zbWl0cyA9IG1heFJl
dHJhbnNtaXRzOworICAgIGluaXQucHJvdG9jb2wgPSBTdHJpbmcocHJvdG9jb2wuZ2V0KCkpOwor
ICAgIGluaXQubmVnb3RpYXRlZCA9IG5lZ290aWF0ZWQ7CisgICAgaW5pdC5pZCA9IGlkOworCisg
ICAgYXV0byBoYW5kbGVyID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcj4oV1RGTW92ZShkYXRhQ2hhbm5lbCkpOworICAgIGF1dG8gY2hhbm5lbCA9IFJUQ0RhdGFD
aGFubmVsOjpjcmVhdGUoZG9jdW1lbnQsIFdURk1vdmUoaGFuZGxlciksIFN0cmluZyhsYWJlbC5n
ZXQoKSksIFdURk1vdmUoaW5pdCkpOworICAgIHJldHVybiBSVENEYXRhQ2hhbm5lbEV2ZW50Ojpj
cmVhdGUoZXZlbnROYW1lcygpLmRhdGFjaGFubmVsRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5v
LCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObywgV1RGTW92ZShjaGFubmVsKSk7Cit9CisKK0dTdHJl
YW1lckRhdGFDaGFubmVsSGFuZGxlcjo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKEdSZWZQ
dHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+JiYgY2hhbm5lbCkKKyAgICA6IG1fY2hhbm5lbChXVEZN
b3ZlKGNoYW5uZWwpKQoreworICAgIEFTU0VSVChtX2NoYW5uZWwpOworCisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm5vdGlmeTo6cmVhZHktc3RhdGUiLCBH
X0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIpIHsKKyAg
ICAgICAgaGFuZGxlci0+cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7CisgICAg
Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLW1lc3NhZ2UtZGF0
YSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlciwg
R0J5dGVzKiByYXdCeXRlcykgeworICAgICAgICBhdXRvIGJ5dGVzID0gYWRvcHRHUmVmKHJhd0J5
dGVzKTsKKyAgICAgICAgaGFuZGxlci0+b25NZXNzYWdlRGF0YShXVEZNb3ZlKGJ5dGVzKSk7Cisg
ICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NoYW5uZWwuZ2V0
KCksICJvbi1tZXNzYWdlLXN0cmluZyIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFu
bmVsSGFuZGxlciogaGFuZGxlciwgY2hhciogbWVzc2FnZSkgeworICAgICAgICBDU3RyaW5nIGJ1
ZmZlcihtZXNzYWdlLCBzdHJsZW4obWVzc2FnZSkpOworICAgICAgICBhdXRvIHN0cmluZyA9IFN0
cmluZzo6ZnJvbVVURjgoYnVmZmVyKTsKKyAgICAgICAgaGFuZGxlci0+b25NZXNzYWdlU3RyaW5n
KFdURk1vdmUoc3RyaW5nKSk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZChtX2NoYW5uZWwuZ2V0KCksICJvbi1lcnJvciIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJl
YW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlciwgR0Vycm9yKiByYXdFcnJvcikgeworICAg
ICAgICBHVW5pcXVlUHRyPEdFcnJvcj4gZXJyb3IocmF3RXJyb3IpOworICAgICAgICBoYW5kbGVy
LT5vbkVycm9yKFdURk1vdmUoZXJyb3IpKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLWJ1ZmZlcmVkLWFtb3VudC1sb3ci
LCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIpIHsK
KyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwYXNzIHRoZSBhbW91bnQgZGVsdGEgZnJvbSB3
ZWJydGNiaW4gdG8gdGhlIFdlYkNvcmUgaGFuZGxlci4KKyAgICAgICAgaGFuZGxlci0+b25CdWZm
ZXJlZEFtb3VudExvdygpOworICAgIH0pLCB0aGlzKTsKK30KKworR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyOjp+R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKCkKK3sKKyAgICBnX3NpZ25h
bF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9jaGFubmVsLmdldCgpLCB0aGlzKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnNldENsaWVudChSVENEYXRhQ2hh
bm5lbEhhbmRsZXJDbGllbnQmIGNsaWVudCwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZp
ZXIgY29udGV4dElkZW50aWZpZXIpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9j
ayB9OworICAgIEFTU0VSVCghbV9oYXNDbGllbnQpOworICAgIG1faGFzQ2xpZW50ID0gdHJ1ZTsK
KyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICAqbV9jbGllbnQgPSAmY2xpZW50OworICAgIG1f
Y29udGV4dElkZW50aWZpZXIgPSBjb250ZXh0SWRlbnRpZmllcjsKKworICAgIGZvciAoYXV0byYg
bWVzc2FnZSA6IG1fYnVmZmVyZWRNZXNzYWdlcykgeworICAgICAgICBzd2l0Y2hPbihtZXNzYWdl
LCBbJl0oUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+JiBkYXRhKSB7CisgICAgICAgICAgICBH
U1RfREVCVUcoIk5vdGlmeWluZyBxdWV1ZWQgcmF3IGRhdGEgKHNpemU6ICV6dSkiLCBkYXRhLT5z
aXplKCkpOworICAgICAgICAgICAgY2xpZW50LmRpZFJlY2VpdmVSYXdEYXRhKGRhdGEtPm1ha2VD
b250aWd1b3VzKCktPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgfSwgWyZdKFN0cmlu
ZyYgdGV4dCkgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJOb3RpZnlpbmcgcXVldWVkIHN0cmlu
ZyAlcyIsIHRleHQuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgY2xpZW50LmRpZFJlY2Vp
dmVTdHJpbmdEYXRhKHRleHQpOworICAgICAgICB9LCBbJl0oU3RhdGVDaGFuZ2Ugc3RhdGVDaGFu
Z2UpIHsKKyAgICAgICAgICAgIGlmIChzdGF0ZUNoYW5nZS5lcnJvcikgeworICAgICAgICAgICAg
ICAgIGlmIChhdXRvIHJ0Y0Vycm9yID0gdG9SVENFcnJvcigqc3RhdGVDaGFuZ2UuZXJyb3IpKQor
ICAgICAgICAgICAgICAgICAgICBjbGllbnQuZGlkRGV0ZWN0RXJyb3IocnRjRXJyb3IucmVsZWFz
ZU5vbk51bGwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBHU1RfREVCVUcoIkRpc3Bh
dGNoaW5nIHN0YXRlIGNoYW5nZSB0byAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdGVDaGFuZ2Uu
c3RhdGUpKTsKKyAgICAgICAgICAgIGNsaWVudC5kaWRDaGFuZ2VSZWFkeVN0YXRlKHN0YXRlQ2hh
bmdlLnN0YXRlKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIG1fYnVmZmVyZWRNZXNzYWdlcy5j
bGVhcigpOworfQorCitib29sIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFN0cmlu
Z0RhdGEoY29uc3QgQ1N0cmluZyYgdGV4dCkKK3sKKyAgICBHU1RfREVCVUcoIlNlbmRpbmcgc3Ry
aW5nICVzIiwgdGV4dC5kYXRhKCkpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2NoYW5u
ZWwuZ2V0KCksICJzZW5kLXN0cmluZyIsIHRleHQuZGF0YSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnNlbmRSYXdEYXRhKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXV0byBieXRlcyA9IGFkb3B0
R1JlZihnX2J5dGVzX25ldyhkYXRhLCBsZW5ndGgpKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV9jaGFubmVsLmdldCgpLCAic2VuZC1kYXRhIiwgYnl0ZXMuZ2V0KCkpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2xvc2UoKQor
eworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2NoYW5uZWwuZ2V0KCksICJjbG9zZSIpOwor
fQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2hlY2tTdGF0ZSgpCit7Cisg
ICAgQVNTRVJUKG1fY2xpZW50TG9jay5pc0hlbGQoKSk7CisKKyAgICBHc3RXZWJSVENEYXRhQ2hh
bm5lbFN0YXRlIGNoYW5uZWxTdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV9jaGFubmVsLmdldCgp
LCAicmVhZHktc3RhdGUiLCAmY2hhbm5lbFN0YXRlLCBudWxscHRyKTsKKworICAgIFJUQ0RhdGFD
aGFubmVsU3RhdGUgc3RhdGU7CisgICAgc3dpdGNoIChjaGFubmVsU3RhdGUpIHsKKyAgICBjYXNl
IEdTVF9XRUJSVENfREFUQV9DSEFOTkVMX1NUQVRFX05FVzoKKyAgICBjYXNlIEdTVF9XRUJSVENf
REFUQV9DSEFOTkVMX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgIHN0YXRlID0gUlRDRGF0YUNo
YW5uZWxTdGF0ZTo6Q29ubmVjdGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9PUEVOOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFu
bmVsU3RhdGU6Ok9wZW47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRB
X0NIQU5ORUxfU1RBVEVfQ0xPU0lORzoKKyAgICAgICAgc3RhdGUgPSBSVENEYXRhQ2hhbm5lbFN0
YXRlOjpDbG9zaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9XRUJSVENfREFUQV9D
SEFOTkVMX1NUQVRFX0NMT1NFRDoKKyAgICAgICAgc3RhdGUgPSBSVENEYXRhQ2hhbm5lbFN0YXRl
OjpDbG9zZWQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghbV9oYXNDbGllbnQp
IHsKKyAgICAgICAgR1NUX0RFQlVHKCJObyBjbGllbnQgeWV0LCBxdWV1ZWluZyBzdGF0ZSIpOwor
ICAgICAgICBtX2J1ZmZlcmVkTWVzc2FnZXMuYXBwZW5kKFN0YXRlQ2hhbmdlIHsgc3RhdGUsIHsg
fSB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9jbGllbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVRygiRGlzcGF0Y2hpbmcgc3RhdGUgY2hhbmdlIHRv
ICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0ZSkpOworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBt
X2NsaWVudCwgc3RhdGVdIHsKKyAgICAgICAgaWYgKCFjbGllbnQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGNsaWVudC52YWx1ZSgpLT5kaWRDaGFuZ2VSZWFkeVN0YXRlKHN0YXRlKTsK
KyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnJlYWR5U3Rh
dGVDaGFuZ2VkKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisgICAg
Y2hlY2tTdGF0ZSgpOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25N
ZXNzYWdlRGF0YShHUmVmUHRyPEdCeXRlcz4mJiBieXRlcykKK3sKKyAgICBMb2NrZXIgbG9ja2Vy
IHsgbV9jbGllbnRMb2NrIH07CisKKyAgICBpZiAoIW1faGFzQ2xpZW50KSB7CisgICAgICAgIG1f
YnVmZmVyZWRNZXNzYWdlcy5hcHBlbmQoU2hhcmVkQnVmZmVyOjpjcmVhdGUoV1RGTW92ZShieXRl
cykpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9jbGllbnQpCisgICAg
ICAgIHJldHVybjsKKworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudCwgYnl0ZXMgPSBX
VEZNb3ZlKGJ5dGVzKV0geworICAgICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgZ3NpemUgc2l6ZSA9IDA7CisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBy
ZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGJ5dGVzLmdl
dCgpLCAmc2l6ZSkpOworICAgICAgICBjbGllbnQudmFsdWUoKS0+ZGlkUmVjZWl2ZVJhd0RhdGEo
ZGF0YSwgc2l6ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyOjpvbk1lc3NhZ2VTdHJpbmcoU3RyaW5nJiYgc3RyaW5nKQoreworICAgIExvY2tlciBsb2Nr
ZXIgeyBtX2NsaWVudExvY2sgfTsKKworICAgIEdTVF9ERUJVRygiSW5jb21pbmcgc3RyaW5nOiAl
cyIsIHN0cmluZy5hc2NpaSgpLmRhdGEoKSk7CisgICAgaWYgKCFtX2hhc0NsaWVudCkgeworICAg
ICAgICBHU1RfREVCVUcoIk5vIGNsaWVudCB5ZXQsIGtlZXBpbmcgYXMgYnVmZmVyZWQgbWVzc2Fn
ZSIpOworICAgICAgICBtX2J1ZmZlcmVkTWVzc2FnZXMuYXBwZW5kKFdURk1vdmUoc3RyaW5nKSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHU1RfREVCVUcoIkRpc3BhdGNoaW5nIHBheWxvYWQiKTsKKyAgICBwb3N0
VGFzayhbY2xpZW50ID0gbV9jbGllbnQsIHN0cmluZyA9IFdURk1vdmUoc3RyaW5nKV0geworICAg
ICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjbGllbnQu
dmFsdWUoKS0+ZGlkUmVjZWl2ZVN0cmluZ0RhdGEoc3RyaW5nKTsKKyAgICAgICAgR1NUX0RFQlVH
KCJEb25lIik7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
OjpvbkVycm9yKEdVbmlxdWVQdHI8R0Vycm9yPiYmIGVycm9yKQoreworICAgIExvY2tlciBsb2Nr
ZXIgeyBtX2NsaWVudExvY2sgfTsKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47
CisKKyAgICBHU1RfV0FSTklORygiR290IGRhdGEtY2hhbm5lbCBlcnJvciAlcyIsIGVycm9yLT5t
ZXNzYWdlKTsKKyAgICBwb3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnQsIGVycm9yID0gV1RGTW92
ZShlcnJvcildIHsKKyAgICAgICAgaWYgKCFjbGllbnQgfHwgIWVycm9yKQorICAgICAgICAgICAg
cmV0dXJuOworCisgICAgICAgIGF1dG8gcnRjRXJyb3IgPSB0b1JUQ0Vycm9yKGVycm9yLmdldCgp
KTsKKyAgICAgICAgaWYgKCFydGNFcnJvcikKKyAgICAgICAgICAgIHJ0Y0Vycm9yID0gUlRDRXJy
b3I6OmNyZWF0ZShSVENFcnJvcjo6SW5pdCB7IFJUQ0Vycm9yRGV0YWlsVHlwZTo6RGF0YUNoYW5u
ZWxGYWlsdXJlLCB7IH0sIHsgfSwgeyB9LCB7IH0gfSwgeyB9KTsKKyAgICAgICAgY2xpZW50LnZh
bHVlKCktPmRpZERldGVjdEVycm9yKHJ0Y0Vycm9yLnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0p
OworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25CdWZmZXJlZEFtb3Vu
dExvdygpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9OworICAgIGlmICgh
bV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2Ns
aWVudF0geworICAgICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICAvLyBGSVhNRTogUGFzcyBhbW91bnQgdG8gaGFuZGxlciBpbnN0ZWFkIG9mIDAuCisgICAg
ICAgIGNsaWVudC52YWx1ZSgpLT5idWZmZXJlZEFtb3VudElzRGVjcmVhc2luZygwKTsKKyAgICB9
KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnBvc3RUYXNrKEZ1bmN0
aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV9jbGllbnRMb2NrLmlzSGVs
ZCgpKTsKKworICAgIGlmICghbV9jb250ZXh0SWRlbnRpZmllcikgeworICAgICAgICBjYWxsT25N
YWluVGhyZWFkKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpwb3N0VGFza1RvKG1fY29udGV4dElkZW50aWZpZXIs
IFdURk1vdmUoZnVuY3Rpb24pKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckRhdGFDaGFubmVsSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxYjM3MTkwZmYyZTQ4NTU5NDEwYjkx
Y2UwNGFlN2ZmODhhNzRiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuaApA
QCAtMCwwICsxLDg4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdT
dHJlYW1lci5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJS
VENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbFN0YXRlLmgi
CisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvQ29uZGl0aW9uLmg+
CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgUlRDRGF0YUNoYW5uZWxF
dmVudDsKK2NsYXNzIFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudDsKK3N0cnVjdCBSVENEYXRh
Q2hhbm5lbEluaXQ7CisKK2NsYXNzIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciBmaW5hbCA6
IHB1YmxpYyBSVENEYXRhQ2hhbm5lbEhhbmRsZXIgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcihH
UmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmKTsKKyAgICB+R1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyKCk7CisKKyAgICBzdGF0aWMgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGZyb21S
VENEYXRhQ2hhbm5lbEluaXQoY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0Jik7CisgICAgc3RhdGlj
IFJlZjxSVENEYXRhQ2hhbm5lbEV2ZW50PiBjaGFubmVsRXZlbnQoRG9jdW1lbnQmLCBHUmVmUHRy
PEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgb25NZXNz
YWdlRGF0YShHUmVmUHRyPEdCeXRlcz4mJik7CisgICAgdm9pZCBvbk1lc3NhZ2VTdHJpbmcoU3Ry
aW5nJiYpOworICAgIHZvaWQgb25FcnJvcihHVW5pcXVlUHRyPEdFcnJvcj4mJik7CisgICAgdm9p
ZCBvbkJ1ZmZlcmVkQW1vdW50TG93KCk7CisgICAgdm9pZCByZWFkeVN0YXRlQ2hhbmdlZCgpOwor
Citwcml2YXRlOgorICAgIC8vIFJUQ0RhdGFDaGFubmVsSGFuZGxlciBBUEkKKyAgICB2b2lkIHNl
dENsaWVudChSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQmLCBTY3JpcHRFeGVjdXRpb25Db250
ZXh0SWRlbnRpZmllcikgZmluYWw7CisgICAgYm9vbCBzZW5kU3RyaW5nRGF0YShjb25zdCBDU3Ry
aW5nJikgZmluYWw7CisgICAgYm9vbCBzZW5kUmF3RGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90
KSBmaW5hbDsKKyAgICB2b2lkIGNsb3NlKCkgZmluYWw7CisKKyAgICB2b2lkIGNoZWNrU3RhdGUo
KTsKKyAgICB2b2lkIHBvc3RUYXNrKEZ1bmN0aW9uPHZvaWQoKT4mJik7CisKKyAgICBzdHJ1Y3Qg
U3RhdGVDaGFuZ2UgeworICAgICAgICBSVENEYXRhQ2hhbm5lbFN0YXRlIHN0YXRlOworICAgICAg
ICBzdGQ6Om9wdGlvbmFsPEdFcnJvcio+IGVycm9yOworICAgIH07CisgICAgdXNpbmcgTWVzc2Fn
ZSA9IHN0ZDo6dmFyaWFudDxTdGF0ZUNoYW5nZSwgU3RyaW5nLCBSZWY8RnJhZ21lbnRlZFNoYXJl
ZEJ1ZmZlcj4+OworICAgIHVzaW5nIFBlbmRpbmdNZXNzYWdlcyA9IFZlY3RvcjxNZXNzYWdlPjsK
KworICAgIExvY2sgbV9jbGllbnRMb2NrOworICAgIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5u
ZWw+IG1fY2hhbm5lbDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYWtQdHI8UlRDRGF0YUNoYW5uZWxI
YW5kbGVyQ2xpZW50Pj4gbV9jbGllbnQgV1RGX0dVQVJERURfQllfTE9DSyhtX2NsaWVudExvY2sp
OworICAgIGJvb2wgbV9oYXNDbGllbnQgV1RGX0dVQVJERURfQllfTE9DSyhtX2NsaWVudExvY2sp
IHsgZmFsc2UgfTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllciBtX2NvbnRl
eHRJZGVudGlmaWVyOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IG1fcHJldmlvdXNCdWZm
ZXJlZEFtb3VudDsKKyAgICBQZW5kaW5nTWVzc2FnZXMgbV9idWZmZXJlZE1lc3NhZ2VzIFdURl9H
VUFSREVEX0JZX0xPQ0sobV9jbGllbnRMb2NrKTsKKworICAgIExvY2sgbV9vcGVuTG9jazsKKyAg
ICBDb25kaXRpb24gbV9vcGVuQ29uZGl0aW9uIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vcGVuTG9j
ayk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MGFjYzVjMWUwNzg5ZGM3N2M3YzM5ZTc5ZWZhYTkx
ZjViOWZlMzVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuY3BwCkBAIC0w
LDAgKzEsOTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorCisj
aWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJU
Q1V0aWxzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5k
KGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mIHRyYW5zcG9ydCkKKyAgICA6
IG1fYmFja2VuZCh0cmFuc3BvcnQpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgQVNT
RVJUKGlzTWFpblRocmVhZCgpKTsKK30KKworR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6
On5HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgdW5yZWdpc3RlckNsaWVu
dCgpOworfQorCitVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIHJldHVybiBt
YWtlVW5pcXVlUmVmPEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ+KG1fYmFja2VuZCk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KENs
aWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0g
Y2xpZW50OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCksICJu
b3RpZnk6OnN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFuZ2VkKCk7CisgICAgfSks
IHRoaXMpOworfQorCit2b2lkIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lz
dGVyQ2xpZW50KCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEo
bV9iYWNrZW5kLmdldCgpLCB0aGlzKTsKKyAgICBtX2NsaWVudC5yZXNldCgpOworfQorCit2b2lk
IEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQoKQoreworICAgIGNh
bGxPbk1haW5UaHJlYWRBbmRXYWl0KFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyB0aGlzIH1dIHsKKyAg
ICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCF3
ZWFrVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1VuaXF1
ZU91dFB0cjxjaGFyPiByZW1vdGVDZXJ0aWZpY2F0ZTsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxj
aGFyPiBjZXJ0aWZpY2F0ZTsKKyAgICAgICAgR3N0V2ViUlRDRFRMU1RyYW5zcG9ydFN0YXRlIHN0
YXRlOworCisgICAgICAgIGdfb2JqZWN0X2dldCh3ZWFrVGhpcy0+bV9iYWNrZW5kLmdldCgpLCAi
c3RhdGUiLCAmc3RhdGUsICJyZW1vdGUtY2VydGlmaWNhdGUiLCAmcmVtb3RlQ2VydGlmaWNhdGUu
b3V0UHRyKCksICJjZXJ0aWZpY2F0ZSIsICZjZXJ0aWZpY2F0ZS5vdXRQdHIoKSwgbnVsbHB0cik7
CisKKyAgICAgICAgVmVjdG9yPFJlZjxKU0M6OkFycmF5QnVmZmVyPj4gY2VydGlmaWNhdGVzOwor
ICAgICAgICBjZXJ0aWZpY2F0ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKKyAgICAgICAg
aWYgKHJlbW90ZUNlcnRpZmljYXRlKSB7CisgICAgICAgICAgICBhdXRvIHJlbW90ZUNlcnRpZmlj
YXRlU3RyaW5nID0gbWFrZVN0cmluZyhyZW1vdGVDZXJ0aWZpY2F0ZS5nZXQoKSk7CisgICAgICAg
ICAgICBhdXRvIGpzUmVtb3RlQ2VydGlmaWNhdGUgPSBKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGUo
cmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcuY2hhcmFjdGVyczgoKSwgcmVtb3RlQ2VydGlmaWNhdGVT
dHJpbmcuc2l6ZUluQnl0ZXMoKSk7CisgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuYXBwZW5kKFdU
Rk1vdmUoanNSZW1vdGVDZXJ0aWZpY2F0ZSkpOworCisgICAgICAgICAgICBhdXRvIGNlcnRpZmlj
YXRlU3RyaW5nID0gbWFrZVN0cmluZyhjZXJ0aWZpY2F0ZS5nZXQoKSk7CisgICAgICAgICAgICBh
dXRvIGpzQ2VydGlmaWNhdGUgPSBKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGUoY2VydGlmaWNhdGVT
dHJpbmcuY2hhcmFjdGVyczgoKSwgY2VydGlmaWNhdGVTdHJpbmcuc2l6ZUluQnl0ZXMoKSk7Cisg
ICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuYXBwZW5kKFdURk1vdmUoanNDZXJ0aWZpY2F0ZSkpOwor
ICAgICAgICB9CisgICAgICAgICgqd2Vha1RoaXMtPm1fY2xpZW50KS0+b25TdGF0ZUNoYW5nZWQo
dG9SVENEdGxzVHJhbnNwb3J0U3RhdGUoc3RhdGUpLCBXVEZNb3ZlKGNlcnRpZmljYXRlcykpOwor
ICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0
QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzI1NGJjODQ3ZGE3
OTE2N2I4ZmMxOTQ5YjMwNGUxNzg3Y2VkNWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJSVENEdGxzVHJhbnNwb3J0
QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQgZmluYWwgOiBwdWJsaWMg
UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworCitw
dWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQoY29uc3Qg
R1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiYpOworICAgIH5HU3RyZWFtZXJEdGxzVHJh
bnNwb3J0QmFja2VuZCgpOworCisgICAgdm9pZCBzdGF0ZUNoYW5nZWQoKTsKKworcHJpdmF0ZToK
KyAgICAvLyBSVENEdGxzVHJhbnNwb3J0QmFja2VuZAorICAgIGNvbnN0IHZvaWQqIGJhY2tlbmQo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKyAgICBVbmlxdWVSZWY8
UlRDSWNlVHJhbnNwb3J0QmFja2VuZD4gaWNlVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworICAg
IHZvaWQgcmVnaXN0ZXJDbGllbnQoQ2xpZW50JikgZmluYWw7CisgICAgdm9pZCB1bnJlZ2lzdGVy
Q2xpZW50KCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IG1f
YmFja2VuZDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYWtQdHI8Q2xpZW50Pj4gbV9jbGllbnQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0ZDc1YTFmNjU3OWQ1OTY0ZWRi
MWRiOWE1ZjMwMWJlMmFkMmIwODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5k
LmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJ
Z2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tl
bmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVh
bWVySWNlVHJhbnNwb3J0QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQ+JiB0cmFuc3BvcnQpCisgICAgOiBtX2JhY2tlbmQodHJhbnNwb3J0KQoreworICAgIEFTU0VS
VChtX2JhY2tlbmQpOworCisgICAgaWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCksICJub3RpZnk6OnRyYW5zcG9ydCIsIEdf
Q0FMTEJBQ0soK1tdKEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAg
ICAgICAgYmFja2VuZC0+aWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsKK30K
KworR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckljZVRyYW5zcG9ydEJh
Y2tlbmQoKQoreworICAgIGlmIChHX0lTX09CSkVDVChtX2ljZVRyYW5zcG9ydC5nZXQoKSkpCisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2ljZVRyYW5zcG9y
dC5nZXQoKSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRh
KG1fYmFja2VuZC5nZXQoKSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0
QmFja2VuZDo6aWNlVHJhbnNwb3J0Q2hhbmdlZCgpCit7CisgICAgaWYgKEdfSVNfT0JKRUNUKG1f
aWNlVHJhbnNwb3J0LmdldCgpKSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9kYXRhKG1faWNlVHJhbnNwb3J0LmdldCgpLCB0aGlzKTsKKworICAgIGdfb2JqZWN0X2dl
dChtX2JhY2tlbmQuZ2V0KCksICJ0cmFuc3BvcnQiLCAmbV9pY2VUcmFuc3BvcnQub3V0UHRyKCks
IG51bGxwdHIpOworCisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1faWNlVHJhbnNwb3J0
LmdldCgpLCAibm90aWZ5OjpzdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFuZ2VkKCk7
CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2ljZVRyYW5z
cG9ydC5nZXQoKSwgIm5vdGlmeTo6Z2F0aGVyaW5nLXN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0
cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5kLT5n
YXRoZXJpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVh
bWVySWNlVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQpCit7
CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAgICBH
c3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgdHJhbnNwb3J0U3RhdGU7CisgICAgR3N0V2ViUlRD
SUNFR2F0aGVyaW5nU3RhdGUgZ2F0aGVyaW5nU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1faWNl
VHJhbnNwb3J0LmdldCgpLCAic3RhdGUiLCAmdHJhbnNwb3J0U3RhdGUsICJnYXRoZXJpbmctc3Rh
dGUiLCAmZ2F0aGVyaW5nU3RhdGUsIG51bGxwdHIpOworCisgICAgLy8gV2Ugc3RhcnQgb2JzZXJ2
aW5nIGEgYml0IGxhdGUgYW5kIG1pZ2h0IG1pc3MgdGhlIGNoZWNraW5nIHN0YXRlLiBTeW50aGVz
aXplIGl0IGFzIG5lZWRlZC4KKyAgICBpZiAodHJhbnNwb3J0U3RhdGUgPiBHU1RfV0VCUlRDX0lD
RV9DT05ORUNUSU9OX1NUQVRFX0NIRUNLSU5HICYmIHRyYW5zcG9ydFN0YXRlICE9IEdTVF9XRUJS
VENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0xPU0VEKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoW3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH1dIHsKKyAgICAgICAgICAgIGlmICghd2Vh
a1RoaXMgfHwgIXdlYWtUaGlzLT5tX2NsaWVudCkKKyAgICAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKFJUQ0ljZVRyYW5z
cG9ydFN0YXRlOjpDaGVja2luZyk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBjYWxsT25NYWlu
VGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCB0cmFuc3BvcnRTdGF0ZSwgZ2F0
aGVyaW5nU3RhdGVdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcyB8fCAhd2Vha1RoaXMtPm1fY2xp
ZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9u
U3RhdGVDaGFuZ2VkKHRvUlRDSWNlVHJhbnNwb3J0U3RhdGUodHJhbnNwb3J0U3RhdGUpKTsKKyAg
ICAgICAgd2Vha1RoaXMtPm1fY2xpZW50LT5vbkdhdGhlcmluZ1N0YXRlQ2hhbmdlZCh0b1JUQ0lj
ZUdhdGhlcmluZ1N0YXRlKGdhdGhlcmluZ1N0YXRlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNsaWVudCgpCit7CisgICAgQVNT
RVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC5jbGVhcigpOworfQorCit2b2lkIEdTdHJlYW1l
ckljZVRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX2NsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHRy
YW5zcG9ydFN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgInN0
YXRlIiwgJnRyYW5zcG9ydFN0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt3
ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCB0cmFuc3BvcnRTdGF0ZV0geworICAgICAgICBp
ZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIHdlYWtUaGlzLT5tX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENJY2VUcmFu
c3BvcnRTdGF0ZSh0cmFuc3BvcnRTdGF0ZSkpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1l
ckljZVRyYW5zcG9ydEJhY2tlbmQ6OmdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYg
KCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDSUNFR2F0aGVyaW5n
U3RhdGUgZ2F0aGVyaW5nU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1faWNlVHJhbnNwb3J0Lmdl
dCgpLCAiZ2F0aGVyaW5nLXN0YXRlIiwgJmdhdGhlcmluZ1N0YXRlLCBudWxscHRyKTsKKyAgICBj
YWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCBnYXRoZXJpbmdT
dGF0ZV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV9jbGllbnQpCisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5tX2NsaWVudC0+b25HYXRoZXJp
bmdTdGF0ZUNoYW5nZWQodG9SVENJY2VHYXRoZXJpbmdTdGF0ZShnYXRoZXJpbmdTdGF0ZSkpOwor
ICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRC
YWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmZlYTUyMGJiYTkxMGZk
MTdmMzAwNzk4NTUyN2E5ODY4OGY0YjA3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJh
Y2tlbmQuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENJY2VU
cmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kIGZpbmFsIDog
cHVibGljIFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3Ry
ZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7
CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKGNv
bnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mKTsKKyAgICB+R1N0cmVhbWVySWNl
VHJhbnNwb3J0QmFja2VuZCgpOworCisgICAgdm9pZCBzdGF0ZUNoYW5nZWQoKTsKKyAgICB2b2lk
IGdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0ljZVRyYW5z
cG9ydEJhY2tlbmQKKyAgICBjb25zdCB2b2lkKiBiYWNrZW5kKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYp
IGZpbmFsOworICAgIHZvaWQgdW5yZWdpc3RlckNsaWVudCgpIGZpbmFsOworCisgICAgdm9pZCBp
Y2VUcmFuc3BvcnRDaGFuZ2VkKCk7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQ+IG1fYmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gbV9pY2VU
cmFuc3BvcnQ7CisgICAgV2Vha1B0cjxDbGllbnQ+IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5iNTdmYzViNjZmZjFhYzliNTFmM2M0YTM1NmQ0ZGIyYjBhNDJiNjY1Ci0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKQEAgLTAsMCArMSwxMjQwIEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisK
KyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
clJ0cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2VE
ZWZlcnJlZC5oIgorI2luY2x1ZGUgIkpTUlRDU3RhdHNSZXBvcnQuaCIKKyNpbmNsdWRlICJMb2dn
aW5nLmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRl
ICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsLmgiCisjaW5jbHVk
ZSAiUlRDRGF0YUNoYW5uZWxFdmVudC5oIgorI2luY2x1ZGUgIlJUQ0ljZUNhbmRpZGF0ZS5oIgor
I2luY2x1ZGUgIlJUQ09mZmVyT3B0aW9ucy5oIgorI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9u
LmgiCisjaW5jbHVkZSAiUlRDU2N0cFRyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJSVENT
ZXNzaW9uRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJSVENTdGF0c1JlcG9ydC5oIgorI2luY2x1
ZGUgIlJUQ1RyYWNrRXZlbnQuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKwor
I2luY2x1ZGUgPGdzdC9zZHAvc2RwLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNp
bmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJp
b3JpdHkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+
CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNk
ZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpHU3RyZWFtZXJNZWRp
YUVuZHBvaW50KEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgcGVlckNvbm5lY3Rpb24p
CisgICAgOiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZChwZWVyQ29ubmVjdGlvbikKKyAgICAsIG1f
c3RhdHNDb2xsZWN0b3IoR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OmNyZWF0ZSgpKQorI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAorICAgICwgbV9zdGF0c0xvZ1RpbWVyKCp0aGlzLCAmR1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyU3RhdHNGb3JMb2dnaW5nKQorICAgICwgbV9sb2dnZXIo
cGVlckNvbm5lY3Rpb24ubG9nZ2VyKCkpCisgICAgLCBtX2xvZ0lkZW50aWZpZXIocGVlckNvbm5l
Y3Rpb24ubG9nSWRlbnRpZmllcigpKQorI2VuZGlmCit7CisgICAgZW5zdXJlR1N0cmVhbWVySW5p
dGlhbGl6ZWQoKTsKKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRG
bGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKKyAgICAg
ICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zywg
IndlYmtpdHdlYnJ0Y2VuZHBvaW50IiwgMCwgIldlYktpdCBXZWJSVEMgZW5kLXBvaW50Iik7Cisg
ICAgfSk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aW5pdGlhbGl6ZVBpcGVs
aW5lKCkKK3sKKyAgICBzdGF0aWMgaW50IG5QaXBlbGluZSA9IDA7CisgICAgYXV0byBwaXBlbGlu
ZU5hbWUgPSBtYWtlU3RyaW5nKCJ3ZWJraXQtd2VicnQtcGlwZWxpbmUtIiwgblBpcGVsaW5lKTsK
KyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyhwaXBlbGluZU5hbWUuYXNjaWkoKS5k
YXRhKCkpOworCisgICAgY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5l
LmdldCgpLCBbdGhpc10oR3N0TWVzc2FnZSogbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVNZXNz
YWdlKG1lc3NhZ2UpOworICAgIH0pOworCisgICAgYXV0byBiaW5OYW1lID0gbWFrZVN0cmluZygi
d2Via2l0LXdlYnJ0Y2Jpbi0iLCBuUGlwZWxpbmUrKyk7CisgICAgbV93ZWJydGNCaW4gPSBtYWtl
R1N0cmVhbWVyRWxlbWVudCgid2VicnRjYmluIiwgYmluTmFtZS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9zdGF0
c0NvbGxlY3Rvci0+c2V0RWxlbWVudChtX3dlYnJ0Y0Jpbi5nZXQoKSk7CisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAibm90aWZ5OjppY2UtY29ubmVjdGlv
bi1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50
KSB7CisgICAgICAgIGVuZFBvaW50LT5vbkljZUNvbm5lY3Rpb25DaGFuZ2UoKTsKKyAgICB9KSwg
dGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAi
bm90aWZ5OjppY2UtZ2F0aGVyaW5nLXN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVk
aWFFbmRwb2ludCogZW5kUG9pbnQpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uSWNlR2F0aGVyaW5n
Q2hhbmdlKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLW5lZ290aWF0aW9uLW5lZWRlZCIsIEdfQ0FMTEJBQ0soK1td
KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50KSB7CisgICAgICAgIGVuZFBvaW50LT5v
bk5lZ290aWF0aW9uTmVlZGVkKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLWljZS1jYW5kaWRhdGUiLCBHX0NBTExC
QUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCwgZ3VpbnQgc2RwTUxpbmVJ
bmRleCwgZ2NoYXJhcnJheSBjYW5kaWRhdGUpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uSWNlQ2Fu
ZGlkYXRlKHNkcE1MaW5lSW5kZXgsIGNhbmRpZGF0ZSk7CisgICAgfSksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInBhZC1hZGRlZCIsIEdf
Q0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RQYWQqIHBh
ZCkgeworICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5vdGlmaWNhdGlvbnMuCisgICAg
ICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9QQURfU1JDKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFtwcm90ZWN0ZWRU
aGlzID0gUmVmKCplbmRQb2ludCksIHBhZF0geworICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRo
aXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
cHJvdGVjdGVkVGhpcy0+YWRkUmVtb3RlU3RyZWFtKHBhZCk7CisgICAgICAgIH0pOworICAgIH0p
LCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCks
ICJwYWQtcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVu
ZFBvaW50LCBHc3RQYWQqIHBhZCkgeworICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5v
dGlmaWNhdGlvbnMuCisgICAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9Q
QURfU1JDKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChlbmRQb2ludC0+aXNT
dG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGVuZFBvaW50LT5yZW1vdmVS
ZW1vdGVTdHJlYW0ocGFkKTsKKyAgICB9KSwgdGhpcyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0
X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJvbi1kYXRhLWNoYW5uZWwiLCBHX0NBTExCQUNL
KCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCwgR3N0V2ViUlRDRGF0YUNoYW5u
ZWwqIGNoYW5uZWwpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uRGF0YUNoYW5uZWwoY2hhbm5lbCk7
CisgICAgfSksIHRoaXMpOworCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1fcGlwZWxp
bmUuZ2V0KCkpLCBtX3dlYnJ0Y0Jpbi5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6On5HU3RyZWFtZXJNZWRpYUVuZHBvaW50KCkKK3sKKyAgICBp
ZiAobV9waXBlbGluZSkKKyAgICAgICAgdGVhcmRvd25QaXBlbGluZSgpOworfQorCit2b2lkIEdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRlYXJkb3duUGlwZWxpbmUoKQoreworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgIHN0b3BMb2dnaW5nU3RhdHMoKTsKKyNlbmRpZgorICAgIG1fc3Rh
dHNDb2xsZWN0b3ItPnNldEVsZW1lbnQobnVsbHB0cik7CisKKyAgICBnX3NpZ25hbF9oYW5kbGVy
c19kaXNjb25uZWN0X2J5X2RhdGEobV9waXBlbGluZS5nZXQoKSwgdGhpcyk7CisgICAgZGlzY29u
bmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdldCgpKTsKKyAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworCisg
ICAgbV9zb3VyY2VzLmNsZWFyKCk7CisgICAgbV9yZW1vdGVNTGluZUluZm9zLmNsZWFyKCk7Cisg
ICAgbV9yZW1vdGVTdHJlYW1zQnlJZC5jbGVhcigpOworICAgIG1fd2VicnRjQmluID0gbnVsbHB0
cjsKKyAgICBtX3BpcGVsaW5lID0gbnVsbHB0cjsKK30KKworYm9vbCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgc3dpdGNo
IChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6
CisgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOX0NBU1Qo
bV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgImVvcyIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VMRU1FTlQ6IHsKKyAgICAgICAgY29u
c3QgYXV0byogZGF0YSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUobWVzc2FnZSk7CisgICAg
ICAgIGlmICghZ19zdHJjbXAwKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoZGF0YSksICJHc3RCaW5G
b3J3YXJkZWQiKSkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RNZXNzYWdlPiBzdWJNZXNzYWdl
OworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQoZGF0YSwgIm1lc3NhZ2UiLCBHU1RfVFlQ
RV9NRVNTQUdFLCAmc3ViTWVzc2FnZS5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBp
ZiAoR1NUX01FU1NBR0VfVFlQRShzdWJNZXNzYWdlLmdldCgpKSA9PSBHU1RfTUVTU0FHRV9FT1Mp
CisgICAgICAgICAgICAgICAgZGlzcG9zZUVsZW1lbnRDaGFpbihHU1RfRUxFTUVOVF9DQVNUKEdT
VF9NRVNTQUdFX1NSQyhzdWJNZXNzYWdlLmdldCgpKSkpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZGlzcG9zZUVsZW1l
bnRDaGFpbihHc3RFbGVtZW50KiBlbGVtZW50KQoreworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9w
aXBlbGluZS5nZXQoKSwgIkdvdCBlbGVtZW50IEVPUyBtZXNzYWdlIGZyb20gJSIgR1NUX1BUUl9G
T1JNQVQsIGVsZW1lbnQpOworCisgICAgYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQoZWxlbWVudCwgInNpbmsiKSk7CisgICAgYXV0byBwZWVyID0gYWRvcHRH
UmVmKGdzdF9wYWRfZ2V0X3BlZXIocGFkLmdldCgpKSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRf
bG9ja2VkX3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIHRydWUpOworICAgIGdzdF9wYWRfdW5saW5r
KHBlZXIuZ2V0KCksIHBhZC5nZXQoKSk7CisgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNU
KG1fcGlwZWxpbmUuZ2V0KCkpLCBlbGVtZW50KTsKKyAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3Jl
cXVlc3RfcGFkKG1fd2VicnRjQmluLmdldCgpLCBwZWVyLmdldCgpKTsKKyAgICBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUoZWxlbWVudCwgR1NUX1NUQVRFX05VTEwpOworICAgIGdzdF9lbGVtZW50X3Nl
dF9sb2NrZWRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgZmFsc2UpOworfQorCitib29sIEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIHRl
YXJkb3duUGlwZWxpbmUoKTsKKworICAgIGlmICghaW5pdGlhbGl6ZVBpcGVsaW5lKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYnVuZGxlUG9saWN5ID0gYnVuZGxlUG9saWN5
RnJvbUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7CisgICAgYXV0byBpY2VUcmFuc3BvcnRQ
b2xpY3kgPSBpY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9u
KTsKKyAgICBnX29iamVjdF9zZXQobV93ZWJydGNCaW4uZ2V0KCksICJidW5kbGUtcG9saWN5Iiwg
YnVuZGxlUG9saWN5LCAiaWNlLXRyYW5zcG9ydC1wb2xpY3kiLCBpY2VUcmFuc3BvcnRQb2xpY3ks
IG51bGxwdHIpOworCisgICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBjb25maWd1cmF0aW9uLmljZVNl
cnZlcnMpIHsKKyAgICAgICAgYm9vbCBzdHVuU2V0ID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0
byYgdXJsIDogc2VydmVyLnVybHMpIHsKKyAgICAgICAgICAgIGlmICh1cmwucHJvdG9jb2woKS5z
dGFydHNXaXRoKCJ0dXJuIikpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHZhbGlkID0gdXJsLnN0
cmluZygpLmlzb2xhdGVkQ29weSgpLnJlcGxhY2UoInR1cm46IiwgInR1cm46Ly8iKS5yZXBsYWNl
KCJ0dXJuczoiLCAidHVybnM6Ly8iKTsKKyAgICAgICAgICAgICAgICBVUkwgdmFsaWRVUkwoVVJM
KCksIHZhbGlkKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogbGlibmljZSBjdXJyZW50bHkg
ZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBJUHY2IGFkZHJlc3NlcyB2ZXJ5IHdlbGwuCisgICAgICAg
ICAgICAgICAgaWYgKHZhbGlkVVJMLmhvc3QoKS5zdGFydHNXaXRoKCdbJykpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHZhbGlkVVJMLnNldFVzZXIoc2Vy
dmVyLnVzZXJuYW1lKTsKKyAgICAgICAgICAgICAgICB2YWxpZFVSTC5zZXRQYXNzd29yZChzZXJ2
ZXIuY3JlZGVudGlhbCk7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAg
ICAgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJh
ZGQtdHVybi1zZXJ2ZXIiLCB2YWxpZFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAmcmVzdWx0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgR1NU
X1dBUk5JTkcoIlVuYWJsZSB0byB1c2UgVFVSTiBzZXJ2ZXI6ICVzIiwgdmFsaWRVUkwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXN0dW5T
ZXQgJiYgdXJsLnByb3RvY29sKCkuc3RhcnRzV2l0aCgic3R1biIpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byB2YWxpZCA9IHVybC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKS5yZXBsYWNlKCJzdHVu
OiIsICJzdHVuOi8vIik7CisgICAgICAgICAgICAgICAgVVJMIHZhbGlkVVJMKFVSTCgpLCB2YWxp
ZCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGxpYm5pY2UgY3VycmVudGx5IGRvZXNuJ3Qg
c2VlbSB0byBoYW5kbGUgSVB2NiBhZGRyZXNzZXMgdmVyeSB3ZWxsLgorICAgICAgICAgICAgICAg
IGlmICh2YWxpZFVSTC5ob3N0KCkuc3RhcnRzV2l0aCgnWycpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB2YWxpZFVSTC5zZXRVc2VyKHNlcnZlci51c2Vy
bmFtZSk7CisgICAgICAgICAgICAgICAgdmFsaWRVUkwuc2V0UGFzc3dvcmQoc2VydmVyLmNyZWRl
bnRpYWwpOworICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3dlYnJ0Y0Jpbi5nZXQoKSwg
InN0dW4tc2VydmVyIiwgdmFsaWRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7
CisgICAgICAgICAgICAgICAgc3R1blNldCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBXSVA6IGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9n
c3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMzAyCisgICAgR1NUX0ZJ
WE1FKCIlenUgY3VzdG9tIGNlcnRpZmljYXRlcyBub3QgcHJvcGFnYXRlZCB0byB3ZWJydGNiaW4i
LCBjb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5zaXplKCkpOworCisgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICBHU1Rf
REVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJFbmQtcG9pbnQgcmVhZHkiKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXN0YXJ0SWNl
KCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJyZXN0YXJ0aW5n
IElDRSIpOworICAgIC8vIFdJUCBpbiBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0
cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3RzLzE4NzcKKyAgICBHVW5pcXVl
UHRyPEdzdFN0cnVjdHVyZT4gb3B0aW9ucyhnc3Rfc3RydWN0dXJlX25ldygid2VicnRjYmluLW9m
ZmVyLW9wdGlvbnMiLCAiaWNlLXJlc3RhcnQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgbnVsbHB0
cikpOworICAgIGluaXRpYXRlKHRydWUsIFdURk1vdmUob3B0aW9ucykpOworfQorCitzdGF0aWMg
c3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UlRDU2RwVHlwZSwgU3RyaW5nPj4gZmV0Y2hEZXNjcmlw
dGlvbihHc3RFbGVtZW50KiB3ZWJydGNCaW4sIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaWYg
KCF3ZWJydGNCaW4pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBHVW5pcXVlT3V0UHRyPEdz
dFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVzY3JpcHRpb247CisgICAgZ19vYmplY3RfZ2V0
KHdlYnJ0Y0JpbiwgbWFrZVN0cmluZyhuYW1lLCAiLWRlc2NyaXB0aW9uIikudXRmOCgpLmRhdGEo
KSwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9u
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHBTdHJpbmco
Z3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoZGVzY3JpcHRpb24tPnNkcCkpOworICAgIEdTVF9UUkFD
RV9PQkpFQ1Qod2VicnRjQmluLCAiJXMtZGVzY3JpcHRpb24gU0RQOiAlcyIsIG5hbWUsIHNkcFN0
cmluZy5nZXQoKSk7CisgICAgcmV0dXJuIHsgeyBmcm9tU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZSgq
ZGVzY3JpcHRpb24uZ2V0KCkpLCBzZHBTdHJpbmcuZ2V0KCkgfSB9OworfQorCitzdGF0aWMgR3N0
V2ViUlRDU2lnbmFsaW5nU3RhdGUgZmV0Y2hTaWduYWxpbmdTdGF0ZShHc3RFbGVtZW50KiB3ZWJy
dGNCaW4pCit7CisgICAgR3N0V2ViUlRDU2lnbmFsaW5nU3RhdGUgc3RhdGU7CisgICAgZ19vYmpl
Y3RfZ2V0KHdlYnJ0Y0JpbiwgInNpZ25hbGluZy1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0cik7Cisj
aWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGVzYyhn
X2VudW1fdG9fc3RyaW5nKEdTVF9UWVBFX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEUsIHN0YXRlKSk7
CisgICAgR1NUX0RFQlVHX09CSkVDVCh3ZWJydGNCaW4sICJTaWduYWxpbmcgc3RhdGUgc2V0IHRv
ICVzIiwgZGVzYy5nZXQoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK2VudW0g
Y2xhc3MgR2F0aGVyU2lnbmFsaW5nU3RhdGUgeyBObywgWWVzIH07CitzdGF0aWMgc3RkOjpvcHRp
b25hbDxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkRlc2NyaXB0aW9uU3RhdGVzPiBkZXNjcmlwdGlv
bnNGcm9tV2ViUlRDQmluKEdzdEVsZW1lbnQqIHdlYnJ0Y0JpbiwgR2F0aGVyU2lnbmFsaW5nU3Rh
dGUgZ2F0aGVyU2lnbmFsaW5nU3RhdGUgPSBHYXRoZXJTaWduYWxpbmdTdGF0ZTo6Tm8pCit7Cisg
ICAgc3RkOjpvcHRpb25hbDxSVENTZHBUeXBlPiBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcFR5
cGUsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSwgY3VycmVudFJlbW90ZURlc2NyaXB0
aW9uU2RwVHlwZSwgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwVHlwZTsKKyAgICBTdHJpbmcg
Y3VycmVudExvY2FsRGVzY3JpcHRpb25TZHAsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwLCBj
dXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHAsIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvblNkcDsK
KyAgICBpZiAoYXV0byBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24o
d2VicnRjQmluLCAiY3VycmVudC1sb2NhbCIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5cGUsIGRl
c2NyaXB0aW9uXSA9ICpjdXJyZW50TG9jYWxEZXNjcmlwdGlvbjsKKyAgICAgICAgY3VycmVudExv
Y2FsRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgY3VycmVudExvY2FsRGVz
Y3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAgaWYgKGF1dG8g
cGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gPSBmZXRjaERlc2NyaXB0aW9uKHdlYnJ0Y0JpbiwgInBl
bmRpbmctbG9jYWwiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAq
cGVuZGluZ0xvY2FsRGVzY3JpcHRpb247CisgICAgICAgIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9u
U2RwVHlwZSA9IHNkcFR5cGU7CisgICAgICAgIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwID0g
V1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChhdXRvIGN1cnJlbnRSZW1vdGVE
ZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAiY3VycmVudC1yZW1vdGUi
KSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAqY3VycmVudFJlbW90
ZURlc2NyaXB0aW9uOworICAgICAgICBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlID0g
c2RwVHlwZTsKKyAgICAgICAgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwID0gV1RGTW92ZShk
ZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChhdXRvIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlv
biA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAicGVuZGluZy1yZW1vdGUiKSkgeworICAg
ICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAqcGVuZGluZ1JlbW90ZURlc2NyaXB0
aW9uOworICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsK
KyAgICAgICAgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwID0gV1RGTW92ZShkZXNjcmlwdGlv
bik7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxSVENTaWduYWxpbmdTdGF0ZT4gc2lnbmFs
aW5nU3RhdGU7CisgICAgaWYgKGdhdGhlclNpZ25hbGluZ1N0YXRlID09IEdhdGhlclNpZ25hbGlu
Z1N0YXRlOjpZZXMpCisgICAgICAgIHNpZ25hbGluZ1N0YXRlID0gdG9TaWduYWxpbmdTdGF0ZShm
ZXRjaFNpZ25hbGluZ1N0YXRlKHdlYnJ0Y0JpbikpOworCisgICAgcmV0dXJuIFBlZXJDb25uZWN0
aW9uQmFja2VuZDo6RGVzY3JpcHRpb25TdGF0ZXMgeworICAgICAgICBzaWduYWxpbmdTdGF0ZSwK
KyAgICAgICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHBUeXBlLCBjdXJyZW50TG9jYWxEZXNj
cmlwdGlvblNkcCwKKyAgICAgICAgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5k
aW5nTG9jYWxEZXNjcmlwdGlvblNkcCwKKyAgICAgICAgY3VycmVudFJlbW90ZURlc2NyaXB0aW9u
U2RwVHlwZSwgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwLAorICAgICAgICBwZW5kaW5nUmVt
b3RlRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHAKKyAgICB9
OworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlv
bihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQoreworICAgIHNldERl
c2NyaXB0aW9uKGRlc2NyaXB0aW9uLCB0cnVlLCBbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyld
IHsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmlu
KHByb3RlY3RlZFRoaXMtPm1fd2VicnRjQmluLmdldCgpLCBHYXRoZXJTaWduYWxpbmdTdGF0ZTo6
WWVzKTsKKyAgICAgICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiB0cmFuc3BvcnQ7
CisgICAgICAgIGdfb2JqZWN0X2dldChwcm90ZWN0ZWRUaGlzLT5tX3dlYnJ0Y0Jpbi5nZXQoKSwg
InNjdHAtdHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAg
IHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRp
b25TdWNjZWVkZWQoV1RGTW92ZShkZXNjcmlwdGlvbnMpLCB0cmFuc3BvcnQgPyBtYWtlVW5pcXVl
PEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kPihXVEZNb3ZlKHRyYW5zcG9ydCkpIDogbnVs
bHB0cik7CisgICAgfSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXShjb25zdCBHRXJyb3Iq
IGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHU1RfV0VCUlRD
X0VSUk9SX0lOVkFMSURfU1RBVEUpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5zZXRMb2NhbERlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IElu
dmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIHNldCBsb2NhbCBhbnN3ZXIgc2RwOiBubyBwZW5k
aW5nIHJlbW90ZSBkZXNjcmlwdGlvbi4iX3MgfSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRp
b25GYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vz
c2lvbiBsb2NhbCBkZXNjcmlwdGlvbiJfcyB9KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpzZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZCgpCit7CisgICAg
R1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWNraW5nIHJlbW90ZSBkZXNjcmlw
dGlvbiIpOworICAgIGF1dG8gZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0Jp
bihtX3dlYnJ0Y0Jpbi5nZXQoKSwgR2F0aGVyU2lnbmFsaW5nU3RhdGU6Olllcyk7CisgICAgR1Jl
ZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiB0cmFuc3BvcnQ7CisgICAgZ19vYmplY3RfZ2V0
KG1fd2VicnRjQmluLmdldCgpLCAic2N0cC10cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigp
LCBudWxscHRyKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRSZW1vdGVEZXNjcmlw
dGlvblN1Y2NlZWRlZChXVEZNb3ZlKGRlc2NyaXB0aW9ucyksIHRyYW5zcG9ydCA/IG1ha2VVbmlx
dWU8R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ+KFdURk1vdmUodHJhbnNwb3J0KSkgOiBu
dWxscHRyKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb1NldFJlbW90ZURl
c2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7Cisg
ICAgc2V0RGVzY3JpcHRpb24oJmRlc2NyaXB0aW9uLCBmYWxzZSwgW3Byb3RlY3RlZFRoaXMgPSBS
ZWYoKnRoaXMpXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnNldFJlbW90ZURlc2NyaXB0aW9u
U3VjY2VlZGVkKCk7CisgICAgfSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXShjb25zdCBH
RXJyb3IqIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHU1Rf
V0VCUlRDX0VSUk9SX0lOVkFMSURfU1RBVEUpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5t
X3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRSZW1vdGVEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRp
b24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBzZXQgcmVtb3RlIGFuc3dlciBzZHAi
X3MgfSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNv
bm5lY3Rpb25CYWNrZW5kLnNldFJlbW90ZURlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9w
ZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFwcGx5IHNlc3Npb24gcmVtb3RlIGRlc2NyaXB0aW9u
Il9zIH0pOworICAgIH0pOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0YXJ0TG9n
Z2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKworc3RydWN0IFNldERlc2NyaXB0aW9uQ2FsbERhdGEg
eworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICBTZXREZXNjcmlwdGlv
bkNhbGxEYXRhKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQmIGVuZFBvaW50LCBGdW5jdGlvbjx2b2lk
KCk+JiYgc3VjY2Vzc0NhbGxiYWNrLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEdFcnJvciopPiYmIGZh
aWx1cmVDYWxsYmFjaykKKyAgICAgICAgOiBzdWNjZXNzQ2FsbGJhY2soV1RGTW92ZShzdWNjZXNz
Q2FsbGJhY2spKQorICAgICAgICAsIGZhaWx1cmVDYWxsYmFjayhXVEZNb3ZlKGZhaWx1cmVDYWxs
YmFjaykpCisgICAgICAgICwgZW5kUG9pbnQoZW5kUG9pbnQpIHsgfQorCisgICAgRnVuY3Rpb248
dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2s7CisgICAgRnVuY3Rpb248dm9pZChjb25zdCBHRXJyb3Iq
KT4gZmFpbHVyZUNhbGxiYWNrOworICAgIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQmIGVuZFBvaW50
OworfTsKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXREZXNjcmlwdGlvbihjb25z
dCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uLCBib29sIGlzTG9jYWwsIEZ1bmN0
aW9uPHZvaWQoKT4mJiBzdWNjZXNzQ2FsbGJhY2ssIEZ1bmN0aW9uPHZvaWQoY29uc3QgR0Vycm9y
Kik+JiYgZmFpbHVyZUNhbGxiYWNrKQoreworICAgIEdzdFNEUE1lc3NhZ2UqIG1lc3NhZ2U7Cisg
ICAgYXV0byBzZHBUeXBlID0gUlRDU2RwVHlwZTo6T2ZmZXI7CisKKyAgICBpZiAoZGVzY3JpcHRp
b24pIHsKKyAgICAgICAgaWYgKGdzdF9zZHBfbWVzc2FnZV9uZXdfZnJvbV90ZXh0KHJlaW50ZXJw
cmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRlc2NyaXB0aW9uLT5zZHAoKS5jaGFyYWN0ZXJzOCgpKSwg
Jm1lc3NhZ2UpICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjayhu
dWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZHBUeXBl
ID0gZGVzY3JpcHRpb24tPnR5cGUoKTsKKyAgICB9IGVsc2UgaWYgKGdzdF9zZHBfbWVzc2FnZV9u
ZXcoJm1lc3NhZ2UpICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAgZmFpbHVyZUNhbGxiYWNrKG51
bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc0xvY2FsKQorICAg
ICAgICBzdG9yZVJlbW90ZU1MaW5lSW5mbyhtZXNzYWdlKTsKKworICAgIGF1dG8gdHlwZSA9IHRv
U2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShzZHBUeXBlKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJDcmVhdGluZyAlcyBzZXNzaW9uIGZvciBTRFAgJXMiLCBpc0xvY2Fs
ID8gImxvY2FsIiA6ICJyZW1vdGUiLCBnc3Rfd2VicnRjX3NkcF90eXBlX3RvX3N0cmluZyh0eXBl
KSk7CisKKyAgICBHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gc2Vzc2lv
bkRlc2NyaXB0aW9uKGdzdF93ZWJydGNfc2Vzc2lvbl9kZXNjcmlwdGlvbl9uZXcodHlwZSwgbWVz
c2FnZSkpOworICAgIGF1dG8gc2lnbmFsTmFtZSA9IG1ha2VTdHJpbmcoInNldC0iLCBpc0xvY2Fs
ID8gImxvY2FsIiA6ICJyZW1vdGUiLCAiLWRlc2NyaXB0aW9uIik7CisgICAgYXV0byBkYXRhID0g
bWFrZVVuaXF1ZTxTZXREZXNjcmlwdGlvbkNhbGxEYXRhPigqdGhpcywgV1RGTW92ZShzdWNjZXNz
Q2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOworICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgc2lnbmFsTmFtZS5hc2NpaSgpLmRhdGEoKSwgc2Vz
c2lvbkRlc2NyaXB0aW9uLmdldCgpLCBnc3RfcHJvbWlzZV9uZXdfd2l0aF9jaGFuZ2VfZnVuYyhb
XShHc3RQcm9taXNlKiByYXdQcm9taXNlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBz
dGQ6OnVuaXF1ZV9wdHI8U2V0RGVzY3JpcHRpb25DYWxsRGF0YT4gZGF0YShyZWludGVycHJldF9j
YXN0PFNldERlc2NyaXB0aW9uQ2FsbERhdGEqPih1c2VyRGF0YSkpOworICAgICAgICBhdXRvIHBy
b21pc2UgPSBhZG9wdEdSZWYocmF3UHJvbWlzZSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZ3N0
X3Byb21pc2Vfd2FpdChwcm9taXNlLmdldCgpKTsKKyAgICAgICAgY29uc3QgYXV0byogcmVwbHkg
PSBnc3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIGlmIChyZXN1
bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQgfHwgKHJlcGx5ICYmIGdzdF9zdHJ1Y3R1
cmVfaGFzX2ZpZWxkKHJlcGx5LCAiZXJyb3IiKSkpIHsKKyAgICAgICAgICAgIEdVbmlxdWVPdXRQ
dHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIGlmIChyZXBseSkgeworICAgICAgICAgICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJlcGx5LCAiZXJyb3IiLCBHX1RZUEVfRVJST1IsICZlcnJv
ci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChk
YXRhLT5lbmRQb2ludC5waXBlbGluZSgpLCAiVW5hYmxlIHRvIHNldCBkZXNjcmlwdGlvbiwgZXJy
b3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbZXJyb3IgPSBlcnJvci5nZXQoKSwgcHJvdGVjdGVkVGhpcyA9IFJlZihk
YXRhLT5lbmRQb2ludCksIGZhaWx1cmVDYWxsYmFjayA9IFdURk1vdmUoZGF0YS0+ZmFpbHVyZUNh
bGxiYWNrKV0geworICAgICAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQo
KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGZhaWx1cmVD
YWxsYmFjayhlcnJvcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKGRh
dGEtPmVuZFBvaW50KSwgc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShkYXRhLT5zdWNjZXNzQ2Fs
bGJhY2spXSB7CisgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCk7Cisg
ICAgICAgIH0pOworICAgIH0sIGRhdGEucmVsZWFzZSgpLCBudWxscHRyKSk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcmVSZW1vdGVNTGluZUluZm8oR3N0U0RQTWVzc2Fn
ZSogbWVzc2FnZSkKK3sKKyAgICBtX3JlbW90ZU1MaW5lSW5mb3MuY2xlYXIoKTsKKyAgICB1bnNp
Z25lZCB0b3RhbE1lZGlhcyA9IGdzdF9zZHBfbWVzc2FnZV9tZWRpYXNfbGVuKG1lc3NhZ2UpOwor
ICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxNZWRpYXMpOworICAg
IEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlN0b3JpbmcgJXUgcmVtb3RlIHBl
bmRpbmcgbWxpbmVzIiwgdG90YWxNZWRpYXMpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCB0b3RhbE1lZGlhczsgaSsrKSB7CisgICAgICAgIGNvbnN0IEdzdFNEUE1lZGlhKiBtZWRpYSA9
IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEobWVzc2FnZSwgaSk7CisgICAgICAgIGNvbnN0IGNo
YXIqIHR5cCA9IGdzdF9zZHBfbWVkaWFfZ2V0X21lZGlhKG1lZGlhKTsKKyAgICAgICAgaWYgKCFn
X3N0cl9lcXVhbCh0eXAsICJhdWRpbyIpICYmICFnX3N0cl9lcXVhbCh0eXAsICJ2aWRlbyIpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisg
ICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbWVkaWFSZXByZXNlbnRhdGlvbihnc3Rfc2RwX21lZGlh
X2FzX3RleHQobWVkaWEpKTsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIlByb2Nlc3NpbmcgbWVkaWE6XG4lcyIsIG1lZGlhUmVwcmVzZW50YXRpb24uZ2V0KCkpOwor
I2VuZGlmCisgICAgICAgIGNvbnN0IGNoYXIqIG1pZCA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJp
YnV0ZV92YWwobWVkaWEsICJtaWQiKTsKKyAgICAgICAgaWYgKCFtaWQpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBib29sIGlzSW5hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgZm9y
ICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgZ3N0X3NkcF9tZWRpYV9hdHRyaWJ1dGVzX2xlbihtZWRp
YSk7IGlpKyspIHsKKyAgICAgICAgICAgIGNvbnN0IEdzdFNEUEF0dHJpYnV0ZSogYXR0ciA9IGdz
dF9zZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZShtZWRpYSwgaWkpOworICAgICAgICAgICAgaWYgKCFn
X3N0cmNtcDAoYXR0ci0+a2V5LCAiaW5hY3RpdmUiKSkgeworICAgICAgICAgICAgICAgIGlzSW5h
Y3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmIChpc0luYWN0aXZlKSB7CisgICAgICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTa2lwcGluZyBpbmFjdGl2ZSBtZWRpYSIpOworICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBtX21lZGlhRm9yTWlkLnNl
dChTdHJpbmcobWlkKSwgZ19zdHJfZXF1YWwodHlwLCAiYXVkaW8iKSA/IFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OkF1ZGlvIDogUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pOwor
CisgICAgICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0
LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTkwNworICAgICAgICBpZiAoc2RwTWVkaWFI
YXNBdHRyaWJ1dGVLZXkobWVkaWEsICJpY2UtbGl0ZSIpKSB7CisgICAgICAgICAgICBHUmVmUHRy
PEdPYmplY3Q+IGljZTsKKyAgICAgICAgICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQo
KSwgImljZS1hZ2VudCIsICZpY2Uub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICAgICAgZ19v
YmplY3Rfc2V0KGljZS5nZXQoKSwgImljZS1saXRlIiwgVFJVRSwgbnVsbHB0cik7CisgICAgICAg
IH0KKworICAgICAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkp
OworICAgICAgICBWZWN0b3I8aW50PiBwYXlsb2FkVHlwZXM7CisgICAgICAgIHVuc2lnbmVkIHRv
dGFsRm9ybWF0cyA9IGdzdF9zZHBfbWVkaWFfZm9ybWF0c19sZW4obWVkaWEpOworICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJNZWRpYSAlcyBoYXMgJXUgZm9ybWF0
cyIsIHR5cCwgdG90YWxGb3JtYXRzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8
IHRvdGFsRm9ybWF0czsgaisrKSB7CisgICAgICAgICAgICBhdXRvIGZvcm1hdCA9IFN0cmluZyhn
c3Rfc2RwX21lZGlhX2dldF9mb3JtYXQobWVkaWEsIGopKTsKKyAgICAgICAgICAgIGF1dG8gcGF5
bG9hZFR5cGUgPSBwYXJzZUludGVnZXI8aW50Pihmb3JtYXQpOworICAgICAgICAgICAgaWYgKCFw
YXlsb2FkVHlwZSB8fCAhKnBheWxvYWRUeXBlKSB7CisgICAgICAgICAgICAgICAgR1NUX1dBUk5J
TkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJJbnZhbGlkIHBheWxvYWQgdHlwZTogJXMiLCBm
b3JtYXQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBhdXRvIGZvcm1hdENhcHMgPSBhZG9wdEdSZWYoZ3N0X3NkcF9t
ZWRpYV9nZXRfY2Fwc19mcm9tX21lZGlhKG1lZGlhLCAqcGF5bG9hZFR5cGUpKTsKKyAgICAgICAg
ICAgIGlmICghZm9ybWF0Q2FwcykgeworICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVD
VChtX3BpcGVsaW5lLmdldCgpLCAiTm8gY2FwcyBmb3VuZCBmb3IgcGF5bG9hZCB0eXBlICVkIiwg
KnBheWxvYWRUeXBlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgLy8gUmVsYXkgU0RQIGF0dHJpYnV0ZXMgdG8gdGhlIGNhcHMsIHRoaXMg
aXMgc3BlY2lhbGx5IHVzZWZ1bCBzbyB0aGF0IGVsZW1lbnRzIGluCisgICAgICAgICAgICAvLyB3
ZWJydGNiaW4gd2lsbCBiZSBhYmxlIHRvIGVuYWJsZSBSVFAgaGVhZGVyIGV4dGVuc2lvbnMuCisg
ICAgICAgICAgICBnc3Rfc2RwX21lZGlhX2F0dHJpYnV0ZXNfdG9fY2FwcyhtZWRpYSwgZm9ybWF0
Q2Fwcy5nZXQoKSk7CisKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZChjYXBzLmdldCgpLCBm
b3JtYXRDYXBzLmxlYWtSZWYoKSk7CisgICAgICAgICAgICBtX3B0Q291bnRlciA9IHN0ZDo6bWF4
KG1fcHRDb3VudGVyLCAqcGF5bG9hZFR5cGUgKyAxKTsKKyAgICAgICAgICAgIHBheWxvYWRUeXBl
cy5hcHBlbmQoKnBheWxvYWRUeXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRv
dGFsQ2FwcyA9IGdzdF9jYXBzX2dldF9zaXplKGNhcHMuZ2V0KCkpOworICAgICAgICBpZiAodG90
YWxDYXBzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdG90YWxDYXBz
OyBqKyspIHsKKyAgICAgICAgICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9j
YXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgaik7CisgICAgICAgICAgICAgICAgZ3N0X3N0
cnVjdHVyZV9zZXRfbmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cCIpOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAi
Q2FjaGluZyBwYXlsb2FkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKKyAg
ICAgICAgICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5hcHBlbmQoeyBXVEZNb3ZlKGNhcHMpLCBmYWxz
ZSwgV1RGTW92ZShwYXlsb2FkVHlwZXMpIH0pOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNvbmZpZ3VyZUFuZExpbmtTb3VyY2UoUmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyJiBzb3VyY2UpCit7CisgICAgYXV0byBjYXBzID0g
c291cmNlLmFsbG93ZWRDYXBzKCk7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UGVuZGlu
Z01MaW5lSW5mbywgR1JlZlB0cjxHc3RDYXBzPj4+IGZvdW5kOworICAgIGZvciAoYXV0byYgbUxp
bmVJbmZvIDogbV9yZW1vdGVNTGluZUluZm9zKSB7CisgICAgICAgIGlmIChtTGluZUluZm8uaXNV
c2VkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0g
MDsgaSA8IGdzdF9jYXBzX2dldF9zaXplKG1MaW5lSW5mby5jYXBzLmdldCgpKTsgaSsrKSB7Cisg
ICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKG1MaW5l
SW5mby5jYXBzLmdldCgpLCBpKTsKKyAgICAgICAgICAgIGF1dG8gY2FwczIgPSBhZG9wdEdSZWYo
Z3N0X2NhcHNfbmV3X2Z1bGwoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSksIG51bGxwdHIp
KTsKKyAgICAgICAgICAgIGF1dG8gaW50ZXJzZWN0ZWQgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfaW50
ZXJzZWN0KGNhcHMuZ2V0KCksIGNhcHMyLmdldCgpKSk7CisgICAgICAgICAgICBpZiAoIWdzdF9j
YXBzX2lzX2VtcHR5KGludGVyc2VjdGVkLmdldCgpKSkgeworICAgICAgICAgICAgICAgIGZvdW5k
ID0gc3RkOjptYWtlX3BhaXIobUxpbmVJbmZvLCBXVEZNb3ZlKGludGVyc2VjdGVkKSk7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGZvdW5kLmhhc192YWx1ZSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYm9v
bCBwYXlsb2FkVHlwZVdhc1NldCA9IGZhbHNlOworICAgIGlmIChmb3VuZCkgeworICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJVbnVzZWQgYW5kIGNvbXBhdGlibGUg
Y2FwcyBmb3VuZCBmb3IgJSIgR1NUX1BUUl9GT1JNQVQgIi4uLiAlIiBHU1RfUFRSX0ZPUk1BVCwg
Y2Fwcy5nZXQoKSwgZm91bmQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIHBheWxvYWRUeXBlV2Fz
U2V0ID0gc291cmNlLnNldFBheWxvYWRUeXBlKGZvdW5kLT5zZWNvbmQpOworICAgICAgICBmb3Vu
ZC0+Zmlyc3QuaXNVc2VkID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGF5bG9hZFR5cGVX
YXNTZXQgPSBzb3VyY2Uuc2V0UGF5bG9hZFR5cGUoY2Fwcyk7CisKKyAgICBpZiAoIXBheWxvYWRU
eXBlV2FzU2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNvdXJjZS5wYWQoKSkgewor
ICAgICAgICBzb3VyY2Uuc2V0U2lua1BhZChyZXF1ZXN0UGFkKG1fcmVxdWVzdFBhZENvdW50ZXIs
IHNvdXJjZS5hbGxvd2VkQ2FwcygpKSk7CisgICAgICAgIG1fcmVxdWVzdFBhZENvdW50ZXIrKzsK
KyAgICB9CisKKyAgICBhdXRvJiBzaW5rUGFkID0gc291cmNlLnBhZCgpOworICAgIFJFTEVBU0Vf
QVNTRVJUKCFnc3RfcGFkX2lzX2xpbmtlZChzaW5rUGFkLmdldCgpKSk7CisgICAgYXV0byBzb3Vy
Y2VCaW4gPSBzb3VyY2UuYmluKCk7CisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1fcGlw
ZWxpbmUuZ2V0KCkpLCBzb3VyY2VCaW4uZ2V0KCkpOworICAgIHNvdXJjZS5saW5rKCk7CisKKyAg
ICBHVW5pcXVlUHRyPGNoYXI+IHBhZElkKGdzdF9wYWRfZ2V0X25hbWUoc2lua1BhZC5nZXQoKSkp
OworICAgIGF1dG8gZG90RmlsZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3Bp
cGVsaW5lLmdldCgpKSwgIi5vdXRnb2luZy0iLCBwYWRJZC5nZXQoKSk7CisgICAgR1NUX0RFQlVH
X0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9E
RUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK0dS
ZWZQdHI8R3N0UGFkPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXF1ZXN0UGFkKHVuc2lnbmVk
IG1saW5lSW5kZXgsIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGFsbG93ZWRDYXBzKQoreworICAg
IGF1dG8gcGFkSWQgPSBtYWtlU3RyaW5nKCJzaW5rXyIsIG1saW5lSW5kZXgpOworICAgIGF1dG8g
Y2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19jb3B5KGFsbG93ZWRDYXBzLmdldCgpKSk7CisKKyAg
ICBnc3RfY2Fwc19tYXBfaW5fcGxhY2UoY2Fwcy5nZXQoKSwgW10oR3N0Q2Fwc0ZlYXR1cmVzKiwg
R3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7
CisgICAgICAgIGF1dG8qIGVuZFBvaW50ID0gcmVpbnRlcnByZXRfY2FzdDxHU3RyZWFtZXJNZWRp
YUVuZHBvaW50Kj4odXNlckRhdGEpOworICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1
cmUsICJwYXlsb2FkIiwgR19UWVBFX0lOVCwgZW5kUG9pbnQtPm1fcHRDb3VudGVyKyssIG51bGxw
dHIpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9LCB0aGlzKTsKKworICAgIC8vIEZJWE1F
OiBSZXN0cmljdGluZyBjYXBzIGFuZCBjb2RlYy1wcmVmZXJlbmNlcyBicmVha3MgY2FwcyBuZWdv
dGlhdGlvbiBvZiBvdXRnb2luZyBzb3VyY2VzIGluCisgICAgLy8gc29tZSBjYXNlIChqaXRzaSku
CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVxdWVzdGluZyBwYWQg
JXMgcmVzdHJpY3RlZCB0byAlIiBHU1RfUFRSX0ZPUk1BVCwgcGFkSWQudXRmOCgpLmRhdGEoKSwg
Y2Fwcy5nZXQoKSk7CisgICAgYXV0byogcGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9nZXRfcGFk
X3RlbXBsYXRlKG1fd2VicnRjQmluLmdldCgpLCAic2lua18ldSIpOworICAgIGF1dG8gc2lua1Bh
ZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZChtX3dlYnJ0Y0Jpbi5nZXQoKSwg
cGFkVGVtcGxhdGUsIHBhZElkLnV0ZjgoKS5kYXRhKCksIGNhcHMuZ2V0KCkpKTsKKyAgICBHUmVm
UHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiB0cmFuc2NlaXZlcjsKKyAgICBnX29iamVjdF9n
ZXQoc2lua1BhZC5nZXQoKSwgInRyYW5zY2VpdmVyIiwgJnRyYW5zY2VpdmVyLm91dFB0cigpLCBu
dWxscHRyKTsKKyAgICBnX29iamVjdF9zZXQodHJhbnNjZWl2ZXIuZ2V0KCksICJjb2RlYy1wcmVm
ZXJlbmNlcyIsIGNhcHMuZ2V0KCksIG51bGxwdHIpOworICAgIHJldHVybiBzaW5rUGFkOworfQor
Citib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYWNrKEdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQmIHNlbmRlciwgTWVkaWFTdHJlYW1UcmFjayYgdHJhY2ssIGNvbnN0IEZpeGVkVmVj
dG9yPFN0cmluZz4mKQoreworICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSBz
b3VyY2U7CisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IHJ0Y1NlbmRlcjsKKworICAg
IGlmICh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNBdWRpbygpKSB7CisgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyBvdXRnb2luZyBhdWRpbyBzb3VyY2Ui
KTsKKyAgICAgICAgYXV0byBhdWRpb1NvdXJjZSA9IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAgY29uZmln
dXJlQW5kTGlua1NvdXJjZShhdWRpb1NvdXJjZSk7CisKKyAgICAgICAgcnRjU2VuZGVyID0gYXVk
aW9Tb3VyY2UtPnNlbmRlcigpOworICAgICAgICBzb3VyY2UgPSBXVEZNb3ZlKGF1ZGlvU291cmNl
KTsKKyAgICB9IGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cmFjay5wcml2YXRlVHJh
Y2soKS5oYXNWaWRlbygpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdl
dCgpLCAiQWRkaW5nIG91dGdvaW5nIHZpZGVvIHNvdXJjZSIpOworICAgICAgICBhdXRvIHZpZGVv
U291cmNlID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJh
Y2sucHJpdmF0ZVRyYWNrKCkpOworICAgICAgICBjb25maWd1cmVBbmRMaW5rU291cmNlKHZpZGVv
U291cmNlKTsKKworICAgICAgICBydGNTZW5kZXIgPSB2aWRlb1NvdXJjZS0+c2VuZGVyKCk7Cisg
ICAgICAgIHNvdXJjZSA9IFdURk1vdmUodmlkZW9Tb3VyY2UpOworICAgIH0KKworICAgIHNlbmRl
ci5zZXRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKKworICAgIGlmIChhdXRvIHJ0cFNlbmRlciA9
IHNlbmRlci5ydGNTZW5kZXIoKSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxp
bmUuZ2V0KCksICJBbHJlYWR5IGhhcyBhIHNlbmRlci4iKTsKKyAgICAgICAgcmV0dXJuIHRydWU7
CisgICAgfQorCisgICAgc2VuZGVyLnNldFJUQ1NlbmRlcihXVEZNb3ZlKHJ0Y1NlbmRlcikpOwor
CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU2VuZGVyIGNvbmZpZ3Vy
ZWQiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpyZW1vdmVUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIpCit7CisgICAg
R1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVtb3ZpbmcgdHJhY2siKTsKKyAg
ICBhdXRvIGJpbiA9IHNlbmRlci5zdG9wU291cmNlKCk7CisgICAgaWYgKGJpbikKKyAgICAgICAg
Z3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBiaW4uZ2V0KCkp
OworICAgIHNlbmRlci5jbGVhclNvdXJjZSgpOworICAgIG9uTmVnb3RpYXRpb25OZWVkZWQoKTsK
K30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0ZU9mZmVyKGNvbnN0IFJU
Q09mZmVyT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICAvLyBodHRwczovL2dpdGxhYi5mcmVlZGVz
a3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3RzLzE4NzcK
KyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gb2ZmZXJPcHRpb25zKGdzdF9zdHJ1Y3R1cmVf
bmV3KCJ3ZWJydGNiaW4tb2ZmZXItb3B0aW9ucyIsICJpY2UtcmVzdGFydCIsIEdfVFlQRV9CT09M
RUFOLCBvcHRpb25zLmljZVJlc3RhcnQsIG51bGxwdHIpKTsKKyAgICAvLyBGSVhNRTogUGx1bWIg
b3B0aW9ucy52b2ljZUFjdGl2aXR5RGV0ZWN0aW9uLgorICAgIGluaXRpYXRlKHRydWUsIFdURk1v
dmUob2ZmZXJPcHRpb25zKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9D
cmVhdGVBbnN3ZXIoKQoreworICAgIGluaXRpYXRlKGZhbHNlLCBudWxscHRyKTsKK30KKwordm9p
ZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWF0ZShib29sIGlzSW5pdGlhdG9yLCBHVW5p
cXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBvcHRpb25zKQoreworICAgIG1faXNJbml0aWF0b3IgPSBp
c0luaXRpYXRvcjsKKyAgICBjb25zdCBjaGFyKiB0eXBlID0gaXNJbml0aWF0b3IgPyAib2ZmZXIi
IDogImFuc3dlciI7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ3Jl
YXRpbmcgJXMiLCB0eXBlKTsKKyAgICBhdXRvIHNpZ25hbE5hbWUgPSBtYWtlU3RyaW5nKCJjcmVh
dGUtIiwgdHlwZSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgp
LCBzaWduYWxOYW1lLmFzY2lpKCkuZGF0YSgpLCBvcHRpb25zLnJlbGVhc2UoKSwgZ3N0X3Byb21p
c2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlzZSwgZ3BvaW50
ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byogZW5kcG9pbnQgPSByZWludGVycHJldF9jYXN0
PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqPih1c2VyRGF0YSk7CisgICAgICAgIGF1dG8gcHJvbWlz
ZSA9IGFkb3B0R1JlZihyYXdQcm9taXNlKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBnc3RfcHJv
bWlzZV93YWl0KHByb21pc2UuZ2V0KCkpOworICAgICAgICBpZiAocmVzdWx0ICE9IEdTVF9QUk9N
SVNFX1JFU1VMVF9SRVBMSUVEKSB7CisgICAgICAgICAgICBlbmRwb2ludC0+Y3JlYXRlU2Vzc2lv
bkRlc2NyaXB0aW9uRmFpbGVkKHsgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBhdXRvKiByZXBseSA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9t
aXNlLmdldCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVwbHkpOworICAgICAgICBpZiAo
Z3N0X3N0cnVjdHVyZV9oYXNfZmllbGQocmVwbHksICJlcnJvciIpKSB7CisgICAgICAgICAgICBH
VW5pcXVlT3V0UHRyPEdFcnJvcj4gcHJvbWlzZUVycm9yOworICAgICAgICAgICAgZ3N0X3N0cnVj
dHVyZV9nZXQocmVwbHksICJlcnJvciIsIEdfVFlQRV9FUlJPUiwgJnByb21pc2VFcnJvci5vdXRQ
dHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBHVW5pcXVlUHRyPEdFcnJvcj4gZXJyb3IocHJv
bWlzZUVycm9yLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBlbmRwb2ludC0+Y3JlYXRlU2Vzc2lv
bkRlc2NyaXB0aW9uRmFpbGVkKFdURk1vdmUoZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIqIHR5cGUgPSBlbmRwb2ludC0+bV9pc0lu
aXRpYXRvciA/ICJvZmZlciIgOiAiYW5zd2VyIjsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHc3RX
ZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IHNlc3Npb25EZXNjcmlwdGlvbjsKKyAgICAgICAgZ3N0
X3N0cnVjdHVyZV9nZXQocmVwbHksIHR5cGUsIEdTVF9UWVBFX1dFQlJUQ19TRVNTSU9OX0RFU0NS
SVBUSU9OLCAmc2Vzc2lvbkRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKworI2lmbmRl
ZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHAoZ3N0
X3NkcF9tZXNzYWdlX2FzX3RleHQoc2Vzc2lvbkRlc2NyaXB0aW9uLT5zZHApKTsKKyAgICAgICAg
R1NUX0RFQlVHX09CSkVDVChlbmRwb2ludC0+cGlwZWxpbmUoKSwgIkNyZWF0ZWQgJXM6ICVzIiwg
dHlwZSwgc2RwLmdldCgpKTsKKyNlbmRpZgorICAgICAgICBHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nl
c3Npb25EZXNjcmlwdGlvbj4gZGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uLnJlbGVhc2Uo
KSk7CisgICAgICAgIGVuZHBvaW50LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNjZWVkZWQo
V1RGTW92ZShkZXNjcmlwdGlvbikpOworICAgIH0sIHRoaXMsIG51bGxwdHIpKTsKK30KKwordm9p
ZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnZXRTdGF0cyhHc3RQYWQqIHBhZCwgUmVmPERlZmVy
cmVkUHJvbWlzZT4mJiBwcm9taXNlKQoreworICAgIG1fc3RhdHNDb2xsZWN0b3ItPmdldFN0YXRz
KFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyld
KGF1dG8mJiByZXBvcnQpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkp
OworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkgfHwgIXJlcG9ydCkKKyAg
ICAgICAgICAgIHJldHVybjsKKworICAgICAgICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFj
ZTxSVENTdGF0c1JlcG9ydD4+KHJlcG9ydC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9LCBwYWQp
OworfQorCitNZWRpYVN0cmVhbSYgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6bWVkaWFTdHJlYW1G
cm9tUlRDU3RyZWFtKFN0cmluZyBsYWJlbCkKK3sKKyAgICBhdXRvIG1lZGlhU3RyZWFtID0gbV9y
ZW1vdGVTdHJlYW1zQnlJZC5lbnN1cmUobGFiZWwsIFtsYWJlbCwgdGhpc10oKSBtdXRhYmxlIHsK
KyAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcGVlckNvbm5l
Y3Rpb25CYWNrZW5kLmNvbm5lY3Rpb24oKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAg
ICAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZShkb2N1bWVudCwgTWVkaWFTdHJlYW1Qcml2
YXRlOjpjcmVhdGUoZG9jdW1lbnQubG9nZ2VyKCksIHsgfSwgV1RGTW92ZShsYWJlbCkpKTsKKyAg
ICB9KTsKKyAgICByZXR1cm4gKm1lZGlhU3RyZWFtLml0ZXJhdG9yLT52YWx1ZTsKK30KKwordm9p
ZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRSZW1vdGVTdHJlYW0oR3N0UGFkKiBwYWQpCit7
CisgICAgbV9wZW5kaW5nSW5jb21pbmdTdHJlYW1zKys7CisKKyAgICBhdXRvIGNhcHMgPSBhZG9w
dEdSZWYoZ3N0X3BhZF9xdWVyeV9jYXBzKHBhZCwgbnVsbHB0cikpOworICAgIGNvbnN0IGNoYXIq
IG1lZGlhVHlwZSA9IGNhcHNNZWRpYVR5cGUoY2Fwcy5nZXQoKSk7CisgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIHJlbW90ZSAlcyBzdHJlYW0gdG8gJSIgR1NU
X1BUUl9GT1JNQVQgIiAldSBwZW5kaW5nIGluY29taW5nIHN0cmVhbXMsIGNhcHM6ICUiIEdTVF9Q
VFJfRk9STUFULCBtZWRpYVR5cGUsIHBhZCwgbV9wZW5kaW5nSW5jb21pbmdTdHJlYW1zLCBjYXBz
LmdldCgpKTsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHJ0Y1RyYW5z
Y2VpdmVyOworICAgIGdfb2JqZWN0X2dldChwYWQsICJ0cmFuc2NlaXZlciIsICZydGNUcmFuc2Nl
aXZlci5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICBhdXRvKiB0cmFuc2NlaXZlciA9IG1fcGVl
ckNvbm5lY3Rpb25CYWNrZW5kLmV4aXN0aW5nVHJhbnNjZWl2ZXIoWyZdKGF1dG8mIHRyYW5zY2Vp
dmVyQmFja2VuZCkgeworICAgICAgICByZXR1cm4gcnRjVHJhbnNjZWl2ZXIuZ2V0KCkgPT0gdHJh
bnNjZWl2ZXJCYWNrZW5kLnJ0Y1RyYW5zY2VpdmVyKCk7CisgICAgfSk7CisgICAgaWYgKCF0cmFu
c2NlaXZlcikgeworICAgICAgICBhdXRvIHR5cGUgPSBkb0NhcHNIYXZlVHlwZShjYXBzLmdldCgp
LCAiYXVkaW8iKSA/IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvIDogUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW87CisgICAgICAgIHRyYW5zY2VpdmVyID0gJm1fcGVlckNv
bm5lY3Rpb25CYWNrZW5kLm5ld1JlbW90ZVRyYW5zY2VpdmVyKG1ha2VVbmlxdWU8R1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJ0Y1RyYW5zY2VpdmVyKSksIHR5cGUpOwor
ICAgIH0KKworICAgIEdVbmlxdWVPdXRQdHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBk
ZXNjcmlwdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCksICJyZW1vdGUt
ZGVzY3JpcHRpb24iLCAmZGVzY3JpcHRpb24ub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgdW5z
aWduZWQgbUxpbmVJbmRleDsKKyAgICBnX29iamVjdF9nZXQocnRjVHJhbnNjZWl2ZXIuZ2V0KCks
ICJtbGluZWluZGV4IiwgJm1MaW5lSW5kZXgsIG51bGxwdHIpOworICAgIGNvbnN0IGF1dG8qIG1l
ZGlhID0gZ3N0X3NkcF9tZXNzYWdlX2dldF9tZWRpYShkZXNjcmlwdGlvbi0+c2RwLCBtTGluZUlu
ZGV4KTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHNkcChnc3Rfc2RwX21lZGlhX2FzX3RleHQobWVk
aWEpKTsKKyAgICBhdXRvIHNkcFN0cmluZyA9IG1ha2VTdHJpbmcoc2RwLmdldCgpKTsKKworICAg
IEdVbmlxdWVQdHI8Z2NoYXI+IG5hbWUoZ3N0X3BhZF9nZXRfbmFtZShwYWQpKTsKKyAgICBTdHJp
bmcgbGFiZWwobmFtZS5nZXQoKSk7CisgICAgYXV0byBrZXkgPSBtYWtlU3RyaW5nKCJtc2lkOiIp
OworICAgIGF1dG8gbGluZXMgPSBzZHBTdHJpbmcuc3BsaXQoJ1xuJyk7CisgICAgZm9yIChhdXRv
JiBsaW5lIDogbGluZXMpIHsKKyAgICAgICAgYXV0byBpID0gbGluZS5maW5kKGtleSk7CisgICAg
ICAgIGlmIChpICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBhdXRvIHRtcCA9IGxpbmUuc3Vi
c3RyaW5nKGkgKyBrZXkuYXNjaWkoKS5sZW5ndGgoKSk7CisgICAgICAgICAgICBsYWJlbCA9IHRt
cC5zdWJzdHJpbmcoMCwgdG1wLmZpbmQoJyAnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgfQorICAgIH0KKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIm1z
aWQ6ICVzIiwgbGFiZWwuYXNjaWkoKS5kYXRhKCkpOworCisgICAgR3N0RWxlbWVudCogYmluID0g
bnVsbHB0cjsKKyAgICBhdXRvJiB0cmFjayA9IHRyYW5zY2VpdmVyLT5yZWNlaXZlcigpLnRyYWNr
KCk7CisgICAgYXV0byYgc291cmNlID0gdHJhY2sucHJpdmF0ZVRyYWNrKCkuc291cmNlKCk7Cisg
ICAgaWYgKHNvdXJjZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgYmluID0gc3Rh
dGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4oc291cmNlKS5i
aW4oKTsKKyAgICBlbHNlIGlmIChzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkpCisgICAg
ICAgIGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
ciY+KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0
KCkpLCBiaW4pOworICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChiaW4sICJzaW5rIikpOworICAgIGdzdF9wYWRfbGluayhwYWQsIHNpbmtQYWQu
Z2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoYmluKTsKKwor
ICAgIHRyYWNrLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgc291cmNlLnNldE11dGVkKGZhbHNlKTsK
KworICAgIGF1dG8mIG1lZGlhU3RyZWFtID0gbWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFtKGxhYmVs
KTsKKyAgICBtZWRpYVN0cmVhbS5hZGRUcmFja0Zyb21QbGF0Zm9ybSh0cmFjayk7CisgICAgbV9w
ZW5kaW5nU3RyZWFtcy5hcHBlbmQoJm1lZGlhU3RyZWFtKTsKKworICAgIGF1dG8gZG90RmlsZU5h
bWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwgIi5pbmNv
bWluZy0iLCBtZWRpYVR5cGUsICctJywgR1NUX09CSkVDVF9OQU1FKHBhZCkpOworICAgIEdTVF9E
RUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBH
U1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworfQor
Cit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVJlbW90ZVN0cmVhbShHc3RQYWQq
KQoreworICAgIEdTVF9GSVhNRV9PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgInJlbW92ZVJlbW90
ZVN0cmVhbSIpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNy
ZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHMoY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBSVENSdHBU
cmFuc2NlaXZlckluaXQmIGluaXQsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYm
IHNvdXJjZSkKK3sKKyAgICBpZiAoIW1fd2VicnRjQmluKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiJXp1IHN0
cmVhbXMgaW4gaW5pdCBkYXRhIiwgaW5pdC5zdHJlYW1zLnNpemUoKSk7CisKKyAgICAvLyBGSVhN
RTogU2hvdWxkIHdlIGJ1aWxkIHRoZSBjYXBzIGZyb20gdGhlIGluaXQuc2VuZEVuY29kaW5ncz8g
UHJvYmxlbSBpcyB0aGVyZSBpcyBubworICAgIC8vIGVuY29kaW5nTmFtZSBvciBjbG9ja1JhdGUg
aW4gUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzLgorICAgIFZlY3RvcjxzdGQ6OnBhaXI8Y29uc3Qg
Y2hhciosIGludD4+IGVuY29kaW5nczsKKyAgICBjb25zdCBjaGFyKiBtZWRpYSA9IGtpbmQudXRm
OCgpLmRhdGEoKTsKKyAgICBpZiAoa2luZCA9PSAidmlkZW8iX3MpIHsKKyAgICAgICAgZW5jb2Rp
bmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMyk7CisgICAgICAgIGVuY29kaW5ncy5hcHBlbmQo
eyAiVlA4IiwgOTAwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy5hcHBlbmQoeyAiVlA5IiwgOTAw
MDAgfSk7CisgICAgICAgIGVuY29kaW5ncy5hcHBlbmQoeyAiSDI2NCIsIDkwMDAwIH0pOworICAg
IH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5ncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDEpOwor
ICAgICAgICBlbmNvZGluZ3MuYXBwZW5kKHsgIk9QVVMiLCA0ODAwMCB9KTsKKyAgICB9CisKKyAg
ICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkpOworICAgIGZvciAo
YXV0byYgW2VuY29kaW5nTmFtZSwgY2xvY2tSYXRlXSA6IGVuY29kaW5ncykgeworICAgICAgICBn
c3RfY2Fwc19hcHBlbmQoY2Fwcy5nZXQoKSwgZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXBwbGljYXRp
b24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCBtZWRpYSwgImVuY29kaW5nLW5hbWUi
LCBHX1RZUEVfU1RSSU5HLCBlbmNvZGluZ05hbWUsCisgICAgICAgICAgICAicGF5bG9hZCIsIEdf
VFlQRV9JTlQsIG1fcHRDb3VudGVyKyssICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgY2xvY2tS
YXRlLCBudWxscHRyKSk7CisgICAgfQorCisgICAgYXV0byBkaXJlY3Rpb24gPSBmcm9tUlRDUnRw
VHJhbnNjZWl2ZXJEaXJlY3Rpb24oaW5pdC5kaXJlY3Rpb24pOworI2lmbmRlZiBHU1RfRElTQUJM
RV9HU1RfREVCVUcKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRlc2MoZ19lbnVtX3RvX3N0cmluZyhH
U1RfVFlQRV9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTiwgZGlyZWN0aW9uKSk7Cisg
ICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nICVzIHRyYW5zY2Vp
dmVyIGZvciBwYXlsb2FkICUiIEdTVF9QVFJfRk9STUFULCBkZXNjLmdldCgpLCBjYXBzLmdldCgp
KTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IE5vbmUgb2YgdGhpcyAoZXhjZXB0ZWQgZGlyZWN0
aW9uKSBpcyBwYXNzZWQgdG8gd2VicnRjYmluIHlldC4KKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVj
dHVyZT4gaW5pdERhdGEoZ3N0X3N0cnVjdHVyZV9uZXcoInRyYW5zY2VpdmVyLWluaXQtZGF0YSIs
ICJkaXJlY3Rpb24iLCBHU1RfVFlQRV9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTiwg
ZGlyZWN0aW9uLCBudWxscHRyKSk7CisKKyAgICBHVmFsdWUgc3RyZWFtSWRzVmFsdWUgPSBHX1ZB
TFVFX0lOSVQ7CisgICAgZ192YWx1ZV9pbml0KCZzdHJlYW1JZHNWYWx1ZSwgR1NUX1RZUEVfTElT
VCk7CisgICAgZm9yIChhdXRvJiBzdHJlYW0gOiBpbml0LnN0cmVhbXMpIHsKKyAgICAgICAgR1Zh
bHVlIHZhbHVlID0gR19WQUxVRV9JTklUOworICAgICAgICBnX3ZhbHVlX2luaXQoJnZhbHVlLCBH
X1RZUEVfU1RSSU5HKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKCZ2YWx1ZSwgc3RyZWFt
LT5pZCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFs
dWUoJnN0cmVhbUlkc1ZhbHVlLCAmdmFsdWUpOworICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZ2YWx1
ZSk7CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZShpbml0RGF0YS5nZXQoKSwg
InN0cmVhbS1pZHMiLCAmc3RyZWFtSWRzVmFsdWUpOworCisgICAgR1ZhbHVlIGVuY29kaW5nc1Zh
bHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgmZW5jb2RpbmdzVmFsdWUsIEdT
VF9UWVBFX0xJU1QpOworICAgIGlmIChraW5kID09ICJhdWRpbyIpIHsKKyAgICAgICAgaWYgKCFp
bml0LnNlbmRFbmNvZGluZ3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhdXRvIGVuY29kaW5n
RGF0YSA9IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoaW5pdC5zZW5kRW5jb2RpbmdzWzBdKTsK
KyAgICAgICAgICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICAgICAgICAgIGdf
dmFsdWVfaW5pdCgmdmFsdWUsIEdTVF9UWVBFX1NUUlVDVFVSRSk7CisgICAgICAgICAgICBnc3Rf
dmFsdWVfc2V0X3N0cnVjdHVyZSgmdmFsdWUsIGVuY29kaW5nRGF0YS5nZXQoKSk7CisgICAgICAg
ICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUoJmVuY29kaW5nc1ZhbHVlLCAmdmFsdWUp
OworICAgICAgICAgICAgZ192YWx1ZV91bnNldCgmdmFsdWUpOworICAgICAgICB9CisgICAgfSBl
bHNlIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbmNvZGluZyA6IGluaXQuc2VuZEVuY29kaW5ncykg
eworICAgICAgICAgICAgYXV0byBlbmNvZGluZ0RhdGEgPSBmcm9tUlRDRW5jb2RpbmdQYXJhbWV0
ZXJzKGVuY29kaW5nKTsKKyAgICAgICAgICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsK
KyAgICAgICAgICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdTVF9UWVBFX1NUUlVDVFVSRSk7Cisg
ICAgICAgICAgICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSgmdmFsdWUsIGVuY29kaW5nRGF0YS5n
ZXQoKSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUoJmVuY29kaW5n
c1ZhbHVlLCAmdmFsdWUpOworICAgICAgICAgICAgZ192YWx1ZV91bnNldCgmdmFsdWUpOworICAg
ICAgICB9CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZShpbml0RGF0YS5nZXQo
KSwgImVuY29kaW5ncyIsICZlbmNvZGluZ3NWYWx1ZSk7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyPiBydGNUcmFuc2NlaXZlcjsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV93ZWJydGNCaW4uZ2V0KCksICJhZGQtdHJhbnNjZWl2ZXIiLCBkaXJlY3Rpb24sIGNhcHMu
Z2V0KCksICZydGNUcmFuc2NlaXZlci5vdXRQdHIoKSk7CisgICAgaWYgKCFydGNUcmFuc2NlaXZl
cikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gdHJhbnNjZWl2ZXIg
PSBtYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4oV1RGTW92ZShydGNU
cmFuc2NlaXZlcikpOworICAgIHJldHVybiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5k
cyB7IHRyYW5zY2VpdmVyLT5jcmVhdGVTZW5kZXJCYWNrZW5kKG1fcGVlckNvbm5lY3Rpb25CYWNr
ZW5kLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUoaW5pdERhdGEpKSwgdHJhbnNjZWl2ZXItPmNy
ZWF0ZVJlY2VpdmVyQmFja2VuZCgpLCBXVEZNb3ZlKHRyYW5zY2VpdmVyKSB9OworfQorCitzdGQ6
Om9wdGlvbmFsPEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkJhY2tlbmRzPiBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjphZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3Qg
UlRDUnRwVHJhbnNjZWl2ZXJJbml0JiBpbml0KQoreworICAgIHJldHVybiBjcmVhdGVUcmFuc2Nl
aXZlckJhY2tlbmRzKHRyYWNrS2luZCwgaW5pdCwgbnVsbHB0cik7Cit9CisKK0dTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTb3Vy
Y2VGb3JUcmFjayhNZWRpYVN0cmVhbVRyYWNrJiB0cmFjaykKK3sKKyAgICBpZiAodHJhY2sucHJp
dmF0ZVRyYWNrKCkuaGFzQXVkaW8oKSkKKyAgICAgICAgcmV0dXJuIFJlYWx0aW1lT3V0Z29pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsKKworICAg
IFJFTEVBU0VfQVNTRVJUKHRyYWNrLnByaXZhdGVUcmFjaygpLmhhc1ZpZGVvKCkpOworICAgIHJl
dHVybiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFjay5w
cml2YXRlVHJhY2soKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYW5zY2VpdmVyKE1lZGlh
U3RyZWFtVHJhY2smIHRyYWNrLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQpCit7
CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHModHJhY2sua2luZCgpLCBpbml0
LCBjcmVhdGVTb3VyY2VGb3JUcmFjayh0cmFjaykpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNr
ZW5kJiwgTWVkaWFTdHJlYW1UcmFjayYpCit7CisgICAgR1NUX0ZJWE1FX09CSkVDVChtX3BpcGVs
aW5lLmdldCgpLCAic2V0U2VuZGVyU291cmNlRnJvbVRyYWNrIik7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZD4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNlbmRlcihH
U3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBiYWNrZW5kKQoreworICAgIEdSZWZQdHI8R0FycmF5
PiB0cmFuc2NlaXZlcnM7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdl
dCgpLCAiZ2V0LXRyYW5zY2VpdmVycyIsICZ0cmFuc2NlaXZlcnMub3V0UHRyKCkpOworCisgICAg
R1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTG9va2luZyBmb3Igc2VuZGVyICVw
IGluICV1IGV4aXN0aW5nIHRyYW5zY2VpdmVycyIsIGJhY2tlbmQucnRjU2VuZGVyKCksIHRyYW5z
Y2VpdmVycy0+bGVuKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhbnNjZWl2ZXJz
LT5sZW47IGkrKykgeworICAgICAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogY3VycmVudCA9
IGdfYXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdldCgpLCBHc3RXZWJSVENSVFBUcmFuc2NlaXZl
ciosIGkpOworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVyOworICAg
ICAgICBnX29iamVjdF9nZXQoY3VycmVudCwgInNlbmRlciIsICZzZW5kZXIub3V0UHRyKCksIG51
bGxwdHIpOworCisgICAgICAgIGlmICghc2VuZGVyKQorICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgIGlmIChzZW5kZXIuZ2V0KCkgPT0gYmFja2VuZC5ydGNTZW5kZXIoKSkKKyAgICAgICAg
ICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
PihjdXJyZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9pZCBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjphZGRJY2VDYW5kaWRhdGUoR1N0cmVhbWVySWNlQ2FuZGlkYXRl
JiBjYW5kaWRhdGUsIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRlQ2FsbGJh
Y2smJiBjYWxsYmFjaykKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJBZGRpbmcgSUNFIGNhbmRpZGF0ZSAlcyIsIGNhbmRpZGF0ZS5jYW5kaWRhdGUudXRmOCgpLmRh
dGEoKSk7CisKKyAgICBpZiAoIWNhbmRpZGF0ZS5jYW5kaWRhdGUuc3RhcnRzV2l0aCgiY2FuZGlk
YXRlOiIpKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Rhc2sgPSBjcmVhdGVTaGFyZWRU
YXNrPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRlQ2FsbGJhY2tGdW5jdGlv
bj4oV1RGTW92ZShjYWxsYmFjaykpXSgpIG11dGFibGUgeworICAgICAgICAgICAgdGFzay0+cnVu
KEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiRXhwZWN0IGxpbmU6IGNhbmRpZGF0ZTo8Y2Fu
ZGlkYXRlLXN0cj4iIH0pOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGF1dG8gcGFyc2VkQ2FuZGlkYXRlID0gcGFyc2VJY2VDYW5kaWRhdGVTRFAoY2FuZGlkYXRl
LmNhbmRpZGF0ZSk7CisgICAgaWYgKCFwYXJzZWRDYW5kaWRhdGUpIHsKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxiYWNrKSldKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICB0YXNrLT5ydW4oRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJy
b3IsICJFcnJvciBwcm9jZXNzaW5nIElDRSBjYW5kaWRhdGUiIH0pOworICAgICAgICB9KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBpbnZhbGlkIHNkcE1MaW5lSW5k
ZXggZXhjZXB0aW9uIG5vdCByZWxheWVkIGZyb20gd2VicnRjYmluLgorICAgIC8vIEZJWE1FOiBJ
ZGVhbGx5IHRoaXMgc2hvdWxkIHBhc3MgdGhlIHJlc3VsdC9lcnJvciB0byBhIEdzdFByb21pc2Ug
b2JqZWN0LgorICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImFk
ZC1pY2UtY2FuZGlkYXRlIiwgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgsIGNhbmRpZGF0ZS5jYW5k
aWRhdGUudXRmOCgpLmRhdGEoKSk7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGFzayA9IGNyZWF0
ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFj
a0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxiYWNrKSksIGRlc2NyaXB0aW9ucyA9IGRlc2NyaXB0aW9u
c0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCkpXSgpIG11dGFibGUgeworICAgICAgICB0
YXNrLT5ydW4oV1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAgICB9KTsKK30KKworc3RkOjp1bmlx
dWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3Jl
YXRlRGF0YUNoYW5uZWwoY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgUlRDRGF0YUNoYW5uZWxJ
bml0JiBvcHRpb25zKQoreworICAgIGlmICghbV93ZWJydGNCaW4pCisgICAgICAgIHJldHVybiBu
dWxscHRyOworCisgICAgYXV0byBpbml0ID0gR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpm
cm9tUlRDRGF0YUNoYW5uZWxJbml0KG9wdGlvbnMpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9w
aXBlbGluZS5nZXQoKSwgIkNyZWF0aW5nIGRhdGEgY2hhbm5lbCBmb3IgaW5pdCBvcHRpb25zICUi
IEdTVF9QVFJfRk9STUFULCBpbml0LmdldCgpKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFD
aGFubmVsPiBjaGFubmVsOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5n
ZXQoKSwgImNyZWF0ZS1kYXRhLWNoYW5uZWwiLCBsYWJlbC51dGY4KCkuZGF0YSgpLCBpbml0Lmdl
dCgpLCAmY2hhbm5lbC5vdXRQdHIoKSk7CisgICAgaWYgKCFjaGFubmVsKQorICAgICAgICByZXR1
cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyRGF0YUNo
YW5uZWxIYW5kbGVyPihXVEZNb3ZlKGNoYW5uZWwpKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpvbkRhdGFDaGFubmVsKEdzdFdlYlJUQ0RhdGFDaGFubmVsKiBkYXRhQ2hhbm5l
bCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJJbmNvbWluZyBk
YXRhIGNoYW5uZWwiKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBjaGFubmVs
ID0gZGF0YUNoYW5uZWw7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJl
ZigqdGhpcyksIGRhdGFDaGFubmVsID0gV1RGTW92ZShjaGFubmVsKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90ZWN0ZWRUaGlzLT5tX3BpcGVsaW5lLmdldCgpLCAi
SW5jb21pbmcgZGF0YSBjaGFubmVsIDEiKTsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlz
U3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHByb3RlY3RlZFRoaXMtPm1fcGlwZWxpbmUuZ2V0KCksICJJbmNvbWluZyBkYXRhIGNoYW5uZWwg
MiIpOworICAgICAgICBhdXRvJiBjb25uZWN0aW9uID0gcHJvdGVjdGVkVGhpcy0+bV9wZWVyQ29u
bmVjdGlvbkJhY2tlbmQuY29ubmVjdGlvbigpOworICAgICAgICBjb25uZWN0aW9uLmRpc3BhdGNo
RXZlbnQoR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGFubmVsRXZlbnQoKmNvbm5lY3Rp
b24uZG9jdW1lbnQoKSwgV1RGTW92ZShkYXRhQ2hhbm5lbCkpKTsKKyAgICB9KTsKK30KKwordm9p
ZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjbG9zZSgpCit7CisgICAgLy8gaHR0cHM6Ly9naXRs
YWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvLS9pc3N1ZXMvMTE4
MQorICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNsb3NpbmciKTsKKyAg
ICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxp
bmUuZ2V0KCksIEdTVF9TVEFURV9SRUFEWSk7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
KyAgICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKwordm9pZCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpzdG9wKCkKK3sKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzdG9w
TG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKKworICAgIGlmICghbV9waXBlbGluZSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU3RvcHBp
bmciKTsKKyAgICB0ZWFyZG93blBpcGVsaW5lKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6c3VzcGVuZCgpCit7CisgICAgaWYgKCFtX3BpcGVsaW5lKQorICAgICAgICByZXR1
cm47CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTdXNwZW5kaW5n
Iik7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFU
RV9QQVVTRUQpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlc3VtZSgpCit7
CisgICAgaWYgKCFtX3BpcGVsaW5lKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUdf
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJSZXN1bWluZyIpOworICAgIGdzdF9lbGVtZW50X3Nl
dF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25OZWdvdGlhdGlvbk5lZWRlZCgpCit7CisgICAgbV9p
c05lZ290aWF0aW9uTmVlZGVkID0gdHJ1ZTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBl
bGluZS5nZXQoKSwgIkNoZWNraW5nIG5lZ290aWF0aW9uIHN0YXR1cyIpOworCisgICAgY2FsbE9u
TWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyldIHsKKyAgICAgICAgaWYgKHBy
b3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKHByb3RlY3RlZFRoaXMtPm1fcGlwZWxpbmUuZ2V0KCksICJOZWdvdGlh
dGlvbiBuZWVkZWQhIik7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25C
YWNrZW5kLm1hcmtBc05lZWRpbmdOZWdvdGlhdGlvbigwKTsKKyAgICB9KTsKK30KKwordm9pZCBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUNvbm5lY3Rpb25DaGFuZ2UoKQoreworICAgIEdz
dFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV93ZWJy
dGNCaW4uZ2V0KCksICJpY2UtY29ubmVjdGlvbi1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0cik7Cisg
ICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIGNvbm5lY3Rp
b25TdGF0ZSA9IHRvUlRDSWNlQ29ubmVjdGlvblN0YXRlKHN0YXRlKV0geworICAgICAgICBpZiAo
cHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGF1dG8mIGNvbm5lY3Rpb24gPSBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2Vu
ZC5jb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChjb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0
ZSgpICE9IGNvbm5lY3Rpb25TdGF0ZSkKKyAgICAgICAgICAgIGNvbm5lY3Rpb24udXBkYXRlSWNl
Q29ubmVjdGlvblN0YXRlKGNvbm5lY3Rpb25TdGF0ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VHYXRoZXJpbmdDaGFuZ2UoKQoreworICAgIEdzdFdl
YlJUQ0lDRUdhdGhlcmluZ1N0YXRlIHN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jp
bi5nZXQoKSwgImljZS1nYXRoZXJpbmctc3RhdGUiLCAmc3RhdGUsIG51bGxwdHIpOworICAgIGNh
bGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCBzdGF0ZV0geworICAg
ICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGF1dG8mIGNvbm5lY3Rpb24gPSBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0
aW9uQmFja2VuZC5jb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfV0VCUlRD
X0lDRV9HQVRIRVJJTkdfU1RBVEVfQ09NUExFVEUpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5kb25lR2F0aGVyaW5nQ2FuZGlkYXRlcygpOworICAg
ICAgICBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfR0FU
SEVSSU5HKQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShS
VENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5nKTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUg
PT0gR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX05FVykKKyAgICAgICAgICAgIGNvbm5l
Y3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUoUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5ldyk7
CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDYW5kaWRh
dGUoZ3VpbnQgc2RwTUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5kaWRhdGUpCit7CisgICAgLy8g
RklYTUU6IEdldCBtaWQgZnJvbSBjYW5kaWRhdGU/CisgICAgR1VuaXF1ZU91dFB0cjxHc3RXZWJS
VENTZXNzaW9uRGVzY3JpcHRpb24+IGRlc2NyaXB0aW9uOworICAgIGdfb2JqZWN0X2dldChtX3dl
YnJ0Y0Jpbi5nZXQoKSwgImxvY2FsLWRlc2NyaXB0aW9uIiwgJmRlc2NyaXB0aW9uLm91dFB0cigp
LCBudWxscHRyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjb25zdCBHc3RTRFBNZWRpYSogbWVkaWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0X21lZGlhKGRl
c2NyaXB0aW9uLT5zZHAsIHNkcE1MaW5lSW5kZXgpOworICAgIFN0cmluZyBjYW5kaWRhdGVNaWQo
Z3N0X3NkcF9tZWRpYV9nZXRfYXR0cmlidXRlX3ZhbChtZWRpYSwgIm1pZCIpKTsKKyAgICBTdHJp
bmcgY2FuZGlkYXRlU0RQKGNhbmRpZGF0ZSk7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVj
dGVkVGhpcyA9IFJlZigqdGhpcyksIG1pZCA9IFdURk1vdmUoY2FuZGlkYXRlTWlkKSwgc2RwID0g
V1RGTW92ZShjYW5kaWRhdGVTRFApLCBzZHBNTGluZUluZGV4LCBkZXNjcmlwdGlvbnMgPSBkZXNj
cmlwdGlvbnNGcm9tV2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgpKV0oKSBtdXRhYmxlIHsKKyAg
ICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5uZXdJQ0VD
YW5kaWRhdGUoV1RGTW92ZShzZHApLCBXVEZNb3ZlKG1pZCksIHNkcE1MaW5lSW5kZXgsIHsgfSwg
V1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNjZWVkZWQoR1VuaXF1ZVB0cjxH
c3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRpb24pCit7CisgICAgY2FsbE9u
TWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIGRlc2NyaXB0aW9uID0gV1RG
TW92ZShkZXNjcmlwdGlvbildIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gc2Rw
KGdzdF9zZHBfbWVzc2FnZV9hc190ZXh0KGRlc2NyaXB0aW9uLT5zZHApKTsKKyAgICAgICAgaWYg
KHByb3RlY3RlZFRoaXMtPm1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlz
LT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlclN1Y2NlZWRlZChzZHAuZ2V0KCkp
OworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0
aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJTdWNjZWVkZWQoc2RwLmdldCgpKTsKKyAgICB9KTsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25G
YWlsZWQoR1VuaXF1ZVB0cjxHRXJyb3I+JiYgZXJyb3IpCit7CisgICAgY2FsbE9uTWFpblRocmVh
ZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIGVycm9yID0gV1RGTW92ZShlcnJvcildIHsK
KyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGF1dG8gZXhjID0gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsIGVy
cm9yID8gZXJyb3ItPm1lc3NhZ2UgOiAiVW5rbm93biBFcnJvciIgfTsKKyAgICAgICAgaWYgKHBy
b3RlY3RlZFRoaXMtPm1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5t
X3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlckZhaWxlZChXVEZNb3ZlKGV4YykpOwor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9u
QmFja2VuZC5jcmVhdGVBbnN3ZXJGYWlsZWQoV1RGTW92ZShleGMpKTsKKyAgICB9KTsKK30KKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAg
ICBHUmVmUHRyPEdBcnJheT4gdHJhbnNjZWl2ZXJzOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC10cmFuc2NlaXZlcnMiLCAmdHJhbnNjZWl2ZXJzLm91
dFB0cigpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhbnNjZWl2ZXJzLT5sZW47
IGkrKykgeworICAgICAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogY3VycmVudCA9IGdfYXJy
YXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdldCgpLCBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciosIGkp
OworCisgICAgICAgIGF1dG8qIGV4aXN0aW5nVHJhbnNjZWl2ZXIgPSBtX3BlZXJDb25uZWN0aW9u
QmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0cmFuc2NlaXZlckJhY2tlbmQp
IHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50ID09IHRyYW5zY2VpdmVyQmFja2VuZC5ydGNU
cmFuc2NlaXZlcigpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGV4aXN0aW5nVHJhbnNjZWl2
ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1JU
UFJlY2VpdmVyPiByZWNlaXZlcjsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBtaWQ7Cisg
ICAgICAgIGdfb2JqZWN0X2dldChjdXJyZW50LCAicmVjZWl2ZXIiLCAmcmVjZWl2ZXIub3V0UHRy
KCksICJtaWQiLCAmbWlkLm91dFB0cigpLCBudWxscHRyKTsKKworICAgICAgICBpZiAoIXJlY2Vp
dmVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFtaWQpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5uZXdSZW1v
dGVUcmFuc2NlaXZlcihXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kPihXVEZNb3ZlKGN1cnJlbnQpKSwgbV9tZWRpYUZvck1pZC5nZXQobWlkLmdldCgpKSk7Cisg
ICAgfQorfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZygpCit7CisgICAgZ19zaWduYWxfZW1pdF9i
eV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiZ2V0LXN0YXRzIiwgbnVsbHB0ciwgZ3N0X3Byb21p
c2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlzZSwgZ3BvaW50
ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9taXNlID0gYWRvcHRHUmVmKHJhd1Byb21p
c2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZS5nZXQo
KSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3QgYXV0byogcmVwbHkgPSBnc3RfcHJv
bWlzZV9nZXRfcmVwbHkocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJl
cGx5KTsKKyAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlcGx5LCAiZXJyb3Ii
KSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiBlbmRQb2ludCA9IHJlaW50
ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVyTWVkaWFFbmRwb2ludCo+KHVzZXJEYXRhKTsKKyAgICAgICAg
ZW5kUG9pbnQtPm9uU3RhdHNEZWxpdmVyZWQocmVwbHkpOworICAgIH0sIHRoaXMsIG51bGxwdHIp
KTsKK30KKworY2xhc3MgUlRDU3RhdHNMb2dnZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJU
Q1N0YXRzTG9nZ2VyKGNvbnN0IEdzdFN0cnVjdHVyZSogc3RhdHMpCisgICAgICAgIDogbV9zdGF0
cyhzdGF0cykKKyAgICB7IH0KKworICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdCB7IHJl
dHVybiBnc3RTdHJ1Y3R1cmVUb0pTT05TdHJpbmcobV9zdGF0cyk7IH0KKworcHJpdmF0ZToKKyAg
ICBjb25zdCBHc3RTdHJ1Y3R1cmUqIG1fc3RhdHM7Cit9OworCit2b2lkIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OnByb2Nlc3NTdGF0cyhjb25zdCBHVmFsdWUqIHZhbHVlKQoreworICAgIGlmICgh
R1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRSh2YWx1ZSkpCisgICAgICAgIHJldHVybjsKKworICAg
IGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUo
dmFsdWUpOworICAgIEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7CisgICAgaWYgKCFnc3Rf
c3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VCUlRDX1NUQVRTX1RZ
UEUsICZzdGF0c1R5cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBKdXN0
IGNoZWNrIGEgc2luZ2xlIHRpbWVzdGFtcCwgaW5ib3VuZCBSVFAgZm9yIGluc3RhbmNlLgorICAg
IGlmICghbV9zdGF0c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wICYmIHN0YXRzVHlwZSA9PSBHU1Rf
V0VCUlRDX1NUQVRTX0lOQk9VTkRfUlRQKSB7CisgICAgICAgIGRvdWJsZSB0aW1lc3RhbXA7Cisg
ICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUoc3RydWN0dXJlLCAidGltZXN0YW1w
IiwgJnRpbWVzdGFtcCkpIHsKKyAgICAgICAgICAgIGF1dG8gdHMgPSBTZWNvbmRzOjpmcm9tTWls
bGlzZWNvbmRzKHRpbWVzdGFtcCk7CisgICAgICAgICAgICBtX3N0YXRzRmlyc3REZWxpdmVyZWRU
aW1lc3RhbXAgPSB0czsKKworICAgICAgICAgICAgaWYgKCFpc1N0b3BwZWQoKSAmJiBtX3N0YXRz
TG9nVGltZXIucmVwZWF0SW50ZXJ2YWwoKSAhPSBzdGF0c0xvZ0ludGVydmFsKHRzKSkgeworICAg
ICAgICAgICAgICAgIG1fc3RhdHNMb2dUaW1lci5zdG9wKCk7CisgICAgICAgICAgICAgICAgbV9z
dGF0c0xvZ1RpbWVyLnN0YXJ0UmVwZWF0aW5nKHN0YXRzTG9nSW50ZXJ2YWwodHMpKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsb2dnZXIoKS53aWxsTG9nKGxv
Z0NoYW5uZWwoKSwgV1RGTG9nTGV2ZWw6OkRlYnVnKSkgeworICAgICAgICAvLyBTdGF0cyBhcmUg
dmVyeSB2ZXJib3NlLCBsZXQncyBvbmx5IGRpc3BsYXkgdGhlbSBpbiBpbnNwZWN0b3IgY29uc29s
ZSBpbiB2ZXJib3NlIG1vZGUuCisgICAgICAgIGxvZ2dlcigpLmRlYnVnKExvZ1dlYlJUQywKKyAg
ICAgICAgICAgIExvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIoIkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQiLCAib25TdGF0c0RlbGl2ZXJlZCIsIGxvZ0lkZW50aWZpZXIoKSksCisgICAgICAgICAgICBS
VENTdGF0c0xvZ2dlciB7IHN0cnVjdHVyZSB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2dn
ZXIoKS5sb2dBbHdheXMoTG9nV2ViUlRDU3RhdHMsCisgICAgICAgICAgICBMb2dnZXI6OkxvZ1Np
dGVJZGVudGlmaWVyKCJHU3RyZWFtZXJNZWRpYUVuZHBvaW50IiwgIm9uU3RhdHNEZWxpdmVyZWQi
LCBsb2dJZGVudGlmaWVyKCkpLAorICAgICAgICAgICAgUlRDU3RhdHNMb2dnZXIgeyBzdHJ1Y3R1
cmUgfSk7CisgICAgfQorfQorCisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25TdGF0
c0RlbGl2ZXJlZChjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0YXRzKQoreworICAgIEdVbmlxdWVQdHI8
R3N0U3RydWN0dXJlPiBzdGF0c0NvcHkoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0YXRzKSk7CisgICAg
Y2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRoaXMsIHN0YXRz
ID0gV1RGTW92ZShzdGF0c0NvcHkpXSB7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaChz
dGF0cy5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0U3RydWN0dXJlRm9yZWFjaEZ1bmM+KFtdKEdRdWFy
aywgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsK
KyAgICAgICAgICAgIGF1dG8qIGVuZFBvaW50ID0gcmVpbnRlcnByZXRfY2FzdDxHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50Kj4odXNlckRhdGEpOworICAgICAgICAgICAgZW5kUG9pbnQtPnByb2Nlc3NT
dGF0cyh2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSksIHRoaXMp
OworICAgIH0pOworfQorI2VuZGlmCisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK3ZvaWQg
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RhcnRMb2dnaW5nU3RhdHMoKQoreworICAgIGlmICht
X3N0YXRzTG9nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9zdGF0c0xvZ1RpbWVyLnN0b3Ao
KTsKKyAgICBtX3N0YXRzTG9nVGltZXIuc3RhcnRSZXBlYXRpbmcoc3RhdHNMb2dJbnRlcnZhbChT
ZWNvbmRzOjpuYW4oKSkpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0b3BM
b2dnaW5nU3RhdHMoKQoreworICAgIG1fc3RhdHNMb2dUaW1lci5zdG9wKCk7Cit9CisKK1dURkxv
Z0NoYW5uZWwmIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmxvZ0NoYW5uZWwoKSBjb25zdAorewor
ICAgIHJldHVybiBMb2dXZWJSVEM7Cit9CisKK1NlY29uZHMgR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6c3RhdHNMb2dJbnRlcnZhbChTZWNvbmRzIHJlcG9ydFRpbWVzdGFtcCkgY29uc3QKK3sKKyAg
ICBpZiAobG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIFdURkxvZ0xldmVsOjpJbmZvKSkK
KyAgICAgICAgcmV0dXJuIDJfczsKKworICAgIGlmIChyZXBvcnRUaW1lc3RhbXAgLSBtX3N0YXRz
Rmlyc3REZWxpdmVyZWRUaW1lc3RhbXAgPiAxNV9zKQorICAgICAgICByZXR1cm4gMTBfczsKKwor
ICAgIHJldHVybiA0X3M7Cit9CisjZW5kaWYKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0aW9uPHZvaWQoU3RyaW5nJiYp
PiYmIGNhbGxiYWNrKQoreworICAgIC8vIFRPRE86IGNvbGxlY3Qgc3RhdHMgYW5kIGxvb2t1cCBJ
bmJvdW5kUnRwICJkZWNvZGVyX2ltcGxlbWVudGF0aW9uIiBmaWVsZC4KKyAgICBjYWxsYmFjayh7
IH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgorc3RydWN0
IExvZ0FyZ3VtZW50OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IExvZ0FyZ3VtZW50PFdlYkNvcmU6
OlJUQ1N0YXRzTG9nZ2VyPiB7CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25zdCBXZWJD
b3JlOjpSVENTdGF0c0xvZ2dlciYgbG9nZ2VyKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFN0cmlu
Zyhsb2dnZXIudG9KU09OU3RyaW5nKCkpOworICAgIH0KK307CisKK307IC8vIG5hbWVzcGFjZSBX
VEYKKyNlbmRpZiAvLyAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKworI2VuZGlmIC8vIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmQ2MTQwNmJkZTcwZDQ1YTU3YjRlMjVkZWE5ZjA5YjA0M2U3MjE0OGMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVy
QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgiCisjaW5jbHVk
ZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFJlY2VpdmVyLmgiCisK
KyNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVS
ZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDsKK2NsYXNz
IEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDsKK2NsYXNzIE1lZGlhU3RyZWFtVHJhY2s7
CitjbGFzcyBSVENTZXNzaW9uRGVzY3JpcHRpb247CitjbGFzcyBSZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXI7CisKK2NsYXNzIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R1N0cmVhbWVyTWVkaWFFbmRwb2ludCwgV1RGOjpEZXN0
cnVjdGlvblRocmVhZDo6TWFpbj4KKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICAsIHBy
aXZhdGUgTG9nZ2VySGVscGVyCisjZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ+IGNyZWF0ZShHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQmIHBlZXJDb25uZWN0aW9uKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQocGVlckNvbm5lY3Rpb24pKTsgfQorICAgIHZpcnR1YWwgfkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQoKTsKKworICAgIGJvb2wgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29u
ZmlndXJhdGlvbiYpOworICAgIHZvaWQgcmVzdGFydEljZSgpOworCisgICAgdm9pZCBkb1NldExv
Y2FsRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKik7CisgICAgdm9pZCBk
b1NldFJlbW90ZURlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYpOworICAg
IHZvaWQgZG9DcmVhdGVPZmZlcihjb25zdCBSVENPZmZlck9wdGlvbnMmKTsKKyAgICB2b2lkIGRv
Q3JlYXRlQW5zd2VyKCk7CisKKyAgICB2b2lkIGdldFN0YXRzKEdzdFBhZCosIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxl
cj4gY3JlYXRlRGF0YUNoYW5uZWwoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNoYW5uZWxJ
bml0Jik7CisgICAgdm9pZCBvbkRhdGFDaGFubmVsKEdzdFdlYlJUQ0RhdGFDaGFubmVsKik7CisK
KyAgICB2b2lkIGFkZEljZUNhbmRpZGF0ZShHU3RyZWFtZXJJY2VDYW5kaWRhdGUmLCBQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrJiYpOworCisgICAgdm9pZCBj
bG9zZSgpOworICAgIHZvaWQgc3RvcCgpOworICAgIGJvb2wgaXNTdG9wcGVkKCkgY29uc3QgeyBy
ZXR1cm4gIW1fcGlwZWxpbmU7IH0KKworICAgIHZvaWQgc3VzcGVuZCgpOworICAgIHZvaWQgcmVz
dW1lKCk7CisKKyAgICB2b2lkIGdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUoRnVuY3Rp
b248dm9pZChTdHJpbmcmJik+JiYpOworICAgIGJvb2wgaXNOZWdvdGlhdGlvbk5lZWRlZCgpIGNv
bnN0IHsgcmV0dXJuIG1faXNOZWdvdGlhdGlvbk5lZWRlZDsgfQorCisgICAgdm9pZCBjb25maWd1
cmVBbmRMaW5rU291cmNlKFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciYpOwor
CisgICAgYm9vbCBhZGRUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiwgTWVkaWFTdHJl
YW1UcmFjayYsIGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKTsKKyAgICB2b2lkIHJlbW92ZVRy
YWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmKTsKKworICAgIHN0cnVjdCBCYWNrZW5kcyB7
CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPiBzZW5k
ZXJCYWNrZW5kOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kPiByZWNlaXZlckJhY2tlbmQ7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFt
ZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+IHRyYW5zY2VpdmVyQmFja2VuZDsKKyAgICB9OworICAg
IHN0ZDo6b3B0aW9uYWw8QmFja2VuZHM+IGFkZFRyYW5zY2VpdmVyKGNvbnN0IFN0cmluZyYgdHJh
Y2tLaW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmKTsKKyAgICBzdGQ6Om9wdGlvbmFs
PEJhY2tlbmRzPiBhZGRUcmFuc2NlaXZlcihNZWRpYVN0cmVhbVRyYWNrJiwgY29uc3QgUlRDUnRw
VHJhbnNjZWl2ZXJJbml0Jik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFRyYW5z
Y2VpdmVyQmFja2VuZD4gdHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNlbmRlcihHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kJik7CisKKyAgICB2b2lkIHNldFNlbmRlclNvdXJjZUZyb21UcmFjayhHU3Ry
ZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiwgTWVkaWFTdHJlYW1UcmFjayYpOworCisgICAgdm9pZCBj
b2xsZWN0VHJhbnNjZWl2ZXJzKCk7CisKKyAgICB2b2lkIGNyZWF0ZVNlc3Npb25EZXNjcmlwdGlv
blN1Y2NlZWRlZChHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJik7Cisg
ICAgdm9pZCBjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1ZVB0cjxHRXJyb3I+
JiYpOworCisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7IHJldHVybiBtX3BpcGVs
aW5lLmdldCgpOyB9CisgICAgYm9vbCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsKKworI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHZvaWQgcHJvY2Vzc1N0YXRzKGNvbnN0IEdWYWx1
ZSopOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAg
ICB2b2lkIG9uU3RhdHNEZWxpdmVyZWQoY29uc3QgR3N0U3RydWN0dXJlKik7CisjZW5kaWYKKwor
cHJpdmF0ZToKKyAgICBHU3RyZWFtZXJNZWRpYUVuZHBvaW50KEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZCYpOworCisgICAgYm9vbCBpbml0aWFsaXplUGlwZWxpbmUoKTsKKyAgICB2b2lk
IHRlYXJkb3duUGlwZWxpbmUoKTsKKyAgICB2b2lkIGRpc3Bvc2VFbGVtZW50Q2hhaW4oR3N0RWxl
bWVudCopOworCisgICAgdm9pZCBzZXREZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3Jp
cHRpb24qLCBib29sIGlzTG9jYWwsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzdWNjZXNzQ2FsbGJhY2ss
IEZ1bmN0aW9uPHZvaWQoY29uc3QgR0Vycm9yKik+JiYgZmFpbHVyZUNhbGxiYWNrKTsKKyAgICB2
b2lkIGluaXRpYXRlKGJvb2wgaXNJbml0aWF0b3IsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYm
KTsKKworICAgIHZvaWQgb25OZWdvdGlhdGlvbk5lZWRlZCgpOworICAgIHZvaWQgb25JY2VDb25u
ZWN0aW9uQ2hhbmdlKCk7CisgICAgdm9pZCBvbkljZUdhdGhlcmluZ0NoYW5nZSgpOworICAgIHZv
aWQgb25JY2VDYW5kaWRhdGUoZ3VpbnQgc2RwTUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5kaWRh
dGUpOworCisgICAgTWVkaWFTdHJlYW0mIG1lZGlhU3RyZWFtRnJvbVJUQ1N0cmVhbShTdHJpbmcg
bGFiZWwpOworCisgICAgdm9pZCBhZGRSZW1vdGVTdHJlYW0oR3N0UGFkKik7CisgICAgdm9pZCBy
ZW1vdmVSZW1vdGVTdHJlYW0oR3N0UGFkKik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJhY2tlbmRz
PiBjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgUlRD
UnRwVHJhbnNjZWl2ZXJJbml0JiwgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiYp
OworICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSBjcmVhdGVTb3VyY2VGb3JU
cmFjayhNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICB2b2lkIHN0b3JlUmVtb3RlTUxpbmVJbmZv
KEdzdFNEUE1lc3NhZ2UqKTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiByZXF1ZXN0UGFkKHVuc2ln
bmVkIG1saW5lSW5kZXgsIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKTsKKworICAgIHZvaWQgc2V0
UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQoKTsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxF
RAorICAgIHZvaWQgZ2F0aGVyU3RhdHNGb3JMb2dnaW5nKCk7CisgICAgdm9pZCBzdGFydExvZ2dp
bmdTdGF0cygpOworICAgIHZvaWQgc3RvcExvZ2dpbmdTdGF0cygpOworCisgICAgY29uc3QgTG9n
Z2VyJiBsb2dnZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQorICAg
IGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xvZ0lk
ZW50aWZpZXI7IH0KKyAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7
IHJldHVybiAiR1N0cmVhbWVyTWVkaWFFbmRwb2ludCI7IH0KKyAgICBXVEZMb2dDaGFubmVsJiBs
b2dDaGFubmVsKCkgY29uc3QgZmluYWw7CisKKyAgICBTZWNvbmRzIHN0YXRzTG9nSW50ZXJ2YWwo
U2Vjb25kcykgY29uc3Q7CisjZW5kaWYKKworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlPiBtX21lZGlhRm9yTWlkOworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2U6
OlR5cGUgbWVkaWFUeXBlRm9yTWlkKGNvbnN0IGNoYXIqIG1pZCk7CisKKyAgICBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQmIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kOworICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gbV93ZWJydGNCaW47CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3Bp
cGVsaW5lOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVhbT4+IG1fcmVt
b3RlU3RyZWFtc0J5SWQ7CisKKyAgICBzdHJ1Y3QgUGVuZGluZ01MaW5lSW5mbyB7CisgICAgICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAgICAgICAgYm9vbCBpc1VzZWQ7CisgICAgICAgIFZl
Y3RvcjxpbnQ+IHBheWxvYWRUeXBlczsKKyAgICB9OworICAgIFZlY3RvcjxQZW5kaW5nTUxpbmVJ
bmZvPiBtX3JlbW90ZU1MaW5lSW5mb3M7CisKKyAgICBSZWY8R1N0cmVhbWVyU3RhdHNDb2xsZWN0
b3I+IG1fc3RhdHNDb2xsZWN0b3I7CisKKyAgICB1bnNpZ25lZCBtX3JlcXVlc3RQYWRDb3VudGVy
IHsgMCB9OworICAgIGludCBtX3B0Q291bnRlciB7IDk2IH07CisKKyAgICB1bnNpZ25lZCBtX21s
aW5lSW5kZXggeyAwIH07CisKKyAgICBWZWN0b3I8UmVmPFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcj4+IG1fc291cmNlczsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJl
YW0+PiBtX3BlbmRpbmdTdHJlYW1zOworICAgIHVuc2lnbmVkIG1fcGVuZGluZ0luY29taW5nU3Ry
ZWFtcyB7IDAgfTsKKworICAgIGJvb2wgbV9pc0luaXRpYXRvciB7IGZhbHNlIH07CisgICAgYm9v
bCBtX2lzTmVnb3RpYXRpb25OZWVkZWQgeyBmYWxzZSB9OworCisjaWYgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECisgICAgVGltZXIgbV9zdGF0c0xvZ1RpbWVyOworICAgIFNlY29uZHMgbV9zdGF0c0Zp
cnN0RGVsaXZlcmVkVGltZXN0YW1wOworICAgIFJlZjxjb25zdCBMb2dnZXI+IG1fbG9nZ2VyOwor
ICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllcjsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5hMzg0ZWNkZGFmNjYyZjQwNjE5NmFjZWVmYjdhNGQ1MzRhNjcyYmE2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApAQCAtMCwwICsxLDM3MyBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorCisjaWYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNv
bW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhRW5kcG9pbnQuaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgi
CisjaW5jbHVkZSAiSWNlQ2FuZGlkYXRlLmgiCisjaW5jbHVkZSAiSlNSVENTdGF0c1JlcG9ydC5o
IgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGUuaCIKKyNpbmNsdWRlICJS
VENQZWVyQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlJUQ1J0cENhcGFiaWxpdGllcy5oIgorI2lu
Y2x1ZGUgIlJUQ1J0cFJlY2VpdmVyLmgiCisjaW5jbHVkZSAiUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNyZWF0
ZUdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNv
bm5lY3Rpb24pCit7CisgICAgZW5zdXJlR1N0cmVhbWVySW5pdGlhbGl6ZWQoKTsKKyAgICBpZiAo
IWlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKCJ3ZWJydGMiKSkgeworICAgICAgICBXVEZMb2dB
bHdheXMoIkdzdFdlYlJUQyBwbHVnaW4gbm90IGZvdW5kLiBNYWtlIHN1cmUgdG8gaW5zdGFsbCBn
c3QtcGx1Z2lucy1iYWQgPj0gMS4yMCB3aXRoIHRoZSB3ZWJydGMgcGx1Z2luIGVuYWJsZWQuIik7
CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gV1RGOjptYWtlVW5p
cXVlPEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZD4ocGVlckNvbm5lY3Rpb24pOworfQor
CitDcmVhdGVQZWVyQ29ubmVjdGlvbkJhY2tlbmQgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVh
dGUgPSBjcmVhdGVHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ7CisKK3N0ZDo6b3B0aW9u
YWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlY2VpdmVyQ2Fw
YWJpbGl0aWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIGtpbmQpCit7
CisgICAgUlRDUnRwQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICBjYXBhYmlsaXRpZXMu
aGVhZGVyRXh0ZW5zaW9ucy5hcHBlbmQoeyAiaHR0cDovL3d3dy5pZXRmLm9yZy9pZC9kcmFmdC1o
b2xtZXItcm1jYXQtdHJhbnNwb3J0LXdpZGUtY2MtZXh0ZW5zaW9ucy0wMSIgfSk7CisgICAgaWYg
KGtpbmQgPT0gImF1ZGlvIl9zKSB7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5k
KHsgLm1pbWVUeXBlID0gImF1ZGlvL09QVVMiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDQ4
MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMiwKKyAgICAgICAgICAgIC5zZHBGbXRwTGlu
ZSA9ICIiCisgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNhcGFiaWxpdGllcy5o
ZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJ1cm46M2dwcDp2aWRlby1vcmllbnRhdGlvbiIgfSk7
CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVv
L1ZQOCIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2Rw
Rm10cExpbmUgPSAiIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBlbmQoeyAu
bWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwK
KyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlkPTAiIH0pOworICAgICAgICBj
YXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDkiLAorICAg
ICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0g
InByb2ZpbGUtaWQ9MSIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsg
Lm1pbWVUeXBlID0gInZpZGVvL0gyNjQiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAw
LAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7CisgICAgfQorICAgIHJldHVybiBj
YXBhYmlsaXRpZXM7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRlckNhcGFiaWxpdGllcyhTY3JpcHRFeGVjdXRpb25Db250
ZXh0JiwgY29uc3QgU3RyaW5nJiBraW5kKQoreworICAgIFJUQ1J0cENhcGFiaWxpdGllcyBjYXBh
YmlsaXRpZXM7CisgICAgY2FwYWJpbGl0aWVzLmhlYWRlckV4dGVuc2lvbnMuYXBwZW5kKHsgImh0
dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQtaG9sbWVyLXJtY2F0LXRyYW5zcG9ydC13aWRlLWNj
LWV4dGVuc2lvbnMtMDEiIH0pOworICAgIGlmIChraW5kID09ICJhdWRpbyJfcykgeworICAgICAg
ICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJhdWRpby9PUFVTIiwK
KyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA0ODAwMCwKKyAgICAgICAgICAgIC5jaGFubmVscyA9
IDIsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIiB9KTsKKyAgICB9IGVsc2UgeworICAg
ICAgICBjYXBhYmlsaXRpZXMuaGVhZGVyRXh0ZW5zaW9ucy5hcHBlbmQoeyAidXJuOjNncHA6dmlk
ZW8tb3JpZW50YXRpb24iIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7
IC5taW1lVHlwZSA9ICJ2aWRlby9WUDgiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAw
LAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGll
cy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL1ZQOSIsCisgICAgICAgICAgICAu
Y2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAicHJvZmlsZS1p
ZD0wIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUg
PSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAg
ICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlkPTEiIH0pOworICAgICAgICBjYXBhYmlsaXRp
ZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9IMjY0IiwKKyAgICAgICAgICAg
IC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOwor
ICAgIH0KKyAgICByZXR1cm4gY2FwYWJpbGl0aWVzOworfQorCitHU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVj
dGlvbiYgcGVlckNvbm5lY3Rpb24pCisgICAgOiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNv
bm5lY3Rpb24pCisgICAgLCBtX2VuZHBvaW50KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0
ZSgqdGhpcykpCit7CisgICAgZGlzYWJsZUlDRUNhbmRpZGF0ZUZpbHRlcmluZygpOworfQorCitH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6On5HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpzdXNwZW5kKCkKK3sKKyAgICBtX2VuZHBvaW50LT5zdXNwZW5kKCk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN1bWUoKQoreworICAgIG1fZW5kcG9pbnQt
PnJlc3VtZSgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVz
dGFydEljZSgpCit7CisgICAgbV9lbmRwb2ludC0+cmVzdGFydEljZSgpOworfQorCitib29sIEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBv
aW50Q29uZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIG1fZW5kcG9p
bnQtPnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHBy
b21pc2UpCit7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9t
aXNlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgYmFj
a2VuZEZyb21SVFBTZW5kZXIoUlRDUnRwU2VuZGVyJiBzZW5kZXIpCit7CisgICAgQVNTRVJUKCFz
ZW5kZXIuaXNTdG9wcGVkKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kJj4oKnNlbmRlci5iYWNrZW5kKCkpOworfQorCit2b2lkIEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwU2VuZGVyJiBzZW5kZXIsIFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBpZiAoIXNlbmRlci5iYWNrZW5kKCkp
IHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNl
KSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBiYWNrZW5kID0gYmFja2Vu
ZEZyb21SVFBTZW5kZXIoc2VuZGVyKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOworICAgIGlm
IChSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQu
YXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5wYWQoKTsKKyAgICBlbHNlIGlm
IChSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQu
dmlkZW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5wYWQoKTsKKyAgICBtX2VuZHBv
aW50LT5nZXRTdGF0cyhwYWQuZ2V0KCksIFdURk1vdmUocHJvbWlzZSkpOworfQorCit2b2lkIEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwUmVjZWl2ZXImIHJl
Y2VpdmVyLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7CisgICAgaWYgKCFyZWNl
aXZlci5iYWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwg
V1RGTW92ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHc3RFbGVt
ZW50KiBiaW4gPSBudWxscHRyOworICAgIGF1dG8mIHNvdXJjZSA9IHJlY2VpdmVyLnRyYWNrKCku
cHJpdmF0ZVRyYWNrKCkuc291cmNlKCk7CisgICAgaWYgKHNvdXJjZS5pc0luY29taW5nQXVkaW9T
b3VyY2UoKSkKKyAgICAgICAgYmluID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlR1N0cmVhbWVyJj4oc291cmNlKS5iaW4oKTsKKyAgICBlbHNlIGlmIChzb3VyY2UuaXNJ
bmNvbWluZ1ZpZGVvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZQor
ICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgYXV0byBzaW5rUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGJpbiwgInNpbmsiKSk7Cisg
ICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihzaW5rUGFkLmdldCgp
KSk7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMoc3JjUGFkLmdldCgpLCBXVEZNb3ZlKHByb21p
c2UpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0TG9j
YWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQor
eworICAgIG1fZW5kcG9pbnQtPmRvU2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7Cisg
ICAgbV9pc0xvY2FsRGVzY3JpcHRpb25TZXQgPSB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBSVENTZXNz
aW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0UmVt
b3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOworICAgIG1faXNSZW1vdGVEZXNjcmlwdGlvblNl
dCA9IHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0Ny
ZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYmIG9wdGlvbnMpCit7CisgICAgbV9lbmRwb2ludC0+
ZG9DcmVhdGVPZmZlcihvcHRpb25zKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlvbnMmJikKK3sKKyAgICBpZiAo
IW1faXNSZW1vdGVEZXNjcmlwdGlvblNldCkgeworICAgICAgICBjcmVhdGVBbnN3ZXJGYWlsZWQo
RXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJObyByZW1vdGUgZGVzY3JpcHRpb24gc2V0
IiB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2VuZHBvaW50LT5kb0NyZWF0ZUFu
c3dlcigpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y2xvc2Uo
KQoreworICAgIG1fZW5kcG9pbnQtPmNsb3NlKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpkb1N0b3AoKQoreworICAgIG1fZW5kcG9pbnQtPnN0b3AoKTsKKyAg
ICBtX3BlbmRpbmdSZWNlaXZlcnMuY2xlYXIoKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSYgY2FuZGlk
YXRlLCBBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIHVuc2lnbmVk
IHNkcE1MaW5lSW5kZXggPSBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCgpID8gY2FuZGlkYXRlLnNk
cE1MaW5lSW5kZXgoKS52YWx1ZSgpIDogMDsKKyAgICBhdXRvIHJ0Y0NhbmRpZGF0ZSA9IFdURjo6
bWFrZVVuaXF1ZTxHU3RyZWFtZXJJY2VDYW5kaWRhdGU+KCpuZXcgR1N0cmVhbWVySWNlQ2FuZGlk
YXRlIHsgc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0ZSgpIH0pOworICAgIG1fZW5k
cG9pbnQtPmFkZEljZUNhbmRpZGF0ZSgqcnRjQ2FuZGlkYXRlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
Cit9CisKK1JlZjxSVENSdHBSZWNlaXZlcj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNr
ZW5kPiYmIGJhY2tlbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRy
YWNrSWQpCit7CisgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcGVl
ckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKworICAgIGF1dG8gc291cmNl
ID0gYmFja2VuZC0+Y3JlYXRlU291cmNlKHRyYWNrS2luZCwgdHJhY2tJZCk7CisgICAgLy8gUmVt
b3RlIHNvdXJjZSBpcyBpbml0aWFsbHkgbXV0ZWQgYW5kIHdpbGwgYmUgdW5tdXRlZCB3aGVuIHJl
Y2VpdmluZyB0aGUgZmlyc3QgcGFja2V0LgorICAgIHNvdXJjZS0+c2V0TXV0ZWQodHJ1ZSk7Cisg
ICAgYXV0byB0cmFja0lEID0gc291cmNlLT5wZXJzaXN0ZW50SUQoKTsKKyAgICBhdXRvIHJlbW90
ZVRyYWNrUHJpdmF0ZSA9IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoZG9jdW1lbnQu
bG9nZ2VyKCksIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZSh0cmFja0lEKSk7CisgICAgYXV0byBy
ZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShkb2N1bWVudCwgV1RGTW92ZShy
ZW1vdGVUcmFja1ByaXZhdGUpKTsKKworICAgIHJldHVybiBSVENSdHBSZWNlaXZlcjo6Y3JlYXRl
KCp0aGlzLCBXVEZNb3ZlKHJlbW90ZVRyYWNrKSwgV1RGTW92ZShiYWNrZW5kKSk7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYgbGFiZWws
IGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykKK3sKKyAgICByZXR1cm4gbV9lbmRw
b2ludC0+Y3JlYXRlRGF0YUNoYW5uZWwobGFiZWwsIG9wdGlvbnMpOworfQorCitzdGF0aWMgaW5s
aW5lIFJlZlB0cjxSVENSdHBTZW5kZXI+IGZpbmRFeGlzdGluZ1NlbmRlcihjb25zdCBWZWN0b3I8
UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj4mIHRyYW5zY2VpdmVycywgR1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZCYgc2VuZGVyQmFja2VuZCkKK3sKKyAgICBBU1NFUlQoc2VuZGVyQmFja2VuZC5y
dGNTZW5kZXIoKSk7CisgICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykg
eworICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFuc2NlaXZlci0+c2VuZGVyKCk7CisgICAgICAg
IGlmICghc2VuZGVyLmlzU3RvcHBlZCgpICYmIHNlbmRlckJhY2tlbmQucnRjU2VuZGVyKCkgPT0g
YmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKS5ydGNTZW5kZXIoKSkKKyAgICAgICAgICAgIHJl
dHVybiBSZWYoc2VuZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0V4Y2Vw
dGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OmFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBGaXhlZFZlY3RvcjxTdHJpbmc+JiYg
bWVkaWFTdHJlYW1JZHMpCit7CisgICAgYXV0byBzZW5kZXJCYWNrZW5kID0gV1RGOjptYWtlVW5p
cXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+KCp0aGlzLCBudWxscHRyLCBudWxscHRyKTsK
KyAgICBpZiAoIW1fZW5kcG9pbnQtPmFkZFRyYWNrKCpzZW5kZXJCYWNrZW5kLCB0cmFjaywgbWVk
aWFTdHJlYW1JZHMpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAiVW5h
YmxlIHRvIGFkZCB0cmFjayJfcyB9OworCisgICAgaWYgKGF1dG8gc2VuZGVyID0gZmluZEV4aXN0
aW5nU2VuZGVyKG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5zY2VpdmVycygpLCAqc2VuZGVy
QmFja2VuZCkpIHsKKyAgICAgICAgYmFja2VuZEZyb21SVFBTZW5kZXIoKnNlbmRlcikudGFrZVNv
dXJjZSgqc2VuZGVyQmFja2VuZCk7CisgICAgICAgIHNlbmRlci0+c2V0VHJhY2soUmVmKHRyYWNr
KSk7CisgICAgICAgIHNlbmRlci0+c2V0TWVkaWFTdHJlYW1JZHMoV1RGTW92ZShtZWRpYVN0cmVh
bUlkcykpOworICAgICAgICByZXR1cm4gc2VuZGVyLnJlbGVhc2VOb25OdWxsKCk7CisgICAgfQor
CisgICAgYXV0byB0cmFuc2NlaXZlckJhY2tlbmQgPSBtX2VuZHBvaW50LT50cmFuc2NlaXZlckJh
Y2tlbmRGcm9tU2VuZGVyKCpzZW5kZXJCYWNrZW5kKTsKKworICAgIGF1dG8gc2VuZGVyID0gUlRD
UnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgUmVmKHRyYWNrKSwgV1RGTW92ZShz
ZW5kZXJCYWNrZW5kKSk7CisgICAgc2VuZGVyLT5zZXRNZWRpYVN0cmVhbUlkcyhXVEZNb3ZlKG1l
ZGlhU3RyZWFtSWRzKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKHRyYW5z
Y2VpdmVyQmFja2VuZC0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCksIHRyYWNrLmtpbmQoKSwgdHJh
Y2suaWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVh
dGUoc2VuZGVyLmNvcHlSZWYoKSwgV1RGTW92ZShyZWNlaXZlciksIFdURk1vdmUodHJhbnNjZWl2
ZXJCYWNrZW5kKSk7CisgICAgbV9wZWVyQ29ubmVjdGlvbi5hZGRJbnRlcm5hbFRyYW5zY2VpdmVy
KFdURk1vdmUodHJhbnNjZWl2ZXIpKTsKKyAgICByZXR1cm4gc2VuZGVyOworfQorCit0ZW1wbGF0
ZTx0eXBlbmFtZSBUPgorRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChU
JiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAg
ICBhdXRvIGJhY2tlbmRzID0gbV9lbmRwb2ludC0+YWRkVHJhbnNjZWl2ZXIodHJhY2tPcktpbmQs
IGluaXQpOworICAgIGlmICghYmFja2VuZHMpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkQWNjZXNzRXJyb3IsICJVbmFibGUgdG8gYWRkIHRyYW5zY2VpdmVyIl9zIH07CisKKyAg
ICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKG1fcGVlckNvbm5lY3Rpb24sIFdU
Rk1vdmUodHJhY2tPcktpbmQpLCBXVEZNb3ZlKGJhY2tlbmRzLT5zZW5kZXJCYWNrZW5kKSk7Cisg
ICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKFdURk1vdmUoYmFja2VuZHMtPnJlY2Vp
dmVyQmFja2VuZCksIHNlbmRlci0+dHJhY2tLaW5kKCksIHNlbmRlci0+dHJhY2tJZCgpKTsKKyAg
ICBhdXRvIHRyYW5zY2VpdmVyID0gUlRDUnRwVHJhbnNjZWl2ZXI6OmNyZWF0ZShXVEZNb3ZlKHNl
bmRlciksIFdURk1vdmUocmVjZWl2ZXIpLCBXVEZNb3ZlKGJhY2tlbmRzLT50cmFuc2NlaXZlckJh
Y2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIodHJh
bnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2ZXI7Cit9CisKK0V4Y2Vw
dGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6YWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0
cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gYWRkVHJhbnNjZWl2ZXJGcm9t
VHJhY2tPcktpbmQoU3RyaW5nIHsgdHJhY2tLaW5kIH0sIGluaXQpOworfQorCitFeGNlcHRpb25P
cjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OmFkZFRyYW5zY2VpdmVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYmIHRyYWNrLCBjb25zdCBSVENS
dHBUcmFuc2NlaXZlckluaXQmIGluaXQpCit7CisgICAgcmV0dXJuIGFkZFRyYW5zY2VpdmVyRnJv
bVRyYWNrT3JLaW5kKFdURk1vdmUodHJhY2spLCBpbml0KTsKK30KKwordm9pZCBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrKQoreworICAg
IG1fZW5kcG9pbnQtPnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhzZW5kZXIsIHRyYWNrKTsKK30K
Kworc3RhdGljIGlubGluZSBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmIGJhY2tlbmRG
cm9tUlRQVHJhbnNjZWl2ZXIoUlRDUnRwVHJhbnNjZWl2ZXImIHRyYW5zY2VpdmVyKQoreworICAg
IHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmPigqdHJh
bnNjZWl2ZXIuYmFja2VuZCgpKTsKK30KKworUlRDUnRwVHJhbnNjZWl2ZXIqIEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6ZXhpc3RpbmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJv
b2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJik+JiYgbWF0Y2hpbmdGdW5jdGlvbikK
K3sKKyAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV9wZWVyQ29ubmVjdGlvbi5jdXJyZW50
VHJhbnNjZWl2ZXJzKCkpIHsKKyAgICAgICAgaWYgKG1hdGNoaW5nRnVuY3Rpb24oYmFja2VuZEZy
b21SVFBUcmFuc2NlaXZlcigqdHJhbnNjZWl2ZXIpKSkKKyAgICAgICAgICAgIHJldHVybiB0cmFu
c2NlaXZlci5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1JUQ1J0cFRy
YW5zY2VpdmVyJiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6Om5ld1JlbW90ZVRyYW5z
Y2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+JiYg
dHJhbnNjZWl2ZXJCYWNrZW5kLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUpCit7Cisg
ICAgYXV0byB0cmFja0tpbmQgPSB0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1
ZGlvID8gImF1ZGlvIl9zIDogInZpZGVvIl9zOworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2Vu
ZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgdHJhY2tLaW5kLCB0cmFuc2NlaXZlckJhY2tl
bmQtPmNyZWF0ZVNlbmRlckJhY2tlbmQoKnRoaXMsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBh
dXRvIHJlY2VpdmVyID0gY3JlYXRlUmVjZWl2ZXIodHJhbnNjZWl2ZXJCYWNrZW5kLT5jcmVhdGVS
ZWNlaXZlckJhY2tlbmQoKSwgdHJhY2tLaW5kLCBzZW5kZXItPnRyYWNrSWQoKSk7CisgICAgYXV0
byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoV1RGTW92ZShzZW5kZXIp
LCBXVEZNb3ZlKHJlY2VpdmVyKSwgV1RGTW92ZSh0cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBt
X3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJl
ZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAgICBtX2Vu
ZHBvaW50LT5jb2xsZWN0VHJhbnNjZWl2ZXJzKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpyZW1vdmVUcmFjayhSVENSdHBTZW5kZXImIHNlbmRlcikKK3sKKyAg
ICBtX2VuZHBvaW50LT5yZW1vdmVUcmFjayhiYWNrZW5kRnJvbVJUUFNlbmRlcihzZW5kZXIpKTsK
K30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFwcGx5Um90YXRpb25G
b3JPdXRnb2luZ1ZpZGVvU291cmNlcygpCit7CisgICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6
IG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5zY2VpdmVycygpKSB7CisgICAgICAgIGlmICgh
dHJhbnNjZWl2ZXItPnNlbmRlcigpLmlzU3RvcHBlZCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0
byogdmlkZW9Tb3VyY2UgPSBiYWNrZW5kRnJvbVJUUFNlbmRlcih0cmFuc2NlaXZlci0+c2VuZGVy
KCkpLnZpZGVvU291cmNlKCkpCisgICAgICAgICAgICAgICAgdmlkZW9Tb3VyY2UtPnNldEFwcGx5
Um90YXRpb24odHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0
aW9uPHZvaWQoU3RyaW5nJiYpPiYmIGNhbGxiYWNrKQoreworICAgIG1fZW5kcG9pbnQtPmdhdGhl
ckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUoV1RGTW92ZShjYWxsYmFjaykpOworfQorCitib29s
IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6aXNOZWdvdGlhdGlvbk5lZWRlZCh1aW50
MzJfdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lbmRwb2ludC0+aXNOZWdvdGlhdGlvbk5lZWRl
ZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFlYTFhMjYwMTZkNzVmMGJlM2ZkOTgwNjgyOTYwODhi
OWUyYWU1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oCkBAIC0wLDAg
KzEsMTIwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25C
YWNrZW5kLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgPGdz
dC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ7CitjbGFzcyBHU3RyZWFtZXJSdHBSZWNl
aXZlckJhY2tlbmQ7CitjbGFzcyBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOworY2xhc3MgR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOworY2xhc3MgUlRDUnRwUmVjZWl2ZXI7CitjbGFz
cyBSVENSdHBSZWNlaXZlckJhY2tlbmQ7CitjbGFzcyBSVENTZXNzaW9uRGVzY3JpcHRpb247Citj
bGFzcyBSVENTdGF0c1JlcG9ydDsKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcjsKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjsKK2Ns
YXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXI7CisKK3N0cnVjdCBHU3RyZWFtZXJJY2VDYW5kaWRhdGUgeworICAgIFdURl9NQUtF
X1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICB1bnNpZ25lZCBzZHBNTGluZUluZGV4OworICAg
IFN0cmluZyBjYW5kaWRhdGU7Cit9OworCitjbGFzcyBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQgZmluYWwgOiBwdWJsaWMgUGVlckNvbm5lY3Rpb25CYWNrZW5kIHsKKyAgICBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mKTsKKyAgICB+R1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjbG9zZSgpIGZpbmFsOwor
ICAgIHZvaWQgZG9DcmVhdGVPZmZlcihSVENPZmZlck9wdGlvbnMmJikgZmluYWw7CisgICAgdm9p
ZCBkb0NyZWF0ZUFuc3dlcihSVENBbnN3ZXJPcHRpb25zJiYpIGZpbmFsOworICAgIHZvaWQgZG9T
ZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiopIGZpbmFsOwor
ICAgIHZvaWQgZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRp
b24mKSBmaW5hbDsKKyAgICB2b2lkIGRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSYs
IEFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgZG9TdG9wKCkgZmlu
YWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0
YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYp
IGZpbmFsOworICAgIHZvaWQgcmVzdGFydEljZSgpIGZpbmFsOworICAgIGJvb2wgc2V0Q29uZmln
dXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBmaW5hbDsKKyAgICB2b2lkIGdl
dFN0YXRzKFJlZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFsOworICAgIHZvaWQgZ2V0U3RhdHMo
UlRDUnRwU2VuZGVyJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJikgZmluYWw7CisgICAgdm9pZCBn
ZXRTdGF0cyhSVENSdHBSZWNlaXZlciYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFsOwor
CisgICAgdm9pZCBlbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0K
KyAgICB2b2lkIGFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcygpIGZpbmFsOwor
CisgICAgdm9pZCBnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0aW9uPHZvaWQo
U3RyaW5nJiYpPiYmKSBmaW5hbDsKKworICAgIGJvb2wgaXNOZWdvdGlhdGlvbk5lZWRlZCh1aW50
MzJfdCkgY29uc3QgZmluYWw7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGNhblRyaWNrbGVJ
Y2VDYW5kaWRhdGVzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfTsKKworICAgIGZyaWVuZCBjbGFz
cyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OworICAgIGZyaWVuZCBjbGFzcyBHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kOworICAgIFJUQ1BlZXJDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1
cm4gbV9wZWVyQ29ubmVjdGlvbjsgfQorCisgICAgdm9pZCBnZXRTdGF0c1N1Y2NlZWRlZChjb25z
dCBEZWZlcnJlZFByb21pc2UmLCBSZWY8UlRDU3RhdHNSZXBvcnQ+JiYpOworCisgICAgRXhjZXB0
aW9uT3I8UmVmPFJUQ1J0cFNlbmRlcj4+IGFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2smLCBGaXhl
ZFZlY3RvcjxTdHJpbmc+JiYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlVHJhY2soUlRDUnRwU2Vu
ZGVyJikgZmluYWw7CisKKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBh
ZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQm
KSBmaW5hbDsKKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRUcmFu
c2NlaXZlcihSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJ
bml0JikgZmluYWw7CisgICAgdm9pZCBzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soR1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZCYsIE1lZGlhU3RyZWFtVHJhY2smKTsKKworICAgIFJUQ1J0cFRyYW5z
Y2VpdmVyKiBleGlzdGluZ1RyYW5zY2VpdmVyKFdURjo6RnVuY3Rpb248Ym9vbChHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQmKT4mJik7CisgICAgUlRDUnRwVHJhbnNjZWl2ZXImIG5ld1Jl
bW90ZVRyYW5zY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJh
Y2tlbmQ+JiYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpOworCisgICAgdm9pZCBjb2xsZWN0
VHJhbnNjZWl2ZXJzKCkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvY2FsRGVzY3Jp
cHRpb25TZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzTG9jYWxEZXNjcmlwdGlvblNldDsg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRw
VHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChUJiYgdHJhY2tPcktp
bmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpOworCisgICAgUmVmPFJUQ1J0cFJlY2Vp
dmVyPiBjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kPiYmLCBjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lk
KTsKKworICAgIHZvaWQgc3VzcGVuZCgpIGZpbmFsOworICAgIHZvaWQgcmVzdW1lKCkgZmluYWw7
CisKKyAgICBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gbV9lbmRwb2ludDsKKyAgICBib29s
IG1faXNMb2NhbERlc2NyaXB0aW9uU2V0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNSZW1vdGVE
ZXNjcmlwdGlvblNldCB7IGZhbHNlIH07CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdT
dHJlYW1lckljZUNhbmRpZGF0ZT4+IG1fcGVuZGluZ0NhbmRpZGF0ZXM7CisgICAgVmVjdG9yPFJl
ZjxSVENSdHBSZWNlaXZlcj4+IG1fcGVuZGluZ1JlY2VpdmVyczsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
UnRwUmVjZWl2ZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
OWMxMzQzYjEzOWY1YmE5MmY0MTU1ZjNkMDUwNTA1ZDJjZmFmY2Q3NAotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFJlY2VpdmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
clJ0cFJlY2VpdmVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVk
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JUQ1J0
cFBhcmFtZXRlcnMgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJzKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxS
VENSdHBDb250cmlidXRpbmdTb3VyY2U+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0
Q29udHJpYnV0aW5nU291cmNlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4geyB9OworfQorCitWZWN0b3I8UlRDUnRwU3luY2hyb25pemF0aW9uU291cmNlPiBH
U3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFN5bmNocm9uaXphdGlvblNvdXJjZXMoKSBj
b25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworUmVm
PFJlYWx0aW1lTWVkaWFTb3VyY2U+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Y3JlYXRl
U291cmNlKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCit7
CisgICAgaWYgKHRyYWNrS2luZCA9PSAidmlkZW8iX3MpCisgICAgICAgIHJldHVybiBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFja0lkLmlzb2xhdGVkQ29w
eSgpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHRyYWNrS2luZCA9PSAiYXVkaW8iX3MpOworICAg
IHJldHVybiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFj
a0lkLmlzb2xhdGVkQ29weSgpKTsKK30KKworUmVmPFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ+IEdT
dHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6cnRjUnRwVHJhbnNmb3JtQmFja2VuZCgpCit7Cisg
ICAgcmV0dXJuIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6Y3JlYXRlKG1f
cnRjUmVjZWl2ZXIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRHRsc1RyYW5zcG9ydEJhY2tl
bmQ+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQoKQor
eworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJhbnNwb3J0OworICAgIGdf
b2JqZWN0X2dldChtX3J0Y1JlY2VpdmVyLmdldCgpLCAidHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5v
dXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIHRyYW5zcG9ydCA/IG1ha2VVbmlxdWU8R1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ+KHRyYW5zcG9ydCkgOiBudWxscHRyOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2Vp
dmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2M2E3NTk3Yjk4Mjc2NzZkZTAzM2ExOWJjNDNmY2Rh
MmY4MTMzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaApAQCAtMCwwICsx
LDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUg
IkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENSdHBSZWNlaXZlckJhY2tlbmQuaCIK
KyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ1J0
cFJlY2VpdmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kKEdSZWZQdHI8R3N0V2Vi
UlRDUlRQUmVjZWl2ZXI+JiYgcnRjUmVjZWl2ZXIpCisgICAgICAgIDogbV9ydGNSZWNlaXZlcihX
VEZNb3ZlKHJ0Y1JlY2VpdmVyKSkKKyAgICB7CisgICAgfQorCisgICAgR3N0V2ViUlRDUlRQUmVj
ZWl2ZXIqIHJ0Y1JlY2VpdmVyKCkgeyByZXR1cm4gbV9ydGNSZWNlaXZlci5nZXQoKTsgfQorICAg
IFJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGVTb3VyY2UoY29uc3QgU3RyaW5nJiB0cmFj
a0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCk7CisKK3ByaXZhdGU6CisgICAgUlRDUnRwUGFy
YW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkgZmluYWw7CisgICAgVmVjdG9yPFJUQ1J0cENvbnRyaWJ1
dGluZ1NvdXJjZT4gZ2V0Q29udHJpYnV0aW5nU291cmNlcygpIGNvbnN0IGZpbmFsOworICAgIFZl
Y3RvcjxSVENSdHBTeW5jaHJvbml6YXRpb25Tb3VyY2U+IGdldFN5bmNocm9uaXphdGlvblNvdXJj
ZXMoKSBjb25zdCBmaW5hbDsKKyAgICBSZWY8UlRDUnRwVHJhbnNmb3JtQmFja2VuZD4gcnRjUnRw
VHJhbnNmb3JtQmFja2VuZCgpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJh
bnNwb3J0QmFja2VuZD4gZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBmaW5hbDsKKworICAgIEdSZWZQ
dHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IG1fcnRjUmVjZWl2ZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVj
ZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjkwODJmZWNhNGQ0OGE4Mzcw
MzY5NzkxNzY3ZGJhZGFlMzNmOTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zv
cm1CYWNrZW5kLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAy
MS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2
ZXJUcmFuc2Zvcm1CYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1C
YWNrZW5kOjpNZWRpYVR5cGUgbWVkaWFUeXBlRnJvbVJlY2VpdmVyKGNvbnN0IEdzdFdlYlJUQ1JU
UFJlY2VpdmVyJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBSVENSdHBU
cmFuc2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGU6OlZpZGVvOworfQorCitHU3RyZWFtZXJSdHBSZWNl
aXZlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2Vu
ZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiYgcnRjUmVjZWl2ZXIpCisgICAg
OiBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKG1lZGlhVHlwZUZyb21SZWNlaXZlcigqcnRj
UmVjZWl2ZXIpLCBTaWRlOjpSZWNlaXZlcikKKyAgICAsIG1fcnRjUmVjZWl2ZXIocnRjUmVjZWl2
ZXIpCit7Cit9CisKK0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJl
YW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCgpCit7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
UnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFj
ayhDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIHNldElucHV0Q2FsbGJhY2soV1RGTW92ZShj
YWxsYmFjaykpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRw
UmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJhbWUoKQoreworICAgIEFTU0VS
VChtZWRpYVR5cGUoKSA9PSBNZWRpYVR5cGU6OlZpZGVvKTsKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9y
bUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ODY2
NzZhMDZiN2FiOWViMGIzMmU3ZGY3YzYzNDgxNWE4Yzk3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBS
ZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2Vu
ZCBmaW5hbCA6IHB1YmxpYyBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZD4gY3Jl
YXRlKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+JiByZWNlaXZlcikgeyByZXR1
cm4gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQocmVj
ZWl2ZXIpKTsgfQorICAgIH5HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQoKTsK
KworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJh
Y2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4mKTsKKworICAgIC8vIFJU
Q1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lkIHNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxi
YWNrKENhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVxdWVzdEtleUZyYW1lKCkgZmluYWw7
CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiBtX3J0Y1JlY2VpdmVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOTZiY2JhOTI1ZmU5ZGZmN2Y2ZTU2YTU1MTY1
MmQ4NWUyYjgzMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAKQEAgLTAs
MCArMSwxNDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisKKyNpZiBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJy
ZWQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJUQ1BlZXJDb25u
ZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDUnRwU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVP
dXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJl
cy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2U+CitzdGF0aWMgaW5saW5lIGJvb2wg
dXBkYXRlVHJhY2tTb3VyY2UoU291cmNlJiBzb3VyY2UsIE1lZGlhU3RyZWFtVHJhY2sqIHRyYWNr
KQoreworICAgIGlmICghdHJhY2spIHsKKyAgICAgICAgc291cmNlLnN0b3AoKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBzb3VyY2Uuc2V0VHJhY2sodHJhY2stPnBy
aXZhdGVUcmFjaygpKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzdGFy
dFNvdXJjZSgpCit7CisgICAgc3dpdGNoT24obV9zb3VyY2UsIFtdKFJlZjxSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgc291cmNlLT5zdGFy
dCgpOworICAgIH0sIFtdKFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+
JiBzb3VyY2UpIHsKKyAgICAgICAgc291cmNlLT5zdGFydCgpOworICAgIH0sIFtdKHN0ZDo6bnVs
bHB0cl90JikgeworICAgIH0pOworfQorCitXQVJOX1VOVVNFRF9SRVRVUk4gR1JlZlB0cjxHc3RF
bGVtZW50PiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzdG9wU291cmNlKCkKK3sKKyAgICBz
d2l0Y2hPbihtX3NvdXJjZSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0b3AoKTsKKyAgICAgICAgcmV0dXJu
IEdSZWZQdHI8R3N0RWxlbWVudD4oc291cmNlLT5iaW4oKSk7CisgICAgfSwgW10oUmVmPFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3Vy
Y2UtPnN0b3AoKTsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8R3N0RWxlbWVudD4oc291cmNlLT5i
aW4oKSk7CisgICAgfSwgW10oc3RkOjpudWxscHRyX3QmKSB7CisgICAgICAgIHJldHVybiBHUmVm
UHRyPEdzdEVsZW1lbnQ+KG51bGxwdHIpOworICAgIH0pOworICAgIHJldHVybiBudWxscHRyOwor
fQorCitib29sIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJlcGxhY2VUcmFjayhSVENSdHBT
ZW5kZXImIHNlbmRlciwgTWVkaWFTdHJlYW1UcmFjayogdHJhY2spCit7CisgICAgaWYgKCF0cmFj
aykgeworICAgICAgICBhdXRvIHN0b3BwZWRTb3VyY2UgPSBzdG9wU291cmNlKCk7CisgICAgICAg
IHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzZW5kZXIudHJhY2soKSkgeworICAgICAg
ICBzd2l0Y2hPbihtX3NvdXJjZSwgWyZdKFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFjay0+c291cmNlKCku
dHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvKTsKKyAgICAgICAgICAg
IHNvdXJjZS0+c3RvcCgpOworICAgICAgICAgICAgc291cmNlLT5zZXRTb3VyY2UodHJhY2stPnBy
aXZhdGVUcmFjaygpKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICAgICAgfSwg
WyZdKFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsK
KyAgICAgICAgICAgIEFTU0VSVCh0cmFjay0+c291cmNlKCkudHlwZSgpID09IFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGU6OlZpZGVvKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAg
ICAgICAgICAgc291cmNlLT5zZXRTb3VyY2UodHJhY2stPnByaXZhdGVUcmFjaygpKTsKKyAgICAg
ICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICAgICAgfSwgW10oc3RkOjpudWxscHRyX3QmKSB7
CisgICAgICAgIH0pOworICAgIH0KKworICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLT5zZXRT
ZW5kZXJTb3VyY2VGcm9tVHJhY2soKnRoaXMsICp0cmFjayk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK1JUQ1J0cFNlbmRQYXJhbWV0ZXJzIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmdldFBh
cmFtZXRlcnMoKSBjb25zdAoreworICAgIHJldHVybiB0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKG1f
aW5pdERhdGEuZ2V0KCkpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnNl
dFBhcmFtZXRlcnMoY29uc3QgUlRDUnRwU2VuZFBhcmFtZXRlcnMmLCBET01Qcm9taXNlRGVmZXJy
ZWQ8dm9pZD4mJiBwcm9taXNlKQoreworICAgIGlmICghbV9ydGNTZW5kZXIpIHsKKyAgICAgICAg
cHJvbWlzZS5yZWplY3QoTm90U3VwcG9ydGVkRXJyb3IpOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBwcm9taXNlLnJlc29sdmUoKTsKK30KKwor
c3RkOjp1bmlxdWVfcHRyPFJUQ0RUTUZTZW5kZXJCYWNrZW5kPiBHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kOjpjcmVhdGVEVE1GQmFja2VuZCgpCit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R1N0
cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ+KCk7Cit9CisKK1JlZjxSVENSdHBUcmFuc2Zvcm1CYWNr
ZW5kPiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkK
K3sKKyAgICByZXR1cm4gR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6Y3JlYXRl
KG1fcnRjU2VuZGVyKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzZXRN
ZWRpYVN0cmVhbUlkcyhjb25zdCBGaXhlZFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+
IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAg
ICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICBnX29iamVj
dF9nZXQobV9ydGNTZW5kZXIuZ2V0KCksICJ0cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigp
LCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KSA6IG51bGxwdHI7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi45MzMxMDgxY2Y3YjIyNGFiNTY1NWNjMzY4OTU4MTNhMGIzMjY2ZWZiCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJSVENSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRn
b2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ7CisK
K2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDUnRwU2Vu
ZGVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZChHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQm
IGJhY2tlbmQsIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiYmIHJ0Y1NlbmRlciwgR1VuaXF1
ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEpCisgICAgICAgIDogbV9wZWVyQ29ubmVjdGlv
bkJhY2tlbmQoV2Vha1B0ciB7ICZiYWNrZW5kIH0pCisgICAgICAgICwgbV9ydGNTZW5kZXIoV1RG
TW92ZShydGNTZW5kZXIpKQorICAgICAgICAsIG1faW5pdERhdGEoV1RGTW92ZShpbml0RGF0YSkp
CisgICAgeworICAgIH0KKworICAgIHVzaW5nIFNvdXJjZSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51
bGxwdHJfdCwgUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4sIFJlZjxS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+PjsKKyAgICBHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgYmFja2VuZCwgR1Jl
ZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYgcnRjU2VuZGVyLCBTb3VyY2UmJiBzb3VyY2UsIEdV
bmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmIGluaXREYXRhKQorICAgICAgICA6IG1fcGVlckNvbm5l
Y3Rpb25CYWNrZW5kKFdlYWtQdHIgeyAmYmFja2VuZCB9KQorICAgICAgICAsIG1fcnRjU2VuZGVy
KFdURk1vdmUocnRjU2VuZGVyKSkKKyAgICAgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJjZSkp
CisgICAgICAgICwgbV9pbml0RGF0YShXVEZNb3ZlKGluaXREYXRhKSkKKyAgICB7CisgICAgfQor
CisgICAgdm9pZCBzZXRSVENTZW5kZXIoR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYgcnRj
U2VuZGVyKSB7IG1fcnRjU2VuZGVyID0gV1RGTW92ZShydGNTZW5kZXIpOyB9CisgICAgR3N0V2Vi
UlRDUlRQU2VuZGVyKiBydGNTZW5kZXIoKSB7IHJldHVybiBtX3J0Y1NlbmRlci5nZXQoKTsgfQor
CisgICAgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKiBhdWRpb1NvdXJjZSgp
CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZSwKKyAgICAgICAg
ICAgIFtdIChSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiYgc291cmNl
KSB7IHJldHVybiBzb3VyY2UucHRyKCk7IH0sCisgICAgICAgICAgICBbXSAoY29uc3QgYXV0byYp
IC0+IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciogeyByZXR1cm4gbnVsbHB0
cjsgfQorICAgICAgICApOworICAgIH0KKworICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lciogdmlkZW9Tb3VyY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dp
dGNoT24obV9zb3VyY2UsCisgICAgICAgICAgICBbXSAoUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLnB0cigpOyB9LAorICAg
ICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSAtPiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXIqIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICAgICAgKTsKKyAgICB9CisKKyAgICBi
b29sIGhhc1NvdXJjZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChjb25zdCBzdGQ6Om51bGxwdHJfdCYpIHsgcmV0
dXJuIGZhbHNlOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSB7IHJldHVybiB0cnVl
OyB9CisgICAgICAgICk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclNvdXJjZSgpCisgICAgewor
ICAgICAgICBBU1NFUlQoaGFzU291cmNlKCkpOworICAgICAgICBtX3NvdXJjZSA9IG51bGxwdHI7
CisgICAgfQorCisgICAgdm9pZCBzZXRTb3VyY2UoU291cmNlJiYgc291cmNlKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKCFoYXNTb3VyY2UoKSk7CisgICAgICAgIG1fc291cmNlID0gV1RGTW92ZShz
b3VyY2UpOworICAgICAgICBBU1NFUlQoaGFzU291cmNlKCkpOworICAgIH0KKworICAgIHZvaWQg
dGFrZVNvdXJjZShHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBiYWNrZW5kKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGJhY2tlbmQuaGFzU291cmNlKCkpOworICAgICAgICBzZXRTb3VyY2UoV1RG
TW92ZShiYWNrZW5kLm1fc291cmNlKSk7CisgICAgfQorCisgICAgV0FSTl9VTlVTRURfUkVUVVJO
IEdSZWZQdHI8R3N0RWxlbWVudD4gc3RvcFNvdXJjZSgpOworCitwcml2YXRlOgorICAgIGJvb2wg
cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYsIE1lZGlhU3RyZWFtVHJhY2sqKSBmaW5hbDsKKyAg
ICBSVENSdHBTZW5kUGFyYW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkgY29uc3QgZmluYWw7CisgICAg
dm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFJUQ1J0cFNlbmRQYXJhbWV0ZXJzJiwgRE9NUHJvbWlz
ZURlZmVycmVkPHZvaWQ+JiYpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEVE1GU2Vu
ZGVyQmFja2VuZD4gY3JlYXRlRFRNRkJhY2tlbmQoKSBmaW5hbDsKKyAgICBSZWY8UlRDUnRwVHJh
bnNmb3JtQmFja2VuZD4gcnRjUnRwVHJhbnNmb3JtQmFja2VuZCgpIGZpbmFsOworICAgIHZvaWQg
c2V0TWVkaWFTdHJlYW1JZHMoY29uc3QgRml4ZWRWZWN0b3I8U3RyaW5nPiYpIGZpbmFsOworICAg
IHN0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gZHRsc1RyYW5zcG9ydEJh
Y2tlbmQoKSBmaW5hbDsKKworICAgIHZvaWQgc3RhcnRTb3VyY2UoKTsKKworICAgIFdlYWtQdHI8
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kPiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZDsK
KyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9ydGNTZW5kZXI7CisgICAgU291cmNl
IG1fc291cmNlOworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBtX2luaXREYXRhOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjZjNGRlYzFi
YjAzYTMyNzdkOTJiMDY1NDI5YzY0MDcyYmUxNDNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVy
VHJhbnNmb3JtQmFja2VuZC5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0
cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zv
cm1CYWNrZW5kOjpNZWRpYVR5cGUgbWVkaWFUeXBlRnJvbVNlbmRlcihjb25zdCBHc3RXZWJSVENS
VFBTZW5kZXImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJUQ1J0cFRy
YW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZTo6VmlkZW87Cit9CisKK0dTdHJlYW1lclJ0cFNlbmRl
clRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoY29u
c3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiBydGNTZW5kZXIpCisgICAgOiBHU3RyZWFt
ZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKG1lZGlhVHlwZUZyb21TZW5kZXIoKnJ0Y1NlbmRlciksIFNp
ZGU6OlNlbmRlcikKKyAgICAsIG1fcnRjU2VuZGVyKHJ0Y1NlbmRlcikKK3sKK30KKworR1N0cmVh
bWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9y
bUJhY2tlbmQoKQoreworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tl
bmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxiYWNrJiYgY2FsbGJhY2spCit7
CisgICAgc2V0SW5wdXRDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpy
ZXF1ZXN0S2V5RnJhbWUoKQoreworICAgIEFTU0VSVChtZWRpYVR5cGUoKSA9PSBNZWRpYVR5cGU6
OlZpZGVvKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1C
YWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIwYTU3NmRiMTI2ODNlNzU4OTc4NDJkMTRhNzk1OGE0OTBl
OTI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaApAQCAtMCww
ICsxLDUxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1
ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2Zvcm1C
YWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlIDx3
dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclNl
bmRlclRyYW5zZm9ybWVyOworCitjbGFzcyBHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNr
ZW5kIGZpbmFsIDogcHVibGljIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVy
UnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZD4gY3JlYXRlKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRD
UlRQU2VuZGVyPiYgc2VuZGVyKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lclJ0cFNl
bmRlclRyYW5zZm9ybUJhY2tlbmQoc2VuZGVyKSk7IH0KKyAgICB+R1N0cmVhbWVyUnRwU2VuZGVy
VHJhbnNmb3JtQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lclJ0
cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+
Jik7CisKKyAgICAvLyBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kCisgICAgdm9pZCBzZXRUcmFuc2Zv
cm1hYmxlRnJhbWVDYWxsYmFjayhDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIHJlcXVlc3RL
ZXlGcmFtZSgpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IG1fcnRj
U2VuZGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDUzYWQw
NDA0ZTZiODY4YWJkMmE2YTU0YzQ2MDYzMWMwN2UxNjEzYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVk
ZSAiUlRDUnRwQ29kZWNDYXBhYmlsaXR5LmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0
ci5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRf
ZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9k
ZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDUlRQ
VHJhbnNjZWl2ZXI+JiYgcnRjVHJhbnNjZWl2ZXIpCisgICAgOiBtX3J0Y1RyYW5zY2VpdmVyKFdU
Rk1vdmUocnRjVHJhbnNjZWl2ZXIpKQoreworICAgIGdfb2JqZWN0X3NldChtX3J0Y1RyYW5zY2Vp
dmVyLmdldCgpLCAiZG8tbmFjayIsIHRydWUsICJmZWMtdHlwZSIsIEdTVF9XRUJSVENfRkVDX1RZ
UEVfVUxQX1JFRCwgbnVsbHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBS
ZWNlaXZlckJhY2tlbmQ+IEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6Y3JlYXRlUmVj
ZWl2ZXJCYWNrZW5kKCkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiByZWNl
aXZlcjsKKyAgICBnX29iamVjdF9nZXQobV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgInJlY2VpdmVy
IiwgJnJlY2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gV1RGOjptYWtlVW5p
cXVlPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4oV1RGTW92ZShyZWNlaXZlcikpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZD4gR1N0cmVhbWVyUnRw
VHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZCYgYmFja2VuZCwgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNl
JiYgc291cmNlLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBpbml0RGF0YSkKK3sKKyAgICBH
UmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVyOworICAgIGdfb2JqZWN0X2dldChtX3J0
Y1RyYW5zY2VpdmVyLmdldCgpLCAic2VuZGVyIiwgJnNlbmRlci5vdXRQdHIoKSwgbnVsbHB0cik7
CisgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPihi
YWNrZW5kLCBXVEZNb3ZlKHNlbmRlciksIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZShpbml0RGF0
YSkpOworfQorCitSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBHU3RyZWFtZXJSdHBUcmFuc2Nl
aXZlckJhY2tlbmQ6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgR3N0V2ViUlRDUlRQVHJhbnNj
ZWl2ZXJEaXJlY3Rpb24gZ3N0RGlyZWN0aW9uOworICAgIGdfb2JqZWN0X2dldChtX3J0Y1RyYW5z
Y2VpdmVyLmdldCgpLCAiZGlyZWN0aW9uIiwgJmdzdERpcmVjdGlvbiwgbnVsbHB0cik7CisgICAg
cmV0dXJuIHRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZ3N0RGlyZWN0aW9uKTsKK30KKwor
c3RkOjpvcHRpb25hbDxSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbj4gR1N0cmVhbWVyUnRwVHJh
bnNjZWl2ZXJCYWNrZW5kOjpjdXJyZW50RGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBHc3RXZWJS
VENSVFBUcmFuc2NlaXZlckRpcmVjdGlvbiBnc3REaXJlY3Rpb247CisgICAgZ19vYmplY3RfZ2V0
KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJjdXJyZW50LWRpcmVjdGlvbiIsICZnc3REaXJlY3Rp
b24sIG51bGxwdHIpOworICAgIGlmICghZ3N0RGlyZWN0aW9uKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworICAgIHJldHVybiB0b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKGdzdERp
cmVjdGlvbik7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXRE
aXJlY3Rpb24oUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIGdf
b2JqZWN0X3NldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiZGlyZWN0aW9uIiwgZnJvbVJUQ1J0
cFRyYW5zY2VpdmVyRGlyZWN0aW9uKGRpcmVjdGlvbiksIG51bGxwdHIpOworfQorCitTdHJpbmcg
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjptaWQoKQoreworICAgIEdVbmlxdWVPdXRQ
dHI8Y2hhcj4gbWlkOworICAgIGdfb2JqZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAi
bWlkIiwgJm1pZC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIG1pZC5nZXQoKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnN0b3AoKQoreworICAgIC8v
IEZJWE1FOiB3ZWJydGNiaW4gdHJhbnNjZWl2ZXJzIGNhbid0IGJlIHN0b3BwZWQgeWV0LgorICAg
IG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kOjpzdG9wcGVkKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogd2VicnRjYmluIHRyYW5zY2Vp
dmVycyBjYW4ndCBiZSBzdG9wcGVkIHlldC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRp
YyBpbmxpbmUgV0FSTl9VTlVTRURfUkVUVVJOIEV4Y2VwdGlvbk9yPEdzdENhcHMqPiB0b1J0cENv
ZGVjQ2FwYWJpbGl0eShjb25zdCBSVENSdHBDb2RlY0NhcGFiaWxpdHkmIGNvZGVjKQoreworICAg
IGlmICghY29kZWMubWltZVR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikgJiYgIWNvZGVjLm1pbWVU
eXBlLnN0YXJ0c1dpdGgoImF1ZGlvLyIpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52
YWxpZE1vZGlmaWNhdGlvbkVycm9yLCAiUlRDUnRwQ29kZWNDYXBhYmlsaXR5IGJhZCBtaW1lVHlw
ZSIgfTsKKworICAgIGF1dG8gY29tcG9uZW50cyA9IGNvZGVjLm1pbWVUeXBlLnNwbGl0KCcvJyk7
CisgICAgYXV0byogY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0aW9uL3gtcnRw
IiwgIm1lZGlhIiwgR19UWVBFX1NUUklORywgY29tcG9uZW50c1swXS5hc2NpaSgpLmRhdGEoKSwg
ImVuY29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBjb21wb25lbnRzWzFdLmFzY2lpKCkuZGF0
YSgpLCBudWxscHRyKTsKKyAgICBnc3RfY2Fwc19zZXRfc2ltcGxlKGNhcHMsICJjbG9jay1yYXRl
IiwgR19UWVBFX0lOVCwgY29kZWMuY2xvY2tSYXRlLCBudWxscHRyKTsKKyAgICBpZiAoY29kZWMu
Y2hhbm5lbHMpCisgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUoY2FwcywgImNoYW5uZWxzIiwg
R19UWVBFX0lOVCwgKmNvZGVjLmNoYW5uZWxzLCBudWxscHRyKTsKKworICAgIGlmICghY29kZWMu
c2RwRm10cExpbmUuaXNFbXB0eSgpKQorICAgICAgICBHU1RfRklYTUUoIlVucHJvY2Vzc2VkIFNE
UCBGbXRwTGluZTogJXMiLCBjb2RlYy5zZHBGbXRwTGluZS51dGY4KCkuZGF0YSgpKTsKKyAgICBH
U1RfREVCVUcoIkNvZGVjIGNhcGFiaWxpdHk6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKyAg
ICByZXR1cm4gY2FwczsKK30KKworRXhjZXB0aW9uT3I8dm9pZD4gR1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kOjpzZXRDb2RlY1ByZWZlcmVuY2VzKGNvbnN0IFZlY3RvcjxSVENSdHBDb2Rl
Y0NhcGFiaWxpdHk+JiBjb2RlY3MpCit7CisgICAgYXV0byBnc3RDb2RlY3MgPSBhZG9wdEdSZWYo
Z3N0X2NhcHNfbmV3X2VtcHR5KCkpOworICAgIGZvciAoYXV0byYgY29kZWMgOiBjb2RlY3MpIHsK
KyAgICAgICAgYXV0byByZXN1bHQgPSB0b1J0cENvZGVjQ2FwYWJpbGl0eShjb2RlYyk7CisgICAg
ICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0
LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICAgICAgZ3N0X2NhcHNfYXBwZW5kKGdzdENvZGVjcy5n
ZXQoKSwgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICB9CisgICAgZ19vYmplY3Rf
c2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJjb2RlYy1wcmVmZXJlbmNlcyIsIGdzdENvZGVj
cy5nZXQoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5kZWE3NzMwNGIwNmU0MTgwZmM3MDcxNDdmNTQ4ODY5ODU4ODE2YTY5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgKQEAgLTAsMCArMSw1NyBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVm
UHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIgor
I2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENSdHBUcmFuc2Nl
aXZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJS
dHBSZWNlaXZlckJhY2tlbmQ7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZCBmaW5hbCA6IHB1YmxpYyBSVENSdHBUcmFuc2NlaXZlckJhY2tlbmQgeworICAgIFdURl9NQUtF
X0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZChHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiYmKTsKKworICAgIHN0ZDo6dW5p
cXVlX3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+IGNyZWF0ZVJlY2VpdmVyQmFja2Vu
ZCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPiBjcmVh
dGVTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYsIEdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYmLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJik7
CisKKyAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcnRjVHJhbnNjZWl2ZXIoKSB7IHJldHVy
biBtX3J0Y1RyYW5zY2VpdmVyLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgUlRDUnRwVHJhbnNj
ZWl2ZXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgZmluYWw7CisgICAgc3RkOjpvcHRpb25h
bDxSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbj4gY3VycmVudERpcmVjdGlvbigpIGNvbnN0IGZp
bmFsOworICAgIHZvaWQgc2V0RGlyZWN0aW9uKFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKSBm
aW5hbDsKKyAgICBTdHJpbmcgbWlkKCkgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7Cisg
ICAgYm9vbCBzdG9wcGVkKCkgY29uc3QgZmluYWw7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0
Q29kZWNQcmVmZXJlbmNlcyhjb25zdCBWZWN0b3I8UlRDUnRwQ29kZWNDYXBhYmlsaXR5PiYpIGZp
bmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gbV9ydGNUcmFuc2Nl
aXZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTliNGE2YTM3ZTVm
YjAzY2U5ODM2MzA2Y2JlZmNkZmQ5YTVhMGY1MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIx
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2Zv
cm1CYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6c2V0SW5wdXRDYWxsYmFjayhD
YWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIExvY2tlciBob2xkTG9jayB7IG1faW5wdXRDYWxs
YmFja0xvY2sgfTsKKyAgICBtX2lucHV0Q2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpjbGVhclRyYW5zZm9ybWFibGVG
cmFtZUNhbGxiYWNrKCkKK3sKKyAgICBzZXRJbnB1dENhbGxiYWNrKHsgfSk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6cHJvY2Vzc1RyYW5zZm9ybWVkRnJhbWUoUlRD
UnRwVHJhbnNmb3JtYWJsZUZyYW1lJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFu
c2Zvcm1CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk1NDQ4ZmM3ZDMyNjE4Zjc4ZTdlODE1ZmMxNWUx
NDk2MTFiMmIzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaApAQCAtMCww
ICsxLDYwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1
ZGUgIlJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQg
OiBwdWJsaWMgUlRDUnRwVHJhbnNmb3JtQmFja2VuZCB7Citwcm90ZWN0ZWQ6CisgICAgR1N0cmVh
bWVyUnRwVHJhbnNmb3JtQmFja2VuZChNZWRpYVR5cGUsIFNpZGUpOworICAgIHZvaWQgc2V0SW5w
dXRDYWxsYmFjayhDYWxsYmFjayYmKTsKKworcHJvdGVjdGVkOgorICAgIE1lZGlhVHlwZSBtZWRp
YVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX21lZGlhVHlwZTsgfQorCitwcml2YXRlOgor
ICAgIC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lkIHByb2Nlc3NUcmFuc2Zvcm1l
ZEZyYW1lKFJUQ1J0cFRyYW5zZm9ybWFibGVGcmFtZSYpIGZpbmFsOworICAgIHZvaWQgY2xlYXJU
cmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjaygpIGZpbmFsOworICAgIFNpZGUgc2lkZSgpIGNvbnN0
IGZpbmFsIHsgcmV0dXJuIG1fc2lkZTsgfQorCisgICAgTWVkaWFUeXBlIG1fbWVkaWFUeXBlOwor
ICAgIFNpZGUgbV9zaWRlOworCisgICAgTG9jayBtX2lucHV0Q2FsbGJhY2tMb2NrOworICAgIENh
bGxiYWNrIG1faW5wdXRDYWxsYmFjazsKKworICAgIExvY2sgbV9vdXRwdXRDYWxsYmFja0xvY2s7
Cit9OworCitpbmxpbmUgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRw
VHJhbnNmb3JtQmFja2VuZChNZWRpYVR5cGUgbWVkaWFUeXBlLCBTaWRlIHNpZGUpCisgICAgOiBt
X21lZGlhVHlwZShtZWRpYVR5cGUpCisgICAgLCBtX3NpZGUoc2lkZSkKK3sKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5z
cG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0Y2ZlZDczYjc2M2MyMGFmOTA3OTJmMjY0Yzk1
ZDMyYjg0NjhlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHAKQEAg
LTAsMCArMSw5NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisK
KyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRl
ICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldl
YlJUQ1V0aWxzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBSVENT
Y3RwVHJhbnNwb3J0U3RhdGUgdG9SVENTY3RwVHJhbnNwb3J0U3RhdGUoR3N0V2ViUlRDU0NUUFRy
YW5zcG9ydFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdT
VF9XRUJSVENfU0NUUF9UUkFOU1BPUlRfU1RBVEVfTkVXOgorICAgIGNhc2UgR1NUX1dFQlJUQ19T
Q1RQX1RSQU5TUE9SVF9TVEFURV9DT05ORUNUSU5HOgorICAgICAgICByZXR1cm4gUlRDU2N0cFRy
YW5zcG9ydFN0YXRlOjpDb25uZWN0aW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5T
UE9SVF9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENTY3RwVHJhbnNwb3J0U3Rh
dGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0NUUF9UUkFOU1BPUlRfU1RBVEVf
Q0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDU2N0cFRyYW5zcG9ydFN0YXRlOjpDbG9zZWQ7Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworR1N0cmVhbWVy
U2N0cFRyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKEdSZWZQ
dHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4mJiB0cmFuc3BvcnQpCisgICAgOiBtX2JhY2tlbmQo
V1RGTW92ZSh0cmFuc3BvcnQpKQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOworfQorCitHU3Ry
ZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5k
KCkKK3sKKyAgICB1bnJlZ2lzdGVyQ2xpZW50KCk7Cit9CisKK1VuaXF1ZVJlZjxSVENEdGxzVHJh
bnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OmR0bHNUcmFuc3Bv
cnRCYWNrZW5kKCkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IHRyYW5z
cG9ydDsKKyAgICBnX29iamVjdF9nZXQobV9iYWNrZW5kLmdldCgpLCAidHJhbnNwb3J0IiwgJnRy
YW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ+KHRyYW5zcG9ydCk7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KENsaWVudCYgY2xpZW50KQor
eworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCksICJub3RpZnk6OnN0YXRlIiwg
R19DQUxMQkFDSygrW10oR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsK
KyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworfQorCit2
b2lkIEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KCkKK3sK
KyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9iYWNrZW5kLmdldCgp
LCB0aGlzKTsKKyAgICBtX2NsaWVudC5jbGVhcigpOworfQorCit2b2lkIEdTdHJlYW1lclNjdHBU
cmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQoKQoreworICAgIGlmICghbV9jbGllbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnRTdGF0ZSB0cmFuc3Bv
cnRTdGF0ZTsKKyAgICBndWludDE2IG1heENoYW5uZWxzOworICAgIHVpbnQ2NF90IG1heE1lc3Nh
Z2VTaXplOworICAgIGdfb2JqZWN0X2dldChtX2JhY2tlbmQuZ2V0KCksICJzdGF0ZSIsICZ0cmFu
c3BvcnRTdGF0ZSwgIm1heC1tZXNzYWdlLXNpemUiLCAmbWF4TWVzc2FnZVNpemUsICJtYXgtY2hh
bm5lbHMiLCAmbWF4Q2hhbm5lbHMsIG51bGxwdHIpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Ro
aXMsIHRyYW5zcG9ydFN0YXRlLCBtYXhDaGFubmVscywgbWF4TWVzc2FnZVNpemVdIHsKKyAgICAg
ICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBtX2NsaWVu
dC0+b25TdGF0ZUNoYW5nZWQodG9SVENTY3RwVHJhbnNwb3J0U3RhdGUodHJhbnNwb3J0U3RhdGUp
LCBtYXhNZXNzYWdlU2l6ZSwgbWF4Q2hhbm5lbHMpOworICAgIH0pOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi40OTgwZmM4NDk4YzA1YzM5N2RjYjA2YzcwYzQzMzA4YjAyOTBm
MDI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaApAQCAtMCwwICsxLDU0
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENTY3RwVHJhbnNwb3J0QmFja2VuZC5oIgor
I2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENTQ1RQ
VHJhbnNwb3J0IEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRD
U2N0cFRyYW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJTY3Rw
VHJhbnNwb3J0QmFja2VuZD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGlj
OgorICAgIGV4cGxpY2l0IEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKEdSZWZQdHI8R3N0
V2ViUlRDU0NUUFRyYW5zcG9ydD4mJik7CisgICAgfkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNr
ZW5kKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHN0YXRlQ2hhbmdlZCgpOworCitwcml2YXRl
IDoKKyAgICAvLyBSVENTY3RwVHJhbnNwb3J0QmFja2VuZAorICAgIGNvbnN0IHZvaWQqIGJhY2tl
bmQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKyAgICBVbmlxdWVS
ZWY8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+IGR0bHNUcmFuc3BvcnRCYWNrZW5kKCkgZmluYWw7
CisgICAgdm9pZCByZWdpc3RlckNsaWVudChDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHVucmVn
aXN0ZXJDbGllbnQoKSBmaW5hbDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9y
dD4gbV9iYWNrZW5kOworICAgIFdlYWtQdHI8Q2xpZW50PiBtX2NsaWVudDsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9y
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hM2M2NjYxNDE0MDZlM2FjYmU0NzkxMjE1Nzk5YWY2OTNmZTAxMmY1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwCkBAIC0wLDAgKzEsMjY5IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKKyNpbmNsdWRlICJKU1JUQ1N0YXRzUmVwb3J0
LmgiCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRlIDxnc3Qvd2VicnRj
L3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3dGYv
TWFpblRocmVhZC5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNf
ZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19l
bmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgdm9p
ZCBmaWxsUlRDU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlN0YXRzJiBzdGF0cywgY29uc3QgR3N0U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZG91YmxlIHRpbWVzdGFtcDsKKyAgICBpZiAoZ3N0
X3N0cnVjdHVyZV9nZXRfZG91YmxlKHN0cnVjdHVyZSwgInRpbWVzdGFtcCIsICZ0aW1lc3RhbXAp
KQorICAgICAgICBzdGF0cy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAgc3RhdHMuaWQgPSBn
c3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiaWQiKTsKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGZpbGxSVENSVFBTdHJlYW1TdGF0cyhSVENTdGF0c1JlcG9ydDo6UnRwU3RyZWFt
U3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxs
UlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICBzdGF0cy50cmFuc3BvcnRJZCA9IGdz
dF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJ0cmFuc3BvcnQtaWQiKTsKKyAgICBz
dGF0cy5jb2RlY0lkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImNvZGVj
LWlkIik7CisKKyAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRf
dWludChzdHJ1Y3R1cmUsICJzc3JjIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuc3NyYyA9IHZh
bHVlOworCisgICAgLy8gRklYTUU6CisgICAgLy8gc3RhdHMudHJhbnNwb3J0SWQKKyAgICAvLyBz
dGF0cy5jb2RlY0lkCisgICAgLy8gc3RhdHMubWVkaWFUeXBlCisgICAgLy8gc3RhdHMua2luZAor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ0NvZGVjU3RhdHMoUlRDU3RhdHNSZXBvcnQ6
OkNvZGVjU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICB1bnNpZ25lZCB2YWx1ZTsK
KyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUsICJwYXlsb2FkLXR5cGUi
LCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5wYXlsb2FkVHlwZSA9IHZhbHVlOworICAgIGlmIChn
c3Rfc3RydWN0dXJlX2dldF91aW50KHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmdmFsdWUpKQor
ICAgICAgICBzdGF0cy5jbG9ja1JhdGUgPSB2YWx1ZTsKKworICAgIC8vIEZJWE1FOgorICAgIC8v
IHN0YXRzLm1pbWVUeXBlID0KKyAgICAvLyBzdGF0cy5jaGFubmVscyA9CisgICAgLy8gc3RhdHMu
c2RwRm10cExpbmUgPQorICAgIC8vIHN0YXRzLmltcGxlbWVudGF0aW9uID0KK30KKworc3RhdGlj
IGlubGluZSB2b2lkIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBvcnQ6Oklu
Ym91bmRSdHBTdHJlYW1TdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJl
KQoreworICAgIGZpbGxSVENSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAg
IHVpbnQ2NF90IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50NjQoc3RydWN0
dXJlLCAicGFja2V0cy1yZWNlaXZlZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnBhY2tldHNS
ZWNlaXZlZCA9IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50NjQoc3RydWN0
dXJlLCAiYnl0ZXMtcmVjZWl2ZWQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5ieXRlc1JlY2Vp
dmVkID0gdmFsdWU7CisKKyAgICB1bnNpZ25lZCBwYWNrZXRzTG9zdDsKKyAgICBpZiAoZ3N0X3N0
cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUsICJwYWNrZXRzLWxvc3QiLCAmcGFja2V0c0xvc3Qp
KQorICAgICAgICBzdGF0cy5wYWNrZXRzTG9zdCA9IHBhY2tldHNMb3N0OworCisgICAgZG91Ymxl
IGppdHRlcjsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHN0cnVjdHVyZSwgImpp
dHRlciIsICZqaXR0ZXIpKQorICAgICAgICBzdGF0cy5qaXR0ZXIgPSBqaXR0ZXI7CisKKyAgICAv
LyBGSVhNRToKKyAgICAvLyBzdGF0cy5mcmFjdGlvbkxvc3QgPQorICAgIC8vIHN0YXRzLnBhY2tl
dHNEaXNjYXJkZWQgPQorICAgIC8vIHN0YXRzLnBhY2tldHNSZXBhaXJlZCA9CisgICAgLy8gc3Rh
dHMuYnVyc3RQYWNrZXRzTG9zdCA9CisgICAgLy8gc3RhdHMuYnVyc3RQYWNrZXRzRGlzY2FyZGVk
ID0KKyAgICAvLyBzdGF0cy5idXJzdExvc3NDb3VudCA9CisgICAgLy8gc3RhdHMuYnVyc3REaXNj
YXJkQ291bnQgPQorICAgIC8vIHN0YXRzLmJ1cnN0TG9zc1JhdGUgPQorICAgIC8vIHN0YXRzLmJ1
cnN0RGlzY2FyZFJhdGUgPQorICAgIC8vIHN0YXRzLmdhcExvc3NSYXRlID0KKyAgICAvLyBzdGF0
cy5nYXBEaXNjYXJkUmF0ZSA9CisgICAgLy8gc3RhdHMuZnJhbWVzRGVjb2RlZCA9Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBmaWxsT3V0Ym91bmRSVFBTdHJlYW1TdGF0cyhSVENTdGF0c1JlcG9y
dDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQoreworICAgIGZpbGxSVENSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RydWN0dXJlKTsK
KworICAgIHVpbnQ2NF90IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50NjQo
c3RydWN0dXJlLCAicGFja2V0cy1zZW50IiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMucGFja2V0
c1NlbnQgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVy
ZSwgImJ5dGVzLXNlbnQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5ieXRlc1NlbnQgPSB2YWx1
ZTsKKworICAgIC8vIEZJWE1FCisgICAgLy8gc3RhdHMudGFyZ2V0Qml0cmF0ZSA9CisgICAgLy8g
c3RhdHMuZnJhbWVzRW5jb2RlZCA9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDUGVl
ckNvbm5lY3Rpb25TdGF0cyhSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cyYgc3Rh
dHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZpbGxSVENTdGF0cyhz
dGF0cywgc3RydWN0dXJlKTsKKworICAgIGludCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVy
ZV9nZXRfaW50KHN0cnVjdHVyZSwgImRhdGEtY2hhbm5lbHMtb3BlbmVkIiwgJnZhbHVlKSkKKyAg
ICAgICAgc3RhdHMuZGF0YUNoYW5uZWxzT3BlbmVkID0gdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1
Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJkYXRhLWNoYW5uZWxzLWNsb3NlZCIsICZ2YWx1ZSkp
CisgICAgICAgIHN0YXRzLmRhdGFDaGFubmVsc0Nsb3NlZCA9IHZhbHVlOworfQorCitzdGF0aWMg
aW5saW5lIHZvaWQgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3Bv
cnRTdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZp
bGxSVENTdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIC8vIEZJWE1FCit9CisKK3N0YXRp
YyBnYm9vbGVhbiBmaWxsUmVwb3J0Q2FsbGJhY2soR1F1YXJrLCBjb25zdCBHVmFsdWUqIHZhbHVl
LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBpZiAoIUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RV
UkUodmFsdWUpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUodmFsdWUpOworICAgIEdzdFdl
YlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldChzdHJ1
Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VCUlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5cGUsIG51
bGxwdHIpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIERPTU1hcEFkYXB0ZXImIHJlcG9y
dCA9ICpyZWludGVycHJldF9jYXN0PERPTU1hcEFkYXB0ZXIqPih1c2VyRGF0YSk7CisKKyAgICBz
d2l0Y2ggKHN0YXRzVHlwZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DT0RFQzogewor
ICAgICAgICBSVENTdGF0c1JlcG9ydDo6Q29kZWNTdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJU
Q0NvZGVjU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9N
U3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzPj4oc3RhdHMu
aWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NU
X1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUDogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5i
b3VuZFJ0cFN0cmVhbVN0YXRzIHN0YXRzOworICAgICAgICBmaWxsSW5ib3VuZFJUUFN0cmVhbVN0
YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywg
SURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzPj4oc3Rh
dHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
R1NUX1dFQlJUQ19TVEFUU19PVVRCT1VORF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6
Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0
cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0
cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0
cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUkVNT1RFX0lOQk9VTkRfUlRQOiB7CisgICAgICAgIFJU
Q1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxJ
bmJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5z
ZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRw
U3RyZWFtU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1JFTU9URV9PVVRCT1VORF9SVFA6IHsK
KyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7Cisg
ICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAg
ICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9y
dDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfQ1NSQzoKKyAg
ICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0YXRzOiBjc3JjIik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19QRUVSX0NPTk5FQ1RJT046IHsKKyAgICAgICAg
UlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxS
VENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQu
c2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5l
Y3Rpb25TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfVFJBTlNQT1JUOiB7CisgICAgICAgIFJU
Q1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJUQ1RyYW5z
cG9ydFN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0
cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHM+PihzdGF0
cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBH
U1RfV0VCUlRDX1NUQVRTX1NUUkVBTToKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0
YXRzOiBzdHJlYW0iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRT
X0RBVEFfQ0hBTk5FTDoKKyAgICAgICAgR1NUX0ZJWE1FKCJNaXNzaW5nIGRhdGEtY2hhbm5lbCBz
dGF0cyBzdXBwb3J0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFU
U19DQU5ESURBVEVfUEFJUjoKKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfTE9DQUxfQ0FORElE
QVRFOgorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19SRU1PVEVfQ0FORElEQVRFOgorICAgICAg
ICBHU1RfRklYTUUoIk1pc3NpbmcgY2FuZGlkYXRlIHN0YXRzIHN1cHBvcnQiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX0NFUlRJRklDQVRFOgorICAgICAgICBH
U1RfRklYTUUoIk1pc3NpbmcgY2VydGlmaWNhdGUgc3RhdHMgc3VwcG9ydCIpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RydWN0IENhbGxiYWNrSG9s
ZGVyIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgQ2FsbGJhY2tI
b2xkZXIoR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OkNvbGxlY3RvckNhbGxiYWNrJiYgY29sbGVj
dG9yQ2FsbGJhY2spCisgICAgICAgIDogY2FsbGJhY2soV1RGTW92ZShjb2xsZWN0b3JDYWxsYmFj
aykpCisgICAgeworICAgIH0KKyAgICBHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Q29sbGVjdG9y
Q2FsbGJhY2sgY2FsbGJhY2s7Cit9OworCit2b2lkIEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpn
ZXRTdGF0cyhDb2xsZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBHc3RQYWQqIHBhZCkKK3sKKyAg
ICBpZiAoIW1fd2VicnRjQmluKSB7CisgICAgICAgIGNhbGxiYWNrKG51bGxwdHIpOworICAgICAg
ICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBob2xkZXIgPSBXVEY6Om1ha2VVbmlxdWU8Q2Fs
bGJhY2tIb2xkZXI+KFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBhdXRvKiBwcm9taXNlID0gZ3N0
X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlzZSwg
Z3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9taXNlID0gYWRvcHRHUmVmKHJh
d1Byb21pc2UpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbGJhY2tIb2xkZXI+IGhvbGRl
cihyZWludGVycHJldF9jYXN0PENhbGxiYWNrSG9sZGVyKj4odXNlckRhdGEpKTsKKyAgICAgICAg
aWYgKGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZS5nZXQoKSkgIT0gR1NUX1BST01JU0VfUkVTVUxU
X1JFUExJRUQpIHsKKyAgICAgICAgICAgIGhvbGRlci0+Y2FsbGJhY2sobnVsbHB0cik7CisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBhdXRvKiBzdGF0cyA9
IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgaWYgKCFzdGF0
cykgeworICAgICAgICAgICAgaG9sZGVyLT5jYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFtw
cm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgaG9sZGVyID0gaG9sZGVyLmdldCgpXSB7CisgICAg
ICAgICAgICBob2xkZXItPmNhbGxiYWNrKFJUQ1N0YXRzUmVwb3J0OjpjcmVhdGUoWyZdKGF1dG8m
IG1hcEFkYXB0ZXIpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvKiBzdGF0cyA9IGdzdF9w
cm9taXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBnc3Rfc3Ry
dWN0dXJlX2ZvcmVhY2goc3RhdHMsIGZpbGxSZXBvcnRDYWxsYmFjaywgJm1hcEFkYXB0ZXIpOwor
ICAgICAgICAgICAgfSkpOworICAgICAgICB9KTsKKyAgICB9LCBob2xkZXIucmVsZWFzZSgpLCBu
dWxscHRyKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJn
ZXQtc3RhdHMiLCBwYWQsIHByb21pc2UpOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQyNzM1
NTNmODI1MTM3MjYxZmE5NDc2YmZlMGFlMTcyYmQwODFiNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRz
Q29sbGVjdG9yLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDx3
dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUlRDU3RhdHNSZXBvcnQ7CisKK2NsYXNzIEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yIDog
cHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yLCBXVEY6
OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29sbGVjdG9y
Q2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxSVENTdGF0c1JlcG9ydD4m
Jik+OworICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I+IGNyZWF0ZSgpIHsg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IoKSk7IH0KKworICAg
IHZvaWQgc2V0RWxlbWVudChHc3RFbGVtZW50KiBlbGVtZW50KSB7IG1fd2VicnRjQmluID0gZWxl
bWVudDsgfQorICAgIHZvaWQgZ2V0U3RhdHMoQ29sbGVjdG9yQ2FsbGJhY2smJiwgR3N0UGFkKik7
CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3dlYnJ0Y0JpbjsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxz
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5hZmMxNDlhM2E4Y2NhYWEzNzhjM2E1OTdhOTIyZGVjMDJlNmVhMGE5
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwCkBAIC0wLDAgKzEsNDQ4IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiR1N0cmVh
bWVyV2ViUlRDVXRpbHMuaCIKKworI2luY2x1ZGUgIlJUQ0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1
ZGUgIlJUQ0ljZVByb3RvY29sLmgiCisKKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaW5jbHVk
ZSA8b3BlbnNzbC9yc2EuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHd0
Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5o
PgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KKworR1NU
X0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfd2VicnRjX3V0aWxzX2RlYnVnKTsKKyNkZWZp
bmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfdXRpbHNfZGVidWcKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIFJUQ0ljZUNvbXBvbmVudCB0b1JUQ0ljZUNvbXBv
bmVudChpbnQgY29tcG9uZW50KQoreworICAgIHJldHVybiBjb21wb25lbnQgPT0gMSA/IFJUQ0lj
ZUNvbXBvbmVudDo6UnRwIDogUlRDSWNlQ29tcG9uZW50OjpSdGNwOworfQorCitzdGF0aWMgaW5s
aW5lIHN0ZDo6b3B0aW9uYWw8UlRDSWNlUHJvdG9jb2w+IHRvUlRDSWNlUHJvdG9jb2woY29uc3Qg
U3RyaW5nJiBwcm90b2NvbCkKK3sKKyAgICBpZiAocHJvdG9jb2wuaXNFbXB0eSgpKQorICAgICAg
ICByZXR1cm4geyB9OworICAgIGlmIChwcm90b2NvbCA9PSAidWRwIikKKyAgICAgICAgcmV0dXJu
IFJUQ0ljZVByb3RvY29sOjpVZHA7CisgICAgQVNTRVJUKHByb3RvY29sID09ICJ0Y3AiKTsKKyAg
ICByZXR1cm4gUlRDSWNlUHJvdG9jb2w6OlRjcDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6Om9w
dGlvbmFsPFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU+IHRvUlRDSWNlVGNwQ2FuZGlkYXRlVHlwZShj
b25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKQorICAgICAgICBy
ZXR1cm4geyB9OworICAgIGlmICh0eXBlID09ICJhY3RpdmUiKQorICAgICAgICByZXR1cm4gUlRD
SWNlVGNwQ2FuZGlkYXRlVHlwZTo6QWN0aXZlOworICAgIGlmICh0eXBlID09ICJwYXNzaXZlIikK
KyAgICAgICAgcmV0dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU6OlBhc3NpdmU7CisgICAgQVNT
RVJUKHR5cGUgPT0gInNvIik7CisgICAgcmV0dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU6OlNv
OworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDSWNlQ2FuZGlkYXRlVHlwZT4g
dG9SVENJY2VDYW5kaWRhdGVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlw
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKHR5cGUgPT0gImhvc3Qi
KQorICAgICAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6SG9zdDsKKyAgICBpZiAodHlw
ZSA9PSAic3JmbHgiKQorICAgICAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6U3JmbHg7
CisgICAgaWYgKHR5cGUgPT0gInByZmx4IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNhbmRpZGF0
ZVR5cGU6OlByZmx4OworICAgIEFTU0VSVCh0eXBlID09ICJyZWxheSIpOworICAgIHJldHVybiBS
VENJY2VDYW5kaWRhdGVUeXBlOjpSZWxheTsKK30KKworUmVmUHRyPFJUQ0Vycm9yPiB0b1JUQ0Vy
cm9yKEdFcnJvciogcnRjRXJyb3IpCit7CisgICAgYXV0byBkZXRhaWwgPSB0b1JUQ0Vycm9yRGV0
YWlsVHlwZShzdGF0aWNfY2FzdDxHc3RXZWJSVENFcnJvcj4ocnRjRXJyb3ItPmNvZGUpKTsKKyAg
ICBpZiAoIWRldGFpbCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFJUQ0Vy
cm9yOjpjcmVhdGUoKmRldGFpbCwgcnRjRXJyb3ItPm1lc3NhZ2UpOworfQorCitzdGF0aWMgaW5s
aW5lIGRvdWJsZSB0b1dlYlJUQ0JpdFJhdGVQcmlvcml0eShSVENQcmlvcml0eVR5cGUgcHJpb3Jp
dHkpCit7CisgICAgc3dpdGNoIChwcmlvcml0eSkgeworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBl
OjpWZXJ5TG93OgorICAgICAgICByZXR1cm4gMC41OworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBl
OjpMb3c6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpNZWRp
dW06CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpIaWdoOgor
ICAgICAgICByZXR1cm4gNDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZnJvbVJUQ0VuY29kaW5nUGFyYW1l
dGVycyhjb25zdCBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAg
R1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IHJ0Y1BhcmFtZXRlcnMoZ3N0X3N0cnVjdHVyZV9uZXco
ImVuY29kaW5nLXBhcmFtZXRlcnMiLCAiYWN0aXZlIiwgR19UWVBFX0JPT0xFQU4sIHBhcmFtZXRl
cnMuYWN0aXZlLAorICAgICAgICAicmlkIiwgR19UWVBFX1NUUklORywgcGFyYW1ldGVycy5yaWQu
dXRmOCgpLmRhdGEoKSwgImJpdHJhdGUtcHJpb3JpdHkiLCBHX1RZUEVfRE9VQkxFLCB0b1dlYlJU
Q0JpdFJhdGVQcmlvcml0eShwYXJhbWV0ZXJzLnByaW9yaXR5KSwgbnVsbHB0cikpOworCisgICAg
aWYgKHBhcmFtZXRlcnMuc3NyYykKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQocnRjUGFyYW1l
dGVycy5nZXQoKSwgInNzcmMiLCBHX1RZUEVfVUxPTkcsIHBhcmFtZXRlcnMuc3NyYywgbnVsbHB0
cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5tYXhCaXRyYXRlKQorICAgICAgICBnc3Rfc3RydWN0
dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAibWF4LWJpdHJhdGUiLCBHX1RZUEVfVUxPTkcs
IHBhcmFtZXRlcnMubWF4Qml0cmF0ZSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5t
YXhGcmFtZXJhdGUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0
KCksICJtYXgtZnJhbWVyYXRlIiwgR19UWVBFX1VMT05HLCBwYXJhbWV0ZXJzLm1heEZyYW1lcmF0
ZSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5zY2FsZVJlc29sdXRpb25Eb3duQnkp
CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJzY2FsZS1y
ZXNvbHV0aW9uLWRvd24tYnkiLCBHX1RZUEVfRE9VQkxFLCBwYXJhbWV0ZXJzLnNjYWxlUmVzb2x1
dGlvbkRvd25CeSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5uZXR3b3JrUHJpb3Jp
dHkpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJuZXR3
b3JrLXByaW9yaXR5IiwgR19UWVBFX0lOVCwgKnBhcmFtZXRlcnMubmV0d29ya1ByaW9yaXR5LCBu
dWxscHRyKTsKKworICAgIHJldHVybiBydGNQYXJhbWV0ZXJzOworfQorCitzdGF0aWMgaW5saW5l
IFJUQ1ByaW9yaXR5VHlwZSBmcm9tV2ViUlRDQml0UmF0ZVByaW9yaXR5KGRvdWJsZSBwcmlvcml0
eSkKK3sKKyAgICBpZiAocHJpb3JpdHkgPCAwLjcpCisgICAgICAgIHJldHVybiBSVENQcmlvcml0
eVR5cGU6OlZlcnlMb3c7CisgICAgaWYgKHByaW9yaXR5IDwgMS41KQorICAgICAgICByZXR1cm4g
UlRDUHJpb3JpdHlUeXBlOjpMb3c7CisgICAgaWYgKHByaW9yaXR5IDwgMi41KQorICAgICAgICBy
ZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpNZWRpdW07CisgICAgcmV0dXJuIFJUQ1ByaW9yaXR5VHlw
ZTo6SGlnaDsKK30KKworc3RhdGljIGlubGluZSBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMgdG9S
VENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3QgR3N0U3RydWN0dXJlKiBydGNQYXJhbWV0ZXJzKQor
eworICAgIFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworCisgICAgdW5zaWdu
ZWQgc3NyYzsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChydGNQYXJhbWV0ZXJzLCAi
c3NyYyIsICZzc3JjKSkKKyAgICAgICAgcGFyYW1ldGVycy5zc3JjID0gc3NyYzsKKworICAgIGdz
dF9zdHJ1Y3R1cmVfZ2V0KHJ0Y1BhcmFtZXRlcnMsICJhY3RpdmUiLCBHX1RZUEVfQk9PTEVBTiwg
JihwYXJhbWV0ZXJzLmFjdGl2ZSksIG51bGxwdHIpOworCisgICAgdWludDY0X3QgbWF4Qml0cmF0
ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHJ0Y1BhcmFtZXRlcnMsICJtYXgt
Yml0cmF0ZSIsICZtYXhCaXRyYXRlKSkKKyAgICAgICAgcGFyYW1ldGVycy5tYXhCaXRyYXRlID0g
bWF4Qml0cmF0ZTsKKworICAgIHVpbnQ2NF90IG1heEZyYW1lcmF0ZTsKKyAgICBpZiAoZ3N0X3N0
cnVjdHVyZV9nZXRfdWludDY0KHJ0Y1BhcmFtZXRlcnMsICJtYXgtZnJhbWVyYXRlIiwgJm1heEZy
YW1lcmF0ZSkpCisgICAgICAgIHBhcmFtZXRlcnMubWF4RnJhbWVyYXRlID0gbWF4RnJhbWVyYXRl
OworCisgICAgcGFyYW1ldGVycy5yaWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcocnRjUGFy
YW1ldGVycywgInJpZCIpOworCisgICAgZG91YmxlIHNjYWxlUmVzb2x1dGlvbkRvd25CeTsKKyAg
ICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHJ0Y1BhcmFtZXRlcnMsICJzY2FsZS1yZXNv
bHV0aW9uLWRvd24tYnkiLCAmc2NhbGVSZXNvbHV0aW9uRG93bkJ5KSkKKyAgICAgICAgcGFyYW1l
dGVycy5zY2FsZVJlc29sdXRpb25Eb3duQnkgPSBzY2FsZVJlc29sdXRpb25Eb3duQnk7CisKKyAg
ICBkb3VibGUgYml0cmF0ZVByaW9yaXR5OworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9kb3Vi
bGUocnRjUGFyYW1ldGVycywgImJpdHJhdGUtcHJpb3JpdHkiLCAmYml0cmF0ZVByaW9yaXR5KSkK
KyAgICAgICAgcGFyYW1ldGVycy5wcmlvcml0eSA9IGZyb21XZWJSVENCaXRSYXRlUHJpb3JpdHko
Yml0cmF0ZVByaW9yaXR5KTsKKworICAgIGludCBuZXR3b3JrUHJpb3JpdHk7CisgICAgaWYgKGdz
dF9zdHJ1Y3R1cmVfZ2V0X2ludChydGNQYXJhbWV0ZXJzLCAibmV0d29yay1wcmlvcml0eSIsICZu
ZXR3b3JrUHJpb3JpdHkpKQorICAgICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtQcmlvcml0eSA9IHN0
YXRpY19jYXN0PFJUQ1ByaW9yaXR5VHlwZT4obmV0d29ya1ByaW9yaXR5KTsKKworICAgIHJldHVy
biBwYXJhbWV0ZXJzOworfQorCitSVENSdHBTZW5kUGFyYW1ldGVycyB0b1JUQ1J0cFNlbmRQYXJh
bWV0ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSogcnRjUGFyYW1ldGVycykKK3sKKyAgICBpZiAoIXJ0
Y1BhcmFtZXRlcnMpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBSVENSdHBTZW5kUGFyYW1l
dGVycyBwYXJhbWV0ZXJzOworICAgIGF1dG8qIGVuY29kaW5ncyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0
X3ZhbHVlKHJ0Y1BhcmFtZXRlcnMsICJlbmNvZGluZ3MiKTsKKyAgICB1bnNpZ25lZCBzaXplID0g
Z3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUoZW5jb2RpbmdzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGF1dG8qIHZhbHVlID0gZ3N0X3Zh
bHVlX2xpc3RfZ2V0X3ZhbHVlKGVuY29kaW5ncywgaSk7CisgICAgICAgIHBhcmFtZXRlcnMuZW5j
b2RpbmdzLmFwcGVuZCh0b1JUQ0VuY29kaW5nUGFyYW1ldGVycyhHU1RfU1RSVUNUVVJFX0NBU1Qo
dmFsdWUpKSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEhhbmRsZSBydGNQYXJhbWV0ZXJzLmRl
Z3JhZGF0aW9uX3ByZWZlcmVuY2UuCisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9CisKKworc3Rh
dGljIHZvaWQgZW5zdXJlRGVidWdDYXRlZ29yeUluaXRpYWxpemVkKCkKK3sKKyAgICBzdGF0aWMg
c3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtd
IHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3dlYnJ0Y191dGlsc19k
ZWJ1ZywgIndlYmtpdHdlYnJ0Y3V0aWxzIiwgMCwgIldlYktpdCBXZWJSVEMgdXRpbGl0aWVzIik7
CisgICAgfSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDSWNlQ2FuZGlkYXRlOjpGaWVsZHM+IHBh
cnNlSWNlQ2FuZGlkYXRlU0RQKGNvbnN0IFN0cmluZyYgc2RwKQoreworICAgIGVuc3VyZURlYnVn
Q2F0ZWdvcnlJbml0aWFsaXplZCgpOworICAgIEdTVF9ERUJVRygiUGFyc2luZyBJQ0UgQ2FuZGlk
YXRlOiAlcyIsIHNkcC51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoIXNkcC5zdGFydHNXaXRoKCJj
YW5kaWRhdGU6IikpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBTdHJpbmcgZm91bmRhdGlv
bjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRJZCA9IDA7CisgICAgU3RyaW5nIHRyYW5zcG9ydDsK
KyAgICB1bnNpZ25lZCBwcmlvcml0eSA9IDA7CisgICAgU3RyaW5nIGFkZHJlc3M7CisgICAgdWlu
dDMyX3QgcG9ydCA9IDA7CisgICAgU3RyaW5nIHR5cGU7CisgICAgU3RyaW5nIHRjcHR5cGU7Cisg
ICAgU3RyaW5nIHJlbGF0ZWRBZGRyZXNzOworICAgIGd1aW50MTYgcmVsYXRlZFBvcnQgPSAwOwor
ICAgIFN0cmluZyB1c2VybmFtZUZyYWdtZW50OworICAgIGF1dG8gdG9rZW5zID0gc2RwLmNvbnZl
cnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3Vic3RyaW5nKDEwKS5zcGxpdCgnICcpOworCisgICAgZm9y
IChhdXRvIGl0ID0gdG9rZW5zLmJlZ2luKCk7IGl0ICE9IHRva2Vucy5lbmQoKTsgKytpdCkgewor
ICAgICAgICBhdXRvIGkgPSBzdGQ6OmRpc3RhbmNlKHRva2Vucy5iZWdpbigpLCBpdCk7CisgICAg
ICAgIGF1dG8gdG9rZW4gPSAqaXQ7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNl
IDA6CisgICAgICAgICAgICBmb3VuZGF0aW9uID0gdG9rZW47CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZUludGVn
ZXI8dW5zaWduZWQ+KHRva2VuKSkKKyAgICAgICAgICAgICAgICBjb21wb25lbnRJZCA9ICp2YWx1
ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHRv
a2VuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGlm
IChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVkPih0b2tlbikpCisgICAgICAgICAg
ICAgICAgcHJpb3JpdHkgPSAqdmFsdWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAg
ICAgICAgICBhZGRyZXNzID0gdG9rZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2Fz
ZSA1OgorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZUludGVnZXI8dW5zaWduZWQ+
KHRva2VuKSkKKyAgICAgICAgICAgICAgICBwb3J0ID0gKnZhbHVlOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChpdCArIDEgPT0gdG9rZW5zLmVuZCgpKQorICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgICAgIGl0Kys7CisgICAgICAgICAg
ICBpZiAodG9rZW4gPT0gInR5cCIpCisgICAgICAgICAgICAgICAgdHlwZSA9ICppdDsKKyAgICAg
ICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJyYWRkciIpCisgICAgICAgICAgICAgICAgcmVsYXRl
ZEFkZHJlc3MgPSAqaXQ7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAicnBvcnQiKQor
ICAgICAgICAgICAgICAgIHJlbGF0ZWRQb3J0ID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVkPigqaXQp
LnZhbHVlX29yKDApOworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gPT0gInRjcHR5cGUiKQor
ICAgICAgICAgICAgICAgIHRjcHR5cGUgPSAqaXQ7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tl
biA9PSAidWZyYWciKQorICAgICAgICAgICAgICAgIHVzZXJuYW1lRnJhZ21lbnQgPSAqaXQ7Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0eXBlLmlzRW1w
dHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFJUQ0ljZUNhbmRpZGF0ZTo6RmllbGRz
IGZpZWxkczsKKyAgICBmaWVsZHMuZm91bmRhdGlvbiA9IGZvdW5kYXRpb247CisgICAgZmllbGRz
LmNvbXBvbmVudCA9IHRvUlRDSWNlQ29tcG9uZW50KGNvbXBvbmVudElkKTsKKyAgICBmaWVsZHMu
cHJpb3JpdHkgPSBwcmlvcml0eTsKKyAgICBmaWVsZHMucHJvdG9jb2wgPSB0b1JUQ0ljZVByb3Rv
Y29sKHRyYW5zcG9ydCk7CisgICAgaWYgKCFhZGRyZXNzLmlzRW1wdHkoKSkgeworICAgICAgICBm
aWVsZHMuYWRkcmVzcyA9IGFkZHJlc3M7CisgICAgICAgIGZpZWxkcy5wb3J0ID0gcG9ydDsKKyAg
ICB9CisgICAgZmllbGRzLnR5cGUgPSB0b1JUQ0ljZUNhbmRpZGF0ZVR5cGUodHlwZSk7CisgICAg
ZmllbGRzLnRjcFR5cGUgPSB0b1JUQ0ljZVRjcENhbmRpZGF0ZVR5cGUodGNwdHlwZSk7CisgICAg
aWYgKCFyZWxhdGVkQWRkcmVzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZmllbGRzLnJlbGF0ZWRB
ZGRyZXNzID0gcmVsYXRlZEFkZHJlc3M7CisgICAgICAgIGZpZWxkcy5yZWxhdGVkUG9ydCA9IHJl
bGF0ZWRQb3J0OworICAgIH0KKyAgICBmaWVsZHMudXNlcm5hbWVGcmFnbWVudCA9IHVzZXJuYW1l
RnJhZ21lbnQ7CisgICAgcmV0dXJuIGZpZWxkczsKK30KKworc3RhdGljIFN0cmluZyB4NTA5U2Vy
aWFsaXplKFg1MDkqIHg1MDkpCit7CisgICAgQklPKiBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgp
KTsKKyAgICBpZiAoIWJpbykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gc2NvcGVF
eGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIEJJT19mcmVlKGJpbyk7Cisg
ICAgfSk7CisKKyAgICBpZiAoIVBFTV93cml0ZV9iaW9fWDUwOShiaW8sIHg1MDkpKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVz
ZXJ2ZUNhcGFjaXR5KDQwOTYpOworICAgIGludCBsZW5ndGggPSBCSU9fcmVhZChiaW8sIGJ1ZmZl
ci5kYXRhKCksIDQwOTYpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9Owor
CisgICAgcmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpOworfQorCitzdGF0aWMg
U3RyaW5nIHByaXZhdGVLZXlTZXJpYWxpemUoRVZQX1BLRVkqIHByaXZhdGVLZXkpCit7CisgICAg
QklPKiBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAgICBpZiAoIWJpbykKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGF1dG8gc2NvcGVFeGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsm
XSB7CisgICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgfSk7CisKKyAgICBpZiAoIVBFTV93cml0
ZV9iaW9fUHJpdmF0ZUtleShiaW8sIHByaXZhdGVLZXksIG51bGxwdHIsIG51bGxwdHIsIDAsIG51
bGxwdHIsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+
IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzZXJ2ZUNhcGFjaXR5KDQwOTYpOworICAgIGludCBsZW5n
dGggPSBCSU9fcmVhZChiaW8sIGJ1ZmZlci5kYXRhKCksIDQwOTYpOworICAgIGlmICghbGVuZ3Ro
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgp
LCBsZW5ndGgpOworfQorCitzdGQ6Om9wdGlvbmFsPFJlZjxSVENDZXJ0aWZpY2F0ZT4+IGdlbmVy
YXRlQ2VydGlmaWNhdGUoUmVmPFNlY3VyaXR5T3JpZ2luPiYmIG9yaWdpbiwgY29uc3QgUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uJiBpbmZvKQoreworICAgIGVu
c3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpOworICAgIEVWUF9QS0VZKiBwcml2YXRlS2V5
ID0gRVZQX1BLRVlfbmV3KCk7CisgICAgaWYgKCFwcml2YXRlS2V5KSB7CisgICAgICAgIEdTVF9X
QVJOSU5HKCJGYWlsZWQgdG8gY3JlYXRlIHByaXZhdGUga2V5Iik7CisgICAgICAgIHJldHVybiB7
IH07CisgICAgfQorCisgICAgYXV0byBzY29wZUV4aXQgPSBXVEY6Om1ha2VTY29wZUV4aXQoWyZd
IHsKKyAgICAgICAgRVZQX1BLRVlfZnJlZShwcml2YXRlS2V5KTsKKyAgICB9KTsKKworICAgIHN3
aXRjaCAoaW5mby50eXBlKSB7CisgICAgY2FzZSBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkNlcnRp
ZmljYXRlSW5mb3JtYXRpb246OlR5cGU6OkVDRFNBUDI1NjogeworICAgICAgICBFQ19LRVkqIGVj
S2V5ID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKE5JRF9YOV82Ml9wcmltZTI1NnYxKTsKKyAg
ICAgICAgLy8gRW5zdXJlIGN1cnZlIG5hbWUgaXMgaW5jbHVkZWQgd2hlbiBFQyBrZXkgaXMgc2Vy
aWFsaXplZC4KKyAgICAgICAgLy8gV2l0aG91dCB0aGlzIGNhbGwsIE9wZW5TU0wgdmVyc2lvbnMg
YmVmb3JlIDEuMS4wIHdpbGwgY3JlYXRlCisgICAgICAgIC8vIGNlcnRpZmljYXRlcyB0aGF0IGRv
bid0IHdvcmsgZm9yIFRMUy4KKyAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZvciBCb3JpbmdT
U0wgYW5kIE9wZW5TU0wgMS4xLjArCisgICAgICAgIEVDX0tFWV9zZXRfYXNuMV9mbGFnKGVjS2V5
LCBPUEVOU1NMX0VDX05BTUVEX0NVUlZFKTsKKyAgICAgICAgaWYgKCFwcml2YXRlS2V5IHx8ICFl
Y0tleSB8fCAhRUNfS0VZX2dlbmVyYXRlX2tleShlY0tleSkgfHwgIUVWUF9QS0VZX2Fzc2lnbl9F
Q19LRVkocHJpdmF0ZUtleSwgZWNLZXkpKSB7CisgICAgICAgICAgICBFQ19LRVlfZnJlZShlY0tl
eSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJbmZvcm1h
dGlvbjo6VHlwZTo6UlNBU1NBUEtDUzF2MTU6IHsKKyAgICAgICAgUlNBKiByc2EgPSBSU0FfbmV3
KCk7CisgICAgICAgIGlmICghcnNhKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAg
ICBCSUdOVU0qIGV4cG9uZW50ID0gQk5fbmV3KCk7CisgICAgICAgIGludCBwdWJsaWNFeHBvbmVu
dCA9IGluZm8ucnNhUGFyYW1ldGVycyA/IGluZm8ucnNhUGFyYW1ldGVycy0+cHVibGljRXhwb25l
bnQgOiA2NTUzNzsKKyAgICAgICAgYXV0byBtb2R1bHVzTGVuZ3RoID0gaW5mby5yc2FQYXJhbWV0
ZXJzID8gaW5mby5yc2FQYXJhbWV0ZXJzLT5tb2R1bHVzTGVuZ3RoIDogMjA0ODsKKyAgICAgICAg
aWYgKCFCTl9zZXRfd29yZChleHBvbmVudCwgcHVibGljRXhwb25lbnQpIHx8ICFSU0FfZ2VuZXJh
dGVfa2V5X2V4KHJzYSwgbW9kdWx1c0xlbmd0aCwgZXhwb25lbnQsIG51bGxwdHIpCisgICAgICAg
ICAgICB8fCAhRVZQX1BLRVlfYXNzaWduX1JTQShwcml2YXRlS2V5LCByc2EpKSB7CisgICAgICAg
ICAgICBSU0FfZnJlZShyc2EpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQor
ICAgICAgICBCTl9mcmVlKGV4cG9uZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0K
KworICAgIFg1MDkqIHg1MDkgPSBYNTA5X25ldygpOworICAgIGlmICgheDUwOSkgeworICAgICAg
ICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBjZXJ0aWZpY2F0ZSIpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworICAgIGF1dG8gY2VydFNjb3BlRXhpdCA9IFdURjo6bWFrZVNj
b3BlRXhpdChbJl0geworICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgfSk7CisKKyAgICBY
NTA5X3NldF92ZXJzaW9uKHg1MDksIDIpOworCisgICAgLy8gU2V0IGEgcmFuZG9tIDY0IGJpdCBp
bnRlZ2VyIGFzIHNlcmlhbCBudW1iZXIuCisgICAgQklHTlVNKiBzZXJpYWxOdW1iZXIgPSBCTl9u
ZXcoKTsKKyAgICBCTl9wc2V1ZG9fcmFuZChzZXJpYWxOdW1iZXIsIDY0LCAwLCAwKTsKKyAgICBB
U04xX0lOVEVHRVIqIGFzbjFTZXJpYWxOdW1iZXIgPSBYNTA5X2dldF9zZXJpYWxOdW1iZXIoeDUw
OSk7CisgICAgQk5fdG9fQVNOMV9JTlRFR0VSKHNlcmlhbE51bWJlciwgYXNuMVNlcmlhbE51bWJl
cik7CisgICAgQk5fZnJlZShzZXJpYWxOdW1iZXIpOworCisgICAgLy8gU2V0IGEgcmFuZG9tIDgg
Ynl0ZSBiYXNlNjQgc3RyaW5nIGFzIGlzc3Vlci9zdWJqZWN0LgorICAgIFg1MDlfTkFNRSogbmFt
ZSA9IFg1MDlfTkFNRV9uZXcoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAgIGJ1
ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDgpOworICAgIFdURjo6Y3J5cHRvZ3JhcGhpY2Fs
bHlSYW5kb21WYWx1ZXMoYnVmZmVyLmRhdGEoKSwgOCk7CisgICAgYXV0byBjb21tb25OYW1lID0g
YmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVyKTsKKyAgICBYNTA5X05BTUVfYWRkX2VudHJ5X2J5
X05JRChuYW1lLCBOSURfY29tbW9uTmFtZSwgTUJTVFJJTkdfQVNDLCAoY29uc3QgZ3VjaGFyKilj
b21tb25OYW1lLmFzY2lpKCkuZGF0YSgpLCAtMSwgLTEsIDApOworICAgIFg1MDlfc2V0X3N1Ympl
Y3RfbmFtZSh4NTA5LCBuYW1lKTsKKyAgICBYNTA5X3NldF9pc3N1ZXJfbmFtZSh4NTA5LCBuYW1l
KTsKKyAgICBYNTA5X05BTUVfZnJlZShuYW1lKTsKKworICAgIC8vIEZhbGxiYWNrIHRvIDMwIGRh
eXMsIG1heCBvdXQgYXQgb25lIHllYXIuCisgICAgdWludDY0X3QgZXhwaXJlcyA9IGluZm8uZXhw
aXJlcy52YWx1ZV9vcigyNTkyMDAwKTsKKyAgICBleHBpcmVzID0gc3RkOjptaW48dWludDY0X3Q+
KGV4cGlyZXMsIDMxNTM2MDAwMDAwKTsKKyAgICBYNTA5X2dtdGltZV9hZGooWDUwOV9nZXRtX25v
dEJlZm9yZSh4NTA5KSwgMCk7CisgICAgWDUwOV9nbXRpbWVfYWRqKFg1MDlfZ2V0bV9ub3RBZnRl
cih4NTA5KSwgZXhwaXJlcyk7CisgICAgWDUwOV9zZXRfcHVia2V5KHg1MDksIHByaXZhdGVLZXkp
OworCisgICAgaWYgKCFYNTA5X3NpZ24oeDUwOSwgcHJpdmF0ZUtleSwgRVZQX3NoYTI1NigpKSkg
eworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIHNpZ24gY2VydGlmaWNhdGUiKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvIHBlbSA9IHg1MDlTZXJpYWxpemUo
eDUwOSk7CisgICAgR1NUX0RFQlVHKCJHZW5lcmF0ZWQgY2VydGlmaWNhdGUgUEVNOiAlcyIsIHBl
bS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0byBzZXJpYWxpemVkUHJpdmF0ZUtleSA9IHByaXZh
dGVLZXlTZXJpYWxpemUocHJpdmF0ZUtleSk7CisgICAgVmVjdG9yPFJUQ0NlcnRpZmljYXRlOjpE
dGxzRmluZ2VycHJpbnQ+IGZpbmdlcnByaW50czsKKyAgICAvLyBGSVhNRTogRmlsbCBmaW5nZXJw
cmludHMuCisgICAgYXV0byBleHBpcmF0aW9uVGltZSA9IFdURjo6V2FsbFRpbWU6Om5vdygpLnNl
Y29uZHNTaW5jZUVwb2NoKCkgKyBXVEY6OlNlY29uZHMoZXhwaXJlcyk7CisgICAgcmV0dXJuIFJU
Q0NlcnRpZmljYXRlOjpjcmVhdGUoV1RGTW92ZShvcmlnaW4pLCBleHBpcmF0aW9uVGltZS5taWxs
aXNlY29uZHMoKSwgV1RGTW92ZShmaW5nZXJwcmludHMpLCBXVEZNb3ZlKHBlbSksIFdURk1vdmUo
c2VyaWFsaXplZFByaXZhdGVLZXkpKTsKK30KKworYm9vbCBzZHBNZWRpYUhhc0F0dHJpYnV0ZUtl
eShjb25zdCBHc3RTRFBNZWRpYSogbWVkaWEsIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICB1bnNp
Z25lZCBsZW4gPSBnc3Rfc2RwX21lZGlhX2F0dHJpYnV0ZXNfbGVuKG1lZGlhKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgY29uc3QgYXV0byogYXR0
cmlidXRlID0gZ3N0X3NkcF9tZWRpYV9nZXRfYXR0cmlidXRlKG1lZGlhLCBpKTsKKyAgICAgICAg
aWYgKCFnX3N0cmNtcDAoYXR0cmlidXRlLT5rZXksIGtleSkpCisgICAgICAgICAgICByZXR1cm4g
dHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4xYjg4ZmE0ZGIwNDdhZmY4YWRhYjhkOTI5OWM1N2I5ZWNjNWRhMThmCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyV2ViUlRDVXRpbHMuaApAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJSVENCdW5kbGVQb2xpY3kuaCIKKyNpbmNs
dWRlICJSVENDZXJ0aWZpY2F0ZS5oIgorI2luY2x1ZGUgIlJUQ0R0bHNUcmFuc3BvcnQuaCIKKyNp
bmNsdWRlICJSVENFcnJvci5oIgorI2luY2x1ZGUgIlJUQ0ljZUNvbm5lY3Rpb25TdGF0ZS5oIgor
I2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFBvbGljeS5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5z
cG9ydFN0YXRlLmgiCisjaW5jbHVkZSAiUlRDUnRwU2VuZFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRl
ICJSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlJUQ1NkcFR5cGUuaCIK
KyNpbmNsdWRlICJSVENTaWduYWxpbmdTdGF0ZS5oIgorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFC
TEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VO
U1RBQkxFX0FQSQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBSVENSdHBUcmFuc2Nl
aXZlckRpcmVjdGlvbiB0b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKEdzdFdlYlJUQ1JUUFRy
YW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikg
eworICAgIGNhc2UgR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX05PTkU6Cisg
ICAgICAgIC8vIMKvXF8o44OEKV8vwq8KKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVy
RGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVS
X0RJUkVDVElPTl9JTkFDVElWRToKKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGly
ZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJ
UkVDVElPTl9TRU5ET05MWToKKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0
aW9uOjpTZW5kb25seTsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVD
VElPTl9SRUNWT05MWToKKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9u
OjpSZWN2b25seTsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElP
Tl9TRU5EUkVDVjoKKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpT
ZW5kcmVjdjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICBy
ZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OkluYWN0aXZlOworfQorCitpbmxpbmUg
R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGly
ZWN0aW9uKFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0
Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246Oklu
YWN0aXZlOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNU
SU9OX0lOQUNUSVZFOworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OlNlbmRv
bmx5OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9O
X1NFTkRPTkxZOworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OlJlY3Zvbmx5
OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1JF
Q1ZPTkxZOworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OlNlbmRyZWN2Ogor
ICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1NFTkRS
RUNWOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVy
biBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fTk9ORTsKK30KKworc3RhdGlj
IGlubGluZSBHc3RXZWJSVENTRFBUeXBlIHRvU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShSVENTZHBU
eXBlIHNkcFR5cGUpCit7CisgICAgc3dpdGNoIChzZHBUeXBlKSB7CisgICAgY2FzZSBSVENTZHBU
eXBlOjpPZmZlcjoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfU0RQX1RZUEVfT0ZGRVI7Cisg
ICAgY2FzZSBSVENTZHBUeXBlOjpQcmFuc3dlcjoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENf
U0RQX1RZUEVfUFJBTlNXRVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpBbnN3ZXI6CisgICAgICAg
IHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX0FOU1dFUjsKKyAgICBjYXNlIFJUQ1NkcFR5cGU6
OlJvbGxiYWNrOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19TRFBfVFlQRV9ST0xMQkFDSzsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBH
U1RfV0VCUlRDX1NEUF9UWVBFX09GRkVSOworfQorCitzdGF0aWMgaW5saW5lIFJUQ1NkcFR5cGUg
ZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5cGUoY29uc3QgR3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBhdXRvIHR5cGUgPSBkZXNjcmlwdGlvbi50eXBlOwor
ICAgIGlmICh0eXBlID09IEdTVF9XRUJSVENfU0RQX1RZUEVfT0ZGRVIpCisgICAgICAgIHJldHVy
biBSVENTZHBUeXBlOjpPZmZlcjsKKyAgICBpZiAodHlwZSA9PSBHU1RfV0VCUlRDX1NEUF9UWVBF
X0FOU1dFUikKKyAgICAgICAgcmV0dXJuIFJUQ1NkcFR5cGU6OkFuc3dlcjsKKyAgICBBU1NFUlQo
dHlwZSA9PSBHU1RfV0VCUlRDX1NEUF9UWVBFX1BSQU5TV0VSKTsKKyAgICByZXR1cm4gUlRDU2Rw
VHlwZTo6UHJhbnN3ZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDU2lnbmFsaW5nU3RhdGUgdG9T
aWduYWxpbmdTdGF0ZShHc3RXZWJSVENTaWduYWxpbmdTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0
Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9TVEFCTEU6
CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOworICAgIGNhc2UgR1NU
X1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9MT0NBTF9PRkZFUjoKKyAgICAgICAgcmV0dXJu
IFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlTG9jYWxPZmZlcjsKKyAgICBjYXNlIEdTVF9XRUJSVENf
U0lHTkFMSU5HX1NUQVRFX0hBVkVfTE9DQUxfUFJBTlNXRVI6CisgICAgICAgIHJldHVybiBSVENT
aWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsUHJhbnN3ZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJ
R05BTElOR19TVEFURV9IQVZFX1JFTU9URV9PRkZFUjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25h
bGluZ1N0YXRlOjpIYXZlUmVtb3RlT2ZmZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElO
R19TVEFURV9IQVZFX1JFTU9URV9QUkFOU1dFUjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGlu
Z1N0YXRlOjpIYXZlUmVtb3RlUHJhbnN3ZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElO
R19TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6Q2xvc2Vk
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IFJUQ1NpZ25hbGluZ1N0YXRlOjpTdGFibGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlQ29u
bmVjdGlvblN0YXRlIHRvUlRDSWNlQ29ubmVjdGlvblN0YXRlKEdzdFdlYlJUQ0lDRUNvbm5lY3Rp
b25TdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5l
Y3Rpb25TdGF0ZTo6TmV3OworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFU
RV9DSEVDS0lORzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q2hlY2tp
bmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRDoK
KyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q29ubmVjdGVkOworICAgIGNh
c2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT01QTEVURUQ6CisgICAgICAgIHJl
dHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNvbXBsZXRlZDsKKyAgICBjYXNlIEdTVF9XRUJS
VENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfRkFJTEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29u
bmVjdGlvblN0YXRlOjpGYWlsZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9O
X1NUQVRFX0RJU0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0
ZTo6RGlzY29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFU
RV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNsb3NlZDsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBS
VENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsKK30KKworc3RhdGljIGlubGluZSBSVENEdGxzVHJh
bnNwb3J0U3RhdGUgdG9SVENEdGxzVHJhbnNwb3J0U3RhdGUoR3N0V2ViUlRDRFRMU1RyYW5zcG9y
dFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJS
VENfRFRMU19UUkFOU1BPUlRfU1RBVEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5z
cG9ydFN0YXRlOjpOZXc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRF
X0NPTk5FQ1RJTkc6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJhbnNwb3J0U3RhdGU6OkNvbm5l
Y3Rpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RF
RDoKKyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAg
IGNhc2UgR1NUX1dFQlJUQ19EVExTX1RSQU5TUE9SVF9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJl
dHVybiBSVENEdGxzVHJhbnNwb3J0U3RhdGU6OkNsb3NlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENf
RFRMU19UUkFOU1BPUlRfU1RBVEVfRkFJTEVEOgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5z
cG9ydFN0YXRlOjpGYWlsZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworc3RhdGljIGlubGluZSBSVENJY2VUcmFuc3BvcnRTdGF0ZSB0b1JUQ0ljZVRy
YW5zcG9ydFN0YXRlKEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZSkKK3sKKyAgICAv
LyBGSVhNRTogTm8gR3N0V2ViUlRDSUNFVHJhbnNwb3J0U3RhdGUgPworICAgIHN3aXRjaCAoc3Rh
dGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfTkVXOgorICAg
ICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6Ok5ldzsKKyAgICBjYXNlIEdTVF9XRUJS
VENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkc6CisgICAgICAgIHJldHVybiBSVENJY2VU
cmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNU
SU9OX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRl
OjpDb25uZWN0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NP
TVBMRVRFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb21wbGV0ZWQ7
CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0ZBSUxFRDoKKyAgICAg
ICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpGYWlsZWQ7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJU
Q0ljZVRyYW5zcG9ydFN0YXRlOjpEaXNjb25uZWN0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lD
RV9DT05ORUNUSU9OX1NUQVRFX0NMT1NFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9y
dFN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6Ok5ldzsKK30KKworc3RhdGljIGlu
bGluZSBSVENJY2VHYXRoZXJpbmdTdGF0ZSB0b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKEdzdFdlYlJU
Q0lDRUdhdGhlcmluZ1N0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBj
YXNlIEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9ORVc6CisgICAgICAgIHJldHVybiBS
VENJY2VHYXRoZXJpbmdTdGF0ZTo6TmV3OworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfR0FUSEVS
SU5HX1NUQVRFX0dBVEhFUklORzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUdhdGhlcmluZ1N0YXRl
OjpHYXRoZXJpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfQ09N
UExFVEU6CisgICAgICAgIHJldHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6Q29tcGxldGU7Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlu
bGluZSBHc3RXZWJSVENCdW5kbGVQb2xpY3kgYnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24o
Y29uc3QgTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkgeworICAgIGNhc2UgUlRDQnVuZGxl
UG9saWN5OjpCYWxhbmNlZDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElD
WV9CQUxBTkNFRDsKKyAgICBjYXNlIFJUQ0J1bmRsZVBvbGljeTo6TWF4Q29tcGF0OgorICAgICAg
ICByZXR1cm4gR1NUX1dFQlJUQ19CVU5ETEVfUE9MSUNZX01BWF9DT01QQVQ7CisgICAgY2FzZSBS
VENCdW5kbGVQb2xpY3k6Ok1heEJ1bmRsZToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVO
RExFX1BPTElDWV9NQVhfQlVORExFOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElDWV9OT05FOworfQor
CitzdGF0aWMgaW5saW5lIEdzdFdlYlJUQ0lDRVRyYW5zcG9ydFBvbGljeSBpY2VUcmFuc3BvcnRQ
b2xpY3lGcm9tQ29uZmlndXJhdGlvbihjb25zdCBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYg
Y29uZmlndXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0
UG9saWN5KSB7CisgICAgY2FzZSBSVENJY2VUcmFuc3BvcnRQb2xpY3k6OkFsbDoKKyAgICAgICAg
cmV0dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lfQUxMOworICAgIGNhc2UgUlRD
SWNlVHJhbnNwb3J0UG9saWN5OjpSZWxheToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfSUNF
X1RSQU5TUE9SVF9QT0xJQ1lfUkVMQVk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJUQ19JQ0VfVFJBTlNQT1JUX1BPTElDWV9B
TEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxSVENFcnJvckRldGFpbFR5cGU+
IHRvUlRDRXJyb3JEZXRhaWxUeXBlKEdzdFdlYlJUQ0Vycm9yIGNvZGUpCit7CisgICAgc3dpdGNo
IChjb2RlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0RBVEFfQ0hBTk5FTF9GQUlMVVJF
OgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRhaWxUeXBlOjpEYXRhQ2hhbm5lbEZhaWx1cmU7
CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0RUTFNfRkFJTFVSRToKKyAgICAgICAgcmV0dXJu
IFJUQ0Vycm9yRGV0YWlsVHlwZTo6RHRsc0ZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VS
Uk9SX0ZJTkdFUlBSSU5UX0ZBSUxVUkU6CisgICAgICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5
cGU6OkZpbmdlcnByaW50RmFpbHVyZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfU0NUUF9G
QUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRhaWxUeXBlOjpTY3RwRmFpbHVyZTsK
KyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfU0RQX1NZTlRBWF9FUlJPUjoKKyAgICAgICAgcmV0
dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6U2RwU3ludGF4RXJyb3I7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0VSUk9SX0hBUkRXQVJFX0VOQ09ERVJfTk9UX0FWQUlMQUJMRToKKyAgICBjYXNlIEdTVF9X
RUJSVENfRVJST1JfRU5DT0RFUl9FUlJPUjoKKyAgICAgICAgLy8gRklYTUUKKyAgICBkZWZhdWx0
OgorICAgICAgICByZXR1cm4geyB9OworICAgIH07Cit9CisKK1JlZlB0cjxSVENFcnJvcj4gdG9S
VENFcnJvcihHRXJyb3IqKTsKKworR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGZyb21SVENFbmNv
ZGluZ1BhcmFtZXRlcnMoY29uc3QgUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzJik7CitSVENSdHBT
ZW5kUGFyYW1ldGVycyB0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSop
OworCitzdGQ6Om9wdGlvbmFsPFJlZjxSVENDZXJ0aWZpY2F0ZT4+IGdlbmVyYXRlQ2VydGlmaWNh
dGUoUmVmPFNlY3VyaXR5T3JpZ2luPiYmLCBjb25zdCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkNl
cnRpZmljYXRlSW5mb3JtYXRpb24mKTsKKworYm9vbCBzZHBNZWRpYUhhc0F0dHJpYnV0ZUtleShj
b25zdCBHc3RTRFBNZWRpYSosIGNvbnN0IGNoYXIqIGtleSk7CisKK30KKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4IGFiOWM3MDkyZTY1ZjUxMTUyMDEz
YzEyYmE0ODAyN2ZkNzBiODI0YjQuLjg1MjVmNDk1MjRiNTkxNmJkNWFjY2M1NDU0NWEwNjk0MTA0
MjE1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFr
ZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKQEAgLTEsMTIg
KzEsMjkgQEAKIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAiJHtX
RUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIiCiAgICAgICAgICIke1dF
QkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIiCiAgICAgICAgICIke1dFQkNP
UkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlIgogICAgICAgICAiJHtXRUJD
T1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZSIKICAgICApCiAKICAgICBs
aXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcAorICAgICAgICBNb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5jcHAK
KyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNw
b3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuY3BwCisg
ICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVy
VHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHAKKyAg
ICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwCisg
ICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxz
LmNwcAorCiAgICAgICAgIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZUdT
dHJlYW1lci5jcHAKKwogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9U
cmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCkBAIC02MCw2ICs3Nyw3IEBAIGlmIChFTkFC
TEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCiAgICAgICAgIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAK
ICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVy
LmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRN
RlNlbmRlckJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJEaXNwbGF5Q2FwdHVyZURldmljZU1hbmFnZXIuY3BwCiAgICAgICAgIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAK
ICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvQ2Fw
dHVyZVNvdXJjZS5jcHAKQEAgLTY3LDcgKzg1LDEzIEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5B
QkxFX1dFQl9BVURJTykKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL01vY2tSZWFsdGltZUF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VHU3RyZWFt
ZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAg
ICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
ci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKICAg
ICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hFQURFUlMK
QEAgLTE0Niw3ICsxNzAsNyBAQCBpZiAoRU5BQkxFX1ZJREVPKQogICAgICAgICApCiAgICAgZW5k
aWYgKCkKIAotICAgIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNIE9SIEVOQUJMRV9XRUJfUlRDKQor
ICAgIGlmIChVU0VfTElCV0VCUlRDKQogICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NZU1RF
TV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgICAgICAgICAke0dTVFJFQU1FUl9DT0RFQ1BBUlNF
UlNfSU5DTFVERV9ESVJTfQogICAgICAgICApCkBAIC0xNTUsNiArMTc5LDIxIEBAIGlmIChFTkFC
TEVfVklERU8pCiAgICAgICAgICAgICAgICAgJHtHU1RSRUFNRVJfQ09ERUNQQVJTRVJTX0xJQlJB
UklFU30KICAgICAgICAgICAgICkKICAgICAgICAgZW5kaWYgKCkKKyAgICBlbHNlaWYgKFVTRV9H
U1RSRUFNRVJfV0VCUlRDKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NZU1RFTV9JTkNM
VURFX0RJUkVDVE9SSUVTCisgICAgICAgICAgICAke0dTVFJFQU1FUl9SVFBfSU5DTFVERV9ESVJT
fQorICAgICAgICAgICAgJHtHU1RSRUFNRVJfU0RQX0lOQ0xVREVfRElSU30KKyAgICAgICAgICAg
ICR7R1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlN9CisgICAgICAgICkKKyAgICAgICAgaWYg
KE5PVCBVU0VfR1NUUkVBTUVSX0ZVTEwpCisgICAgICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X0xJQlJBUklFUworICAgICAgICAgICAgICAgICR7R1NUUkVBTUVSX1JUUF9MSUJSQVJJRVN9Cisg
ICAgICAgICAgICAgICAgJHtHU1RSRUFNRVJfU0RQX0xJQlJBUklFU30KKyAgICAgICAgICAgICAg
ICAke0dTVFJFQU1FUl9XRUJSVENfTElCUkFSSUVTfQorICAgICAgICAgICAgKQorICAgICAgICBl
bmRpZiAoKQorCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTIE9wZW5TU0w6
OkNyeXB0bykKICAgICBlbmRpZiAoKQogZW5kaWYgKCkKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFt
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291
cmNlUHJvdmlkZXJHU3RyZWFtZXIuY3BwCmluZGV4IGI0ZDVmNjcwM2U5MjllZGYxN2YxMDllZjY0
ODEzMGFjZTAzOGNhYzQuLmExYWNlOTc2MWRhMmNlMmFhZDQ2NDIxYjliZTZkZjhkM2E5ZTU0OTEg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRp
b1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHAKQEAgLTEw
MCwxMCArMTAwLDU4IEBAIEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OkF1ZGlvU291cmNl
UHJvdmlkZXJHU3RyZWFtZXIoTWVkaWFTdHJlYW1UcmFja1ByaXZhCiAKICAgICBtX2F1ZGlvU2lu
a0JpbiA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbigidGVlIG5hbWU9YXVkaW9UZWUi
LCB0cnVlLCBudWxscHRyKTsKIAotICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1f
cGlwZWxpbmUuZ2V0KCkpLCBzcmMsIG1fYXVkaW9TaW5rQmluLmdldCgpLCBudWxscHRyKTsKLSAg
ICBnc3RfZWxlbWVudF9saW5rKHNyYywgbV9hdWRpb1NpbmtCaW4uZ2V0KCkpOworICAgIGF1dG8q
IGRlY29kZWJpbiA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJkZWNvZGViaW4zIiwgbnVsbHB0cik7
CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRlY29kZWJpbiwgInBhZC1hZGRlZCIsIEdf
Q0FMTEJBQ0soK1tdKEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIqIHByb3ZpZGVyLCBHc3RQ
YWQqIHBhZCkgeworICAgICAgICBhdXRvIHBhZENhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9xdWVy
eV9jYXBzKHBhZCwgbnVsbHB0cikpOworICAgICAgICBib29sIGlzQXVkaW8gPSBkb0NhcHNIYXZl
VHlwZShwYWRDYXBzLmdldCgpLCAiYXVkaW8iKTsKKyAgICAgICAgaWYgKHdlYmtpdEdzdENoZWNr
VmVyc2lvbigxLCAxOCwgMCkpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0F1ZGlvKTsK
KyAgICAgICAgZWxzZSBpZiAoIWlzQXVkaW8pCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAg
ICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKHBy
b3ZpZGVyLT5tX2F1ZGlvU2lua0Jpbi5nZXQoKSwgInNpbmsiKSk7CisgICAgICAgIGdzdF9wYWRf
bGluayhwYWQsIHNpbmtQYWQuZ2V0KCkpOworICAgICAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRl
X3dpdGhfcGFyZW50KHByb3ZpZGVyLT5tX2F1ZGlvU2lua0Jpbi5nZXQoKSk7CisgICAgfSksIHRo
aXMpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQo
KSksIHNyYywgZGVjb2RlYmluLCBtX2F1ZGlvU2lua0Jpbi5nZXQoKSwgbnVsbHB0cik7CisgICAg
Z3N0X2VsZW1lbnRfbGluayhzcmMsIGRlY29kZWJpbik7CisKKyAgICBhdXRvIGJ1cyA9IGFkb3B0
R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5nZXQoKSkp
KTsKKyAgICBBU1NFUlQoYnVzKTsKKworICAgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxlcihidXMu
Z2V0KCksIFtdKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIHVzZXJEYXRh
KSAtPiBHc3RCdXNTeW5jUmVwbHkgeworICAgICAgICBhdXRvKiBkZWNvZGViaW4gPSBHU1RfRUxF
TUVOVF9DQVNUKHVzZXJEYXRhKTsKKyAgICAgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUobWVzc2Fn
ZSkgIT0gR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT04gfHwgR1NUX01FU1NBR0VfU1JDKG1l
c3NhZ2UpICE9IEdTVF9PQkpFQ1RfQ0FTVChkZWNvZGViaW4pKSB7CisgICAgICAgICAgICBnc3Rf
bWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfQlVTX0RST1A7
CisgICAgICAgIH0KKworICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+IGNvbGxl
Y3Rpb247CisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9uKG1lc3Nh
Z2UsICZjb2xsZWN0aW9uLm91dFB0cigpKTsKKyAgICAgICAgaWYgKCFjb2xsZWN0aW9uKSB7Cisg
ICAgICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVy
biBHU1RfQlVTX0RST1A7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXplID0gZ3N0
X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplKGNvbGxlY3Rpb24uZ2V0KCkpOworICAgICAgICBH
TGlzdCogc3RyZWFtcyA9IG51bGxwdHI7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkg
PCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGF1dG8qIHN0cmVhbSA9IGdzdF9zdHJlYW1fY29s
bGVjdGlvbl9nZXRfc3RyZWFtKGNvbGxlY3Rpb24uZ2V0KCksIGkpOworICAgICAgICAgICAgYXV0
byBzdHJlYW1UeXBlID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtKTsKKyAgICAg
ICAgICAgIGlmIChzdHJlYW1UeXBlID09IEdTVF9TVFJFQU1fVFlQRV9BVURJTykgeworICAgICAg
ICAgICAgICAgIHN0cmVhbXMgPSBnX2xpc3RfYXBwZW5kKHN0cmVhbXMsIGNvbnN0X2Nhc3Q8Y2hh
cio+KGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pKSk7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmVhbXMpIHsK
KyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQoZGVjb2RlYmluLCBnc3RfZXZlbnRf
bmV3X3NlbGVjdF9zdHJlYW1zKHN0cmVhbXMpKTsKKyAgICAgICAgICAgIGdfbGlzdF9mcmVlKHN0
cmVhbXMpOworICAgICAgICB9CiAKLSAgICBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNr
KG1fcGlwZWxpbmUuZ2V0KCkpOworICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsK
KyAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAgICB9LCBnc3Rfb2JqZWN0X3JlZihkZWNv
ZGViaW4pLCBnc3Rfb2JqZWN0X3VucmVmKTsKIH0KICNlbmRpZgogCkBAIC0xMjAsMTAgKzE2OCw4
IEBAIEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6On5BdWRpb1NvdXJjZVByb3ZpZGVyR1N0
cmVhbWVyKCkKIAogICAgIHNldENsaWVudChudWxscHRyKTsKICNpZiBFTkFCTEUoTUVESUFfU1RS
RUFNKQotICAgIGlmIChtX3BpcGVsaW5lKSB7Ci0gICAgICAgIGRpc2Nvbm5lY3RTaW1wbGVCdXNN
ZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5nZXQoKSk7CisgICAgaWYgKG1fcGlwZWxpbmUpCiAg
ICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVf
TlVMTCk7Ci0gICAgfQogI2VuZGlmCiB9CiAKQEAgLTM0NSw3ICszOTEsNiBAQCB2b2lkIEF1ZGlv
U291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OmhhbmRsZU5ld0RlaW50ZXJsZWF2ZVBhZChHc3RQYWQq
IHBhZCkKIAogICAgIEdRdWFyayBxdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKCJw
ZWVyIik7CiAgICAgZ19vYmplY3Rfc2V0X3FkYXRhKEdfT0JKRUNUKHBhZCksIHF1YXJrLCBzaW5r
UGFkLmdldCgpKTsKLQogICAgIG1fZGVpbnRlcmxlYXZlU291cmNlUGFkcysrOwogICAgIEdRdWFy
ayBjaGFubmVsSWRRdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKCJjaGFubmVsLWlk
Iik7CiAgICAgZ19vYmplY3Rfc2V0X3FkYXRhKEdfT0JKRUNUKHNpbmspLCBjaGFubmVsSWRRdWFy
aywgR0lOVF9UT19QT0lOVEVSKG1fZGVpbnRlcmxlYXZlU291cmNlUGFkcykpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJl
YW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKaW5kZXggNmYyODg3MmFmYjEx
NzZlNTEzZDJiZGY1NWE2MjIxZDRmNmZiMGFlNy4uZGQzMTNiMzE0MjQwNmNhZjU3OTRlYWM3Y2My
YWY4ZDY0ZTU0NWFhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbi5oCkBAIC0zMiwxOSArMzIsMTYgQEAgY2xhc3MgR1N0cmVhbWVyQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbiBmaW5hbDogcHVibGljIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gewogcHVibGlj
OgogICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oR3N0QXVkaW9JbmZvJiYgaW5m
bykKICAgICAgICAgOiBtX2luZm8oV1RGTW92ZShpbmZvKSkKLSAgICAgICAgLCBtX2NhcHMoYWRv
cHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpKQogICAgIHsKICAgICB9CiAK
ICAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGNvbnN0IEdzdEF1ZGlvSW5mbyYg
aW5mbykKICAgICAgICAgOiBtX2luZm8oaW5mbykKLSAgICAgICAgLCBtX2NhcHMoYWRvcHRHUmVm
KGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpKQogICAgIHsKICAgICB9CiAKICAgICBH
U3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKEdzdEF1ZGlvSW5mbyogaW5mbykKICAgICAg
ICAgOiBtX2luZm8oKmluZm8pCi0gICAgICAgICwgbV9jYXBzKGFkb3B0R1JlZihnc3RfYXVkaW9f
aW5mb190b19jYXBzKCZtX2luZm8pKSkKICAgICB7CiAgICAgfQogCkBAIC05OSw3ICs5NiwxMiBA
QCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdTdHJlYW1lckF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24mIG90aGVyKSB7IHJldHVybiBnc3RfYXVkaW9faW5mb19pc19lcXVhbCgmbV9p
bmZvLCAmb3RoZXIubV9pbmZvKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBHU3RyZWFt
ZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1cm4gIW9wZXJhdG9yID09IChv
dGhlcik7IH0KIAotICAgIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGNhcHMoKSBjb25zdCB7IHJl
dHVybiBtX2NhcHM7IH0KKyAgICBjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBjYXBzKCkKKyAgICB7
CisgICAgICAgIGlmICghbV9jYXBzKQorICAgICAgICAgICAgbV9jYXBzID0gYWRvcHRHUmVmKGdz
dF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpOworICAgICAgICByZXR1cm4gbV9jYXBzOwor
ICAgIH0KICAgICBjb25zdCBHc3RBdWRpb0luZm8mIGdldEluZm8oKSBjb25zdCB7IHJldHVybiBt
X2luZm87IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAppbmRleCAy
M2FjMTI1NzY2MjE5N2ZhNGVhYzk3YTk5N2NiNWQwZmVlZTc0MzkwLi4xNWY2ZjZkMjQyYWE3Njkx
NzM1YWE3Mjg0MmYyNTk1Zjc1ZDU4MzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3Bw
CkBAIC0yNyw2ICsyNywxMiBAQAogI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0ZWdsaW1hZ2UuaD4K
ICNlbmRpZgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjZGVmaW5lIEdTVF9VU0VfVU5T
VEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNF
X1VOU1RBQkxFX0FQSQorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+IEdS
ZWZQdHI8R3N0TWluaU9iamVjdD4gYWRvcHRHUmVmKEdzdE1pbmlPYmplY3QqIHB0cikKQEAgLTU2
OSw2ICs1NzUsMTQzIEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdEVHTEltYWdlPihH
c3RFR0xJbWFnZSogcHRyKQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKIAorI2lmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJl
Y2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHB0cikKK3sKKyAgICByZXR1
cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQor
Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBSZWNlaXZlciogcmVmR1B0cjxHc3RXZWJSVENSVFBS
ZWNlaXZlcj4oR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAg
ICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsK
K30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdz
dFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29i
amVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNl
bmRlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFNlbmRlciogcHRyKQoreworICAgIHJldHVybiBH
UmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1w
bGF0ZSA8PiBHc3RXZWJSVENSVFBTZW5kZXIqIHJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPihH
c3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2Jq
ZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxh
dGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPihHc3RXZWJSVENSVFBTZW5k
ZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7
Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IGFkb3B0
R1JlZihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRy
PEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBs
YXRlIDw+IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiByZWZHUHRyPEdzdFdlYlJUQ1JUUFRyYW5z
Y2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcHRyKQoreworICAgIGlmIChwdHIpCisg
ICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpFQ1QocHRyKSk7CisKKyAgICByZXR1cm4gcHRy
OworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZl
cj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAg
ICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2Vi
UlRDRGF0YUNoYW5uZWw+IGFkb3B0R1JlZihHc3RXZWJSVENEYXRhQ2hhbm5lbCogcHRyKQorewor
ICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihwdHIsIEdSZWZQdHJBZG9w
dCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RhdGFDaGFubmVsKiByZWZHUHRyPEdzdFdl
YlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCogcHRyKQoreworICAgIGlmIChw
dHIpCisgICAgICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBw
dHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVs
PihHc3RXZWJSVENEYXRhQ2hhbm5lbCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdf
b2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDRFRM
U1RyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqIHB0cikKK3sKKyAg
ICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PihwdHIsIEdSZWZQdHJBZG9w
dCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqIHJlZkdQdHI8R3N0
V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcHRyKQoreworICAg
IGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpFQ1QocHRyKSk7CisKKyAg
ICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENE
VExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0KiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVm
UHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0lDRVRyYW5zcG9y
dCogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4ocHRy
LCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENJQ0VUcmFuc3BvcnQq
IHJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJQ0VUcmFuc3BvcnQqIHB0
cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0
cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8
R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJQ0VUcmFuc3BvcnQqIHB0cikKK3sKKyAg
ICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRl
PD4gR1JlZlB0cjxHc3RQcm9taXNlPiBhZG9wdEdSZWYoR3N0UHJvbWlzZSogcHRyKQoreworICAg
IHJldHVybiBHUmVmUHRyPEdzdFByb21pc2U+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVt
cGxhdGU8PiBHc3RQcm9taXNlKiByZWZHUHRyPEdzdFByb21pc2U+KEdzdFByb21pc2UqIHB0cikK
K3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3RfcHJvbWlzZV9yZWYocHRyKTsKKworICAgIHJl
dHVybiBwdHI7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0UHJvbWlzZT4oR3N0
UHJvbWlzZSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9wcm9taXNlX3VucmVm
KHB0cik7Cit9CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVh
bWVyLmgKaW5kZXggMDc4ZDNjNTYzOTc0ZjZhMmIzYWYxZWI4Mzk4NjQ5ODc5NDVmYTdkOC4uOWE1
MjY5YzVmYjlkOGM2YTc3MzZlN2RmYmYyYTgzNjIzYTMwNTBiMiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdT
dHJlYW1lci5oCkBAIC0zMyw2ICszMywxNiBAQCB0eXBlZGVmIHN0cnVjdCBfR3N0R0xDb250ZXh0
IEdzdEdMQ29udGV4dDsKIHR5cGVkZWYgc3RydWN0IF9Hc3RFR0xJbWFnZSBHc3RFR0xJbWFnZTsK
ICNlbmRpZgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCit0eXBlZGVmIHN0cnVjdCBfR3N0
UHJvbWlzZSBHc3RQcm9taXNlOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQgR3N0V2ViUlRDRFRMU1RyYW5zcG9ydDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENEYXRh
Q2hhbm5lbCBHc3RXZWJSVENEYXRhQ2hhbm5lbDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENJ
Q0VUcmFuc3BvcnQgR3N0V2ViUlRDSUNFVHJhbnNwb3J0OwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdl
YlJUQ1JUUFJlY2VpdmVyIEdzdFdlYlJUQ1JUUFJlY2VpdmVyOwordHlwZWRlZiBzdHJ1Y3QgX0dz
dFdlYlJUQ1JUUFNlbmRlciBHc3RXZWJSVENSVFBTZW5kZXI7Cit0eXBlZGVmIHN0cnVjdCBfR3N0
V2ViUlRDUlRQVHJhbnNjZWl2ZXIgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI7CisjZW5kaWYKKwog
bmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RQbHVnaW4+IGFkb3B0R1Jl
ZihHc3RQbHVnaW4qIHB0cik7CkBAIC0xNDYsNiArMTU2LDM3IEBAIHRlbXBsYXRlPD4gR3N0RUdM
SW1hZ2UqIHJlZkdQdHI8R3N0RUdMSW1hZ2U+KEdzdEVHTEltYWdlKiBwdHIpOwogdGVtcGxhdGU8
PiB2b2lkIGRlcmVmR1B0cjxHc3RFR0xJbWFnZT4oR3N0RUdMSW1hZ2UqIHB0cik7CiAjZW5kaWYK
IAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJS
VENSVFBSZWNlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFJlY2VpdmVyKik7Cit0ZW1wbGF0
ZSA8PiBHc3RXZWJSVENSVFBSZWNlaXZlciogcmVmR1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4o
R3N0V2ViUlRDUlRQUmVjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdl
YlJUQ1JUUFJlY2VpdmVyPihHc3RXZWJSVENSVFBSZWNlaXZlciopOworCit0ZW1wbGF0ZSA8PiBH
UmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFNlbmRlciop
OwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQU2VuZGVyKiByZWZHUHRyPEdzdFdlYlJUQ1JUUFNl
bmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxH
c3RXZWJSVENSVFBTZW5kZXI+KEdzdFdlYlJUQ1JUUFNlbmRlciopOworCit0ZW1wbGF0ZSA8PiBH
UmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQVHJh
bnNjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiByZWZHUHRy
PEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciopOwordGVt
cGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyKik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNo
YW5uZWw+IGFkb3B0R1JlZihHc3RXZWJSVENEYXRhQ2hhbm5lbCopOwordGVtcGxhdGUgPD4gR3N0
V2ViUlRDRGF0YUNoYW5uZWwqIHJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+KEdzdFdlYlJU
Q0RhdGFDaGFubmVsKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENEYXRh
Q2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxH
c3RXZWJSVENEVExTVHJhbnNwb3J0PiBhZG9wdEdSZWYoR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCop
OwordGVtcGxhdGUgPD4gR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcmVmR1B0cjxHc3RXZWJSVENE
VExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0Kik7Cit0ZW1wbGF0ZSA8PiB2b2lk
IGRlcmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0
Kik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PiBhZG9wdEdS
ZWYoR3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENJQ0VUcmFu
c3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJQ0VUcmFuc3Bv
cnQqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4o
R3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0UHJvbWlz
ZT4gYWRvcHRHUmVmKEdzdFByb21pc2UqKTsKK3RlbXBsYXRlIDw+IEdzdFByb21pc2UqIHJlZkdQ
dHI8R3N0UHJvbWlzZT4oR3N0UHJvbWlzZSopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8
R3N0UHJvbWlzZT4oR3N0UHJvbWlzZSopOworCisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV1RG
CiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApp
bmRleCA5ZjQ5NWRkZjkwMmRmNGZmZGY1M2FmZThjMGY2NzRmNTZjYmY1ZmUxLi5hOGNiZTVjNzJl
MjMwMjFjZmU0N2M4MmFhMWRlY2MzOGUzNjQyNjFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmNwcApAQCAtMTg5LDYgKzE4OSw5IEBAIGNvbnN0IGNoYXIqIGNhcHNNZWRpYVR5cGUoY29uc3Qg
R3N0Q2FwcyogY2FwcykKICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUs
ICJhcHBsaWNhdGlvbi94LWNlbmMiKSB8fCBnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVy
ZSwgImFwcGxpY2F0aW9uL3gtY2JjcyIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0
dXJlLCAiYXBwbGljYXRpb24veC13ZWJtLWVuYyIpKQogICAgICAgICByZXR1cm4gZ3N0X3N0cnVj
dHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKTsKICNlbmRp
ZgorICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9u
L3gtcnRwIikpCisgICAgICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0
dXJlLCAibWVkaWEiKTsKKwogICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0cnVj
dHVyZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oCmluZGV4IGJmNzRlY2Yw
MmNjMjJmNjA2ZWJjYjlmZTg1YzAzNGIyNmM0MDY0NDEuLmU1MjQ3MWNhN2VhNjJhMzE1OGM1MjMz
MzYwNjM1MmVjNjMxNTJhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaApAQCAt
MzAsNiArMzAsMTIgQEAKICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNsdWRlIDx3
dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAKKyNpZiBkZWZpbmVkKEJVSUxESU5HX1dlYkNvcmUpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2lu
Y2x1ZGUgPGdzdC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkK
KyNlbmRpZgorCiAjaWYgVVNFKFdQRV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRikKICNpbmNs
dWRlIDx3cGUvZXh0ZW5zaW9ucy92aWRlby1wbGFuZS1kaXNwbGF5LWRtYWJ1Zi5oPgogI2VuZGlm
CkBAIC00OSw2ICs1NSwxMCBAQCBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RCeXRlUmVhZGVy
LCBnc3RfYnl0ZV9yZWFkZXJfZnJlZSkKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdFZpZGVv
Q29udmVydGVyLCBnc3RfdmlkZW9fY29udmVydGVyX2ZyZWUpCiBXVEZfREVGSU5FX0dQVFJfREVM
RVRFUihHc3RBdWRpb0NvbnZlcnRlciwgZ3N0X2F1ZGlvX2NvbnZlcnRlcl9mcmVlKQogCisjaWYg
ZGVmaW5lZChCVUlMRElOR19XZWJDb3JlKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKK1dURl9E
RUZJTkVfR1BUUl9ERUxFVEVSKEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiwgZ3N0X3dlYnJ0
Y19zZXNzaW9uX2Rlc2NyaXB0aW9uX2ZyZWUpCisjZW5kaWYKKwogI2lmIFVTRShXUEVfVklERU9f
UExBTkVfRElTUExBWV9ETUFCVUYpCiBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihzdHJ1Y3Qgd3Bl
X3ZpZGVvX3BsYW5lX2Rpc3BsYXlfZG1hYnVmX3NvdXJjZSwgd3BlX3ZpZGVvX3BsYW5lX2Rpc3Bs
YXlfZG1hYnVmX3NvdXJjZV9kZXN0cm95KQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZS5jcHAKaW5kZXggZWMzMmJhODVjY2Y4NDcyNTM4MzUyNjgxODU5YzQwNzdlYmQ0OTkyZC4uMTgy
NjZmMTIyYzRiMTg2NzRhMWY3OWJhYjkxZjA1NDk2N2ZjYjcwMCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAj
aW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5oIgotI2Vs
aWYgRU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldF
QlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNlbGlmIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJM
RShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lci5oIgogI2Vsc2UKICNpbmNsdWRlICJXZWJBdWRpb1NvdXJjZVByb3Zp
ZGVyLmgiCkBAIC0xOTksNyArMTk5LDcgQEAgUmVmUHRyPFdlYkF1ZGlvU291cmNlUHJvdmlkZXI+
IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGVBdWRpb1NvdXJjZVByb3ZpZGUKIAogI2lm
IFBMQVRGT1JNKENPQ09BKQogICAgIHJldHVybiBNZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VQ
cm92aWRlckNvY29hOjpjcmVhdGUoKnRoaXMpOwotI2VsaWYgVVNFKExJQldFQlJUQykgJiYgVVNF
KEdTVFJFQU1FUikKKyNlbGlmIFVTRShHU1RSRUFNRVIpCiAgICAgcmV0dXJuIEF1ZGlvU291cmNl
UHJvdmlkZXJHU3RyZWFtZXI6OmNyZWF0ZSgqdGhpcyk7CiAjZWxzZQogICAgIHJldHVybiBudWxs
cHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCmluZGV4
IDI2ZWU0MjYzYjlkYjg3ODFkYmFlNjFlMWEzMDEyZWY3ZGM3MDk3MjUuLjM1ZTY1YzBlYjBiZDQ4
MWQzZjg1YTlkZDA1YjY2YmY5NTY5MGU3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlci5jcHAKQEAgLTI5LDI5ICsyOSw0NiBAQAogI2luY2x1ZGUgIkxpYldl
YlJUQ0F1ZGlvRm9ybWF0LmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2lu
ay5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoTElCV0VCUlRDKQotc3RhdGlj
IGNvbnN0ZXhwciBzaXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IExpYldlYlJUQ0F1ZGlv
Rm9ybWF0OjpzYW1wbGVSYXRlOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19hdWRpb0NhcHR1
cmVTYW1wbGVSYXRlID0gTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGU7CiAjZWxzZQot
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IDQ4MDAwOwor
c3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gNDgwMDA7
CiAjZW5kaWYKIAogR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJl
cihHU3RyZWFtZXJDYXB0dXJlRGV2aWNlIGRldmljZSkKLSAgICA6IEdTdHJlYW1lckNhcHR1cmVy
KGRldmljZSwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJh
dGUiLCBHX1RZUEVfSU5ULCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSkpCisgICAg
OiBHU3RyZWFtZXJDYXB0dXJlcihkZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxl
KCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgc19hdWRpb0NhcHR1cmVTYW1wbGVS
YXRlLCBudWxscHRyKSkpCiB7CiB9CiAKIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdTdHJlYW1l
ckF1ZGlvQ2FwdHVyZXIoKQotICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIsIGFkb3B0
R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lO
VCwgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSwgbnVsbHB0cikpLCBDYXB0dXJlRGV2aWNlOjpEZXZp
Y2VUeXBlOjpNaWNyb3Bob25lKQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIsIGFk
b3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBF
X0lOVCwgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSksIENhcHR1cmVEZXZpY2U6
OkRldmljZVR5cGU6Ok1pY3JvcGhvbmUpCiB7CiB9CiAKIEdzdEVsZW1lbnQqIEdTdHJlYW1lckF1
ZGlvQ2FwdHVyZXI6OmNyZWF0ZUNvbnZlcnRlcigpCiB7Ci0gICAgcmV0dXJuIG1ha2VHU3RyZWFt
ZXJCaW4oImF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUiLCB0cnVlKTsKKyAgICBhdXRvKiBi
aW4gPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBhdXRvKiBhdWRpb2NvbnZlcnQgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvY29udmVydCIsIG51bGxwdHIpOworICAgIGF1dG8q
IGF1ZGlvcmVzYW1wbGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvcmVzYW1wbGUi
LCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChiaW4pLCBhdWRp
b2NvbnZlcnQsIGF1ZGlvcmVzYW1wbGUsIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmso
YXVkaW9jb252ZXJ0LCBhdWRpb3Jlc2FtcGxlKTsKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQorICAgIGlmIChhdXRvKiB3ZWJydGNkc3AgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgid2VicnRj
ZHNwIiwgbnVsbHB0cikpIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0KHdlYnJ0Y2RzcCwgImVjaG8t
Y2FuY2VsIiwgZmFsc2UsICJ2b2ljZS1kZXRlY3Rpb24iLCB0cnVlLCBudWxscHRyKTsKKyAgICAg
ICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKGJpbiksIHdlYnJ0Y2RzcCk7CisgICAgICAgIGdz
dF9lbGVtZW50X2xpbmsod2VicnRjZHNwLCBhdWRpb2NvbnZlcnQpOworICAgIH0KKyNlbmRpZgor
CisgICAgaWYgKGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQo
R1NUX0JJTl9DQVNUKGJpbiksIEdTVF9QQURfU1JDKSkpCisgICAgICAgIGdzdF9lbGVtZW50X2Fk
ZF9wYWQoR1NUX0VMRU1FTlRfQ0FTVChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgcGFk
LmdldCgpKSk7CisgICAgaWYgKGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxp
bmtlZF9wYWQoR1NUX0JJTl9DQVNUKGJpbiksIEdTVF9QQURfU0lOSykpKQorICAgICAgICBnc3Rf
ZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1QoYmluKSwgZ3N0X2dob3N0X3BhZF9uZXco
InNpbmsiLCBwYWQuZ2V0KCkpKTsKKworICAgIHJldHVybiBiaW47CiB9CiAKIGJvb2wgR1N0cmVh
bWVyQXVkaW9DYXB0dXJlcjo6c2V0U2FtcGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJDYXB0dXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCmluZGV4IGM5ZTBkNWViNjBlMmJjMzhlZjNhOWE1
ZDUzMmM0Mzg4MDEwOTZmNGUuLjE5NjE2NjcxOGQ4MjU2ZjM0MDJlOWJlMmY2MTE4NDE0MjRkYWEx
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcApAQCAtMTAwLDcgKzEw
MCw3IEBAIEdzdEVsZW1lbnQqIEdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UoKQogICAg
ICAgICBtX3NyYyA9IG1ha2VFbGVtZW50KG1fc291cmNlRmFjdG9yeSk7CiAgICAgICAgIEFTU0VS
VChtX3NyYyk7CiAgICAgICAgIGlmIChHU1RfSVNfQVBQX1NSQyhtX3NyYy5nZXQoKSkpCi0gICAg
ICAgICAgICBnX29iamVjdF9zZXQobV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1h
dCIsIEdTVF9GT1JNQVRfVElNRSwgbnVsbHB0cik7CisgICAgICAgICAgICBnX29iamVjdF9zZXQo
bV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwg
ImRvLXRpbWVzdGFtcCIsIHRydWUsIG51bGxwdHIpOwogCiAgICAgICAgIGF1dG8gc3JjUGFkID0g
YWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fc3JjLmdldCgpLCAic3JjIikp
OwogICAgICAgICBpZiAobV9kZXZpY2VUeXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6
OkNhbWVyYSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFj
a2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZmExZGU1MmJkNTgxOTRjNzM3NmE2YTFhNGYzZmZlNGRlZGMx
YTcyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3
NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNr
ZW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitHU3RyZWFtZXJEVE1GU2VuZGVy
QmFja2VuZDo6fkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCitib29sIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpjYW5JbnNlcnRE
VE1GKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwor
dm9pZCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6cGxheVRvbmUoY29uc3QgU3RyaW5nJiwg
c2l6ZV90LCBzaXplX3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEdT
dHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjp0b25lcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNlbmRl
ckJhY2tlbmQ6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAwOworfQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmludGVy
VG9uZUdhcCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsK
K30KKwordm9pZCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6b25Ub25lUGxheWVkKEZ1bmN0
aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgb25Ub25lUGxheWVkKQoreworICAgIG1fb25Ub25l
UGxheWVkID0gV1RGTW92ZShvblRvbmVQbGF5ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmM1Nzk3MDUwY2VjOWI0YjBhYTZkOWVmZTk4MDhhZTVjOTA4OGZiMzMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRD
KSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJUQ0RUTUZTZW5kZXJCYWNr
ZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CisvLyBVc2UgZWFnZXIgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBzaW5j
ZSB3ZSBjYWxsIG1ha2VXZWFrUHRyKCkgZnJvbSBhbm90aGVyIHRocmVhZC4KK2NsYXNzIEdTdHJl
YW1lckRUTUZTZW5kZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0RUTUZTZW5kZXJCYWNrZW5k
LCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQsIFdlYWtQ
dHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQo
KTsKKyAgICB+R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICAv
LyBSVENEVE1GU2VuZGVyQmFja2VuZAorICAgIGJvb2wgY2FuSW5zZXJ0RFRNRigpIGZpbmFsOwor
ICAgIHZvaWQgcGxheVRvbmUoY29uc3QgU3RyaW5nJiB0b25lLCBzaXplX3QgZHVyYXRpb24sIHNp
emVfdCBpbnRlclRvbmVHYXApIGZpbmFsOworICAgIHZvaWQgb25Ub25lUGxheWVkKEZ1bmN0aW9u
PHZvaWQoY29uc3QgU3RyaW5nJik+JiYpIGZpbmFsOworICAgIFN0cmluZyB0b25lcygpIGNvbnN0
IGZpbmFsOworICAgIHNpemVfdCBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHNpemVfdCBp
bnRlclRvbmVHYXAoKSBjb25zdCBmaW5hbDsKKworICAgIEZ1bmN0aW9uPHZvaWQoY29uc3QgU3Ry
aW5nJik+IG1fb25Ub25lUGxheWVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lck1lZGlhU3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKaW5kZXggOTk1
NGZhNjU4MzEzYTlhNDVhNTJlM2NmNzYxZjEwMWYzNGQ5YWFkNS4uMDViYTIwZjcwNGZlN2I2YzIy
NmFmNzcwYWFhYTExMDE5M2M1MjhlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCkBAIC0zNCwxNyArMzQsMjMgQEAKICNpbmNsdWRlICJW
aWRlb0ZyYW1lTWV0YWRhdGFHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0
ZU1lZGlhU3RyZWFtLmgiCiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJS
ZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8Z3N0
L2FwcC9nc3RhcHBzcmMuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaD4K
ICNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CiAK
IHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUg
dmlkZW9TcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJ2aWRlb19zcmMldSIs
IEdTVF9QQURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMoInZp
ZGVvL3gtcmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwOCIpKTsKKyAgICBHU1RfU1RBVElDX0NB
UFMoInZpZGVvL3gtcmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwODt2aWRlby94LXZwOTthcHBs
aWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbyIpKTsKIAogc3RhdGljIEdzdFN0YXRp
Y1BhZFRlbXBsYXRlIGF1ZGlvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgi
YXVkaW9fc3JjJXUiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NU
QVRJQ19DQVBTKCJhdWRpby94LXJhdyhBTlkpOyIpKTsKKyAgICBHU1RfU1RBVElDX0NBUFMoImF1
ZGlvL3gtcmF3KEFOWSk7YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8iKSk7
CiAKIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0TWVkaWFTdHJlYW1TcmNEZWJ1Zyk7
CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnCkBAIC0y
MjEsNyArMjI3LDcgQEAgcHVibGljOgogCiAgICAgICAgIGlmIChkcm9wKSB7CiAgICAgICAgICAg
ICBtX25lZWRzRGlzY29udCA9IHRydWU7Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QobV9z
cmMuZ2V0KCksICIlcyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4gbm90IHB1c2hpbmciLCBtX3RyYWNr
Lmhhc1ZpZGVvKCkgPyAiVmlkZW8iIDogIkF1ZGlvIik7CisgICAgICAgICAgICBHU1RfVFJBQ0Vf
T0JKRUNUKG1fc3JjLmdldCgpLCAiJXMgcXVldWUgZnVsbCBhbHJlYWR5Li4uIG5vdCBwdXNoaW5n
IiwgbV90cmFjay5oYXNWaWRlbygpID8gIlZpZGVvIiA6ICJBdWRpbyIpOwogICAgICAgICAgICAg
cmV0dXJuOwogICAgICAgICB9CiAKQEAgLTY1Miw2ICs2NTgsNyBAQCB2b2lkIHdlYmtpdE1lZGlh
U3RyZWFtU3JjQWRkVHJhY2soV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFt
VHJhY2tQcgogICAgIGNvbnN0IGNoYXIqIHNvdXJjZVR5cGU7CiAgICAgdW5zaWduZWQgY291bnRl
cjsKICAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkVGVtcGxhdGU7CisKICAgICBpZiAodHJh
Y2stPmhhc0F1ZGlvKCkpIHsKICAgICAgICAgcGFkVGVtcGxhdGUgPSAmYXVkaW9TcmNUZW1wbGF0
ZTsKICAgICAgICAgc291cmNlVHlwZSA9ICJhdWRpbyI7CkBAIC02NjMsOSArNjcwLDE5IEBAIHZv
aWQgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2Vs
ZiwgTWVkaWFTdHJlYW1UcmFja1ByCiAgICAgICAgIGNvdW50ZXIgPSBzZWxmLT5wcml2LT52aWRl
b1BhZENvdW50ZXIuZXhjaGFuZ2VBZGQoMSk7CiAgICAgfQogCi0gICAgYXV0byBwYWROYW1lID0g
bWFrZVN0cmluZyhzb3VyY2VUeXBlLCAiX3NyYyIsIGNvdW50ZXIpOworI2lmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQorICAgIGlmICh0cmFjay0+c291cmNlKCkuaXNJbmNvbWluZ0F1ZGlvU291cmNl
KCkpIHsKKyAgICAgICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWlu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgpKTsKKyAgICAgICAgc291cmNl
LnJlZ2lzdGVyQ2xpZW50KCk7CisgICAgfSBlbHNlIGlmICh0cmFjay0+c291cmNlKCkuaXNJbmNv
bWluZ1ZpZGVvU291cmNlKCkpIHsKKyAgICAgICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nhc3Q8
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgpKTsK
KyAgICAgICAgc291cmNlLnJlZ2lzdGVyQ2xpZW50KCk7CisgICAgfQorI2VuZGlmCisKICAgICBH
U1RfREVCVUdfT0JKRUNUKHNlbGYsICJTZXR1cCAlcyBzb3VyY2UgZm9yIHRyYWNrICVzLCBvbmx5
IHRyYWNrOiAlcyIsIHNvdXJjZVR5cGUsIHRyYWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCksIGJvb2xG
b3JQcmludGluZyhvbmx5VHJhY2spKTsKIAorICAgIGF1dG8gcGFkTmFtZSA9IG1ha2VTdHJpbmco
c291cmNlVHlwZSwgIl9zcmMiLCBjb3VudGVyKTsKICAgICBhdXRvIHNvdXJjZSA9IG1ha2VVbmlx
dWU8SW50ZXJuYWxTb3VyY2U+KEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksICp0cmFjaywgcGFkTmFt
ZSk7CiAgICAgYXV0byogZWxlbWVudCA9IHNvdXJjZS0+Z2V0KCk7CiAgICAgZ3N0X2Jpbl9hZGQo
R1NUX0JJTl9DQVNUKHNlbGYpLCBlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clZpZGVvRW5jb2Rlci5jcHAKaW5kZXggZmFjNDcwNWZiOGE3Y2YyZGMyM2VhNTExYjE1ZmNmNDg1
NTJjZjMzYS4uYTc2ZWYxZWZmZDE2ZmEyNmI2ZGUzNTc0ZjQ2NGY1ZDIzM2M5NWVmZSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclZpZGVvRW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKQEAgLTI5Nyw5ICsyOTcs
MTEgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2NsYXNzX2luaXQo
V2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyQ2xhc3MKICAgICAgICAgICAgIGdfb2JqZWN0X3NldChz
ZWxmLT5wcml2LT5wYXJzZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRyKTsK
ICAgICAgICAgfSwgInRhcmdldC1iaXRyYXRlIiwgc2V0Qml0cmF0ZUJpdFBlclNlYywgImludGVy
dmFsLWludHJhZnJhbWVzIik7CiAgICAgRW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihYMjY0LCAi
eDI2NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKLSAgICAgICAgInZpZGVvL3gt
aDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVhbSxwcm9maWxlPWJhc2Vs
aW5lIiwKKyAgICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1i
eXRlLXN0cmVhbSxwcm9maWxlPWNvbnN0cmFpbmVkLWJhc2VsaW5lIiwKICAgICAgICAgW10oV2Vi
S2l0V2VicnRjVmlkZW9FbmNvZGVyKiBzZWxmKSB7CiAgICAgICAgICAgICBnc3RfdXRpbF9zZXRf
b2JqZWN0X2FyZyhHX09CSkVDVChzZWxmLT5wcml2LT5lbmNvZGVyLmdldCgpKSwgInR1bmUiLCAi
emVyb2xhdGVuY3kiKTsKKyAgICAgICAgICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdfT0JK
RUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAic3BlZWQtcHJlc2V0IiwgInVsdHJhZmFz
dCIpOworICAgICAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNlbGYtPnByaXYtPmVuY29k
ZXIuZ2V0KCkpLCAia2V5LWludC1tYXgiLCAxNSwgTlVMTCk7CiAgICAgICAgICAgICBnX29iamVj
dF9zZXQoc2VsZi0+cHJpdi0+cGFyc2VyLmdldCgpLCAiY29uZmlnLWludGVydmFsIiwgMSwgbnVs
bHB0cik7CiAgICAgICAgIH0sICJiaXRyYXRlIiwgc2V0Qml0cmF0ZUtiaXRQZXJTZWMsICJrZXkt
aW50LW1heCIpOwogICAgIEVuY29kZXJzOjpyZWdpc3RlckVuY29kZXIoT3BlbkgyNjQsICJvcGVu
aDI2NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uNTZmNTVhMmQ1ZmEzYjA1NzhmNTQxODAyNmZmOTg1OThiZWRiYTU2MwotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEs
NzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9EYXRh
LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmIGF1ZGlvVHJhY2tJ
ZCkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
QXVkaW8sIFdURk1vdmUoYXVkaW9UcmFja0lkKSkKKyAgICAsIFJlYWx0aW1lSW5jb21pbmdTb3Vy
Y2VHU3RyZWFtZXIoKQoreworICAgIHN0YXJ0KCk7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcigp
Cit7CisgICAgc3RvcCgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBvcGVuVmFsdmUoKTsKK30KKwor
dm9pZCBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdE
YXRhKCkKK3sKKyAgICBjbG9zZVZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3Vy
Y2VDYXBhYmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y2Fw
YWJpbGl0aWVzKCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGll
czo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzJiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKCkK
K3sKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBsZShHUmVmUHRyPEdzdFNhbXBs
ZT4mJiBnc3RTYW1wbGUpCit7CisgICAgYXV0byogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVm
ZmVyKGdzdFNhbXBsZS5nZXQoKSk7CisgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlv
biBkZXNjcmlwdGlvbjsKKyAgICBHU3RyZWFtZXJBdWRpb0RhdGEgZnJhbWVzKFdURk1vdmUoZ3N0
U2FtcGxlKSwgZGVzY3JpcHRpb24uZ2V0SW5mbygpKTsKKworICAgIGF1ZGlvU2FtcGxlc0F2YWls
YWJsZShNZWRpYVRpbWUoR1NUX1RJTUVfQVNfVVNFQ09ORFMoR1NUX0JVRkZFUl9QVFMoYnVmZmVy
KSksIEdfVVNFQ19QRVJfU0VDKSwgZnJhbWVzLCBkZXNjcmlwdGlvbiwgMCk7Cit9CisKK30KKwor
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjY2NjhkYjUzYmNmOWMxNmQzMDFiODE3MmU2OGIxOTE4OTA3ZmRhZWMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyIDogcHVibGlj
IFJlYWx0aW1lTWVkaWFTb3VyY2UsIHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVh
bWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcj4gY3JlYXRlKFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkgeyByZXR1cm4gYWRvcHRS
ZWYoKm5ldyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZShhdWRp
b1RyYWNrSWQpKSk7IH0KKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcihTdHJpbmcmJik7CisgICAgflJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcigpOworCitwcml2YXRlOgorICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2UgQVBJ
CisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQcm9k
dWNpbmdEYXRhKCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllcyYgY2FwYWJpbGl0aWVzKCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzJiBzZXR0aW5ncygpIGZpbmFsOworICAgIGJvb2wgaXNJbmNvbWluZ0F1ZGlvU291
cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gUmVhbHRpbWVJbmNv
bWluZ1NvdXJjZUdTdHJlYW1lciBBUEkKKyAgICB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8
R3N0U2FtcGxlPiYmKSBmaW5hbDsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBt
X2N1cnJlbnRTZXR0aW5nczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJlYWx0
aW1lTWVkaWFTb3VyY2UmIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmlzSW5jb21pbmdBdWRpb1Nv
dXJjZSgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUlu
Y29taW5nU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NGIxNjU0MmI3NzUxMDJkMjZm
MTVkMjBlNmZlZjVlMzNjOWVkZDcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXIuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2lu
Y2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIk1l
ZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRF
Uk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVM
VCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdT
dHJlYW1lcigpCit7CisgICAgbV9iaW4gPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBtX3Zh
bHZlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAgIG1f
dGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ0ZWUiLCBudWxscHRyKTsKKyAgICBnX29i
amVjdF9zZXQobV90ZWUuZ2V0KCksICJhbGxvdy1ub3QtbGlua2VkIiwgdHJ1ZSwgbnVsbHB0cik7
CisKKyAgICBhdXRvKiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBu
dWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSks
IG1fdmFsdmUuZ2V0KCksIHF1ZXVlLCBtX3RlZS5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBnc3Rf
ZWxlbWVudF9saW5rX21hbnkobV92YWx2ZS5nZXQoKSwgcXVldWUsIG1fdGVlLmdldCgpLCBudWxs
cHRyKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fdmFsdmUuZ2V0
KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUpOworICAg
IGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV90ZWUuZ2V0KCkpOworCisgICAg
YXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fdmFs
dmUuZ2V0KCksICJzaW5rIikpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4uZ2V0KCks
IGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgc2lua1BhZC5nZXQoKSkpOworfQorCit2b2lkIFJl
YWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmNsb3NlVmFsdmUoKSBjb25zdAoreworICAg
IGlmIChtX3ZhbHZlKQorICAgICAgICBnX29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3Ai
LCB0cnVlLCBudWxscHRyKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVh
bWVyOjpvcGVuVmFsdmUoKSBjb25zdAoreworICAgIGlmIChtX3ZhbHZlKQorICAgICAgICBnX29i
amVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3AiLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK3Zv
aWQgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVnaXN0ZXJDbGllbnQoKQorewor
ICAgIEdTVF9ERUJVRygiUmVnaXN0ZXJpbmcgbmV3IGNsaWVudCIpOworICAgIGF1dG8qIHF1ZXVl
ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIGF1dG8q
IHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsiLCBudWxscHRyKTsKKyAg
ICBnX29iamVjdF9zZXQoc2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAiZW1pdC1z
aWduYWxzIiwgVFJVRSwgIm1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7CisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKHNpbmssICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSygrW10oUmVhbHRp
bWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciogc2VsZiwgR3N0RWxlbWVudCogc2luaykgLT4gR3N0
Rmxvd1JldHVybiB7CisgICAgICAgIGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lu
a19wdWxsX3NhbXBsZShHU1RfQVBQX1NJTksoc2luaykpKTsKKyAgICAgICAgc2VsZi0+ZGlzcGF0
Y2hTYW1wbGUoV1RGTW92ZShzYW1wbGUpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOwor
ICAgIH0pLCB0aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChzaW5rLCAibmV3
LXByZXJvbGwiLCBHX0NBTExCQUNLKCtbXShSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
KiBzZWxmLCBHc3RFbGVtZW50KiBzaW5rKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAgICAgYXV0
byBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1RfQVBQX1NJ
Tksoc2luaykpKTsKKyAgICAgICAgc2VsZi0+ZGlzcGF0Y2hTYW1wbGUoV1RGTW92ZShzYW1wbGUp
KTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0pLCB0aGlzKTsKKworICAgIGdz
dF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgcXVldWUsIHNpbmssIG51
bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX3RlZS5nZXQoKSwgcXVldWUsIHNp
bmssIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVl
dWUpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc2luayk7CisKKyAg
ICBhdXRvIGRvdEZpbGVOYW1lID0gbWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUobV9iaW4uZ2V0
KCkpLCAiLmluY29taW5nIik7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RT
KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90
RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQ2NGM0OTcw
Y2NiOGQxMWI3OWE1YzIwZDdmMTM1MmU2ZjRhZmJiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5n
U291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBHc3RF
bGVtZW50KiBiaW4oKSB7IHJldHVybiBtX2Jpbi5nZXQoKTsgfQorICAgIHZvaWQgcmVnaXN0ZXJD
bGllbnQoKTsKKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFt
ZXIoKTsKKworICAgIHZvaWQgY2xvc2VWYWx2ZSgpIGNvbnN0OworICAgIHZvaWQgb3BlblZhbHZl
KCkgY29uc3Q7CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmFsdmU7CisKK3ByaXZhdGU6
CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmKSB7
IH0KKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9iaW47CisgICAgR1JlZlB0cjxHc3RFbGVt
ZW50PiBtX3RlZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDY4ZWU1
YjkxMjZiZTZlN2U4MDJmYjJiZDFjNmE4OTVjNGQ1MzdkCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lci5oIgorCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJW
aWRlb0ZyYW1lTWV0YWRhdGFHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvcnRwL3J0cC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcjo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmIHZpZGVv
VHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6VmlkZW8sIFdURk1vdmUodmlkZW9UcmFja0lkKSkKKyAgICAsIFJlYWx0aW1lSW5jb21p
bmdTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRD
b25zdHJhaW50cyBjb25zdHJhaW50czsKKyAgICBjb25zdHJhaW50cy5zZXRTdXBwb3J0c1dpZHRo
KHRydWUpOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0KHRydWUpOworICAgIG1f
Y3VycmVudFNldHRpbmdzID0gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHsgfTsKKyAgICBt
X2N1cnJlbnRTZXR0aW5ncy0+c2V0U3VwcG9ydGVkQ29uc3RyYWludHMoV1RGTW92ZShjb25zdHJh
aW50cykpOworCisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKG1fdmFsdmUuZ2V0KCksICJzaW5rIikpOworICAgIGdzdF9wYWRfYWRkX3Byb2Jl
KHNpbmtQYWQuZ2V0KCksIHN0YXRpY19jYXN0PEdzdFBhZFByb2JlVHlwZT4oR1NUX1BBRF9QUk9C
RV9UWVBFX0JVRkZFUiksIFtdKEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5mbywgZ3BvaW50
ZXIpIC0+IEdzdFBhZFByb2JlUmV0dXJuIHsKKyAgICAgICAgYXV0byB2aWRlb1NhbXBsZU1ldGFk
YXRhID0gc3RkOjptYWtlX29wdGlvbmFsPFZpZGVvU2FtcGxlTWV0YWRhdGE+KHsgfSk7CisgICAg
ICAgIHZpZGVvU2FtcGxlTWV0YWRhdGEtPnJlY2VpdmVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93
KCkuc2Vjb25kc1NpbmNlRXBvY2goKTsKKworICAgICAgICBhdXRvKiBidWZmZXIgPSBHU1RfQlVG
RkVSX0NBU1QoR1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEoaW5mbykpOworICAgICAgICBHc3RSVFBC
dWZmZXIgcnRwQnVmZmVyIEdTVF9SVFBfQlVGRkVSX0lOSVQ7CisgICAgICAgIGlmIChnc3RfcnRw
X2J1ZmZlcl9tYXAoYnVmZmVyLCBHU1RfTUFQX1JFQUQsICZydHBCdWZmZXIpKSB7CisgICAgICAg
ICAgICB2aWRlb1NhbXBsZU1ldGFkYXRhLT5ydHBUaW1lc3RhbXAgPSBnc3RfcnRwX2J1ZmZlcl9n
ZXRfdGltZXN0YW1wKCZydHBCdWZmZXIpOworICAgICAgICAgICAgZ3N0X3J0cF9idWZmZXJfdW5t
YXAoJnJ0cEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyID0gd2Via2l0R3N0QnVm
ZmVyU2V0VmlkZW9TYW1wbGVNZXRhZGF0YShidWZmZXIsIFdURk1vdmUodmlkZW9TYW1wbGVNZXRh
ZGF0YSkpOworICAgICAgICBHU1RfUEFEX1BST0JFX0lORk9fREFUQShpbmZvKSA9IGJ1ZmZlcjsK
KyAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7CisgICAgfSwgbnVsbHB0ciwgbnVsbHB0
cik7CisKKyAgICBzdGFydCgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBvcGVuVmFsdmUoKTsKK30K
Kwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNp
bmdEYXRhKCkKK3sKKyAgICBjbG9zZVZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6
Y2FwYWJpbGl0aWVzKCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdz
KCkKK3sKKyAgICBpZiAobV9jdXJyZW50U2V0dGluZ3MpCisgICAgICAgIHJldHVybiBtX2N1cnJl
bnRTZXR0aW5ncy52YWx1ZSgpOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENv
bnN0cmFpbnRzIGNvbnN0cmFpbnRzOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzV2lkdGgo
dHJ1ZSk7CisgICAgY29uc3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7CisKKyAgICBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgYXV0byYgc2l6ZSA9IHRo
aXMtPnNpemUoKTsKKyAgICBzZXR0aW5ncy5zZXRXaWR0aChzaXplLndpZHRoKCkpOworICAgIHNl
dHRpbmdzLnNldEhlaWdodChzaXplLmhlaWdodCgpKTsKKyAgICBzZXR0aW5ncy5zZXRTdXBwb3J0
ZWRDb25zdHJhaW50cyhjb25zdHJhaW50cyk7CisKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IFdU
Rk1vdmUoc2V0dGluZ3MpOworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5ncy52YWx1ZSgpOwor
fQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3NE
aWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gc2V0
dGluZ3MpCit7CisgICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpG
bGFnOjpIZWlnaHQgfSkpCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0gc3RkOjpudWxsb3B0
OworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0
Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYgZ3N0U2FtcGxlKQoreworICAgIHZpZGVvU2Ft
cGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVXcmFwcGVkU2FtcGxlKGdz
dFNhbXBsZSksIHsgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5YmMzMDA2
OWNkMzMyMDkyMzE4YmJmNzc4YWI5M2Q5MTg0ODMxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyIDogcHVibGljIFJlYWx0aW1l
TWVkaWFTb3VyY2UsIHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cj4gY3JlYXRlKFN0cmluZyYmIHZpZGVvVHJhY2tJZCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZSh2aWRlb1RyYWNrSWQp
KSk7IH0KKyAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKCkgPSBkZWZh
dWx0OworCitwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyKFN0cmluZyYmKTsKKworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQ
SQorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJv
ZHVjaW5nRGF0YSgpICBmaW5hbDsKKyAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNl
dDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KSBmaW5hbDsKKyAgICBjb25zdCBS
ZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBmaW5hbDsKKyAg
ICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgZmluYWw7Cisg
ICAgYm9vbCBpc0luY29taW5nVmlkZW9Tb3VyY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVl
OyB9CisKKyAgICAvLyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIEFQSQorICAgIHZv
aWQgZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYpIGZpbmFsOworCisgICAgc3Rk
OjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRT
X0JFR0lOKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcikKKyAg
ICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZSYg
c291cmNlKSB7IHJldHVybiBzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCk7IH0KK1NQRUNJ
QUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZWNkYzVhYmRlMmYxNGM4MzczMzVkZjZi
ZGFmNTI2Njk3Mjg4YmZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lci5jcHAKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRl
ICJHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJp
bmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Vi
a2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJr
aXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHNvdXJjZSkKKyAgICA6
IFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpCit7CisgICAgbV9hbGxvd2Vk
Q2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LXJ0cCIs
ICJtZWRpYSIsIEdfVFlQRV9TVFJJTkcsICJhdWRpbyIsCisgICAgICAgICJlbmNvZGluZy1uYW1l
IiwgR19UWVBFX1NUUklORywgIk9QVVMiLCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIDQ4MDAw
LCBudWxscHRyKSk7CisKKyAgICBtX2F1ZGlvY29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3Rvcnlf
bWFrZSgiYXVkaW9jb252ZXJ0IiwgbnVsbHB0cik7CisgICAgbV9hdWRpb3Jlc2FtcGxlID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb3Jlc2FtcGxlIiwgbnVsbHB0cik7CisKKyAgICBt
X2VuY29kZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgib3B1c2VuYyIsIG51bGxwdHIpOworICAg
IGlmICghbV9lbmNvZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTogRW5hYmxl
IGR0eCB0b28/CisgICAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1QobV9lbmNvZGVy
LmdldCgpKSwgImF1ZGlvLXR5cGUiLCAidm9pY2UiKTsKKworICAgIG1fcGF5bG9hZGVyID0gbWFr
ZUdTdHJlYW1lckVsZW1lbnQoInJ0cG9wdXNwYXkiLCBudWxscHRyKTsKKyAgICBpZiAoIW1fcGF5
bG9hZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIu
Z2V0KCksICJhdXRvLWhlYWRlci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBn
c3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fYXVkaW9jb252ZXJ0
LmdldCgpLCBtX2F1ZGlvcmVzYW1wbGUuZ2V0KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9wYXlsb2Fk
ZXIuZ2V0KCksIG51bGxwdHIpOworICAgIHNldFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkpOworfQor
Citib29sIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5
cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcykKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNU
KG1fYmluLmdldCgpLCAiT3V0Z29pbmcgYXVkaW8gc291cmNlIHBheWxvYWQgY2FwczogJSIgR1NU
X1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAgIGF1dG8qIHN0cnVjdHVyZSA9IGdzdF9jYXBz
X2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgMCk7CisgICAgaWYgKGNvbnN0IGNoYXIqIGVuY29k
aW5nTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJlbmNvZGluZy1u
YW1lIikpIHsKKyAgICAgICAgaWYgKCFlcXVhbChlbmNvZGluZ05hbWUsICJPUFVTIikpIHsKKyAg
ICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJVbnN1cHBvcnRlZCBvdXRn
b2luZyBhdWRpbyBlbmNvZGluZzogJXMiLCBlbmNvZGluZ05hbWUpOworICAgICAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChtX2Jpbi5nZXQoKSwgImVuY29kaW5nLW5hbWUgbm90IGZvdW5kIik7CisgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY29uc3QgY2hhciogdXNlSW5iYW5kRmVjID0g
Z3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgInVzZWluYmFuZGZlYyIpKSB7Cisg
ICAgICAgIGlmICghc3RyY21wKHVzZUluYmFuZEZlYywgIjEiKSkKKyAgICAgICAgICAgIGdfb2Jq
ZWN0X3NldChtX2VuY29kZXIuZ2V0KCksICJpbmJhbmQtZmVjIiwgdHJ1ZSwgbnVsbHB0cik7Cisg
ICAgfQorCisgICAgaWYgKGNvbnN0IGNoYXIqIG1pblBUaW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRf
c3RyaW5nKHN0cnVjdHVyZSwgIm1pbnB0aW1lIikpIHsKKyAgICAgICAgU3RyaW5nIHRpbWUobWlu
UFRpbWUpOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlckFsbG93aW5nVHJh
aWxpbmdKdW5rPGludDY0X3Q+KHRpbWUpKQorICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGF5
bG9hZGVyLmdldCgpLCAibWluLXB0aW1lIiwgKnZhbHVlICogR1NUX01TRUNPTkQsIG51bGxwdHIp
OworICAgIH0KKworICAgIGludCBwYXlsb2FkVHlwZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9n
ZXRfaW50KHN0cnVjdHVyZSwgInBheWxvYWQiLCAmcGF5bG9hZFR5cGUpKQorICAgICAgICBnX29i
amVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJwdCIsIHBheWxvYWRUeXBlLCBudWxscHRyKTsK
KworICAgIGdfb2JqZWN0X3NldChtX2NhcHNGaWx0ZXIuZ2V0KCksICJjYXBzIiwgY2Fwcy5nZXQo
KSwgbnVsbHB0cik7CisKKyAgICBnc3RfZWxlbWVudF9saW5rX21hbnkobV9vdXRnb2luZ1NvdXJj
ZS5nZXQoKSwgbV92YWx2ZS5nZXQoKSwgbV9hdWRpb2NvbnZlcnQuZ2V0KCksIG1fYXVkaW9yZXNh
bXBsZS5nZXQoKSwgbV9wcmVFbmNvZGVyUXVldWUuZ2V0KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9w
YXlsb2FkZXIuZ2V0KCksIG1fcG9zdEVuY29kZXJRdWV1ZS5nZXQoKSwgbnVsbHB0cik7CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxOTAyYjVmNjkx
NDI1NDhiYTE3YzcwNjM0NzY4ZWU1YWM5YjViYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1
ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KworI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lciBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNl
R1N0cmVhbWVyPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIGF1ZGlvU291
cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcihXVEZNb3ZlKGF1ZGlvU291cmNlKSkpOyB9CisKKyAgICBib29sIHNldFBheWxvYWRU
eXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsKKworcHJvdGVjdGVkOgorICAgIGV4
cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+JiYpOworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4g
bV9hdWRpb2NvbnZlcnQ7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2F1ZGlvcmVzYW1wbGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29p
bmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjI2NzIwYjJiNGJjMDg4Mjcy
NTgzYzA1ZTgzMjIyMjQyMjVmNmFjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3Vy
Y2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2lu
Z01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhU3Ry
ZWFtU291cmNlLmgiCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRlIDxn
c3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisKK0dTVF9E
RUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVm
aW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIG1fYmluID0gZ3N0
X2Jpbl9uZXcobnVsbHB0cik7CisKKyAgICBtX3ZhbHZlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAgIG1fcHJlRW5jb2RlclF1ZXVlID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIG1fcG9zdEVuY29kZXJRdWV1
ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxscHRyKTsKKyAgICBtX2Nh
cHNGaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRy
KTsKKworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV92
YWx2ZS5nZXQoKSwgbV9wcmVFbmNvZGVyUXVldWUuZ2V0KCksCisgICAgICAgIG1fcG9zdEVuY29k
ZXJRdWV1ZS5nZXQoKSwgbV9jYXBzRmlsdGVyLmdldCgpLCBudWxscHRyKTsKKworICAgIGF1dG8g
c3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fY2Fwc0ZpbHRl
ci5nZXQoKSwgInNyYyIpKTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKG1fYmluLmdldCgpLCBn
c3RfZ2hvc3RfcGFkX25ldygic3JjIiwgc3JjUGFkLmdldCgpKSk7Cit9CisKK1JlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdT
dHJlYW1lcigpCit7CisgICAgc3RvcCgpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1f
YmluLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgaWYgKGF1dG8gcGlwZWxpbmUgPSBhZG9w
dEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudChtX2Jpbi5nZXQoKSkpKQorICAgICAgICBnc3Rf
YmluX3JlbW92ZShHU1RfQklOX0NBU1QocGlwZWxpbmUuZ2V0KCkpLCBtX2Jpbi5nZXQoKSk7Cit9
CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTb3VyY2Uo
UmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKK3sKKyAgICBpZiAobV9z
b3VyY2UgJiYgIW1faW5pdGlhbFNldHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9
IG1fc291cmNlLnZhbHVlKCktPnNldHRpbmdzKCk7CisKKyAgICBpZiAobV9zb3VyY2UpCisgICAg
ICAgIG1fc291cmNlLnZhbHVlKCktPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBtX3NvdXJj
ZSA9IFdURk1vdmUobmV3U291cmNlKTsKKyAgICBpbml0aWFsaXplRnJvbVRyYWNrKCk7Cit9CisK
K3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzdGFydCgpCit7Cisg
ICAgbV9zb3VyY2UudmFsdWUoKS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1faXNTdG9wcGVk
ID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
OjpzdG9wKCkKK3sKKyAgICBpZiAobV9zb3VyY2UpIHsKKyAgICAgICAgbV9zb3VyY2UudmFsdWUo
KS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgICAgICBnc3RfZWxlbWVudF9zZW5kX2V2ZW50
KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIGdzdF9ldmVudF9uZXdfZW9zKCkpOworCisgICAgICAg
IGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9iaW4uZ2V0KCksIHRydWUpOworICAgICAg
ICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSwgR1NUX1NUQVRF
X05VTEwpOworCisgICAgICAgIGlmIChtX3dlYnJ0Y1NpbmtQYWQpIHsKKyAgICAgICAgICAgIGF1
dG8gc3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYmluLmdl
dCgpLCAic3JjIikpOworICAgICAgICAgICAgZ3N0X3BhZF91bmxpbmsoc3JjUGFkLmdldCgpLCBt
X3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIHBhcmVudCA9IGFkb3B0
R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpKTsK
KyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFyZW50LmdldCgpLCAiUmVtb3ZpbmcgcGFk
ICUiIEdTVF9QVFJfRk9STUFULCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworICAgICAgICAgICAg
Z3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZChwYXJlbnQuZ2V0KCksIG1fd2VicnRjU2lu
a1BhZC5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2Vk
X3N0YXRlKG1fYmluLmdldCgpLCBmYWxzZSk7CisgICAgICAgIG1fc291cmNlLnJlc2V0KCk7Cisg
ICAgfQorICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZU11dGVkQ2hhbmdlZCgpCit7CisgICAgaWYgKCFt
X3NvdXJjZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX211dGVkICE9IG1fc291cmNl
LnZhbHVlKCktPm11dGVkKCkpOworICAgIG1fbXV0ZWQgPSBtX3NvdXJjZS52YWx1ZSgpLT5tdXRl
ZCgpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c291
cmNlRW5hYmxlZENoYW5nZWQoKQoreworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVy
bjsKKworICAgIG1fZW5hYmxlZCA9IG1fc291cmNlLnZhbHVlKCktPmVuYWJsZWQoKTsKKyAgICBp
ZiAobV92YWx2ZSkKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fdmFsdmUuZ2V0KCksICJkcm9wIiwg
IW1fZW5hYmxlZCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291
cmNlR1N0cmVhbWVyOjppbml0aWFsaXplRnJvbVRyYWNrKCkKK3sKKyAgICBtX211dGVkID0gbV9z
b3VyY2UudmFsdWUoKS0+bXV0ZWQoKTsKKyAgICBtX2VuYWJsZWQgPSBtX3NvdXJjZS52YWx1ZSgp
LT5lbmFibGVkKCk7CisgICAgbV9vdXRnb2luZ1NvdXJjZSA9IHdlYmtpdE1lZGlhU3RyZWFtU3Jj
TmV3KCk7CisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV9vdXRn
b2luZ1NvdXJjZS5nZXQoKSk7CisgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXRUJL
SVRfTUVESUFfU1RSRUFNX1NSQyhtX291dGdvaW5nU291cmNlLmdldCgpKSwgbV9zb3VyY2UtPnB0
cigpLCB0cnVlKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXI6OmxpbmsoKQoreworICAgIGdzdF9lbGVtZW50X2xpbmsobV9wb3N0RW5jb2RlclF1ZXVlLmdl
dCgpLCBtX2NhcHNGaWx0ZXIuZ2V0KCkpOworCisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYo
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9iaW4uZ2V0KCksICJzcmMiKSk7CisgICAgZ3N0
X3BhZF9saW5rKHNyY1BhZC5nZXQoKSwgbV93ZWJydGNTaW5rUGFkLmdldCgpKTsKKyAgICBnc3Rf
ZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fYmluLmdldCgpKTsKK30KKwordm9pZCBS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFNpbmtQYWQoY29uc3QgR1Jl
ZlB0cjxHc3RQYWQ+JiBwYWQpCit7CisgICAgbV93ZWJydGNTaW5rUGFkID0gcGFkOworICAgIEdS
ZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHRyYW5zY2VpdmVyOworICAgIGdfb2JqZWN0
X2dldChtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCksICJ0cmFuc2NlaXZlciIsICZ0cmFuc2NlaXZlci5v
dXRQdHIoKSwgbnVsbHB0cik7CisgICAgZ19vYmplY3RfZ2V0KHRyYW5zY2VpdmVyLmdldCgpLCAi
c2VuZGVyIiwgJm1fc2VuZGVyLm91dFB0cigpLCBudWxscHRyKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uYjNlYWJhOTk0OTZiNDE2YmNhMmM3YjU1YzFmODZmODhiMGQzOTEzMwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaApAQCAtMCwwICsx
LDg1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5o
IgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSA8d3RmL1Ro
cmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyIDogcHVibGljIFRocmVhZFNhZmVSZWZD
b3VudGVkPFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcj4sIHB1YmxpYyBNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgeworcHVibGljOgorICAgIH5SZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKKworICAgIHZvaWQgc3RhcnQoKTsKKyAgICB2
b2lkIHN0b3AoKTsKKyAgICB2b2lkIHNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+JiYpOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBzb3VyY2UoKSBjb25zdCB7IHJl
dHVybiBtX3NvdXJjZS0+Z2V0KCk7IH0KKworICAgIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGFs
bG93ZWRDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd2VkQ2FwczsgfQorCisgICAgdm9pZCBs
aW5rKCk7CisgICAgY29uc3QgR1JlZlB0cjxHc3RQYWQ+JiBwYWQoKSBjb25zdCB7IHJldHVybiBt
X3dlYnJ0Y1NpbmtQYWQ7IH0KKyAgICB2b2lkIHNldFNpbmtQYWQoY29uc3QgR1JlZlB0cjxHc3RQ
YWQ+Jik7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVyKCkgY29uc3Qg
eyByZXR1cm4gbV9zZW5kZXI7IH0KKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGJpbigpIGNvbnN0
IHsgcmV0dXJuIG1fYmluOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2V0UGF5bG9hZFR5cGUoY29u
c3QgR1JlZlB0cjxHc3RDYXBzPiYpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAg
ICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKKworICAg
IHZvaWQgaW5pdGlhbGl6ZUZyb21UcmFjaygpOworCisgICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVl
IH07CisgICAgYm9vbCBtX211dGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNTdG9wcGVkIHsg
ZmFsc2UgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+
IG1fc291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
PiBtX2luaXRpYWxTZXR0aW5nczsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYmluOworICAg
IEdSZWZQdHI8R3N0RWxlbWVudD4gbV9vdXRnb2luZ1NvdXJjZTsKKyAgICBHUmVmUHRyPEdzdEVs
ZW1lbnQ+IG1fdmFsdmU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ByZUVuY29kZXJRdWV1
ZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZW5jb2RlcjsKKyAgICBHUmVmUHRyPEdzdEVs
ZW1lbnQ+IG1fcGF5bG9hZGVyOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9wb3N0RW5jb2Rl
clF1ZXVlOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9jYXBzRmlsdGVyOworICAgIEdSZWZQ
dHI8R3N0Q2Fwcz4gbV9hbGxvd2VkQ2FwczsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRl
cj4gbV9zZW5kZXI7CisgICAgR1JlZlB0cjxHc3RQYWQ+IG1fd2VicnRjU2lua1BhZDsKKworcHJp
dmF0ZToKKyAgICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOworICAgIHZvaWQgc291cmNlRW5h
YmxlZENoYW5nZWQoKTsKKworICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZl
ciBBUEkKKyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
Jikgb3ZlcnJpZGUgeyBzb3VyY2VNdXRlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tFbmFi
bGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgc291cmNlRW5h
YmxlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGUmKSBvdmVycmlkZSB7IGluaXRpYWxpemVGcm9tVHJhY2soKTsgfQorICAg
IHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgfQor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiOGY2MzRiMjM0MDA3YjFlOTYw
YmJhMWU1NjczOTNmNjEyY2YyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
R1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNp
bmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKworR1NUX0RFQlVHX0NBVEVH
T1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NB
VF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYg
c291cmNlKQorICAgIDogUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sK
KyAgICByZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CisKKyAgICBtX3ZpZGVvQ29u
dmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252ZXJ0IiwgbnVsbHB0cik7
CisgICAgbV9lbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3ZWJydGN2aWRlb2Vu
Y29kZXIiLCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jp
bi5nZXQoKSksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX2VuY29kZXIuZ2V0KCksIG51bGxwdHIp
OworCisgICAgYXV0byogcGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9nZXRfcGFkX3RlbXBsYXRl
KG1fZW5jb2Rlci5nZXQoKSwgInNyYyIpOworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3Rf
cGFkX3RlbXBsYXRlX2dldF9jYXBzKHBhZFRlbXBsYXRlKSk7CisgICAgbV9hbGxvd2VkQ2FwcyA9
IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZ3N0X2NhcHNfZm9yZWFjaChj
YXBzLmdldCgpLCByZWludGVycHJldF9jYXN0PEdzdENhcHNGb3JlYWNoRnVuYz4oK1tdKEdzdENh
cHNGZWF0dXJlcyosIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9pbnRlciB1c2VyRGF0YSkg
eworICAgICAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAgY29uc3QgY2hhciog
bmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKKyAgICAgICAgY29uc3Qg
Y2hhciogZW5jb2RpbmdOYW1lID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGVxdWFsKG5hbWUsICJ2
aWRlby94LXZwOCIpKQorICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIlZQOCI7CisgICAgICAg
IGVsc2UgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LXZwOSIpKQorICAgICAgICAgICAgZW5jb2Rp
bmdOYW1lID0gIlZQOSI7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LWgy
NjQiKSkKKyAgICAgICAgICAgIGVuY29kaW5nTmFtZSA9ICJIMjY0IjsKKyAgICAgICAgaWYgKGVu
Y29kaW5nTmFtZSkKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUoc291cmNl
LT5tX2FsbG93ZWRDYXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGljYXRpb24veC1y
dHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAidmlkZW8iLCAiZW5jb2RpbmctbmFtZSIsIEdf
VFlQRV9TVFJJTkcsIGVuY29kaW5nTmFtZSwgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCA5MDAw
MCwgbnVsbHB0cikpOworICAgIH0pLCB0aGlzKTsKKworICAgIHNldFNvdXJjZShXVEZNb3ZlKHNv
dXJjZSkpOworfQorCitib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6
c2V0UGF5bG9hZFR5cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcykKK3sKKyAgICBHU1Rf
REVCVUdfT0JKRUNUKG1fYmluLmdldCgpLCAiT3V0Z29pbmcgdmlkZW8gc291cmNlIHBheWxvYWQg
Y2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAgIGF1dG8qIHN0cnVjdHVy
ZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgMCk7CisgICAgR1JlZlB0cjxH
c3RDYXBzPiBlbmNvZGVyQ2FwczsKKyAgICBpZiAoY29uc3QgY2hhciogZW5jb2RpbmdOYW1lID0g
Z3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImVuY29kaW5nLW5hbWUiKSkgewor
ICAgICAgICBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiVlA4IikpIHsKKyAgICAgICAgICAgIGVu
Y29kZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gt
dnA4IikpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgi
cnRwdnA4cGF5IiwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdO
YW1lLCAiVlA5IikpIHsKKyAgICAgICAgICAgIGVuY29kZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9j
YXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtdnA5IikpOworICAgICAgICAgICAgbV9wYXls
b2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwdnA5cGF5IiwgbnVsbHB0cik7CisgICAg
ICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiSDI2NCIpKSB7CisgICAgICAgICAg
ICBlbmNvZGVyQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRl
by94LWgyNjQiKSk7CisgICAgICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVt
ZW50KCJydHBoMjY0cGF5IiwgbnVsbHB0cik7CisgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6
Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1nb29kLy0vaXNz
dWVzLzg5MworICAgICAgICAgICAgLy8gZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1Qo
bV9wYXlsb2FkZXIuZ2V0KCkpLCAiYWdncmVnYXRlLW1vZGUiLCAiemVyby1sYXRlbmN5Iik7Cisg
ICAgICAgICAgICAvLyBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJjb25maWctaW50
ZXJ2YWwiLCAtMSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHU1Rf
RVJST1JfT0JKRUNUKG1fYmluLmdldCgpLCAiVW5zdXBwb3J0ZWQgb3V0Z29pbmcgdmlkZW8gZW5j
b2Rpbmc6ICVzIiwgZW5jb2RpbmdOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9iaW4uZ2V0
KCksICJlbmNvZGluZy1uYW1lIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgaWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisg
ICAgLy8gRklYTUU6IFJlLWVuYWJsZSB0aGlzLiBDdXJyZW50bHkgdHJpZ2dlcnMgY2FwcyBuZWdv
dGlhdGlvbiBlcnJvci4KKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJhdXRv
LWhlYWRlci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBnX29iamVjdF9zZXQo
bV9lbmNvZGVyLmdldCgpLCAiZm9ybWF0IiwgZW5jb2RlckNhcHMuZ2V0KCksIG51bGxwdHIpOwor
CisgICAgaW50IHBheWxvYWRUeXBlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3Ry
dWN0dXJlLCAicGF5bG9hZCIsICZwYXlsb2FkVHlwZSkpCisgICAgICAgIGdfb2JqZWN0X3NldCht
X3BheWxvYWRlci5nZXQoKSwgInB0IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIpOworCisgICAgYXV0
byBmaWx0ZXJlZENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwoZ3N0X3N0cnVjdHVy
ZV9jb3B5KHN0cnVjdHVyZSksIG51bGxwdHIpKTsKKyAgICBnX29iamVjdF9zZXQobV9jYXBzRmls
dGVyLmdldCgpLCAiY2FwcyIsIGZpbHRlcmVkQ2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBn
c3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3BheWxvYWRlci5nZXQoKSk7
CisgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIG1fdmFs
dmUuZ2V0KCksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX3ByZUVuY29kZXJRdWV1ZS5nZXQoKSwK
KyAgICAgICAgbV9lbmNvZGVyLmdldCgpLCBtX3BheWxvYWRlci5nZXQoKSwgbV9wb3N0RW5jb2Rl
clF1ZXVlLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVh
bWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODE1MWZkY2EwMjMzMjI0NWFjYzlhZmYyMTVkMjk1MGQxZWY1MzQ3
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaApAQCAtMCww
ICsxLDQ3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2lu
Z01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyIGZpbmFsIDogcHVibGljIFJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJl
ZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+IGNyZWF0ZShSZWY8TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKHNvdXJjZSkpKTsgfQorCisg
ICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3No
b3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9CisKKyAgICBib29sIHNl
dFBheWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsKKworcHJvdGVjdGVk
OgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihSZWY8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCisgICAgYm9vbCBtX3Nob3VsZEFwcGx5Um90
YXRpb24geyBmYWxzZSB9OworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92
aWRlb0NvbnZlcnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRl
eCAyMmVhMzMyMzkwYzVjODIyYWQzNDI1OTBhNGExZTBiZjBjNTE5ZDA4Li4wNWE0YjNjNTMzYjhl
NTM3NTAyYTQ4YTdhZTRhOWRjOWNiZjgyNWQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90
ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwCkBAIC01OTksNiArNTk5LDkgQEAgdm9pZCBJbnRlcm5hbHM6OnJlc2V0VG9Db25zaXN0
ZW50U3RhdGUoUGFnZSYgcGFnZSkKICAgICBydGNQcm92aWRlci5zZXRIMjY1U3VwcG9ydCh0cnVl
KTsKICAgICBydGNQcm92aWRlci5zZXRWUDlTdXBwb3J0KHRydWUsIHRydWUpOwogICAgIHJ0Y1By
b3ZpZGVyLmNsZWFyRmFjdG9yeSgpOworI2VsaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisgICAg
cGFnZS5zZXR0aW5ncygpLnNldFdlYlJUQ0VuY3J5cHRpb25FbmFibGVkKHRydWUpOworICAgIHBh
Z2Uuc2V0dGluZ3MoKS5zZXRQZWVyQ29ubmVjdGlvbkVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYKIAog
ICAgIHBhZ2Uuc2V0RnVsbHNjcmVlbkF1dG9IaWRlRHVyYXRpb24oMF9zKTsKQEAgLTE2MTUsNiAr
MTYxOCw3IEBAIHZvaWQgSW50ZXJuYWxzOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1Nv
dXJjZXMoUlRDUGVlckNvbm5lY3Rpb24mIGNvbm5lY3RpCiB7CiAgICAgY29ubmVjdGlvbi5hcHBs
eVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKTsKIH0KKwogdm9pZCBJbnRlcm5hbHM6
OnNldFdlYlJUQ0gyNjVTdXBwb3J0KGJvb2wgdmFsdWUpCiB7CiAjaWYgVVNFKExJQldFQlJUQykK
QEAgLTE2MjIsNiArMTYyNiw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRXZWJSVENIMjY1U3VwcG9y
dChib29sIHZhbHVlKQogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLnNldEgyNjVT
dXBwb3J0KHZhbHVlKTsKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5jbGVhckZh
Y3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYK
IH0KIApAQCAtMTYzMiw2ICsxNjM4LDkgQEAgdm9pZCBJbnRlcm5hbHM6OnNldFdlYlJUQ1ZQOVN1
cHBvcnQoYm9vbCBzdXBwb3J0VlA5UHJvZmlsZTAsIGJvb2wgc3VwcG9ydFZQOVByb2YKICAgICAg
ICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRWUDlTdXBwb3J0KHN1cHBvcnRWUDlQcm9m
aWxlMCwgc3VwcG9ydFZQOVByb2ZpbGUyKTsKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlk
ZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdXBw
b3J0VlA5UHJvZmlsZTApOworICAgIFVOVVNFRF9QQVJBTShzdXBwb3J0VlA5UHJvZmlsZTIpOwog
I2VuZGlmCiB9CiAKQEAgLTE2NDIsNiArMTY1MSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRXZWJS
VENWUDlWVEJTdXBwb3J0KGJvb2wgdmFsdWUpCiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3Zp
ZGVyKCkuc2V0VlA5VlRCU3VwcG9ydCh2YWx1ZSk7CiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1By
b3ZpZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0o
dmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2ODIsNiArMTY5Myw4IEBAIHZvaWQgSW50ZXJuYWxz
OjpzZXRFbmFibGVXZWJSVENFbmNyeXB0aW9uKGJvb2wgdmFsdWUpCiAjaWYgVVNFKExJQldFQlJU
QykKICAgICBpZiAoYXV0byogcGFnZSA9IGNvbnRleHREb2N1bWVudCgpLT5wYWdlKCkpCiAgICAg
ICAgIHBhZ2UtPnNldHRpbmdzKCkuc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQodmFsdWUpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTIsNiAr
MTcwNSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRVc2VEVExTMTAoYm9vbCB1c2VEVExTMTApCiAg
ICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwog
ICAgIGRvY3VtZW50LT5wYWdlKCktPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0VXNlRFRMUzEwKHVz
ZURUTFMxMCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1c2VEVExTMTApOwogI2VuZGlmCiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNtYWtlIGIvU291cmNl
L2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKaW5kZXggOWQ5N2E0YjUwY2IwZjk4MGY1Yjg0MDU3
YzJiYWVlODk5Nzk5ZGY2Ni4uNDg2MjU1N2E5OWIzNTkyZTAwMTllNzZiMjhhZTU1MWFjZDg5NDVm
MiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKKysrIGIvU291
cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKQEAgLTI2LDYgKzI2LDkgQEAKICMgIGdzdHJl
YW1lci12aWRlbzogICAgICBHU1RSRUFNRVJfVklERU9fSU5DTFVERV9ESVJTIGFuZCBHU1RSRUFN
RVJfVklERU9fTElCUkFSSUVTCiAjICBnc3RyZWFtZXItY29kZWNwYXJzZXI6R1NUUkVBTUVSX0NP
REVDUEFSU0VSU19JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfTElCUkFS
SUVTCiAjICBnc3RyZWFtZXItZnVsbDogICAgICAgR1NUUkVBTUVSX0ZVTExfSU5DTFVERV9ESVJT
IGFuZCBHU1RSRUFNRVJfRlVMTF9MSUJSQVJJRVMKKyMgIGdzdHJlYW1lci1ydHA6ICAgICAgICBH
U1RSRUFNRVJfUlRQX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1JUUF9MSUJSQVJJRVMKKyMg
IGdzdHJlYW1lci1zZHA6ICAgICAgICBHU1RSRUFNRVJfU0RQX0lOQ0xVREVfRElSUyBhbmQgR1NU
UkVBTUVSX1NEUF9MSUJSQVJJRVMKKyMgIGdzdHJlYW1lci13ZWJydGM6ICAgICBHU1RSRUFNRVJf
V0VCUlRDX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1dFQlJUQ19MSUJSQVJJRVMKICMKICMg
Q29weXJpZ2h0IChDKSAyMDEyIFJhcGhhZWwgS3VibyBkYSBDb3N0YSA8cmFrdWNvQHdlYmtpdC5v
cmc+CiAjCkBAIC0xMDYsNiArMTA5LDkgQEAgRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJF
QU1FUl9QQlVUSUxTIGdzdHJlYW1lci1wYnV0aWxzLTEuMCBnc3RwYnV0aWxzLTEuMCkKIEZJTkRf
R1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVEFHIGdzdHJlYW1lci10YWctMS4wIGdzdHRh
Zy0xLjApCiBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX1ZJREVPIGdzdHJlYW1l
ci12aWRlby0xLjAgZ3N0dmlkZW8tMS4wKQogRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJF
QU1FUl9DT0RFQ1BBUlNFUlMgZ3N0cmVhbWVyLWNvZGVjcGFyc2Vycy0xLjAgZ3N0Y29kZWNwYXJz
ZXJzLTEuMCkKK0ZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfUlRQIGdzdHJlYW1l
ci1ydHAtMS4wIGdzdHJ0cC0xLjApCitGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVS
X1NEUCBnc3RyZWFtZXItc2RwLTEuMCBnc3RzZHAtMS4wKQorRklORF9HU1RSRUFNRVJfQ09NUE9O
RU5UKEdTVFJFQU1FUl9XRUJSVEMgZ3N0cmVhbWVyLXdlYnJ0Yy0xLjAgZ3N0d2VicnRjLTEuMCkK
IAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICMg
My4gUHJvY2VzcyB0aGUgQ09NUE9ORU5UUyBwYXNzZWQgdG8gRklORF9QQUNLQUdFCkBAIC0xNDgs
NCArMTU0LDYgQEAgbWFya19hc19hZHZhbmNlZCgKICAgICBHU1RSRUFNRVJfQ09ERUNQQVJTRVJT
X0xJQlJBUklFUwogICAgIEdTVFJFQU1FUl9GVUxMX0lOQ0xVREVfRElSUwogICAgIEdTVFJFQU1F
Ul9GVUxMX0xJQlJBUklFUworICAgIEdTVFJFQU1FUl9XRUJSVENfSU5DTFVERV9ESVJTCisgICAg
R1NUUkVBTUVSX1dFQlJUQ19MSUJSQVJJRVMKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9H
U3RyZWFtZXJDaGVja3MuY21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtl
CmluZGV4IDc3ZTk1ODQ1ZTk5MTNhNTk3OGRhZDEwY2ZjNDMwMDkzYjQzYzdhYTMuLmM4ZDBmYWZi
MjNmYjE4ZmM1OWI5MWUwY2UwNGMxNGVlNDU5YjI0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFr
ZS9HU3RyZWFtZXJDaGVja3MuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckNoZWNr
cy5jbWFrZQpAQCAtMjgsNiArMjgsMTAgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VC
X0FVRElPKQogICAgICAgICAgICAgICBsaXN0KEFQUEVORCBHU1RSRUFNRVJfQ09NUE9ORU5UUyBh
dWRpbyBmZnQpCiAgICAgICAgICAgZW5kaWYgKCkKIAorICAgICAgICAgIGlmIChVU0VfR1NUUkVB
TUVSX1dFQl9SVEMpCisgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEdTVFJFQU1FUl9DT01QT05F
TlRTIHdlYnJ0YykKKyAgICAgICAgICBlbmRpZiAoKQorCiAgICAgICAgICAgZmluZF9wYWNrYWdl
KEdTdHJlYW1lciAxLjE0LjAgUkVRVUlSRUQgQ09NUE9ORU5UUyAke0dTVFJFQU1FUl9DT01QT05F
TlRTfSkKIAogICAgICAgICAgIGlmIChFTkFCTEVfV0VCX0FVRElPKQpAQCAtNDksMTEgKzUzLDIx
IEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgICBpZiAo
VVNFX0dTVFJFQU1FUl9HTCBBTkQgTk9UIFBDX0dTVFJFQU1FUl9HTF9GT1VORCkKICAgICAgICAg
ICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiR1N0cmVhbWVyR0wgaXMgbmVlZGVkIGZvciBVU0Vf
R1NUUkVBTUVSX0dMLiIpCiAgICAgICAgICAgZW5kaWYgKCkKKworICAgICAgICAgIGlmIChVU0Vf
R1NUUkVBTUVSX1dFQlJUQyBBTkQgKFBDX0dTVFJFQU1FUl9WRVJTSU9OIFZFUlNJT05fTEVTUyAi
MS4yMCIgT1IgTk9UIFBDX0dTVFJFQU1FUl9XRUJSVENfRk9VTkQpKQorICAgICAgICAgICAgICBt
ZXNzYWdlKEZBVEFMX0VSUk9SICJHU3RyZWFtZXJXZWJSVEMgPj0gMS4yMCBpcyBuZWVkZWQgZm9y
IFVTRV9HU1RSRUFNRVJfV0VCUlRDLiIpCisgICAgICAgICAgZW5kaWYgKCkKICAgICAgIGVuZGlm
ICgpCiBlbmRpZiAoKQogCiBpZiAoRU5BQkxFX01FRElBX1NUUkVBTSBBTkQgRU5BQkxFX1dFQl9S
VEMpCi0gICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0xJQldFQlJUQyBUUlVFKQorICAg
IGlmIChVU0VfR1NUUkVBTUVSX1dFQlJUQykKKyAgICAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJ
TEQoVVNFX0xJQldFQlJUQyBGQUxTRSkKKworICAgICAgICBmaW5kX3BhY2thZ2UoT3BlblNTTCBS
RVFVSVJFRCkKKyAgICBlbHNlICgpCisgICAgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVT
RV9MSUJXRUJSVEMgVFJVRSkKKyAgICBlbmRpZiAoKQogZWxzZSAoKQogICAgIFNFVF9BTkRfRVhQ
T1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJSVEMgRkFMU0UpCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEv
U291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlIGIvU291cmNlL2NtYWtlL0dT
dHJlYW1lckRlZmluaXRpb25zLmNtYWtlCmluZGV4IDFmMWEyMTNjMjEwMTBkMzJhY2MxN2ZiOTFj
YjUyMGMxYmQyMzhlYWIuLjJmMzAwYTA3MDY0ODkxZjY3NmVjYWM1ZDJlYWZkN2NjODU2ODkyOTMg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQorKysg
Yi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UKQEAgLTEwLDMgKzEwLDQg
QEAgV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9GVUxMICJXaGV0aGVyIHRvIGVu
YWJsZSBzdXBwb3J0IGZvciBzdGF0aWMgR1MKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RS
RUFNRVJfTkFUSVZFX1ZJREVPICJUb2dnbGUgbmF0aXZlIHZpZGVvIHN1cHBvcnQgaW4gR1N0cmVh
bWVyIG1lZGlhIHBsYXllciIgUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0Vf
R1NUUkVBTUVSX05BVElWRV9BVURJTyAiVG9nZ2xlIG5hdGl2ZSBhdWRpbyBzdXBwb3J0IGluIEdT
dHJlYW1lciBtZWRpYSBwbGF5ZXIiIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZJTkUo
VVNFX0dTVFJFQU1FUl9URVhUX1NJTksgIlRvZ2dsZSB0ZXh0IHNpbmsgc3VwcG9ydCBpbiBHU3Ry
ZWFtZXIgbWVkaWEgcGxheWVyIiBQUklWQVRFIE9OKQorV0VCS0lUX09QVElPTl9ERUZJTkUoVVNF
X0dTVFJFQU1FUl9XRUJSVEMgIldoZXRoZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFdlYlJUQyIg
UFJJVkFURSBPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNp
ZXMuY21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlCmluZGV4
IGY0MmM3ZTcwNjk3N2JmMTZjOWYyOWJmM2RlMzA4YzVlOTY4MDI5OTYuLjA5YjZjMjVlOGQ1OTJk
NTg4NGU4OTQ2YmE2YWY1OGQyZmRiMTYxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9HU3Ry
ZWFtZXJEZXBlbmRlbmNpZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVu
ZGVuY2llcy5jbWFrZQpAQCAtMSwzICsxLDQgQEAKIFdFQktJVF9PUFRJT05fREVQRU5EKFVTRV9H
U1RSRUFNRVJfR0wgRU5BQkxFX1ZJREVPKQogV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX0dTVFJF
QU1FUl9NUEVHVFMgRU5BQkxFX1ZJREVPKQogV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX1dQRV9W
SURFT19QTEFORV9ESVNQTEFZX0RNQUJVRiBVU0VfR1NUUkVBTUVSX0dMKQorV0VCS0lUX09QVElP
Tl9ERVBFTkQoVVNFX0dTVFJFQU1FUl9XRUJSVEMgRU5BQkxFX1dFQl9SVEMpCmRpZmYgLS1naXQg
YS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODdiMGQ1NzhkOWFkYWI1
ZGY4NjI1YzA0ZDE3YTRkNmNiNTY1YzVlMS4uNzYzZmVmYjc3N2U0ZWM2NWMxMjg5ZGY2MGEwZTEz
MGZkMmMxMWE1MSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5n
ZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAyLTEyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5v
cm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBJbml0aWFsIGltcG9ydCBv
ZiB0aGUgR3N0V2ViUlRDIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTIzNjU0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgICogZmxhdHBhay9mbGF0cGFrdXRpbHMucHk6CisgICAgICAgIChXZWJr
aXRGbGF0cGFrLnJ1bl9pbl9zYW5kYm94KTogQWxsb3cgbGlibmljZSBkZWJ1ZyBsb2cgZW52aXJv
bm1lbnQgdmFyaWFibGUgaW4gcnVudGltZSBzYW5kYm94LgorCiAyMDIyLTAyLTA3ICBKb25hdGhh
biBCZWRhcmQgIDxqYmVkYXJkQGFwcGxlLmNvbT4KIAogICAgICAgICBbRVdTXSBUcmlnZ2VyIE1h
YyBidWlsZGVycyBvbiBwdWxsLXJlcXVlc3RzCmRpZmYgLS1naXQgYS9Ub29scy9mbGF0cGFrL2Zs
YXRwYWt1dGlscy5weSBiL1Rvb2xzL2ZsYXRwYWsvZmxhdHBha3V0aWxzLnB5CmluZGV4IDA3NTZi
MDllY2U1ZWZiYjFjYTdiNTlhMzJhNmI4Nzc0Y2NhNzNhNGQuLmFiNTdiNTM5NDNiZDhlNWI2YjMw
YTliNTYwMzU0MjA1MTQ3NTg4NWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZsYXRwYWsvZmxhdHBha3V0
aWxzLnB5CisrKyBiL1Rvb2xzL2ZsYXRwYWsvZmxhdHBha3V0aWxzLnB5CkBAIC04MzgsNiArODM4
LDcgQEAgY2xhc3MgV2Via2l0RmxhdHBhazoKICAgICAgICAgICAgICJNRVNBIiwKICAgICAgICAg
ICAgICJMSUJHTCIsCiAgICAgICAgICAgICAiUElQRVdJUkUiLAorICAgICAgICAgICAgIk5JQ0Ui
LAogICAgICAgICAgICAgIlJVU1QiLAogICAgICAgICAgICAgIlNDQ0FDSEUiLAogICAgICAgICAg
ICAgIlNQQSIsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0
cy9DaGFuZ2VMb2cKaW5kZXggNjU3MDdkYTE2YjZlZmM5NTlhZDI4NWY3M2ZiMzViNDBmMGQwM2Nk
Ny4uZjQ5YzE3NjEzYmEwM2IwMTZkOWZhNzExYWIwNThjNTM0MjljMGNkYSAxMDA2NDQKLS0tIGEv
TGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDE4IEBACisyMDIyLTAyLTEyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlh
LmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBJbml0aWFsIGltcG9ydCBvZiB0aGUgR3N0V2Vi
UlRDIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTIzNjU0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgICogcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zOiBGbGFnIG1vc3QgV2ViUlRDIGFz
IGZhaWxpbmcuIER1cmluZyB0aGlzIGZpcnN0IGRldmVsb3BtZW50CisgICAgICAgIGN5Y2xlIEkg
Zm9jdXNlZCBtb3N0bHkgb24gZml4aW5nIGNyYXNoZXMgYW5kIG9ubHkgZml4ZWQgYSBmZXcgZmFp
bHVyZXMuIFRoZSByZW1haW5pbmcgb25lcworICAgICAgICB3aWxsIGJlIGFkcmVzc2VkIGluIGZv
bGxvdy11cCBwYXRjaGVzLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQu
CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURl
c2NyaXB0aW9uLW9mZmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YWJsZS1leHBlY3RlZC50
eHQ6IEFkZGVkLgorCiAyMDIyLTAyLTE4ICBBbnRvaW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQu
b3JnPgogCiAgICAgICAgIFtmcmFtZS1yYXRlXSBbY3VzdG9tLWVmZmVjdF0gYWxsb3cgc2V0dGlu
ZyBmcmFtZVJhdGUgYXMgYW4gb3B0aW9uIHBhc3NlZCB0byBkb2N1bWVudC50aW1lbGluZS5hbmlt
YXRlKCkKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0
aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucwppbmRleCAy
YWZmZmRiMzhhNGIxZDc4NzhlMjE4YWU5NTYyMWQ2ZjgyZjVlM2ZjLi5jMmY4MzIyZTU2OThjNzEw
NWE3YzM0ZTNiZWY0YzE3OTQwYWE4MmEwIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9U
ZXN0RXhwZWN0YXRpb25zCkBAIC04NTcsNyArODU3LDcgQEAgd2Via2l0Lm9yZy9iLzIzMTgxMSBt
ZWRpYS92aWRlby1jb25jdXJyZW50LXBsYXliYWNrLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5v
cmcvYi8yMzE4MTEgbWVkaWEvdmlkZW8taW50ZXJydXB0aW9uLXdpdGgtcmVzdW1lLW5vdC1hbGxv
d2luZy1wbGF5Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvdmlk
ZW8tbXVsdGlwbGUtY29uY3VycmVudC1wbGF5YmFjay5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQu
b3JnL2IvMjMxODExIG1lZGlhL3dlYmF1ZGlvLWJhY2tncm91bmQtcGxheWJhY2suaHRtbCBbIEZh
aWx1cmUgXQotd2Via2l0Lm9yZy9iLzIzMTgxMSB3ZWJydGMvY29uY3VycmVudFZpZGVvUGxheWJh
Y2syLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzE4MTEgd2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvY29uY3VycmVudFZpZGVvUGxheWJhY2syLmh0bWwgWyBGYWlsdXJlIFRpbWVv
dXQgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS9tZWRpYS1zZXNzaW9uL2NhbGxBY3Rpb25I
YW5kbGVyLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvbWVkaWEt
c2Vzc2lvbi9wbGF5LWFmdGVyLXNlZWsuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzIz
MTgxMSBtZWRpYS9yZW1vdGUtY29udHJvbC1jb21tYW5kLWlzLXVzZXItZ2VzdHVyZS5odG1sIFsg
VGltZW91dCBdCkBAIC04NzAsMTAgKzg3MCwxMCBAQCB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlh
L3ZpZGVvLXN5c3RlbS1zbGVlcC5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMxODEx
IHdlYmF1ZGlvL2F1ZGlvY29udGV4dC1zdGF0ZS1pbnRlcnJ1cHRlZC5odG1sIFsgVGltZW91dCBd
CiB3ZWJraXQub3JnL2IvMjMxODExIHdlYmF1ZGlvL3N1c3BlbmQtY29udGV4dC13aGlsZS1pbnRl
cnJ1cHRlZC5odG1sIFsgVGltZW91dCBdCiAKKyMgcnZmYyByZWxhdGVkIGZhaWx1cmVzCiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3ZpZGVvLXJ2ZmMgWyBQYXNzIF0KIGZhc3QvbWVk
aWFzdHJlYW0vZ2V0VXNlck1lZGlhLXJ2ZmMuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiB3ZWJydGMv
cGVlckNvbm5lY3Rpb24tcnZmYy5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvY2FudmFzLXRvLXBl
ZXItY29ubmVjdGlvbi5odG1sIFsgRmFpbHVyZSBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3ZpZGVvLXJ2ZmMvcmVxdWVzdC12aWRlby1mcmFtZS1jYWxsYmFjay13ZWJydGMuaHR0
cHMuaHRtbCBbIFNraXAgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1y
dmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2stYmVmb3JlLXhyLXNlc3Npb24uaHR0cHMu
aHRtbCBbIFNraXAgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1ydmZj
L3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2stZHVyaW5nLXhyLXNlc3Npb24uaHR0cHMuaHRt
bCBbIFNraXAgXQpAQCAtODkxLDYgKzg5MSw5NSBAQCB3ZWJraXQub3JnL2IvMjM0MDg0IG1lZGlh
L3RyYWNrL2F1ZGlvLXRyYWNrLWNvbmZpZ3VyYXRpb24uaHRtbCBbIEZhaWx1cmUgXQogIyBiaXRy
YXRlIGVzdGltYXRpb24uCiB3ZWJraXQub3JnL2IvMjM0MDg0IG1lZGlhL3RyYWNrL3ZpZGVvLXRy
YWNrLWNvbmZpZ3VyYXRpb24uaHRtbCBbIEZhaWx1cmUgXQogCisjIERhdGFDaGFubmVsIEdzdFdl
YlJUQyBpbXBsZW1lbnRhdGlvbiBpbmNvbXBsZXRlCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy9kYXRhY2hhbm5lbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93ZWJy
dGMvdHJhbnNmZXItZGF0YWNoYW5uZWwtc2VydmljZS13b3JrZXIuaHR0cHMuaHRtbCBbIFNraXAg
XQorCisjIFRoZSBHc3RXZWJSVEMgYmFja2VuZCBkb2Vzbid0IHN1cHBvcnQgdHJhbnNmb3JtcyB5
ZXQuCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy9hdWRpb3ZpZGVvLXNjcmlw
dC10cmFuc2Zvcm0uaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93
ZWJydGMvdmlkZW8tc2NyaXB0LXRyYW5zZm9ybS1rZXlmcmFtZS1vbmx5Lmh0bWwgWyBTa2lwIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0cC93cHQvd2VicnRjL3ZpZGVvLXNjcmlwdC10cmFuc2Zv
cm0uaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBs
YXRmb3JtLXRlc3RzL3dlYnJ0Yy1lbmNvZGVkLXRyYW5zZm9ybS9zY3JpcHQtYXVkaW8tdHJhbnNm
b3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2NyaXB0LWNoYW5n
ZS10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1lbmNvZGVkLXRyYW5zZm9ybS9zY3Jp
cHQtbWV0YWRhdGEtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8y
MzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFu
c2Zvcm0vc2NyaXB0LXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJh
bnNmb3JtL3NjcmlwdC13cml0ZS10d2ljZS10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAgXQor
Cit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
YWRkSWNlQ2FuZGlkYXRlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1hZGRUcmFjay1yZXVzZS1zZW5kZXIuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLWhhdmUtbG9jYWwtb2ZmZXIuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLWxvY2FsLXBy
YW5zd2VyLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24taGF2ZS1yZW1vdGUtb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhh
dmUtcmVtb3RlLXByYW5zd2VyLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZh
c3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taWNlY2FuZGlkYXRlLWV2ZW50Lmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1pbnNwZWN0LWFuc3dlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24tbWVkaWEtc2V0dXAtY2FsbGJhY2tzLXNpbmdsZS1kaWFsb2cuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLW1lZGlhLXNldHVwLXNpbmdsZS1kaWFsb2cuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlh
LXNldHVwLXR3by1kaWFsb2dzLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZh
c3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcGFnZS1jYWNoZS5odG1sIFsgQ3Jhc2gg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LXJlbW90ZWx5LWFzc2lnbmVkLXRyYW5zY2VpdmVyLW1pZC5odG1sIFsgVGltZW91dCBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0TG9j
YWxEZXNjcmlwdGlvbi1vZmZlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc3RhdHNTZWxlY3Rvci5odG1sIFsg
RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vY2hhbmdlLXRy
YWNrcy1tZWRpYS1zdHJlYW0tYmVpbmctcGxheWVkLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgaHR0cC93cHQvd2VicnRjL3RoaXJkLXBhcnR5LWZyYW1lLWljZS1jYW5kaWRh
dGUtZmlsdGVyaW5nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZXh0ZW5zaW9ucy9SVENSdHBQYXJhbWV0
ZXJzLW1heEZyYW1lcmF0ZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWV4dGVuc2lvbnMvUlRDUnRwU3lu
Y2hyb25pemF0aW9uU291cmNlLWNhcHR1cmVUaW1lc3RhbXAuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1w
cmlvcml0eS9SVENSdHBQYXJhbWV0ZXJzLWVuY29kaW5ncy5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IGluc3BlY3Rvci9wYWdlL292ZXJyaWRlU2V0dGluZy1JQ0VDYW5kaWRh
dGVGaWx0ZXJpbmdFbmFibGVkLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1jYXBhYmlsaXRpZXMvZGVjb2Rp
bmdJbmZvLndlYnJ0Yy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtY2FwYWJpbGl0aWVzL2VuY29kaW5nSW5m
by53ZWJydGMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYWRk
VHJhbnNjZWl2ZXItdGhlbi1hZGRUcmFjay5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IHdlYnJ0Yy9hdWRpby1tdXRlZC1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IHdlYnJ0Yy9hdWRpby1wZWVyLWNvbm5lY3Rpb24tZzcyMi5odG1sIFsgRmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9hdWRpby1wZWVyLWNvbm5lY3Rpb24t
d2ViYXVkaW8uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVk
aW8tcmVwbGFjZS10cmFjay5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy9hdWRpby1zYW1wbGVyYXRlLWNoYW5nZS5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvYXVkaW8tdmlkZW8tZWxlbWVudC1wbGF5aW5nLmh0bWwgWyBUaW1lb3V0
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2NhbmRpZGF0ZS1zdGF0cy5odG1sIFsgRmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jYW52YXMtdG8tcGVlci1jb25uZWN0
aW9uLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2NhcHR1cmVD
YW52YXMtd2VicnRjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L2Nsb25lLWF1ZGlvLXRyYWNrLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL2Nsb3NpbmctcGVlcmNvbm5lY3Rpb24uaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvZGlyZWN0aW9uLWNoYW5nZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9kaXNhYmxlLWVuY3J5cHRpb24uaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZXBoZW1lcmFsLWNlcnRpZmljYXRlcy1hbmQt
Y25hbWVzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2ZpbHRl
cmluZy1pY2UtY2FuZGlkYXRlLWFmdGVyLXJlbG9hZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IHdlYnJ0Yy9oMjY0LXBhY2tldGl6YXRpb24tbW9kZS5odG1sIFsgVGltZW91
dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9saWJ3ZWJydGMvc2V0TG9jYWxEZXNjcmlw
dGlvbkNyYXNoLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL211
bHRpLXZpZGVvLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL25v
LXBvcnQtemVyby1pbi11cGQtY2FuZGlkYXRlcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tYXVkaW8tbXV0ZS5odG1sIFsgVGltZW91
dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tYXVkaW8tbXV0
ZTIuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25u
ZWN0aW9uLWF1ZGlvLXVubXV0ZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tY3JlYXRlTWVkaWFTdHJlYW1EZXN0aW5hdGlvbi5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24t
cmVtb3RlLWF1ZGlvLW11dGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvcGVlci1jb25uZWN0aW9uLXJlbW90ZS1hdWRpby1tdXRlMi5odG1sIFsgVGltZW91dCBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tdHJhY2stZW5kLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXJjb25uZWN0aW9u
LXBhZ2UtY2FjaGUtbG9uZy5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy9wZWVyY29ubmVjdGlvbi1wYWdlLWNhY2hlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL3JlY2VpdmVyLXRyYWNrLXNob3VsZC1zdGF5LWxpdmUtZXZlbi1p
Zi1yZWNlaXZlci1pcy1pbmFjdGl2ZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy9yZWxlYXNlLWFmdGVyLWdldHRpbmctdHJhY2suaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcmVtb3RlQXVkaW8tbmV2ZXItcGxheWVkLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3JlbW92ZS10cmFjay5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy91dGY4LXNkcC5odG1sIFsg
RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1hZGRUcmFuc2NlaXZl
ci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1hdXRv
cGxheS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1n
ZXRQYXJhbWV0ZXJzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3ZpZGVvLW1lZGlhc3RyZWFtdHJhY2stc3RhdHMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tbXV0ZS12cDguaHRtbCBbIFRpbWVvdXQgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tbXV0ZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1yZWNlaXZlcnMuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVwbGFjZS10cmFjay10by1udWxsLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlcGxhY2UtdHJh
Y2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tc3Rh
dHMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tdW5t
dXRlLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby12cDgt
dmlkZW9yYW5nZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92
aWRlby5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92cDgtdGhl
bi1oMjY0Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZwOS1z
dmMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdnA5Lmh0bWwg
WyBGYWlsdXJlIF0KKwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KICMgRW5kIG9m
IEdTdHJlYW1lci1yZWxhdGVkIGJ1Z3MKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
CkBAIC0xNDE2LDE0ICsxNTA1LDE0IEBAIHdlYmtpdC5vcmcvYi83OTIwMyB3ZWJraXQub3JnL2Iv
MTg2Njc4IGZhc3QvbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVuCiAKIGZhc3Qv
bWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLWFkZEV2ZW50TGlzdGVuZXIuaHRtbCBbIER1bXBKU0Nv
bnNvbGVMb2dJblN0ZEVyciBdCiAKLXdlYmtpdC5vcmcvYi8xOTEwMDYgd2VicnRjL3NpbXVsY2Fz
dC1oMjY0Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xOTEwMDYgd2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvc2ltdWxjYXN0LWgyNjQuaHRtbCBbIEZhaWx1cmUgVGltZW91dCBdCiAK
IHdlYmtpdC5vcmcvYi8xOTM2NDEgd2VicnRjL3ZpZGVvLXNldERpcmVjdGlvbi5odG1sIFsgRmFp
bHVyZSBQYXNzIF0KIAogd2Via2l0Lm9yZy9iLzE5NDYxMSBodHRwL3dwdC93ZWJydGMvZ2V0VXNl
ck1lZGlhLXByb2Nlc3NTd2FwcGluZy5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8y
MDEyNjcgWyBSZWxlYXNlIF0gd2VicnRjL3ZpZGVvLWgyNjQuaHRtbCBbIFRpbWVvdXQgRmFpbHVy
ZSBdCi13ZWJraXQub3JnL2IvMjIyNTg1IFsgRGVidWcgXSB3ZWJydGMvdmlkZW8taDI2NC5odG1s
IFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIyMjU4NSB3ZWJraXQub3JnL2IvMjM1ODg1IFsgRGVi
dWcgXSB3ZWJydGMvdmlkZW8taDI2NC5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCiAKIHdlYmtpdC5v
cmcvYi8yMTAyNzIgd2VicnRjL2RhdGFjaGFubmVsL211bHRpcGxlLWNvbm5lY3Rpb25zLmh0bWwg
WyBUaW1lb3V0IFBhc3MgXQogCkBAIC0xNDM0LDcgKzE1MjMsNyBAQCB3ZWJraXQub3JnL2IvMjE1
MDA3IFsgRGVidWcgXSB3ZWJydGMvaDI2NC1oaWdoLmh0bWwgWyBTbG93IEZhaWx1cmUgXQogCiB3
ZWJraXQub3JnL2IvMjE2NTM4IHdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2FyZS1o
MjY0LWJhc2VsaW5lLmh0bWwgWyBTbG93IEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2IvMjE2NzYz
IHdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2FyZS1oMjY0LWhpZ2guaHRtbCBbIENy
YXNoIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIxNjc2MyB3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2FyZS1oMjY0LWhpZ2guaHRtbCBbIENyYXNo
IEZhaWx1cmUgVGltZW91dCBdCiAKIHdlYmtpdC5vcmcvYi8yMTgyMjEgd2VicnRjL3ZwOS1wcm9m
aWxlMi5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KIApAQCAtMjIyNSwxMyArMjMxNCwxMyBAQCB3
ZWJraXQub3JnL2IvMTg2MTAwIGNzczMvY29sb3ItZmlsdGVycy9jb2xvci1maWx0ZXItY29sb3It
cHJvcGVydHktbGlzdC1pdGVtLmh0bQogd2Via2l0Lm9yZy9iLzE4NjEwMCBmYXN0L2hpZHBpL2Zp
bHRlcnMtdHVyYnVsZW5jZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2Iv
MTg3MDQ0IHdlYmFuaW1hdGlvbnMvb3BhY2l0eS1hbmltYXRpb24teWllbGRzLWNvbXBvc2l0aW5n
LXNwYW4uaHRtbCBbIEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy9kYXRh
Y2hhbm5lbC9tZG5zLWljZS1jYW5kaWRhdGVzLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcv
Yi8xODcwNjQgd2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGF0YWNoYW5uZWwvbWRucy1pY2Ut
Y2FuZGlkYXRlcy5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xODcwNjQg
d2VicnRjL3ZpZGVvLWFkZFRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xODcw
NjQgd2VicnRjL3ZpZGVvLWRpc2FibGVkLWJsYWNrLmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3Jn
L2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1yZW1vdGUtbXV0ZS5odG1sIFsgQ3Jhc2ggXQotd2Via2l0
Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcmVwbGFjZS1tdXRlZC10cmFjay5odG1sIFsgVGlt
ZW91dCBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3Zp
ZGVvLXJlcGxhY2UtbXV0ZWQtdHJhY2suaHRtbCBbIFRpbWVvdXQgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLWRpc2FibGVkLWJs
YWNrLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8xODcwNjQgd2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVtb3RlLW11dGUuaHRtbCBbIENyYXNoIEZhaWx1cmUg
XQogd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcm90YXRpb24uaHRtbCBbIEZhaWx1
cmUgXQotd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcm90YXRpb24tbm8tY3ZvLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xODcwNjQgd2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvdmlkZW8tcm90YXRpb24tbm8tY3ZvLmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KIHdlYmtp
dC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXdpdGgtZGF0YS1jaGFubmVsLmh0bWwgWyBGYWls
dXJlIF0KIHdlYmtpdC5vcmcvYi8xODcwNjQgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0
cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tZ2V0U3RhdHMuaHR0cHMuaHRtbCBbIEZhaWx1cmUg
UGFzcyBdCiAKQEAgLTI1MjYsNyArMjYxNSw3IEBAIG1lZGlhL3ZpZGVvLXJlbW90ZS1jb250cm9s
LXBsYXlwYXVzZS5odG1sIFsgU2tpcCBdCiAKIHdlYmtpdC5vcmcvYi8yMDcwNjIgaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtcmVwbGF5Lmh0
bWwgWyBGYWlsdXJlIFBhc3MgXQogCi13ZWJraXQub3JnL2IvMjI5MzQ2IHdlYnJ0Yy9tdWx0aS1h
dWRpby5odG1sIFsgVGltZW91dCBQYXNzIF0KK3dlYmtpdC5vcmcvYi8yMjkzNDYgd2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvbXVsdGktYXVkaW8uaHRtbCBbIFRpbWVvdXQgUGFzcyBGYWlsdXJl
IF0KIAogd2Via2l0Lm9yZy9iLzIyOTcxNSBbIERlYnVnIF0gZmFzdC9tZWRpYXN0cmVhbS9nZXRE
aXNwbGF5TWVkaWEtbWF4LWNvbnN0cmFpbnRzMy5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3Jn
L2IvMjI5NzE1IFsgRGVidWcgXSBmYXN0L21lZGlhc3RyZWFtL3NjcmVlbmNhcHR1cmUtdXNlci1n
ZXN0dXJlLmh0bWwgWyBUaW1lb3V0IF0KZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9u
LWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5jOTVhOWI2MTkwMDlhNzQzMmExMjkzNmE3YzZhODE4OTA4NGQyYzdmCi0tLSAvZGV2L251
bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLWxvY2FsRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMTkg
QEAKK1Rlc3RzIFJUQ1BlZXJDb25uZWN0aW9uIGxvY2FsRGVzY3JpcHRpb24uCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lv
bkRlc2NyaXB0aW9uKS50aGVuKHJlcXVlc3RTdWNjZWVkZWQxLCByZXF1ZXN0RmFpbGVkMSk7IGRp
ZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyByZXF1ZXN0U3VjY2VlZGVkIHdhcyBjYWxsZWQu
CitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKHJl
cXVlc3RTdWNjZWVkZWQyLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9u
LgorUEFTUyByZXF1ZXN0RmFpbGVkIHdhcyBjYWxsZWQuCitQQVNTIHBjLmxvY2FsRGVzY3JpcHRp
b24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24uc2RwIHNob3VsZCBi
ZSBsb2NhbC4gV2FzIHQ9MCAwCisuCitQQVNTIHBjLmxvY2FsRGVzY3JpcHRpb24udHlwZSBpcyAi
b2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSBsb2NhbC4gV2Fz
IHQ9MCAwCisuCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ1M2VjNWMyMTYw
ZDAzMjczYzE5ODFmOGVkOWZhMTgzODRmZDA3NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1v
dGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGVzdHMgUlRDUGVl
ckNvbm5lY3Rpb24gcmVtb3RlRGVzY3JpcHRpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbiku
dGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgcmVxdWVzdEZhaWxlZDEpOyBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdFN1Y2NlZWRlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5zZXRS
ZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRl
ZDIsIHJlcXVlc3RGYWlsZWQyKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHJlcXVl
c3RGYWlsZWQgd2FzIGNhbGxlZC4KK1BBU1MgcGMucmVtb3RlRGVzY3JpcHRpb24udHlwZSBpcyAi
b2ZmZXIiCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgcmVtb3RlLiBX
YXMgdD0wIDAKKy4KK1BBU1MgcGMucmVtb3RlRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitG
QUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgcmVtb3RlLiBXYXMgdD0wIDAK
Ky4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXItZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5m
Y2M0MTgxMGI4ZGUxOTFkZGVlNTlhMGVjNTljMzUxOTkxYmU3ZmJiCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDM5IEBACitUZXN0IFJUQ1BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uIGNhbGxl
ZCB3aXRoIGFuIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiBvZiB0eXBlICdvZmZlcicKKworT24gc3Vj
Y2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQg
YnkgIlRFU1QgQ09NUExFVEUiLgorCisKKyoqKiBDcmVhdGUgKHJlbW90ZSkgb2ZmZXIgd2l0aCBh
dWRpbyAocmVtb3RlT2ZmZXIxKQorKioqIERvbmUsIHN0YXJ0IHRlc3Rpbmcgd2l0aCByZW1vdGVP
ZmZlcjEKK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ3N0YWJsZScKK1BBU1MgcGMucmVtb3Rl
RGVzY3JpcHRpb24gaXMgbnVsbAorUEFTUyBwYy5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gaXMg
bnVsbAorUEFTUyBwYy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorCitQQVNTIHJl
bW90ZU9mZmVyMSBzZXQgYXMgcmVtb3RlIGRlc2NyaXB0aW9uCitQQVNTIHBjLnNpZ25hbGluZ1N0
YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hv
dWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
XS4KK0ZBSUwgcGMucGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uIHNob3VsZCBiZSBbb2JqZWN0IE9i
amVjdF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbl0uCitQQVNTIHBjLmN1cnJl
bnRSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK1BBU1MgcmVtb3RlT2ZmZXIxIHNldCBhcyBy
ZW1vdGUgZGVzY3JpcHRpb24gKGFnYWluKQorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAnaGF2
ZS1yZW1vdGUtb2ZmZXInCisKKyoqKiBUcnkgc2V0dGluZyBsb2NhbCBkZXNjcmlwdGlvbnMgd2l0
aCBiYWQgdHlwZXMgZm9yIHRoZSBjdXJyZW50IHN0YXRlCitQQVNTIHByb21pc2UgcGMuc2V0UmVt
b3RlRGVzY3JpcHRpb24oe3R5cGU6J2Fuc3dlcicsIHNkcDpyZW1vdGVPZmZlcjEuc2RwfSk7IHJl
amVjdGVkIHdpdGggT3BlcmF0aW9uRXJyb3I6IFVuYWJsZSB0byBhcHBseSBzZXNzaW9uIHJlbW90
ZSBkZXNjcmlwdGlvbgorUEFTUyBwcm9taXNlIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHt0eXBl
OidwcmFuc3dlcicsIHNkcDpyZW1vdGVPZmZlcjEuc2RwfSk7IHJlamVjdGVkIHdpdGggT3BlcmF0
aW9uRXJyb3I6IFVuYWJsZSB0byBhcHBseSBzZXNzaW9uIHJlbW90ZSBkZXNjcmlwdGlvbgorCisq
KiogQ3JlYXRlIChyZW1vdGUpIG9mZmVyIHdpdGggdmlkZW8gKHJlbW90ZU9mZmVyMikKKyoqKiBE
b25lLCBzdGFydCB0ZXN0aW5nIHdpdGggcmVtb3RlT2ZmZXIyCitQQVNTIHBjLnNpZ25hbGluZ1N0
YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKKworUEFTUyByZW1vdGVPZmZlcjIgc2V0IGFzIHJl
bW90ZSBkZXNjcmlwdGlvbgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1vdGUt
b2ZmZXInCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCBiZSBbb2JqZWN0IE9iamVj
dF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbl0uCitGQUlMIHBjLnBlbmRpbmdS
ZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUgW29iamVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBS
VENTZXNzaW9uRGVzY3JpcHRpb25dLgorUEFTUyBwYy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24g
aXMgbnVsbAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YWJsZS1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc3RhYmxlLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MDE2NmRjYTU2M2VjZTQ3ZjQ4YzA3MjJjYzA4N2EzZTJm
OTY2YzRlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YWJsZS1leHBlY3RlZC50eHQKQEAgLTAs
MCArMSw1MSBAQAorVGVzdHMgUlRDUGVlckNvbm5lY3Rpb24gaW4gc3RhYmxlIHN0YXRlLgorCitP
biBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xs
b3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAi
c3RhYmxlIgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbiku
dGhlbihmaW5pc2hJZlN1Y2NlZWRlZCwgcmVxdWVzdEZhaWxlZDEpOyBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4KK1BBU1Mgc2V0TG9jYWxEZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVh
c29uLm5hbWUgc2hvdWxkIGJlIEludmFsaWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIE9w
ZXJhdGlvbkVycm9yLgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBl
eGNlcHRpb24uIFdhcyBudWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhy
b3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0
YWJsZSIKK1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRo
ZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQyKTsgZGlkIG5vdCB0aHJvdyBleGNl
cHRpb24uCitQQVNTIHNldExvY2FsRGVzY3JpcHRpb24gZmFpbGVkLgorRkFJTCBlcnJvclJlYXNv
bi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9uRXJyb3IuIFdhcyBPcGVy
YXRpb25FcnJvci4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhj
ZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIHRocm93
IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFi
bGUiCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhl
bihmaW5pc2hJZlN1Y2NlZWRlZCwgcmVxdWVzdEZhaWxlZDMpOyBkaWQgbm90IHRocm93IGV4Y2Vw
dGlvbi4KK1BBU1Mgc2V0UmVtb3RlRGVzY3JpcHRpb24gZmFpbGVkLgorRkFJTCBlcnJvclJlYXNv
bi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9uRXJyb3IuIFdhcyBPcGVy
YXRpb25FcnJvci4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhj
ZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIHRocm93
IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFi
bGUiCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhl
bihmaW5pc2hJZlN1Y2NlZWRlZCwgcmVxdWVzdEZhaWxlZDQpOyBkaWQgbm90IHRocm93IGV4Y2Vw
dGlvbi4KK1BBU1Mgc2V0UmVtb3RlRGVzY3JpcHRpb24gZmFpbGVkLgorRkFJTCBlcnJvclJlYXNv
bi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9uRXJyb3IuIFdhcyBPcGVy
YXRpb25FcnJvci4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhj
ZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIHRocm93
IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFi
bGUiCitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVu
KHJlcXVlc3RTdWNjZWVkZWQxLCBmaW5pc2hJZkZhaWxlZCk7IGRpZCBub3QgdGhyb3cgZXhjZXB0
aW9uLgorUEFTUyBzZXRMb2NhbERlc2NyaXB0aW9uIHN1Y2NlZWRlZC4KK1BBU1MgcGMubG9jYWxE
ZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbi5zZHAg
c2hvdWxkIGJlIGxvY2FsLiBXYXMgdD0wIDAKKy4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24g
c2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0
YXRlIGlzICJoYXZlLWxvY2FsLW9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3Vs
ZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlv
biBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5n
U3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRl
c2NyaXB0aW9uKS50aGVuKHJlcXVlc3RTdWNjZWVkZWQyLCBmaW5pc2hJZkZhaWxlZCk7IGRpZCBu
b3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRSZW1vdGVEZXNjcmlwdGlvbiBzdWNjZWVkZWQu
CitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2Fz
IG51bGwuCitQQVNTIHBjLnJlbW90ZURlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBw
Yy5yZW1vdGVEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIHJlbW90ZS4gV2FzIHQ9MCAwCisuCitQ
QVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJoYXZlLXJlbW90ZS1vZmZlciIKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9DaGFu
Z2VMb2cgYi9DaGFuZ2VMb2cKaW5kZXggYzY2ZTVkMDRkYWY1NzE4OGE5NzcyOTJjOTgxMzM5ZTI1
Yzc5MDBlZS4uMmI4OWI2YTAzZWE0NGJhNTJkZjBjOGMwMDkyM2YzOWFmZmM1OWJjZSAxMDA2NDQK
LS0tIGEvQ2hhbmdlTG9nCisrKyBiL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE3IEBACisyMDIyLTAy
LTEyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBb
R1N0cmVhbWVyXSBJbml0aWFsIGltcG9ydCBvZiB0aGUgR3N0V2ViUlRDIGJhY2tlbmQKKyAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU0MAorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEVuYWJsZSBHc3RXZWJS
VEMgYnkgZGVmYXVsdCBpZiBhIHJlY2VudC1lbm91Z2ggKD49IDEuMjApIHZlcnNpb24gaXMgYXZh
aWxhYmxlLgorCisgICAgICAgICogU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2U6Cisg
ICAgICAgICogU291cmNlL2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZToKKyAgICAgICAgKiBT
b3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2U6CisgICAgICAgICogU291cmNl
L2NtYWtlL0dTdHJlYW1lckRlcGVuZGVuY2llcy5jbWFrZToKKwogMjAyMi0wMi0xNyAgQ29tbWl0
IFF1ZXVlICA8Y29tbWl0LXF1ZXVlQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVW5yZXZpZXdlZCwg
cmV2ZXJ0aW5nIHIyODk5NDkuCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>452634</attachid>
            <date>2022-02-19 03:12:26 -0800</date>
            <delta_ts>2022-02-26 01:36:27 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220219031224.patch</filename>
            <type>text/plain</type>
            <size>327627</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwMjAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDBiOGQ4YTE1ZWQxZjg3MDc2NDI2ZWUz
OTRhMGMwMzAyOGYzMGEwZTUuLjBiZjAzM2I0YWRiNWMzY2NmNDQ3ZjU2ZmFiOGY4MzUxZDdjMzQx
MjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAyLTE4ICBEZXZpbiBSb3Vzc28gIDxkcm91
c3NvQGFwcGxlLmNvbT4KIAogICAgICAgICBbaU9TXSBTYWZhcmkgY2FuIHNvbWV0aW1lcyBoYW5n
IHdoaWxlIHByaW50aW5nIGR1ZSB0byBzeW5jIElQQwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGZjMDliYWY2OThh
OWY1MTc3OWI5YzliMTVlZmM0NTQ1ZDk2ZmFjYmIuLmRkYjY4NWMwMWEyNmJiYTkwYWNhM2IzZjM2
NzE0YzQ1MzRkMGRlNTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNzQgQEAKKzIwMjItMDItMTIg
IFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3Ry
ZWFtZXJdIEluaXRpYWwgaW1wb3J0IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCBHc3RXZWJSVEMg
YmFja2VuZC4gQSBsb3Qgb2YgZmVhdHVyZXMgdW5pbXBsZW1lbnRlZCBzdGlsbCwgYnV0IHdlIHdp
bGwgaW5jcmVtZW50YWxseQorICAgICAgICBpbXByb3ZlIHRoZSBsYXlvdXQgdGVzdCBjb3ZlcmFn
ZSBpbiBmb2xsb3ctdXAgcGF0Y2hlcy4gTW9zdCBub3RhYmxlIHNob3J0LWNvbWluZ3MgY3VycmVu
dGx5OgorCisgICAgICAgIC0gRGF0YUNoYW5uZWwgc3VwcG9ydCBpcyBpbmNvbXBsZXRlIChidWcg
MjM1ODc5KQorICAgICAgICAtIE5ldHdvcmsgdHJhZmZpYyBub3Qgcm91dGVkIHRocm91Z2ggTmV0
d29yayBwcm9jZXNzIHlldAorICAgICAgICAtIFN0YXRzIHN1cHBvcnQgaW5jb21wbGV0ZQorICAg
ICAgICAtIERUTUYgc3VwcG9ydCB1bmltcGxlbWVudGVkCisgICAgICAgIC0gSUNFIHJlc3RhcnRz
IG5vdCBzdXBwb3J0ZWQgeWV0CisgICAgICAgIC0gUmUtbmVnb3RpYXRpb24gdW5saWtlbHkgdG8g
d29yaworICAgICAgICAtIFNpbXVsY2FzdCBub3QgaGFuZGxlZCB5ZXQKKyAgICAgICAgLSBCYWxh
bmNlZCBidW5kbGUgbm90IHN1cHBvcnRlZAorICAgICAgICAtIFJUWCBhbmQgRkVDIHVuLXRlc3Rl
ZCwgYnV0IHNob3VsZG4ndCBiZSBoYXJkIHRvIGZpeAorCisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9NZWRpYURldmljZXMuY3BwOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
UGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0
aW9uQmFja2VuZDo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENQZWVy
Q29ubmVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6ZnJvbVJUQ0RhdGFDaGFubmVsSW5p
dCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNoYW5u
ZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6
OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJEYXRhQ2hhbm5lbEhhbmRsZXI6On5HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZXRDbGllbnQpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kU3RyaW5n
RGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnNl
bmRSYXdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxl
cjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
OjpjaGVja1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcjo6cmVhZHlTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0
YUNoYW5uZWxIYW5kbGVyOjpvbk1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlU3RyaW5nKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25FcnJvcik6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uQnVmZmVyZWRBbW91bnRMb3cpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpwb3N0VGFzayk6
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNo
YW5uZWxIYW5kbGVyLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVyRHRsc1Ry
YW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQ6On5HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0QmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0
ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQ6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1Ry
YW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaDogQWRkZWQuCisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNw
b3J0QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJh
bnNwb3J0QmFja2VuZDo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVySWNlVHJhbnNw
b3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNr
ZW5kOjppY2VUcmFuc3BvcnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lcklj
ZVRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OmdhdGhlcmluZ1N0
YXRlQ2hhbmdlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmluaXRp
YWxpemVQaXBlbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
Ojp+R1N0cmVhbWVyTWVkaWFFbmRwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50Ojp0ZWFyZG93blBpcGVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6ZGlzcG9zZUVsZW1lbnRDaGFpbik6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRDb25maWd1cmF0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlc3RhcnRJY2UpOgorICAgICAgICAo
V2ViQ29yZTo6ZmV0Y2hEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmZXRjaFNpZ25h
bGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4p
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9TZXRMb2NhbERl
c2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNl
dFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmRvU2V0UmVtb3RlRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6U2V0RGVzY3JpcHRpb25DYWxsRGF0YTo6U2V0RGVzY3JpcHRpb25DYWxsRGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXREZXNjcmlwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9yZVJlbW90ZU1MaW5l
SW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb25maWd1
cmVBbmRMaW5rU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OnJlcXVlc3RQYWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6YWRkVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
cmVtb3ZlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
ZG9DcmVhdGVPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
Ojpkb0NyZWF0ZUFuc3dlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50Ojppbml0aWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpnZXRTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpt
ZWRpYVN0cmVhbUZyb21SVENTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6YWRkUmVtb3RlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVJlbW90ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYW5zY2VpdmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNvdXJjZUZvclRy
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldFNlbmRl
clNvdXJjZUZyb21UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50Ojp0cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZEljZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbCk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkRhdGFDaGFubmVsKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6b25OZWdvdGlhdGlvbk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUNvbm5lY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VHYXRoZXJpbmdDaGFuZ2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDYW5kaWRhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlU2Vzc2lvbkRl
c2NyaXB0aW9uU3VjY2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbkZhaWxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb2xsZWN0VHJhbnNjZWl2ZXJzKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZyk6
CisgICAgICAgIChXZWJDb3JlOjpSVENTdGF0c0xvZ2dlcjo6UlRDU3RhdHNMb2dnZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI6OnRvSlNPTlN0cmluZyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpwcm9jZXNzU3RhdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25TdGF0c0RlbGl2ZXJlZCk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdGFydExvZ2dpbmdT
dGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wTG9n
Z2luZ1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Omxv
Z0NoYW5uZWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6c3RhdHNMb2dJbnRlcnZhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKToKKyAgICAgICAg
KFdURjo6TG9nQXJndW1lbnQ8V2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI+Ojp0b1N0cmluZyk6Cisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRw
b2ludC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppc1N0
b3BwZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
aXNOZWdvdGlhdGlvbk5lZWRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpwaXBlbGluZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQp
OgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZWNlaXZlckNhcGFi
aWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRl
ckNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnN1c3BlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN1bWUpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN0YXJ0SWNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0Q29u
ZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OmdldFN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmJhY2tlbmRGcm9tUlRQU2VuZGVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9T
ZXRMb2NhbERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlT2ZmZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0ZUFuc3dl
cik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNs
b3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
ZG9TdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6ZG9BZGRJY2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVSZWNlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpmaW5kRXhpc3RpbmdTZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFjayk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2VpdmVyRnJvbVRy
YWNrT3JLaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6YWRkVHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2spOgorICAgICAgICAoV2Vi
Q29yZTo6YmFja2VuZEZyb21SVFBUcmFuc2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmV4aXN0aW5nVHJhbnNjZWl2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpuZXdSZW1vdGVUcmFu
c2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmNvbGxlY3RUcmFuc2NlaXZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpyZW1vdmVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVv
U291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjppc05lZ290aWF0aW9uTmVlZGVkIGNvbnN0
KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRDb250
cmlidXRpbmdTb3VyY2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJl
Y2VpdmVyQmFja2VuZDo6Z2V0U3luY2hyb25pemF0aW9uU291cmNlcyBjb25zdCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmNyZWF0ZVNvdXJjZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OnJ0Y1J0cFRyYW5z
Zm9ybUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNr
ZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJh
bnNmb3JtQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFUeXBlRnJv
bVJlY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNm
b3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJl
YW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3Jt
QmFja2VuZDo6cmVxdWVzdEtleUZyYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaDogQWRkZWQu
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlVHJhY2tTb3Vy
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c3RhcnRT
b3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c3Rv
cFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpy
ZXBsYWNlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZDo6Z2V0UGFyYW1ldGVycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kOjpzZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ6OmNyZWF0ZURUTUZCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c2V0TWVkaWFTdHJlYW1J
ZHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6ZHRsc1Ry
YW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFUeXBlRnJvbVNlbmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFt
ZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6On5HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1C
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJh
Y2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSk6Cisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVy
VHJhbnNmb3JtQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6R1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6Y3JlYXRlU2VuZGVyQmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmRpcmVj
dGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJh
Y2tlbmQ6OmN1cnJlbnREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXREaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjptaWQpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzdG9wKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c3RvcHBlZCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNldENvZGVjUHJl
ZmVyZW5jZXMpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpzZXRJ
bnB1dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJh
Y2tlbmQ6OmNsZWFyVHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6cHJvY2Vzc1RyYW5zZm9ybWVkRnJhbWUp
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRy
YW5zZm9ybUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBU
cmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFj
a2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9SVENTY3RwVHJhbnNwb3J0U3Rh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OkdT
dHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OmR0bHNUcmFu
c3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRC
YWNrZW5kOjpyZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3Rw
VHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2Vu
ZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJTdGF0c0NvbGxlY3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJU
Q1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENSVFBTdHJlYW1TdGF0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpmaWxsUlRDQ29kZWNTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxs
SW5ib3VuZFJUUFN0cmVhbVN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxPdXRib3VuZFJU
UFN0cmVhbVN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENQZWVyQ29ubmVjdGlvblN0
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENUcmFuc3BvcnRTdGF0cyk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsUmVwb3J0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbGJh
Y2tIb2xkZXI6OkNhbGxiYWNrSG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclN0
YXRzQ29sbGVjdG9yOjpnZXRTdGF0cyk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpzZXRFbGVtZW50KToKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6
dG9SVENJY2VQcm90b2NvbCk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZVRjcENhbmRpZGF0
ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VDYW5kaWRhdGVUeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvUlRDRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJSVENCaXRS
YXRlUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVJUQ0VuY29kaW5nUGFyYW1ldGVy
cyk6CisgICAgICAgIChXZWJDb3JlOjpmcm9tV2ViUlRDQml0UmF0ZVByaW9yaXR5KToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvUlRDUnRwU2VuZFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlRGVidWdD
YXRlZ29yeUluaXRpYWxpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSWNlQ2FuZGlkYXRl
U0RQKToKKyAgICAgICAgKFdlYkNvcmU6Ong1MDlTZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29y
ZTo6cHJpdmF0ZUtleVNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZUNlcnRp
ZmljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNkcE1lZGlhSGFzQXR0cmlidXRlS2V5KToKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGls
cy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rp
b24pOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZSk6CisgICAgICAgIChX
ZWJDb3JlOjpmcm9tU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjp0
b1NpZ25hbGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlQ29ubmVjdGlvblN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDRHRsc1RyYW5zcG9ydFN0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvUlRDSWNlVHJhbnNwb3J0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
dG9SVENJY2VHYXRoZXJpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpidW5kbGVQb2xpY3lG
cm9tQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppY2VUcmFuc3BvcnRQb2xpY3lG
cm9tQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0Vycm9yRGV0YWlsVHlw
ZSk6CisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OkF1ZGlvU291cmNl
UHJvdmlkZXJHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRl
ckdTdHJlYW1lcjo6fkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6aGFuZGxlTmV3RGVpbnRlcmxlYXZl
UGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HUmVmUHRyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAg
ICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4pOgorICAgICAgICAoV1RGOjpk
ZXJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxH
c3RXZWJSVENSVFBTZW5kZXI+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ1JU
UFNlbmRlcj4pOgorICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVy
Pik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4pOgor
ICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPik6CisgICAgICAgIChX
VEY6OmRlcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4pOgorICAgICAgICAoV1RGOjpyZWZH
UHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdz
dFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENJ
Q0VUcmFuc3BvcnQ+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5z
cG9ydD4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0
cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1l
ckNvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYXBzTWVkaWFUeXBlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGVBdWRpb1Nv
dXJjZVByb3ZpZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJB
dWRpb0NhcHR1cmVyOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OmNyZWF0ZUNvbnZlcnRlcik6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2Vu
ZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tl
bmQ6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lckRUTUZTZW5kZXJCYWNrZW5kOjp+R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmNhbkluc2VydERUTUYp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OnBsYXlUb25l
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjp0b25lcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6ZHVy
YXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tl
bmQ6OmludGVyVG9uZUdhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1G
U2VuZGVyQmFja2VuZDo6b25Ub25lUGxheWVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFt
U291cmNlLmNwcDoKKyAgICAgICAgKHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkVHJhY2spOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29k
ZXIuY3BwOgorICAgICAgICAod2Via2l0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2NsYXNzX2luaXQp
OgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6
OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVzKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6
c2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
R1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
cjo6Y3JlYXRlKToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OlJl
YWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRp
bWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6bG9ja1ZhbHZlIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OnJlbGVhc2VWYWx2ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpy
ZWdpc3RlckNsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpiaW4pOgorICAgICAgICAoV2Vi
Q29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c3RvcFByb2R1Y2luZ0RhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpj
YXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyOjpzZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzRGlkQ2hhbmdlKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1w
bGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgIChp
c1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2lu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpSZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjp+UmVhbHRpbWVPdXRnb2luZ01lZGlhU291
cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6c2V0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzdG9wKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c291cmNlTXV0ZWRDaGFu
Z2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6c291cmNlRW5hYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjppbml0aWFsaXplRnJvbVRyYWNrKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bGluayk6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6
OnNldFNpbmtQYWQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXI6OmFsbG93ZWRDYXBzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29p
bmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6cGFkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2VuZGVyIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6YmluIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6c2V0UGF5bG9hZFR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgICogdGVzdGluZy9JbnRlcm5h
bHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVudFN0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0V2ViUlRDSDI2NVN1cHBvcnQp
OgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRXZWJSVENWUDlTdXBwb3J0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0V2ViUlRDVlA5VlRCU3VwcG9ydCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldEVuYWJsZVdlYlJUQ0VuY3J5cHRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRVc2VEVExTMTApOgorCiAyMDIyLTAyLTE5ICBB
bGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIGxheW91
dEJvdW5kc0ZvcklubGluZUJveCBzaG91bGQgcmVhZCBsYXlvdXRCb3VuZHNQcmltYXJ5TWV0cmlj
c0ZvcklubGluZUJveApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2Vz
L1dlYlByZWZlcmVuY2VzLnlhbWwgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2Vi
UHJlZmVyZW5jZXMueWFtbAppbmRleCA0YWE2N2EzMTI5ODA0ZGE5ZmY4ZTZhNDQ5NDU5NmM0NjYx
ZmY5ZTE2Li5iNjZjNzQwZTgwNzJjYzU5YzViYTI3YzVlZTQzMzY0MTZmOWYxY2ZlIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFtbAor
KysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFtbApA
QCAtMTcyMiw3ICsxNzIyLDkgQEAgUGVlckNvbm5lY3Rpb25FbmFibGVkOgogICAgIFdlYktpdExl
Z2FjeToKICAgICAgIGRlZmF1bHQ6IHRydWUKICAgICBXZWJLaXQ6Ci0gICAgICBkZWZhdWx0OiBX
ZWJDb3JlOjpMaWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxlKCkKKyAgICAgICJVU0Uo
TElCV0VCUlRDKSI6IFdlYkNvcmU6OkxpYldlYlJUQ1Byb3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUo
KQorICAgICAgIlVTRShHU1RSRUFNRVJfV0VCUlRDKSI6IHRydWUKKyAgICAgIGRlZmF1bHQ6IGZh
bHNlCiAgICAgV2ViQ29yZToKICAgICAgIGRlZmF1bHQ6IHRydWUKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlh
bWwgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmlt
ZW50YWwueWFtbAppbmRleCAzNzYzODU4MjgwMDBiNTczMTlhNjFmNTQyMDAyYmRjYzZkM2Y0YmQ3
Li41ZTA1NWUyOWJlYzM5MjM2Njc0YjVlZDdjZjZjMjlkZTJkOGNjNmIxIDEwMDY0NAotLS0gYS9T
b3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwu
eWFtbAorKysgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNF
eHBlcmltZW50YWwueWFtbApAQCAtMTY5NCw5ICsxNjk0LDExIEBAIFdlYlJUQ0VuY29kZWRUcmFu
c2Zvcm1FbmFibGVkOgogICAgIFdlYktpdExlZ2FjeToKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAg
ICAgV2ViS2l0OgotICAgICAgZGVmYXVsdDogdHJ1ZQorICAgICAgIlVTRShMSUJXRUJSVEMpIjog
dHJ1ZQorICAgICAgZGVmYXVsdDogZmFsc2UKICAgICBXZWJDb3JlOgotICAgICAgZGVmYXVsdDog
dHJ1ZQorICAgICAgIlVTRShMSUJXRUJSVEMpIjogdHJ1ZQorICAgICAgZGVmYXVsdDogZmFsc2UK
IAogIyBGSVhNRTogSXMgdGhpcyBpbXBsZW1lbnRlZCBmb3IgV2ViS2l0TGVnYWN5PyBJZiBub3Qs
IHRoaXMgc2hvdWxkIGJlIGV4Y2x1ZGVkIGZyb20gV2ViS2l0TGVnYWN5IGVudGlyZWx5LgogV2Vi
UlRDSDI2NExvd0xhdGVuY3lFbmNvZGVyRW5hYmxlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL2dsaWIvR1JlZlB0ci5jcHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuY3BwCmlu
ZGV4IDFiOWFkZTNmOTM2ZWU1NjRkMzgyYzA3ZWY5NjY1NzZhYjY2MTliNDEuLjkzMTJhM2U4OTRi
ZDhhMGQ3YTExYTZhNDVjY2JkMzY4NzNmOGM1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3Rm
L2dsaWIvR1JlZlB0ci5jcHAKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNwcApA
QCAtMjIzLDYgKzIyMywyMiBAQCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHVXJpKiBwdHIp
CiB9CiAjZW5kaWYKIAordGVtcGxhdGUgPD4KK0dBcnJheSogcmVmR1B0cihHQXJyYXkqIHB0cikK
K3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX2FycmF5X3JlZihwdHIpOworCisgICAgcmV0dXJu
IHB0cjsKK30KKwordGVtcGxhdGUgPD4KK3ZvaWQgZGVyZWZHUHRyKEdBcnJheSogcHRyKQorewor
ICAgIGlmIChwdHIpCisgICAgICAgIGdfYXJyYXlfdW5yZWYocHRyKTsKK30KKwogfSAvLyBuYW1l
c3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoR0xJQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
d3RmL2dsaWIvR1JlZlB0ci5oIGIvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgKaW5kZXgg
ZTcyMWZkNTVmNDJhYzNkNzZiNDAxNzYwZTBhMTliOTlmZTNlMGY4Yi4uNjY3MzYwNzg3YWM1ZjY0
OTYwYmUxZDU0NjJkZGU1OWQ3MzU1ZjZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xp
Yi9HUmVmUHRyLmgKKysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgKQEAgLTI1MCw2
ICsyNTAsOCBAQCB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgR0RhdGVUaW1lKiByZWZH
UHRyKEdEYXRlVGltZSogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGRlcmVmR1B0cihHRGF0ZVRpbWUqIHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZB
VEUgR0RCdXNOb2RlSW5mbyogcmVmR1B0cihHREJ1c05vZGVJbmZvKiBwdHIpOwogdGVtcGxhdGUg
PD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdEQnVzTm9kZUluZm8qIHB0cik7
Cit0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgR0FycmF5KiByZWZHUHRyKEdBcnJheSop
OwordGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdBcnJheSop
OwogCiAjaWYgSEFWRShHVVJJKQogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdVcmkq
IHJlZkdQdHIoR1VyaSopOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcAppbmRleCBkZmI5YmRh
YzU2NmI3OTY1YmFhY2ZlMGNmZWU3MDYxNDM4YjE5NWIyLi44Yzc0NGZjZDEzNzcwMDZmYmI5MDc2
NmViYjNiYzRjODRlOGRjY2JlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcApAQCAtMTgw
LDcgKzE4MCw3IEBAIHN0YXRpYyB2b2lkIGdhdGhlckRlY29kaW5nSW5mbyhEb2N1bWVudCYgZG9j
dW1lbnQsIE1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uJiYKICAgICBjb25maWd1cmF0aW9uLmNh
bkV4cG9zZVZQOSA9IGRvY3VtZW50LnNldHRpbmdzKCkudnA5RGVjb2RlckVuYWJsZWQoKTsKICNl
bmRpZgogCi0jaWYgRU5BQkxFKFdFQl9SVEMpCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShM
SUJXRUJSVEMpCiAgICAgaWYgKGNvbmZpZ3VyYXRpb24udHlwZSA9PSBNZWRpYURlY29kaW5nVHlw
ZTo6V2ViUlRDKSB7CiAgICAgICAgIGlmIChhdXRvKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKQog
ICAgICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5jcmVhdGVEZWNvZGluZ0NvbmZp
Z3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0aW9uKSwgV1RGTW92ZShkZWNvZGluZ0NhbGxiYWNr
KSk7CkBAIC0yMDAsNyArMjAwLDcgQEAgc3RhdGljIHZvaWQgZ2F0aGVyRW5jb2RpbmdJbmZvKERv
Y3VtZW50JiBkb2N1bWVudCwgTWVkaWFFbmNvZGluZ0NvbmZpZ3VyYXRpb24mJgogICAgICAgICBj
YWxsYmFjayhXVEZNb3ZlKHJlc3VsdCkpOwogICAgIH07CiAKLSNpZiBFTkFCTEUoV0VCX1JUQykK
KyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKExJQldFQlJUQykKICAgICBpZiAoY29uZmlndXJh
dGlvbi50eXBlID09IE1lZGlhRW5jb2RpbmdUeXBlOjpXZWJSVEMpIHsKICAgICAgICAgaWYgKGF1
dG8qIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5saWJXZWJSVENQ
cm92aWRlcigpLmNyZWF0ZUVuY29kaW5nQ29uZmlndXJhdGlvbihXVEZNb3ZlKGNvbmZpZ3VyYXRp
b24pLCBXVEZNb3ZlKGVuY29kaW5nQ2FsbGJhY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcAppbmRleCA1MDZmMzM3NGI3ZTZk
NzZkNTk4ZjQ5NTNkODQ5YzM4ZWFhYzcyN2U5Li43YjliNWI2NmRhNTE1MzI0ZTY2NmNmNGIxYmEz
ZjVjZDJmYWUwYmQwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL01lZGlhRGV2aWNlcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9NZWRpYURldmljZXMuY3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiRnJhbWUu
aCIKICNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTTWVkaWFE
ZXZpY2VJbmZvLmgiCisjaW5jbHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhVHJhY2tT
dXBwb3J0ZWRDb25zdHJhaW50cy5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5ncy5oIgogI2luY2x1ZGUgIlNldHRpbmdzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKaW5k
ZXggODZkNzU3Mzk5MmY0ZDViZDRjMzUzZGNiNjA5NzI2NGU5ODVkNTdlOC4uMGU3MDFiZmQ0N2U5
Mjg0YmExNzgxNjQxZDkyMjdhM2FmODU5ZDU3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApA
QCAtNTMsOSArNTMsMTQgQEAKICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKKyNpZiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2Vu
ZGlmCisKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotI2lmICFVU0UoTElCV0VCUlRDKQorI2lmICFV
U0UoTElCV0VCUlRDKSAmJiAhVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKIHN0YXRpYyBzdGQ6OnVu
aXF1ZV9wdHI8UGVlckNvbm5lY3Rpb25CYWNrZW5kPiBjcmVhdGVOb1BlZXJDb25uZWN0aW9uQmFj
a2VuZChSVENQZWVyQ29ubmVjdGlvbiYpCiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC00Mzcs
MTMgKzQ0MiwxOSBAQCB2b2lkIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2VuZXJhdGVDZXJ0aWZp
Y2F0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IENlcnRpZgogICAgICAgICBwcm9taXNlLnJl
amVjdChJbnZhbGlkU3RhdGVFcnJvcik7CiAgICAgICAgIHJldHVybjsKICAgICB9CisKICAgICBM
aWJXZWJSVENDZXJ0aWZpY2F0ZUdlbmVyYXRvcjo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZShkb2N1bWVu
dC5zZWN1cml0eU9yaWdpbigpLCBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLCBpbmZvLCBbcHJv
bWlzZSA9IFdURk1vdmUocHJvbWlzZSldKGF1dG8mJiByZXN1bHQpIG11dGFibGUgewogICAgICAg
ICBwcm9taXNlLnNldHRsZShXVEZNb3ZlKHJlc3VsdCkpOwogICAgIH0pOworI2VsaWYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisgICAgYXV0byBjZXJ0aWZpY2F0ZSA9IDo6V2ViQ29yZTo6Z2VuZXJh
dGVDZXJ0aWZpY2F0ZShkb2N1bWVudC5zZWN1cml0eU9yaWdpbigpLCBpbmZvKTsKKyAgICBpZiAo
Y2VydGlmaWNhdGUuaGFzX3ZhbHVlKCkpCisgICAgICAgIHByb21pc2UucmVzb2x2ZSgqY2VydGlm
aWNhdGUpOworICAgIGVsc2UKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoTm90U3VwcG9ydGVkRXJy
b3IpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZG9jdW1lbnQpOwotICAgIFVOVVNFRF9QQVJB
TShleHBpcmVzKTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7CisgICAgVU5VU0VEX1BBUkFNKGlu
Zm8pOwogICAgIHByb21pc2UucmVqZWN0KE5vdFN1cHBvcnRlZEVycm9yKTsKICNlbmRpZgogfQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLmNwcAppbmRleCA1YmRkZmVjN2U0ZGZjOWQ5YzAyOTljOWUyN2NhOWRjMjJkZjY0
MTA0Li45MGRlNjM5OTM0ZWQ2MWM1YzBiMTAxMmMwYWE1Mzk3ZGQwZDhiMzJhIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLmNwcApAQCAtOTUsNyArOTUsNyBAQCBFeGNlcHRpb25PcjxSZWY8UlRDUGVlckNvbm5lY3Rp
b24+PiBSVENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudAogICAgIGlm
ICghcGVlckNvbm5lY3Rpb24tPmlzQ2xvc2VkKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2Ug
PSBkb2N1bWVudC5wYWdlKCkpIHsKICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLT5yZWdpc3Rl
clRvQ29udHJvbGxlcihwYWdlLT5ydGNDb250cm9sbGVyKCkpOwotI2lmICFMT0dfRElTQUJMRUQg
fHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisjaWYgVVNFKExJQldFQlJUQykgJiYgKCFMT0dfRElT
QUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVEKQogICAgICAgICAgICAgaWYgKCFwYWdlLT5z
ZXNzaW9uSUQoKS5pc0VwaGVtZXJhbCgpKQogICAgICAgICAgICAgICAgIHBhZ2UtPmxpYldlYlJU
Q1Byb3ZpZGVyKCkuc2V0TG9nZ2luZ0xldmVsKExvZ1dlYlJUQy5sZXZlbCk7CiAjZW5kaWYKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjhhNmVkNjZhY2Q5NTczM2MwOTQ5ZmY3MDZhMjMzZjAxZWU1MDU3NWQKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsMzE0IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENV
dGlscy5oIgorI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNo
YW5uZWxFdmVudC5oIgorI2luY2x1ZGUgIlJUQ0Vycm9yLmgiCisjaW5jbHVkZSAiUlRDUHJpb3Jp
dHlUeXBlLmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCitHU1RfREVCVUdfQ0FU
RUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1Rf
Q0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0dVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6OmZyb21SVENEYXRhQ2hhbm5lbEluaXQoY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JiBv
cHRpb25zKQoreworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBpbml0KGdzdF9zdHJ1Y3R1
cmVfbmV3KCJvcHRpb25zIiwgInByb3RvY29sIiwgR19UWVBFX1NUUklORywgb3B0aW9ucy5wcm90
b2NvbC51dGY4KCkuZGF0YSgpLCBudWxscHRyKSk7CisKKyAgICBpZiAob3B0aW9ucy5vcmRlcmVk
KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAib3JkZXJlZCIsIEdfVFlQ
RV9CT09MRUFOLCAqb3B0aW9ucy5vcmRlcmVkLCBudWxscHRyKTsKKyAgICBpZiAob3B0aW9ucy5t
YXhQYWNrZXRMaWZlVGltZSkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwg
Im1heC1wYWNrZXQtbGlmZXRpbWUiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5tYXhQYWNrZXRMaWZl
VGltZSwgbnVsbHB0cik7CisgICAgaWYgKG9wdGlvbnMubWF4UmV0cmFuc21pdHMpCisgICAgICAg
IGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJtYXgtcmV0cmFuc21pdHMiLCBHX1RZUEVf
SU5ULCAqb3B0aW9ucy5tYXhSZXRyYW5zbWl0cywgbnVsbHB0cik7CisgICAgaWYgKG9wdGlvbnMu
bmVnb3RpYXRlZCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgIm5lZ290
aWF0ZWQiLCBHX1RZUEVfQk9PTEVBTiwgKm9wdGlvbnMubmVnb3RpYXRlZCwgbnVsbHB0cik7Cisg
ICAgaWYgKG9wdGlvbnMuaWQpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCks
ICJpZCIsIEdfVFlQRV9JTlQsICpvcHRpb25zLmlkLCBudWxscHRyKTsKKworICAgIEdzdFdlYlJU
Q1ByaW9yaXR5VHlwZSBwcmlvcml0eVR5cGU7CisgICAgc3dpdGNoIChvcHRpb25zLnByaW9yaXR5
KSB7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OlZlcnlMb3c6CisgICAgICAgIHByaW9yaXR5
VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9WRVJZX0xPVzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OkxvdzoKKyAgICAgICAgcHJpb3JpdHlUeXBlID0g
R1NUX1dFQlJUQ19QUklPUklUWV9UWVBFX0xPVzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBS
VENQcmlvcml0eVR5cGU6Ok1lZGl1bToKKyAgICAgICAgcHJpb3JpdHlUeXBlID0gR1NUX1dFQlJU
Q19QUklPUklUWV9UWVBFX01FRElVTTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSVENQcmlv
cml0eVR5cGU6OkhpZ2g6CisgICAgICAgIHByaW9yaXR5VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJ
VFlfVFlQRV9ISUdIOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZ3N0X3N0cnVjdHVyZV9z
ZXQoaW5pdC5nZXQoKSwgInByaW9yaXR5IiwgR1NUX1RZUEVfV0VCUlRDX1BSSU9SSVRZX1RZUEUs
IHByaW9yaXR5VHlwZSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gaW5pdDsKK30KKworUmVmPFJU
Q0RhdGFDaGFubmVsRXZlbnQ+IEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2hhbm5lbEV2
ZW50KERvY3VtZW50JiBkb2N1bWVudCwgR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4mJiBk
YXRhQ2hhbm5lbCkKK3sKKyAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IGxhYmVsOworICAgIEdVbmlx
dWVPdXRQdHI8Y2hhcj4gcHJvdG9jb2w7CisgICAgZ2Jvb2xlYW4gb3JkZXJlZCwgbmVnb3RpYXRl
ZDsKKyAgICBnaW50IG1heFBhY2tldExpZmVUaW1lLCBtYXhSZXRyYW5zbWl0cywgaWQ7CisgICAg
Z19vYmplY3RfZ2V0KGRhdGFDaGFubmVsLmdldCgpLCAib3JkZXJlZCIsICZvcmRlcmVkLCAibGFi
ZWwiLCAmbGFiZWwub3V0UHRyKCksCisgICAgICAgICJtYXgtcGFja2V0LWxpZmV0aW1lIiwgJm1h
eFBhY2tldExpZmVUaW1lLCAibWF4LXJldHJhbnNtaXRzIiwgJm1heFJldHJhbnNtaXRzLAorICAg
ICAgICAicHJvdG9jb2wiLCAmcHJvdG9jb2wub3V0UHRyKCksICJuZWdvdGlhdGVkIiwgJm5lZ290
aWF0ZWQsICJpZCIsICZpZCwgbnVsbHB0cik7CisKKyAgICBSVENEYXRhQ2hhbm5lbEluaXQgaW5p
dDsKKyAgICBpbml0Lm9yZGVyZWQgPSBvcmRlcmVkOworICAgIGluaXQubWF4UGFja2V0TGlmZVRp
bWUgPSBtYXhQYWNrZXRMaWZlVGltZTsKKyAgICBpbml0Lm1heFJldHJhbnNtaXRzID0gbWF4UmV0
cmFuc21pdHM7CisgICAgaW5pdC5wcm90b2NvbCA9IFN0cmluZyhwcm90b2NvbC5nZXQoKSk7Cisg
ICAgaW5pdC5uZWdvdGlhdGVkID0gbmVnb3RpYXRlZDsKKyAgICBpbml0LmlkID0gaWQ7CisKKyAg
ICBhdXRvIGhhbmRsZXIgPSBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyPihXVEZNb3ZlKGRhdGFDaGFubmVsKSk7CisgICAgYXV0byBjaGFubmVsID0gUlRDRGF0YUNo
YW5uZWw6OmNyZWF0ZShkb2N1bWVudCwgV1RGTW92ZShoYW5kbGVyKSwgU3RyaW5nKGxhYmVsLmdl
dCgpKSwgV1RGTW92ZShpbml0KSk7CisgICAgcmV0dXJuIFJUQ0RhdGFDaGFubmVsRXZlbnQ6OmNy
ZWF0ZShldmVudE5hbWVzKCkuZGF0YWNoYW5uZWxFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8s
IEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vLCBXVEZNb3ZlKGNoYW5uZWwpKTsKK30KKworR1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoR1JlZlB0
cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4mJiBjaGFubmVsKQorICAgIDogbV9jaGFubmVsKFdURk1v
dmUoY2hhbm5lbCkpCit7CisgICAgQVNTRVJUKG1fY2hhbm5lbCk7CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAibm90aWZ5OjpyZWFkeS1zdGF0ZSIsIEdf
Q0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlcikgeworICAg
ICAgICBoYW5kbGVyLT5yZWFkeVN0YXRlQ2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tbWVzc2FnZS1kYXRh
IiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBH
Qnl0ZXMqIHJhd0J5dGVzKSB7CisgICAgICAgIGF1dG8gYnl0ZXMgPSBhZG9wdEdSZWYocmF3Qnl0
ZXMpOworICAgICAgICBoYW5kbGVyLT5vbk1lc3NhZ2VEYXRhKFdURk1vdmUoYnl0ZXMpKTsKKyAg
ICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQo
KSwgIm9uLW1lc3NhZ2Utc3RyaW5nIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyKiBoYW5kbGVyLCBjaGFyKiBtZXNzYWdlKSB7CisgICAgICAgIENTdHJpbmcgYnVm
ZmVyKG1lc3NhZ2UsIHN0cmxlbihtZXNzYWdlKSk7CisgICAgICAgIGF1dG8gc3RyaW5nID0gU3Ry
aW5nOjpmcm9tVVRGOChidWZmZXIpOworICAgICAgICBoYW5kbGVyLT5vbk1lc3NhZ2VTdHJpbmco
V1RGTW92ZShzdHJpbmcpKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLWVycm9yIiwgR19DQUxMQkFDSygrW10oR1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBHRXJyb3IqIHJhd0Vycm9yKSB7CisgICAg
ICAgIEdVbmlxdWVQdHI8R0Vycm9yPiBlcnJvcihyYXdFcnJvcik7CisgICAgICAgIGhhbmRsZXIt
Pm9uRXJyb3IoV1RGTW92ZShlcnJvcikpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tYnVmZmVyZWQtYW1vdW50LWxvdyIs
IEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlcikgewor
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgdGhlIGFtb3VudCBkZWx0YSBmcm9tIHdl
YnJ0Y2JpbiB0byB0aGUgV2ViQ29yZSBoYW5kbGVyLgorICAgICAgICBoYW5kbGVyLT5vbkJ1ZmZl
cmVkQW1vdW50TG93KCk7CisgICAgfSksIHRoaXMpOworfQorCitHU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXI6On5HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoKQoreworICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2NoYW5uZWwuZ2V0KCksIHRoaXMpOworfQor
Cit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2V0Q2xpZW50KFJUQ0RhdGFDaGFu
bmVsSGFuZGxlckNsaWVudCYgY2xpZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmll
ciBjb250ZXh0SWRlbnRpZmllcikKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2Nr
IH07CisgICAgQVNTRVJUKCFtX2hhc0NsaWVudCk7CisgICAgbV9oYXNDbGllbnQgPSB0cnVlOwor
ICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgICptX2NsaWVudCA9ICZjbGllbnQ7CisgICAgbV9j
b250ZXh0SWRlbnRpZmllciA9IGNvbnRleHRJZGVudGlmaWVyOworCisgICAgZm9yIChhdXRvJiBt
ZXNzYWdlIDogbV9idWZmZXJlZE1lc3NhZ2VzKSB7CisgICAgICAgIHN3aXRjaE9uKG1lc3NhZ2Us
IFsmXShSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAgICAgIEdT
VF9ERUJVRygiTm90aWZ5aW5nIHF1ZXVlZCByYXcgZGF0YSAoc2l6ZTogJXp1KSIsIGRhdGEtPnNp
emUoKSk7CisgICAgICAgICAgICBjbGllbnQuZGlkUmVjZWl2ZVJhd0RhdGEoZGF0YS0+bWFrZUNv
bnRpZ3VvdXMoKS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAgICAgICB9LCBbJl0oU3RyaW5n
JiB0ZXh0KSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIk5vdGlmeWluZyBxdWV1ZWQgc3RyaW5n
ICVzIiwgdGV4dC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAgICBjbGllbnQuZGlkUmVjZWl2
ZVN0cmluZ0RhdGEodGV4dCk7CisgICAgICAgIH0sIFsmXShTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5n
ZSkgeworICAgICAgICAgICAgaWYgKHN0YXRlQ2hhbmdlLmVycm9yKSB7CisgICAgICAgICAgICAg
ICAgaWYgKGF1dG8gcnRjRXJyb3IgPSB0b1JUQ0Vycm9yKCpzdGF0ZUNoYW5nZS5lcnJvcikpCisg
ICAgICAgICAgICAgICAgICAgIGNsaWVudC5kaWREZXRlY3RFcnJvcihydGNFcnJvci5yZWxlYXNl
Tm9uTnVsbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdTVF9ERUJVRygiRGlzcGF0
Y2hpbmcgc3RhdGUgY2hhbmdlIHRvICVkIiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0ZUNoYW5nZS5z
dGF0ZSkpOworICAgICAgICAgICAgY2xpZW50LmRpZENoYW5nZVJlYWR5U3RhdGUoc3RhdGVDaGFu
Z2Uuc3RhdGUpOworICAgICAgICB9KTsKKyAgICB9CisgICAgbV9idWZmZXJlZE1lc3NhZ2VzLmNs
ZWFyKCk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kU3RyaW5n
RGF0YShjb25zdCBDU3RyaW5nJiB0ZXh0KQoreworICAgIEdTVF9ERUJVRygiU2VuZGluZyBzdHJp
bmcgJXMiLCB0ZXh0LmRhdGEoKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5l
bC5nZXQoKSwgInNlbmQtc3RyaW5nIiwgdGV4dC5kYXRhKCkpOworICAgIHJldHVybiB0cnVlOwor
fQorCitib29sIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFJhd0RhdGEoY29uc3Qg
dWludDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBhdXRvIGJ5dGVzID0gYWRvcHRH
UmVmKGdfYnl0ZXNfbmV3KGRhdGEsIGxlbmd0aCkpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFt
ZShtX2NoYW5uZWwuZ2V0KCksICJzZW5kLWRhdGEiLCBieXRlcy5nZXQoKSk7CisgICAgcmV0dXJu
IHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjbG9zZSgpCit7
CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5lbC5nZXQoKSwgImNsb3NlIik7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGVja1N0YXRlKCkKK3sKKyAg
ICBBU1NFUlQobV9jbGllbnRMb2NrLmlzSGVsZCgpKTsKKworICAgIEdzdFdlYlJUQ0RhdGFDaGFu
bmVsU3RhdGUgY2hhbm5lbFN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX2NoYW5uZWwuZ2V0KCks
ICJyZWFkeS1zdGF0ZSIsICZjaGFubmVsU3RhdGUsIG51bGxwdHIpOworCisgICAgUlRDRGF0YUNo
YW5uZWxTdGF0ZSBzdGF0ZTsKKyAgICBzd2l0Y2ggKGNoYW5uZWxTdGF0ZSkgeworICAgIGNhc2Ug
R1NUX1dFQlJUQ19EQVRBX0NIQU5ORUxfU1RBVEVfTkVXOgorICAgIGNhc2UgR1NUX1dFQlJUQ19E
QVRBX0NIQU5ORUxfU1RBVEVfQ09OTkVDVElORzoKKyAgICAgICAgc3RhdGUgPSBSVENEYXRhQ2hh
bm5lbFN0YXRlOjpDb25uZWN0aW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9XRUJS
VENfREFUQV9DSEFOTkVMX1NUQVRFX09QRU46CisgICAgICAgIHN0YXRlID0gUlRDRGF0YUNoYW5u
ZWxTdGF0ZTo6T3BlbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RBVEFf
Q0hBTk5FTF9TVEFURV9DTE9TSU5HOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3Rh
dGU6OkNsb3Npbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRBX0NI
QU5ORUxfU1RBVEVfQ0xPU0VEOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3RhdGU6
OkNsb3NlZDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFtX2hhc0NsaWVudCkg
eworICAgICAgICBHU1RfREVCVUcoIk5vIGNsaWVudCB5ZXQsIHF1ZXVlaW5nIHN0YXRlIik7Cisg
ICAgICAgIG1fYnVmZmVyZWRNZXNzYWdlcy5hcHBlbmQoU3RhdGVDaGFuZ2UgeyBzdGF0ZSwgeyB9
IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHKCJEaXNwYXRjaGluZyBzdGF0ZSBjaGFuZ2UgdG8g
JWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRlKSk7CisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1f
Y2xpZW50LCBzdGF0ZV0geworICAgICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgY2xpZW50LnZhbHVlKCktPmRpZENoYW5nZVJlYWR5U3RhdGUoc3RhdGUpOwor
ICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6cmVhZHlTdGF0
ZUNoYW5nZWQoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKyAgICBj
aGVja1N0YXRlKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbk1l
c3NhZ2VEYXRhKEdSZWZQdHI8R0J5dGVzPiYmIGJ5dGVzKQoreworICAgIExvY2tlciBsb2NrZXIg
eyBtX2NsaWVudExvY2sgfTsKKworICAgIGlmICghbV9oYXNDbGllbnQpIHsKKyAgICAgICAgbV9i
dWZmZXJlZE1lc3NhZ2VzLmFwcGVuZChGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpjcmVhdGUoYnl0
ZXMuZ2V0KCkpKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghbV9jbGllbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudCwgYnl0
ZXMgPSBXVEZNb3ZlKGJ5dGVzKV0geworICAgICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgZ3NpemUgc2l6ZSA9IDA7CisgICAgICAgIGNvbnN0IGF1dG8qIGRh
dGEgPSByZWludGVycHJldF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGJ5
dGVzLmdldCgpLCAmc2l6ZSkpOworICAgICAgICBjbGllbnQudmFsdWUoKS0+ZGlkUmVjZWl2ZVJh
d0RhdGEoZGF0YSwgc2l6ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyOjpvbk1lc3NhZ2VTdHJpbmcoU3RyaW5nJiYgc3RyaW5nKQoreworICAgIExvY2tl
ciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKworICAgIEdTVF9ERUJVRygiSW5jb21pbmcgc3Ry
aW5nOiAlcyIsIHN0cmluZy5hc2NpaSgpLmRhdGEoKSk7CisgICAgaWYgKCFtX2hhc0NsaWVudCkg
eworICAgICAgICBHU1RfREVCVUcoIk5vIGNsaWVudCB5ZXQsIGtlZXBpbmcgYXMgYnVmZmVyZWQg
bWVzc2FnZSIpOworICAgICAgICBtX2J1ZmZlcmVkTWVzc2FnZXMuYXBwZW5kKFdURk1vdmUoc3Ry
aW5nKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIW1fY2xpZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoIkRpc3BhdGNoaW5nIHBheWxvYWQiKTsKKyAg
ICBwb3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnQsIHN0cmluZyA9IFdURk1vdmUoc3RyaW5nKV0g
eworICAgICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBj
bGllbnQudmFsdWUoKS0+ZGlkUmVjZWl2ZVN0cmluZ0RhdGEoc3RyaW5nKTsKKyAgICAgICAgR1NU
X0RFQlVHKCJEb25lIik7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxI
YW5kbGVyOjpvbkVycm9yKEdVbmlxdWVQdHI8R0Vycm9yPiYmIGVycm9yKQoreworICAgIExvY2tl
ciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHU1RfV0FSTklORygiR290IGRhdGEtY2hhbm5lbCBlcnJvciAlcyIsIGVy
cm9yLT5tZXNzYWdlKTsKKyAgICBwb3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnQsIGVycm9yID0g
V1RGTW92ZShlcnJvcildIHsKKyAgICAgICAgaWYgKCFjbGllbnQgfHwgIWVycm9yKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcnRjRXJyb3IgPSB0b1JUQ0Vycm9yKGVycm9y
LmdldCgpKTsKKyAgICAgICAgaWYgKCFydGNFcnJvcikKKyAgICAgICAgICAgIHJ0Y0Vycm9yID0g
UlRDRXJyb3I6OmNyZWF0ZShSVENFcnJvcjo6SW5pdCB7IFJUQ0Vycm9yRGV0YWlsVHlwZTo6RGF0
YUNoYW5uZWxGYWlsdXJlLCB7IH0sIHsgfSwgeyB9LCB7IH0gfSwgeyB9KTsKKyAgICAgICAgY2xp
ZW50LnZhbHVlKCktPmRpZERldGVjdEVycm9yKHJ0Y0Vycm9yLnJlbGVhc2VOb25OdWxsKCkpOwor
ICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25CdWZmZXJl
ZEFtb3VudExvdygpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9OworICAg
IGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHBvc3RUYXNrKFtjbGllbnQg
PSBtX2NsaWVudF0geworICAgICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICAvLyBGSVhNRTogUGFzcyBhbW91bnQgdG8gaGFuZGxlciBpbnN0ZWFkIG9mIDAu
CisgICAgICAgIGNsaWVudC52YWx1ZSgpLT5idWZmZXJlZEFtb3VudElzRGVjcmVhc2luZygwKTsK
KyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnBvc3RUYXNr
KEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV9jbGllbnRMb2Nr
LmlzSGVsZCgpKTsKKworICAgIGlmICghbV9jb250ZXh0SWRlbnRpZmllcikgeworICAgICAgICBj
YWxsT25NYWluVGhyZWFkKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpwb3N0VGFza1RvKG1fY29udGV4dElkZW50
aWZpZXIsIFdURk1vdmUoZnVuY3Rpb24pKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmYxYjM3MTkwZmYyZTQ4NTU5
NDEwYjkxY2UwNGFlN2ZmODhhNzRiNDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXIuaApAQCAtMCwwICsxLDg4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEln
YWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbFN0
YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvQ29uZGl0
aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgUlRDRGF0YUNo
YW5uZWxFdmVudDsKK2NsYXNzIFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudDsKK3N0cnVjdCBS
VENEYXRhQ2hhbm5lbEluaXQ7CisKK2NsYXNzIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciBm
aW5hbCA6IHB1YmxpYyBSVENEYXRhQ2hhbm5lbEhhbmRsZXIgeworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcihHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmKTsKKyAgICB+R1N0cmVhbWVyRGF0
YUNoYW5uZWxIYW5kbGVyKCk7CisKKyAgICBzdGF0aWMgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+
IGZyb21SVENEYXRhQ2hhbm5lbEluaXQoY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0Jik7CisgICAg
c3RhdGljIFJlZjxSVENEYXRhQ2hhbm5lbEV2ZW50PiBjaGFubmVsRXZlbnQoRG9jdW1lbnQmLCBH
UmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQg
b25NZXNzYWdlRGF0YShHUmVmUHRyPEdCeXRlcz4mJik7CisgICAgdm9pZCBvbk1lc3NhZ2VTdHJp
bmcoU3RyaW5nJiYpOworICAgIHZvaWQgb25FcnJvcihHVW5pcXVlUHRyPEdFcnJvcj4mJik7Cisg
ICAgdm9pZCBvbkJ1ZmZlcmVkQW1vdW50TG93KCk7CisgICAgdm9pZCByZWFkeVN0YXRlQ2hhbmdl
ZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0RhdGFDaGFubmVsSGFuZGxlciBBUEkKKyAgICB2
b2lkIHNldENsaWVudChSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQmLCBTY3JpcHRFeGVjdXRp
b25Db250ZXh0SWRlbnRpZmllcikgZmluYWw7CisgICAgYm9vbCBzZW5kU3RyaW5nRGF0YShjb25z
dCBDU3RyaW5nJikgZmluYWw7CisgICAgYm9vbCBzZW5kUmF3RGF0YShjb25zdCB1aW50OF90Kiwg
c2l6ZV90KSBmaW5hbDsKKyAgICB2b2lkIGNsb3NlKCkgZmluYWw7CisKKyAgICB2b2lkIGNoZWNr
U3RhdGUoKTsKKyAgICB2b2lkIHBvc3RUYXNrKEZ1bmN0aW9uPHZvaWQoKT4mJik7CisKKyAgICBz
dHJ1Y3QgU3RhdGVDaGFuZ2UgeworICAgICAgICBSVENEYXRhQ2hhbm5lbFN0YXRlIHN0YXRlOwor
ICAgICAgICBzdGQ6Om9wdGlvbmFsPEdFcnJvcio+IGVycm9yOworICAgIH07CisgICAgdXNpbmcg
TWVzc2FnZSA9IHN0ZDo6dmFyaWFudDxTdGF0ZUNoYW5nZSwgU3RyaW5nLCBSZWY8RnJhZ21lbnRl
ZFNoYXJlZEJ1ZmZlcj4+OworICAgIHVzaW5nIFBlbmRpbmdNZXNzYWdlcyA9IFZlY3RvcjxNZXNz
YWdlPjsKKworICAgIExvY2sgbV9jbGllbnRMb2NrOworICAgIEdSZWZQdHI8R3N0V2ViUlRDRGF0
YUNoYW5uZWw+IG1fY2hhbm5lbDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYWtQdHI8UlRDRGF0YUNo
YW5uZWxIYW5kbGVyQ2xpZW50Pj4gbV9jbGllbnQgV1RGX0dVQVJERURfQllfTE9DSyhtX2NsaWVu
dExvY2spOworICAgIGJvb2wgbV9oYXNDbGllbnQgV1RGX0dVQVJERURfQllfTE9DSyhtX2NsaWVu
dExvY2spIHsgZmFsc2UgfTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllciBt
X2NvbnRleHRJZGVudGlmaWVyOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IG1fcHJldmlv
dXNCdWZmZXJlZEFtb3VudDsKKyAgICBQZW5kaW5nTWVzc2FnZXMgbV9idWZmZXJlZE1lc3NhZ2Vz
IFdURl9HVUFSREVEX0JZX0xPQ0sobV9jbGllbnRMb2NrKTsKKworICAgIExvY2sgbV9vcGVuTG9j
azsKKyAgICBDb25kaXRpb24gbV9vcGVuQ29uZGl0aW9uIFdURl9HVUFSREVEX0JZX0xPQ0sobV9v
cGVuTG9jayk7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNU
cmFuc3BvcnRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44MGFjYzVjMWUwNzg5ZGM3N2M3YzM5ZTc5
ZWZhYTkxZjViOWZlMzVhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsOTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlh
IFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5o
IgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5j
bHVkZSAiR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
cldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4K
KyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRC
YWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mIHRyYW5zcG9ydCkK
KyAgICA6IG1fYmFja2VuZCh0cmFuc3BvcnQpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7Cisg
ICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKK30KKworR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQ6On5HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgdW5yZWdpc3Rl
ckNsaWVudCgpOworfQorCitVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVh
bWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIHJl
dHVybiBtYWtlVW5pcXVlUmVmPEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ+KG1fYmFja2Vu
ZCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xp
ZW50KENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xp
ZW50ID0gY2xpZW50OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0
KCksICJub3RpZnk6OnN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFuZ2VkKCk7Cisg
ICAgfSksIHRoaXMpOworfQorCit2b2lkIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp1
bnJlZ2lzdGVyQ2xpZW50KCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5
X2RhdGEobV9iYWNrZW5kLmdldCgpLCB0aGlzKTsKKyAgICBtX2NsaWVudC5yZXNldCgpOworfQor
Cit2b2lkIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQoKQorewor
ICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyB0aGlzIH1d
IHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKCF3ZWFrVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
R1VuaXF1ZU91dFB0cjxjaGFyPiByZW1vdGVDZXJ0aWZpY2F0ZTsKKyAgICAgICAgR1VuaXF1ZU91
dFB0cjxjaGFyPiBjZXJ0aWZpY2F0ZTsKKyAgICAgICAgR3N0V2ViUlRDRFRMU1RyYW5zcG9ydFN0
YXRlIHN0YXRlOworCisgICAgICAgIGdfb2JqZWN0X2dldCh3ZWFrVGhpcy0+bV9iYWNrZW5kLmdl
dCgpLCAic3RhdGUiLCAmc3RhdGUsICJyZW1vdGUtY2VydGlmaWNhdGUiLCAmcmVtb3RlQ2VydGlm
aWNhdGUub3V0UHRyKCksICJjZXJ0aWZpY2F0ZSIsICZjZXJ0aWZpY2F0ZS5vdXRQdHIoKSwgbnVs
bHB0cik7CisKKyAgICAgICAgVmVjdG9yPFJlZjxKU0M6OkFycmF5QnVmZmVyPj4gY2VydGlmaWNh
dGVzOworICAgICAgICBjZXJ0aWZpY2F0ZXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgyKTsKKyAg
ICAgICAgaWYgKHJlbW90ZUNlcnRpZmljYXRlKSB7CisgICAgICAgICAgICBhdXRvIHJlbW90ZUNl
cnRpZmljYXRlU3RyaW5nID0gbWFrZVN0cmluZyhyZW1vdGVDZXJ0aWZpY2F0ZS5nZXQoKSk7Cisg
ICAgICAgICAgICBhdXRvIGpzUmVtb3RlQ2VydGlmaWNhdGUgPSBKU0M6OkFycmF5QnVmZmVyOjpj
cmVhdGUocmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcuY2hhcmFjdGVyczgoKSwgcmVtb3RlQ2VydGlm
aWNhdGVTdHJpbmcuc2l6ZUluQnl0ZXMoKSk7CisgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuYXBw
ZW5kKFdURk1vdmUoanNSZW1vdGVDZXJ0aWZpY2F0ZSkpOworCisgICAgICAgICAgICBhdXRvIGNl
cnRpZmljYXRlU3RyaW5nID0gbWFrZVN0cmluZyhjZXJ0aWZpY2F0ZS5nZXQoKSk7CisgICAgICAg
ICAgICBhdXRvIGpzQ2VydGlmaWNhdGUgPSBKU0M6OkFycmF5QnVmZmVyOjpjcmVhdGUoY2VydGlm
aWNhdGVTdHJpbmcuY2hhcmFjdGVyczgoKSwgY2VydGlmaWNhdGVTdHJpbmcuc2l6ZUluQnl0ZXMo
KSk7CisgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMuYXBwZW5kKFdURk1vdmUoanNDZXJ0aWZpY2F0
ZSkpOworICAgICAgICB9CisgICAgICAgICgqd2Vha1RoaXMtPm1fY2xpZW50KS0+b25TdGF0ZUNo
YW5nZWQodG9SVENEdGxzVHJhbnNwb3J0U3RhdGUoc3RhdGUpLCBXVEZNb3ZlKGNlcnRpZmljYXRl
cykpOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJh
bnNwb3J0QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzI1NGJj
ODQ3ZGE3OTE2N2I4ZmMxOTQ5YjMwNGUxNzg3Y2VkNWEwCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1Ry
YW5zcG9ydEJhY2tlbmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJSVENEdGxzVHJh
bnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQgZmluYWwgOiBw
dWJsaWMgUlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVE
OworCitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQo
Y29uc3QgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiYpOworICAgIH5HU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZCgpOworCisgICAgdm9pZCBzdGF0ZUNoYW5nZWQoKTsKKworcHJp
dmF0ZToKKyAgICAvLyBSVENEdGxzVHJhbnNwb3J0QmFja2VuZAorICAgIGNvbnN0IHZvaWQqIGJh
Y2tlbmQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKyAgICBVbmlx
dWVSZWY8UlRDSWNlVHJhbnNwb3J0QmFja2VuZD4gaWNlVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFs
OworICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoQ2xpZW50JikgZmluYWw7CisgICAgdm9pZCB1bnJl
Z2lzdGVyQ2xpZW50KCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQ+IG1fYmFja2VuZDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdlYWtQdHI8Q2xpZW50Pj4gbV9jbGll
bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA0ZDc1YTFmNjU3OWQ1
OTY0ZWRiMWRiOWE1ZjMwMWJlMmFkMmIwODQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDEyNSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEt
MjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckljZVRyYW5zcG9y
dEJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSA8SmF2YVNj
cmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNU
cmFuc3BvcnQ+JiB0cmFuc3BvcnQpCisgICAgOiBtX2JhY2tlbmQodHJhbnNwb3J0KQoreworICAg
IEFTU0VSVChtX2JhY2tlbmQpOworCisgICAgaWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCksICJub3RpZnk6OnRyYW5zcG9y
dCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQp
IHsKKyAgICAgICAgYmFja2VuZC0+aWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworICAgIH0pLCB0aGlz
KTsKK30KKworR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQoKQoreworICAgIGlmIChHX0lTX09CSkVDVChtX2ljZVRyYW5zcG9ydC5nZXQo
KSkpCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2ljZVRy
YW5zcG9ydC5nZXQoKSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9i
eV9kYXRhKG1fYmFja2VuZC5nZXQoKSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJh
bnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0Q2hhbmdlZCgpCit7CisgICAgaWYgKEdfSVNfT0JK
RUNUKG1faWNlVHJhbnNwb3J0LmdldCgpKSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9kYXRhKG1faWNlVHJhbnNwb3J0LmdldCgpLCB0aGlzKTsKKworICAgIGdfb2Jq
ZWN0X2dldChtX2JhY2tlbmQuZ2V0KCksICJ0cmFuc3BvcnQiLCAmbV9pY2VUcmFuc3BvcnQub3V0
UHRyKCksIG51bGxwdHIpOworCisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1faWNlVHJh
bnNwb3J0LmdldCgpLCAibm90aWZ5OjpzdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lcklj
ZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFu
Z2VkKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2lj
ZVRyYW5zcG9ydC5nZXQoKSwgIm5vdGlmeTo6Z2F0aGVyaW5nLXN0YXRlIiwgR19DQUxMQkFDSygr
W10oR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNr
ZW5kLT5nYXRoZXJpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGll
bnQpCit7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisK
KyAgICBHc3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgdHJhbnNwb3J0U3RhdGU7CisgICAgR3N0
V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgZ2F0aGVyaW5nU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0
KG1faWNlVHJhbnNwb3J0LmdldCgpLCAic3RhdGUiLCAmdHJhbnNwb3J0U3RhdGUsICJnYXRoZXJp
bmctc3RhdGUiLCAmZ2F0aGVyaW5nU3RhdGUsIG51bGxwdHIpOworCisgICAgLy8gV2Ugc3RhcnQg
b2JzZXJ2aW5nIGEgYml0IGxhdGUgYW5kIG1pZ2h0IG1pc3MgdGhlIGNoZWNraW5nIHN0YXRlLiBT
eW50aGVzaXplIGl0IGFzIG5lZWRlZC4KKyAgICBpZiAodHJhbnNwb3J0U3RhdGUgPiBHU1RfV0VC
UlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NIRUNLSU5HICYmIHRyYW5zcG9ydFN0YXRlICE9IEdT
VF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0xPU0VEKSB7CisgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH1dIHsKKyAgICAgICAgICAgIGlm
ICghd2Vha1RoaXMgfHwgIXdlYWtUaGlzLT5tX2NsaWVudCkKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKFJUQ0lj
ZVRyYW5zcG9ydFN0YXRlOjpDaGVja2luZyk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBjYWxs
T25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCB0cmFuc3BvcnRTdGF0
ZSwgZ2F0aGVyaW5nU3RhdGVdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcyB8fCAhd2Vha1RoaXMt
Pm1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3ZWFrVGhpcy0+bV9jbGll
bnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDSWNlVHJhbnNwb3J0U3RhdGUodHJhbnNwb3J0U3RhdGUp
KTsKKyAgICAgICAgd2Vha1RoaXMtPm1fY2xpZW50LT5vbkdhdGhlcmluZ1N0YXRlQ2hhbmdlZCh0
b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKGdhdGhlcmluZ1N0YXRlKSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNsaWVudCgpCit7Cisg
ICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVudC5jbGVhcigpOworfQorCit2b2lkIEdT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKCFt
X2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0
YXRlIHRyYW5zcG9ydFN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX2ljZVRyYW5zcG9ydC5nZXQo
KSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCB0cmFuc3BvcnRTdGF0ZV0geworICAg
ICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5tX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENJ
Y2VUcmFuc3BvcnRTdGF0ZSh0cmFuc3BvcnRTdGF0ZSkpOworICAgIH0pOworfQorCit2b2lkIEdT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OmdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpCit7Cisg
ICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDSUNFR2F0
aGVyaW5nU3RhdGUgZ2F0aGVyaW5nU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1faWNlVHJhbnNw
b3J0LmdldCgpLCAiZ2F0aGVyaW5nLXN0YXRlIiwgJmdhdGhlcmluZ1N0YXRlLCBudWxscHRyKTsK
KyAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCBnYXRo
ZXJpbmdTdGF0ZV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV9jbGll
bnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5tX2NsaWVudC0+b25H
YXRoZXJpbmdTdGF0ZUNoYW5nZWQodG9SVENJY2VHYXRoZXJpbmdTdGF0ZShnYXRoZXJpbmdTdGF0
ZSkpOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFu
c3BvcnRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmZlYTUyMGJi
YTkxMGZkMTdmMzAwNzk4NTUyN2E5ODY4OGY0YjA3ZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQuaApAQCAtMCwwICsxLDU2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAy
MS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJS
VENJY2VUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kIGZp
bmFsIDogcHVibGljIFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0
cjxHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNr
ZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mKTsKKyAgICB+R1N0cmVh
bWVySWNlVHJhbnNwb3J0QmFja2VuZCgpOworCisgICAgdm9pZCBzdGF0ZUNoYW5nZWQoKTsKKyAg
ICB2b2lkIGdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0lj
ZVRyYW5zcG9ydEJhY2tlbmQKKyAgICBjb25zdCB2b2lkKiBiYWNrZW5kKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisKKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENs
aWVudCYpIGZpbmFsOworICAgIHZvaWQgdW5yZWdpc3RlckNsaWVudCgpIGZpbmFsOworCisgICAg
dm9pZCBpY2VUcmFuc3BvcnRDaGFuZ2VkKCk7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNU
cmFuc3BvcnQ+IG1fYmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4g
bV9pY2VUcmFuc3BvcnQ7CisgICAgV2Vha1B0cjxDbGllbnQ+IG1fY2xpZW50OworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNTdmYzViNjZmZjFhYzliNTFmM2M0YTM1NmQ0ZGIyYjBhNDJiNjY1
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKQEAgLTAsMCArMSwxMjQwIEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIgorI2luY2x1ZGUgIkdT
dHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5z
Y2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5k
LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJKU0RPTVBy
b21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIkpTUlRDU3RhdHNSZXBvcnQuaCIKKyNpbmNsdWRl
ICJMb2dnaW5nLmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCIKKyNp
bmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsLmgiCisj
aW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxFdmVudC5oIgorI2luY2x1ZGUgIlJUQ0ljZUNhbmRpZGF0
ZS5oIgorI2luY2x1ZGUgIlJUQ09mZmVyT3B0aW9ucy5oIgorI2luY2x1ZGUgIlJUQ1BlZXJDb25u
ZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDU2N0cFRyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRl
ICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJSVENTdGF0c1JlcG9ydC5oIgor
I2luY2x1ZGUgIlJUQ1RyYWNrRXZlbnQuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIu
aCIKKworI2luY2x1ZGUgPGdzdC9zZHAvc2RwLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291
cmNlUHJpb3JpdHkuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJz
aW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVn
KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50KEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgcGVlckNvbm5l
Y3Rpb24pCisgICAgOiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZChwZWVyQ29ubmVjdGlvbikKKyAg
ICAsIG1fc3RhdHNDb2xsZWN0b3IoR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OmNyZWF0ZSgpKQor
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICwgbV9zdGF0c0xvZ1RpbWVyKCp0aGlzLCAm
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyU3RhdHNGb3JMb2dnaW5nKQorICAgICwgbV9s
b2dnZXIocGVlckNvbm5lY3Rpb24ubG9nZ2VyKCkpCisgICAgLCBtX2xvZ0lkZW50aWZpZXIocGVl
ckNvbm5lY3Rpb24ubG9nSWRlbnRpZmllcigpKQorI2VuZGlmCit7CisgICAgZW5zdXJlR1N0cmVh
bWVySW5pdGlhbGl6ZWQoKTsKKworICAgIHN0YXRpYyBzdGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lz
dGVyZWRGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGRlYnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsK
KyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3dlYnJ0Y19lbmRwb2ludF9k
ZWJ1ZywgIndlYmtpdHdlYnJ0Y2VuZHBvaW50IiwgMCwgIldlYktpdCBXZWJSVEMgZW5kLXBvaW50
Iik7CisgICAgfSk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aW5pdGlhbGl6
ZVBpcGVsaW5lKCkKK3sKKyAgICBzdGF0aWMgaW50IG5QaXBlbGluZSA9IDA7CisgICAgYXV0byBw
aXBlbGluZU5hbWUgPSBtYWtlU3RyaW5nKCJ3ZWJraXQtd2VicnQtcGlwZWxpbmUtIiwgblBpcGVs
aW5lKTsKKyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyhwaXBlbGluZU5hbWUuYXNj
aWkoKS5kYXRhKCkpOworCisgICAgY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3Bp
cGVsaW5lLmdldCgpLCBbdGhpc10oR3N0TWVzc2FnZSogbWVzc2FnZSkgeworICAgICAgICBoYW5k
bGVNZXNzYWdlKG1lc3NhZ2UpOworICAgIH0pOworCisgICAgYXV0byBiaW5OYW1lID0gbWFrZVN0
cmluZygid2Via2l0LXdlYnJ0Y2Jpbi0iLCBuUGlwZWxpbmUrKyk7CisgICAgbV93ZWJydGNCaW4g
PSBtYWtlR1N0cmVhbWVyRWxlbWVudCgid2VicnRjYmluIiwgYmluTmFtZS5hc2NpaSgpLmRhdGEo
KSk7CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAg
bV9zdGF0c0NvbGxlY3Rvci0+c2V0RWxlbWVudChtX3dlYnJ0Y0Jpbi5nZXQoKSk7CisgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAibm90aWZ5OjppY2UtY29u
bmVjdGlvbi1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVu
ZFBvaW50KSB7CisgICAgICAgIGVuZFBvaW50LT5vbkljZUNvbm5lY3Rpb25DaGFuZ2UoKTsKKyAg
ICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdl
dCgpLCAibm90aWZ5OjppY2UtZ2F0aGVyaW5nLXN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVh
bWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uSWNlR2F0
aGVyaW5nQ2hhbmdlKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLW5lZ290aWF0aW9uLW5lZWRlZCIsIEdfQ0FMTEJB
Q0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50KSB7CisgICAgICAgIGVuZFBv
aW50LT5vbk5lZ290aWF0aW9uTmVlZGVkKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLWljZS1jYW5kaWRhdGUiLCBH
X0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCwgZ3VpbnQgc2Rw
TUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5kaWRhdGUpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9u
SWNlQ2FuZGlkYXRlKHNkcE1MaW5lSW5kZXgsIGNhbmRpZGF0ZSk7CisgICAgfSksIHRoaXMpOwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInBhZC1hZGRl
ZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RQ
YWQqIHBhZCkgeworICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5vdGlmaWNhdGlvbnMu
CisgICAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9QQURfU1JDKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFtwcm90
ZWN0ZWRUaGlzID0gUmVmKCplbmRQb2ludCksIHBhZF0geworICAgICAgICAgICAgaWYgKHByb3Rl
Y3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAg
ICAgICAgcHJvdGVjdGVkVGhpcy0+YWRkUmVtb3RlU3RyZWFtKHBhZCk7CisgICAgICAgIH0pOwor
ICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4u
Z2V0KCksICJwYWQtcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQqIGVuZFBvaW50LCBHc3RQYWQqIHBhZCkgeworICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcg
cGFkIG5vdGlmaWNhdGlvbnMuCisgICAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9
IEdTVF9QQURfU1JDKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGlmIChlbmRQb2lu
dC0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGVuZFBvaW50LT5y
ZW1vdmVSZW1vdGVTdHJlYW0ocGFkKTsKKyAgICB9KSwgdGhpcyk7CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJvbi1kYXRhLWNoYW5uZWwiLCBHX0NB
TExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCwgR3N0V2ViUlRDRGF0
YUNoYW5uZWwqIGNoYW5uZWwpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uRGF0YUNoYW5uZWwoY2hh
bm5lbCk7CisgICAgfSksIHRoaXMpOworCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1f
cGlwZWxpbmUuZ2V0KCkpLCBtX3dlYnJ0Y0Jpbi5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9
CisKK0dTdHJlYW1lck1lZGlhRW5kcG9pbnQ6On5HU3RyZWFtZXJNZWRpYUVuZHBvaW50KCkKK3sK
KyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgdGVhcmRvd25QaXBlbGluZSgpOworfQorCit2
b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRlYXJkb3duUGlwZWxpbmUoKQoreworI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0b3BMb2dnaW5nU3RhdHMoKTsKKyNlbmRpZgorICAg
IG1fc3RhdHNDb2xsZWN0b3ItPnNldEVsZW1lbnQobnVsbHB0cik7CisKKyAgICBnX3NpZ25hbF9o
YW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9waXBlbGluZS5nZXQoKSwgdGhpcyk7CisgICAg
ZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdldCgpKTsKKyAg
ICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwp
OworCisgICAgbV9zb3VyY2VzLmNsZWFyKCk7CisgICAgbV9yZW1vdGVNTGluZUluZm9zLmNsZWFy
KCk7CisgICAgbV9yZW1vdGVTdHJlYW1zQnlJZC5jbGVhcigpOworICAgIG1fd2VicnRjQmluID0g
bnVsbHB0cjsKKyAgICBtX3BpcGVsaW5lID0gbnVsbHB0cjsKK30KKworYm9vbCBHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAg
c3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FH
RV9FT1M6CisgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklO
X0NBU1QobV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgImVvcyIp
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VMRU1FTlQ6IHsKKyAgICAg
ICAgY29uc3QgYXV0byogZGF0YSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUobWVzc2FnZSk7
CisgICAgICAgIGlmICghZ19zdHJjbXAwKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoZGF0YSksICJH
c3RCaW5Gb3J3YXJkZWQiKSkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RNZXNzYWdlPiBzdWJN
ZXNzYWdlOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQoZGF0YSwgIm1lc3NhZ2UiLCBH
U1RfVFlQRV9NRVNTQUdFLCAmc3ViTWVzc2FnZS5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAg
ICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShzdWJNZXNzYWdlLmdldCgpKSA9PSBHU1RfTUVTU0FH
RV9FT1MpCisgICAgICAgICAgICAgICAgZGlzcG9zZUVsZW1lbnRDaGFpbihHU1RfRUxFTUVOVF9D
QVNUKEdTVF9NRVNTQUdFX1NSQyhzdWJNZXNzYWdlLmdldCgpKSkpOworICAgICAgICB9CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZGlzcG9z
ZUVsZW1lbnRDaGFpbihHc3RFbGVtZW50KiBlbGVtZW50KQoreworICAgIEdTVF9ERUJVR19PQkpF
Q1QobV9waXBlbGluZS5nZXQoKSwgIkdvdCBlbGVtZW50IEVPUyBtZXNzYWdlIGZyb20gJSIgR1NU
X1BUUl9GT1JNQVQsIGVsZW1lbnQpOworCisgICAgYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2Vs
ZW1lbnRfZ2V0X3N0YXRpY19wYWQoZWxlbWVudCwgInNpbmsiKSk7CisgICAgYXV0byBwZWVyID0g
YWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIocGFkLmdldCgpKSk7CisKKyAgICBnc3RfZWxlbWVu
dF9zZXRfbG9ja2VkX3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIHRydWUpOworICAgIGdzdF9wYWRf
dW5saW5rKHBlZXIuZ2V0KCksIHBhZC5nZXQoKSk7CisgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJ
Tl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBlbGVtZW50KTsKKyAgICBnc3RfZWxlbWVudF9yZWxl
YXNlX3JlcXVlc3RfcGFkKG1fd2VicnRjQmluLmdldCgpLCBwZWVyLmdldCgpKTsKKyAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUoZWxlbWVudCwgR1NUX1NUQVRFX05VTEwpOworICAgIGdzdF9lbGVt
ZW50X3NldF9sb2NrZWRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgZmFsc2UpOworfQorCitib29s
IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENv
bmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAg
ICAgIHRlYXJkb3duUGlwZWxpbmUoKTsKKworICAgIGlmICghaW5pdGlhbGl6ZVBpcGVsaW5lKCkp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYnVuZGxlUG9saWN5ID0gYnVuZGxl
UG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7CisgICAgYXV0byBpY2VUcmFu
c3BvcnRQb2xpY3kgPSBpY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29uZmlndXJhdGlvbihjb25maWd1
cmF0aW9uKTsKKyAgICBnX29iamVjdF9zZXQobV93ZWJydGNCaW4uZ2V0KCksICJidW5kbGUtcG9s
aWN5IiwgYnVuZGxlUG9saWN5LCAiaWNlLXRyYW5zcG9ydC1wb2xpY3kiLCBpY2VUcmFuc3BvcnRQ
b2xpY3ksIG51bGxwdHIpOworCisgICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBjb25maWd1cmF0aW9u
LmljZVNlcnZlcnMpIHsKKyAgICAgICAgYm9vbCBzdHVuU2V0ID0gZmFsc2U7CisgICAgICAgIGZv
ciAoYXV0byYgdXJsIDogc2VydmVyLnVybHMpIHsKKyAgICAgICAgICAgIGlmICh1cmwucHJvdG9j
b2woKS5zdGFydHNXaXRoKCJ0dXJuIikpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHZhbGlkID0g
dXJsLnN0cmluZygpLmlzb2xhdGVkQ29weSgpLnJlcGxhY2UoInR1cm46IiwgInR1cm46Ly8iKS5y
ZXBsYWNlKCJ0dXJuczoiLCAidHVybnM6Ly8iKTsKKyAgICAgICAgICAgICAgICBVUkwgdmFsaWRV
UkwoVVJMKCksIHZhbGlkKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogbGlibmljZSBjdXJy
ZW50bHkgZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBJUHY2IGFkZHJlc3NlcyB2ZXJ5IHdlbGwuCisg
ICAgICAgICAgICAgICAgaWYgKHZhbGlkVVJMLmhvc3QoKS5zdGFydHNXaXRoKCdbJykpCisgICAg
ICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHZhbGlkVVJMLnNldFVz
ZXIoc2VydmVyLnVzZXJuYW1lKTsKKyAgICAgICAgICAgICAgICB2YWxpZFVSTC5zZXRQYXNzd29y
ZChzZXJ2ZXIuY3JlZGVudGlhbCk7CisgICAgICAgICAgICAgICAgYm9vbCByZXN1bHQgPSBmYWxz
ZTsKKyAgICAgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0
KCksICJhZGQtdHVybi1zZXJ2ZXIiLCB2YWxpZFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAm
cmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICAg
ICAgR1NUX1dBUk5JTkcoIlVuYWJsZSB0byB1c2UgVFVSTiBzZXJ2ZXI6ICVzIiwgdmFsaWRVUkwu
c3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAo
IXN0dW5TZXQgJiYgdXJsLnByb3RvY29sKCkuc3RhcnRzV2l0aCgic3R1biIpKSB7CisgICAgICAg
ICAgICAgICAgYXV0byB2YWxpZCA9IHVybC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKS5yZXBsYWNl
KCJzdHVuOiIsICJzdHVuOi8vIik7CisgICAgICAgICAgICAgICAgVVJMIHZhbGlkVVJMKFVSTCgp
LCB2YWxpZCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGxpYm5pY2UgY3VycmVudGx5IGRv
ZXNuJ3Qgc2VlbSB0byBoYW5kbGUgSVB2NiBhZGRyZXNzZXMgdmVyeSB3ZWxsLgorICAgICAgICAg
ICAgICAgIGlmICh2YWxpZFVSTC5ob3N0KCkuc3RhcnRzV2l0aCgnWycpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB2YWxpZFVSTC5zZXRVc2VyKHNlcnZl
ci51c2VybmFtZSk7CisgICAgICAgICAgICAgICAgdmFsaWRVUkwuc2V0UGFzc3dvcmQoc2VydmVy
LmNyZWRlbnRpYWwpOworICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3dlYnJ0Y0Jpbi5n
ZXQoKSwgInN0dW4tc2VydmVyIiwgdmFsaWRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbnVs
bHB0cik7CisgICAgICAgICAgICAgICAgc3R1blNldCA9IHRydWU7CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXSVA6IGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9w
Lm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMzAyCisgICAg
R1NUX0ZJWE1FKCIlenUgY3VzdG9tIGNlcnRpZmljYXRlcyBub3QgcHJvcGFnYXRlZCB0byB3ZWJy
dGNiaW4iLCBjb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5zaXplKCkpOworCisgICAgZ3N0X2Vs
ZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJFbmQtcG9pbnQgcmVhZHkiKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXN0
YXJ0SWNlKCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJyZXN0
YXJ0aW5nIElDRSIpOworICAgIC8vIFdJUCBpbiBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5v
cmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3RzLzE4NzcKKyAgICBH
VW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gb3B0aW9ucyhnc3Rfc3RydWN0dXJlX25ldygid2VicnRj
YmluLW9mZmVyLW9wdGlvbnMiLCAiaWNlLXJlc3RhcnQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwg
bnVsbHB0cikpOworICAgIGluaXRpYXRlKHRydWUsIFdURk1vdmUob3B0aW9ucykpOworfQorCitz
dGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UlRDU2RwVHlwZSwgU3RyaW5nPj4gZmV0Y2hE
ZXNjcmlwdGlvbihHc3RFbGVtZW50KiB3ZWJydGNCaW4sIGNvbnN0IGNoYXIqIG5hbWUpCit7Cisg
ICAgaWYgKCF3ZWJydGNCaW4pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBHVW5pcXVlT3V0
UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVzY3JpcHRpb247CisgICAgZ19vYmpl
Y3RfZ2V0KHdlYnJ0Y0JpbiwgbWFrZVN0cmluZyhuYW1lLCAiLWRlc2NyaXB0aW9uIikudXRmOCgp
LmRhdGEoKSwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBpZiAoIWRlc2Ny
aXB0aW9uKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHBT
dHJpbmcoZ3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoZGVzY3JpcHRpb24tPnNkcCkpOworICAgIEdT
VF9UUkFDRV9PQkpFQ1Qod2VicnRjQmluLCAiJXMtZGVzY3JpcHRpb24gU0RQOiAlcyIsIG5hbWUs
IHNkcFN0cmluZy5nZXQoKSk7CisgICAgcmV0dXJuIHsgeyBmcm9tU2Vzc2lvbkRlc2NyaXB0aW9u
VHlwZSgqZGVzY3JpcHRpb24uZ2V0KCkpLCBzZHBTdHJpbmcuZ2V0KCkgfSB9OworfQorCitzdGF0
aWMgR3N0V2ViUlRDU2lnbmFsaW5nU3RhdGUgZmV0Y2hTaWduYWxpbmdTdGF0ZShHc3RFbGVtZW50
KiB3ZWJydGNCaW4pCit7CisgICAgR3N0V2ViUlRDU2lnbmFsaW5nU3RhdGUgc3RhdGU7CisgICAg
Z19vYmplY3RfZ2V0KHdlYnJ0Y0JpbiwgInNpZ25hbGluZy1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0
cik7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIEdVbmlxdWVQdHI8Y2hhcj4g
ZGVzYyhnX2VudW1fdG9fc3RyaW5nKEdTVF9UWVBFX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEUsIHN0
YXRlKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVCh3ZWJydGNCaW4sICJTaWduYWxpbmcgc3RhdGUg
c2V0IHRvICVzIiwgZGVzYy5nZXQoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gc3RhdGU7Cit9CisK
K2VudW0gY2xhc3MgR2F0aGVyU2lnbmFsaW5nU3RhdGUgeyBObywgWWVzIH07CitzdGF0aWMgc3Rk
OjpvcHRpb25hbDxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkRlc2NyaXB0aW9uU3RhdGVzPiBkZXNj
cmlwdGlvbnNGcm9tV2ViUlRDQmluKEdzdEVsZW1lbnQqIHdlYnJ0Y0JpbiwgR2F0aGVyU2lnbmFs
aW5nU3RhdGUgZ2F0aGVyU2lnbmFsaW5nU3RhdGUgPSBHYXRoZXJTaWduYWxpbmdTdGF0ZTo6Tm8p
Cit7CisgICAgc3RkOjpvcHRpb25hbDxSVENTZHBUeXBlPiBjdXJyZW50TG9jYWxEZXNjcmlwdGlv
blNkcFR5cGUsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSwgY3VycmVudFJlbW90ZURl
c2NyaXB0aW9uU2RwVHlwZSwgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwVHlwZTsKKyAgICBT
dHJpbmcgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHAsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9u
U2RwLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHAsIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlv
blNkcDsKKyAgICBpZiAoYXV0byBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3Jp
cHRpb24od2VicnRjQmluLCAiY3VycmVudC1sb2NhbCIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5
cGUsIGRlc2NyaXB0aW9uXSA9ICpjdXJyZW50TG9jYWxEZXNjcmlwdGlvbjsKKyAgICAgICAgY3Vy
cmVudExvY2FsRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgY3VycmVudExv
Y2FsRGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAgaWYg
KGF1dG8gcGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gPSBmZXRjaERlc2NyaXB0aW9uKHdlYnJ0Y0Jp
biwgInBlbmRpbmctbG9jYWwiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlv
bl0gPSAqcGVuZGluZ0xvY2FsRGVzY3JpcHRpb247CisgICAgICAgIHBlbmRpbmdMb2NhbERlc2Ny
aXB0aW9uU2RwVHlwZSA9IHNkcFR5cGU7CisgICAgICAgIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9u
U2RwID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChhdXRvIGN1cnJlbnRS
ZW1vdGVEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAiY3VycmVudC1y
ZW1vdGUiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAqY3VycmVu
dFJlbW90ZURlc2NyaXB0aW9uOworICAgICAgICBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHBU
eXBlID0gc2RwVHlwZTsKKyAgICAgICAgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwID0gV1RG
TW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChhdXRvIHBlbmRpbmdSZW1vdGVEZXNj
cmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAicGVuZGluZy1yZW1vdGUiKSkg
eworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAqcGVuZGluZ1JlbW90ZURl
c2NyaXB0aW9uOworICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlID0gc2Rw
VHlwZTsKKyAgICAgICAgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwID0gV1RGTW92ZShkZXNj
cmlwdGlvbik7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxSVENTaWduYWxpbmdTdGF0ZT4g
c2lnbmFsaW5nU3RhdGU7CisgICAgaWYgKGdhdGhlclNpZ25hbGluZ1N0YXRlID09IEdhdGhlclNp
Z25hbGluZ1N0YXRlOjpZZXMpCisgICAgICAgIHNpZ25hbGluZ1N0YXRlID0gdG9TaWduYWxpbmdT
dGF0ZShmZXRjaFNpZ25hbGluZ1N0YXRlKHdlYnJ0Y0JpbikpOworCisgICAgcmV0dXJuIFBlZXJD
b25uZWN0aW9uQmFja2VuZDo6RGVzY3JpcHRpb25TdGF0ZXMgeworICAgICAgICBzaWduYWxpbmdT
dGF0ZSwKKyAgICAgICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHBUeXBlLCBjdXJyZW50TG9j
YWxEZXNjcmlwdGlvblNkcCwKKyAgICAgICAgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHBUeXBl
LCBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvblNkcCwKKyAgICAgICAgY3VycmVudFJlbW90ZURlc2Ny
aXB0aW9uU2RwVHlwZSwgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwLAorICAgICAgICBwZW5k
aW5nUmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHAK
KyAgICB9OworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvU2V0TG9jYWxEZXNj
cmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQoreworICAg
IHNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uLCB0cnVlLCBbcHJvdGVjdGVkVGhpcyA9IFJlZigq
dGhpcyldIHsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnNGcm9tV2Vi
UlRDQmluKHByb3RlY3RlZFRoaXMtPm1fd2VicnRjQmluLmdldCgpLCBHYXRoZXJTaWduYWxpbmdT
dGF0ZTo6WWVzKTsKKyAgICAgICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiB0cmFu
c3BvcnQ7CisgICAgICAgIGdfb2JqZWN0X2dldChwcm90ZWN0ZWRUaGlzLT5tX3dlYnJ0Y0Jpbi5n
ZXQoKSwgInNjdHAtdHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7Cisg
ICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldExvY2FsRGVz
Y3JpcHRpb25TdWNjZWVkZWQoV1RGTW92ZShkZXNjcmlwdGlvbnMpLCB0cmFuc3BvcnQgPyBtYWtl
VW5pcXVlPEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kPihXVEZNb3ZlKHRyYW5zcG9ydCkp
IDogbnVsbHB0cik7CisgICAgfSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXShjb25zdCBH
RXJyb3IqIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHU1Rf
V0VCUlRDX0VSUk9SX0lOVkFMSURfU1RBVEUpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5t
X3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRMb2NhbERlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlv
biB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIHNldCBsb2NhbCBhbnN3ZXIgc2RwOiBu
byBwZW5kaW5nIHJlbW90ZSBkZXNjcmlwdGlvbi4iX3MgfSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldExvY2FsRGVz
Y3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBw
bHkgc2Vzc2lvbiBsb2NhbCBkZXNjcmlwdGlvbiJfcyB9KTsKKyAgICB9KTsKK30KKwordm9pZCBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZCgpCit7
CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWNraW5nIHJlbW90ZSBk
ZXNjcmlwdGlvbiIpOworICAgIGF1dG8gZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zRnJvbVdl
YlJUQ0JpbihtX3dlYnJ0Y0Jpbi5nZXQoKSwgR2F0aGVyU2lnbmFsaW5nU3RhdGU6Olllcyk7Cisg
ICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiB0cmFuc3BvcnQ7CisgICAgZ19vYmpl
Y3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAic2N0cC10cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91
dFB0cigpLCBudWxscHRyKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRSZW1vdGVE
ZXNjcmlwdGlvblN1Y2NlZWRlZChXVEZNb3ZlKGRlc2NyaXB0aW9ucyksIHRyYW5zcG9ydCA/IG1h
a2VVbmlxdWU8R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ+KFdURk1vdmUodHJhbnNwb3J0
KSkgOiBudWxscHRyKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb1NldFJl
bW90ZURlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
Cit7CisgICAgc2V0RGVzY3JpcHRpb24oJmRlc2NyaXB0aW9uLCBmYWxzZSwgW3Byb3RlY3RlZFRo
aXMgPSBSZWYoKnRoaXMpXSB7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPnNldFJlbW90ZURlc2Ny
aXB0aW9uU3VjY2VlZGVkKCk7CisgICAgfSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXShj
b25zdCBHRXJyb3IqIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci0+Y29kZSA9
PSBHU1RfV0VCUlRDX0VSUk9SX0lOVkFMSURfU1RBVEUpCisgICAgICAgICAgICBwcm90ZWN0ZWRU
aGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRSZW1vdGVEZXNjcmlwdGlvbkZhaWxlZChF
eGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBzZXQgcmVtb3RlIGFuc3dl
ciBzZHAiX3MgfSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1f
cGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldFJlbW90ZURlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlv
biB7IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFwcGx5IHNlc3Npb24gcmVtb3RlIGRlc2Ny
aXB0aW9uIl9zIH0pOworICAgIH0pOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0
YXJ0TG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKworc3RydWN0IFNldERlc2NyaXB0aW9uQ2Fs
bERhdGEgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICBTZXREZXNj
cmlwdGlvbkNhbGxEYXRhKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQmIGVuZFBvaW50LCBGdW5jdGlv
bjx2b2lkKCk+JiYgc3VjY2Vzc0NhbGxiYWNrLCBGdW5jdGlvbjx2b2lkKGNvbnN0IEdFcnJvciop
PiYmIGZhaWx1cmVDYWxsYmFjaykKKyAgICAgICAgOiBzdWNjZXNzQ2FsbGJhY2soV1RGTW92ZShz
dWNjZXNzQ2FsbGJhY2spKQorICAgICAgICAsIGZhaWx1cmVDYWxsYmFjayhXVEZNb3ZlKGZhaWx1
cmVDYWxsYmFjaykpCisgICAgICAgICwgZW5kUG9pbnQoZW5kUG9pbnQpIHsgfQorCisgICAgRnVu
Y3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2s7CisgICAgRnVuY3Rpb248dm9pZChjb25zdCBH
RXJyb3IqKT4gZmFpbHVyZUNhbGxiYWNrOworICAgIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQmIGVu
ZFBvaW50OworfTsKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXREZXNjcmlwdGlv
bihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uLCBib29sIGlzTG9jYWws
IEZ1bmN0aW9uPHZvaWQoKT4mJiBzdWNjZXNzQ2FsbGJhY2ssIEZ1bmN0aW9uPHZvaWQoY29uc3Qg
R0Vycm9yKik+JiYgZmFpbHVyZUNhbGxiYWNrKQoreworICAgIEdzdFNEUE1lc3NhZ2UqIG1lc3Nh
Z2U7CisgICAgYXV0byBzZHBUeXBlID0gUlRDU2RwVHlwZTo6T2ZmZXI7CisKKyAgICBpZiAoZGVz
Y3JpcHRpb24pIHsKKyAgICAgICAgaWYgKGdzdF9zZHBfbWVzc2FnZV9uZXdfZnJvbV90ZXh0KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRlc2NyaXB0aW9uLT5zZHAoKS5jaGFyYWN0ZXJz
OCgpKSwgJm1lc3NhZ2UpICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAgICAgIGZhaWx1cmVDYWxs
YmFjayhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBz
ZHBUeXBlID0gZGVzY3JpcHRpb24tPnR5cGUoKTsKKyAgICB9IGVsc2UgaWYgKGdzdF9zZHBfbWVz
c2FnZV9uZXcoJm1lc3NhZ2UpICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAgZmFpbHVyZUNhbGxi
YWNrKG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc0xvY2Fs
KQorICAgICAgICBzdG9yZVJlbW90ZU1MaW5lSW5mbyhtZXNzYWdlKTsKKworICAgIGF1dG8gdHlw
ZSA9IHRvU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShzZHBUeXBlKTsKKyAgICBHU1RfREVCVUdfT0JK
RUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDcmVhdGluZyAlcyBzZXNzaW9uIGZvciBTRFAgJXMiLCBp
c0xvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLCBnc3Rfd2VicnRjX3NkcF90eXBlX3RvX3N0cmlu
Zyh0eXBlKSk7CisKKyAgICBHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4g
c2Vzc2lvbkRlc2NyaXB0aW9uKGdzdF93ZWJydGNfc2Vzc2lvbl9kZXNjcmlwdGlvbl9uZXcodHlw
ZSwgbWVzc2FnZSkpOworICAgIGF1dG8gc2lnbmFsTmFtZSA9IG1ha2VTdHJpbmcoInNldC0iLCBp
c0xvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLCAiLWRlc2NyaXB0aW9uIik7CisgICAgYXV0byBk
YXRhID0gbWFrZVVuaXF1ZTxTZXREZXNjcmlwdGlvbkNhbGxEYXRhPigqdGhpcywgV1RGTW92ZShz
dWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpOworICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgc2lnbmFsTmFtZS5hc2NpaSgpLmRhdGEo
KSwgc2Vzc2lvbkRlc2NyaXB0aW9uLmdldCgpLCBnc3RfcHJvbWlzZV9uZXdfd2l0aF9jaGFuZ2Vf
ZnVuYyhbXShHc3RQcm9taXNlKiByYXdQcm9taXNlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAg
ICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2V0RGVzY3JpcHRpb25DYWxsRGF0YT4gZGF0YShyZWludGVy
cHJldF9jYXN0PFNldERlc2NyaXB0aW9uQ2FsbERhdGEqPih1c2VyRGF0YSkpOworICAgICAgICBh
dXRvIHByb21pc2UgPSBhZG9wdEdSZWYocmF3UHJvbWlzZSk7CisgICAgICAgIGF1dG8gcmVzdWx0
ID0gZ3N0X3Byb21pc2Vfd2FpdChwcm9taXNlLmdldCgpKTsKKyAgICAgICAgY29uc3QgYXV0byog
cmVwbHkgPSBnc3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIGlm
IChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQgfHwgKHJlcGx5ICYmIGdzdF9z
dHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlcGx5LCAiZXJyb3IiKSkpIHsKKyAgICAgICAgICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIGlmIChyZXBseSkgeworICAgICAg
ICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJlcGx5LCAiZXJyb3IiLCBHX1RZUEVfRVJST1Is
ICZlcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgR1NUX0VSUk9SX09C
SkVDVChkYXRhLT5lbmRQb2ludC5waXBlbGluZSgpLCAiVW5hYmxlIHRvIHNldCBkZXNjcmlwdGlv
biwgZXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbZXJyb3IgPSBlcnJvci5nZXQoKSwgcHJvdGVjdGVkVGhpcyA9
IFJlZihkYXRhLT5lbmRQb2ludCksIGZhaWx1cmVDYWxsYmFjayA9IFdURk1vdmUoZGF0YS0+ZmFp
bHVyZUNhbGxiYWNrKV0geworICAgICAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0
b3BwZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIGZh
aWx1cmVDYWxsYmFjayhlcnJvcik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0g
UmVmKGRhdGEtPmVuZFBvaW50KSwgc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShkYXRhLT5zdWNj
ZXNzQ2FsbGJhY2spXSB7CisgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVk
KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgc3VjY2Vzc0NhbGxiYWNr
KCk7CisgICAgICAgIH0pOworICAgIH0sIGRhdGEucmVsZWFzZSgpLCBudWxscHRyKSk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcmVSZW1vdGVNTGluZUluZm8oR3N0U0RQ
TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBtX3JlbW90ZU1MaW5lSW5mb3MuY2xlYXIoKTsKKyAg
ICB1bnNpZ25lZCB0b3RhbE1lZGlhcyA9IGdzdF9zZHBfbWVzc2FnZV9tZWRpYXNfbGVuKG1lc3Nh
Z2UpOworICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5yZXNlcnZlQ2FwYWNpdHkodG90YWxNZWRpYXMp
OworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlN0b3JpbmcgJXUgcmVt
b3RlIHBlbmRpbmcgbWxpbmVzIiwgdG90YWxNZWRpYXMpOworICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCB0b3RhbE1lZGlhczsgaSsrKSB7CisgICAgICAgIGNvbnN0IEdzdFNEUE1lZGlhKiBt
ZWRpYSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEobWVzc2FnZSwgaSk7CisgICAgICAgIGNv
bnN0IGNoYXIqIHR5cCA9IGdzdF9zZHBfbWVkaWFfZ2V0X21lZGlhKG1lZGlhKTsKKyAgICAgICAg
aWYgKCFnX3N0cl9lcXVhbCh0eXAsICJhdWRpbyIpICYmICFnX3N0cl9lcXVhbCh0eXAsICJ2aWRl
byIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RF
QlVHCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbWVkaWFSZXByZXNlbnRhdGlvbihnc3Rfc2Rw
X21lZGlhX2FzX3RleHQobWVkaWEpKTsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QobV9waXBlbGlu
ZS5nZXQoKSwgIlByb2Nlc3NpbmcgbWVkaWE6XG4lcyIsIG1lZGlhUmVwcmVzZW50YXRpb24uZ2V0
KCkpOworI2VuZGlmCisgICAgICAgIGNvbnN0IGNoYXIqIG1pZCA9IGdzdF9zZHBfbWVkaWFfZ2V0
X2F0dHJpYnV0ZV92YWwobWVkaWEsICJtaWQiKTsKKyAgICAgICAgaWYgKCFtaWQpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBib29sIGlzSW5hY3RpdmUgPSBmYWxzZTsKKyAgICAg
ICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgZ3N0X3NkcF9tZWRpYV9hdHRyaWJ1dGVzX2xl
bihtZWRpYSk7IGlpKyspIHsKKyAgICAgICAgICAgIGNvbnN0IEdzdFNEUEF0dHJpYnV0ZSogYXR0
ciA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZShtZWRpYSwgaWkpOworICAgICAgICAgICAg
aWYgKCFnX3N0cmNtcDAoYXR0ci0+a2V5LCAiaW5hY3RpdmUiKSkgeworICAgICAgICAgICAgICAg
IGlzSW5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgICAgIGlmIChpc0luYWN0aXZlKSB7CisgICAgICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTa2lwcGluZyBpbmFjdGl2ZSBtZWRpYSIp
OworICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBtX21lZGlhRm9y
TWlkLnNldChTdHJpbmcobWlkKSwgZ19zdHJfZXF1YWwodHlwLCAiYXVkaW8iKSA/IFJlYWx0aW1l
TWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvIDogUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Vmlk
ZW8pOworCisgICAgICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFt
ZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTkwNworICAgICAgICBpZiAoc2Rw
TWVkaWFIYXNBdHRyaWJ1dGVLZXkobWVkaWEsICJpY2UtbGl0ZSIpKSB7CisgICAgICAgICAgICBH
UmVmUHRyPEdPYmplY3Q+IGljZTsKKyAgICAgICAgICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jp
bi5nZXQoKSwgImljZS1hZ2VudCIsICZpY2Uub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICAg
ICAgZ19vYmplY3Rfc2V0KGljZS5nZXQoKSwgImljZS1saXRlIiwgVFJVRSwgbnVsbHB0cik7Cisg
ICAgICAgIH0KKworICAgICAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Vt
cHR5KCkpOworICAgICAgICBWZWN0b3I8aW50PiBwYXlsb2FkVHlwZXM7CisgICAgICAgIHVuc2ln
bmVkIHRvdGFsRm9ybWF0cyA9IGdzdF9zZHBfbWVkaWFfZm9ybWF0c19sZW4obWVkaWEpOworICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJNZWRpYSAlcyBoYXMgJXUg
Zm9ybWF0cyIsIHR5cCwgdG90YWxGb3JtYXRzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBqID0g
MDsgaiA8IHRvdGFsRm9ybWF0czsgaisrKSB7CisgICAgICAgICAgICBhdXRvIGZvcm1hdCA9IFN0
cmluZyhnc3Rfc2RwX21lZGlhX2dldF9mb3JtYXQobWVkaWEsIGopKTsKKyAgICAgICAgICAgIGF1
dG8gcGF5bG9hZFR5cGUgPSBwYXJzZUludGVnZXI8aW50Pihmb3JtYXQpOworICAgICAgICAgICAg
aWYgKCFwYXlsb2FkVHlwZSB8fCAhKnBheWxvYWRUeXBlKSB7CisgICAgICAgICAgICAgICAgR1NU
X1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJJbnZhbGlkIHBheWxvYWQgdHlwZTog
JXMiLCBmb3JtYXQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIGZvcm1hdENhcHMgPSBhZG9wdEdSZWYoZ3N0
X3NkcF9tZWRpYV9nZXRfY2Fwc19mcm9tX21lZGlhKG1lZGlhLCAqcGF5bG9hZFR5cGUpKTsKKyAg
ICAgICAgICAgIGlmICghZm9ybWF0Q2FwcykgeworICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5H
X09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTm8gY2FwcyBmb3VuZCBmb3IgcGF5bG9hZCB0eXBl
ICVkIiwgKnBheWxvYWRUeXBlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgLy8gUmVsYXkgU0RQIGF0dHJpYnV0ZXMgdG8gdGhlIGNhcHMs
IHRoaXMgaXMgc3BlY2lhbGx5IHVzZWZ1bCBzbyB0aGF0IGVsZW1lbnRzIGluCisgICAgICAgICAg
ICAvLyB3ZWJydGNiaW4gd2lsbCBiZSBhYmxlIHRvIGVuYWJsZSBSVFAgaGVhZGVyIGV4dGVuc2lv
bnMuCisgICAgICAgICAgICBnc3Rfc2RwX21lZGlhX2F0dHJpYnV0ZXNfdG9fY2FwcyhtZWRpYSwg
Zm9ybWF0Q2Fwcy5nZXQoKSk7CisKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZChjYXBzLmdl
dCgpLCBmb3JtYXRDYXBzLmxlYWtSZWYoKSk7CisgICAgICAgICAgICBtX3B0Q291bnRlciA9IHN0
ZDo6bWF4KG1fcHRDb3VudGVyLCAqcGF5bG9hZFR5cGUgKyAxKTsKKyAgICAgICAgICAgIHBheWxv
YWRUeXBlcy5hcHBlbmQoKnBheWxvYWRUeXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2ln
bmVkIHRvdGFsQ2FwcyA9IGdzdF9jYXBzX2dldF9zaXplKGNhcHMuZ2V0KCkpOworICAgICAgICBp
ZiAodG90YWxDYXBzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGogPSAwOyBqIDwgdG90
YWxDYXBzOyBqKyspIHsKKyAgICAgICAgICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgaik7CisgICAgICAgICAgICAgICAg
Z3N0X3N0cnVjdHVyZV9zZXRfbmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNhdGlvbi94LXJ0cCIpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdl
dCgpLCAiQ2FjaGluZyBwYXlsb2FkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgp
KTsKKyAgICAgICAgICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5hcHBlbmQoeyBXVEZNb3ZlKGNhcHMp
LCBmYWxzZSwgV1RGTW92ZShwYXlsb2FkVHlwZXMpIH0pOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNvbmZpZ3VyZUFuZExpbmtTb3VyY2UoUmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyJiBzb3VyY2UpCit7CisgICAgYXV0byBj
YXBzID0gc291cmNlLmFsbG93ZWRDYXBzKCk7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8
UGVuZGluZ01MaW5lSW5mbywgR1JlZlB0cjxHc3RDYXBzPj4+IGZvdW5kOworICAgIGZvciAoYXV0
byYgbUxpbmVJbmZvIDogbV9yZW1vdGVNTGluZUluZm9zKSB7CisgICAgICAgIGlmIChtTGluZUlu
Zm8uaXNVc2VkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25l
ZCBpID0gMDsgaSA8IGdzdF9jYXBzX2dldF9zaXplKG1MaW5lSW5mby5jYXBzLmdldCgpKTsgaSsr
KSB7CisgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJl
KG1MaW5lSW5mby5jYXBzLmdldCgpLCBpKTsKKyAgICAgICAgICAgIGF1dG8gY2FwczIgPSBhZG9w
dEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSksIG51
bGxwdHIpKTsKKyAgICAgICAgICAgIGF1dG8gaW50ZXJzZWN0ZWQgPSBhZG9wdEdSZWYoZ3N0X2Nh
cHNfaW50ZXJzZWN0KGNhcHMuZ2V0KCksIGNhcHMyLmdldCgpKSk7CisgICAgICAgICAgICBpZiAo
IWdzdF9jYXBzX2lzX2VtcHR5KGludGVyc2VjdGVkLmdldCgpKSkgeworICAgICAgICAgICAgICAg
IGZvdW5kID0gc3RkOjptYWtlX3BhaXIobUxpbmVJbmZvLCBXVEZNb3ZlKGludGVyc2VjdGVkKSk7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGZvdW5kLmhhc192YWx1ZSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisg
ICAgYm9vbCBwYXlsb2FkVHlwZVdhc1NldCA9IGZhbHNlOworICAgIGlmIChmb3VuZCkgeworICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJVbnVzZWQgYW5kIGNvbXBh
dGlibGUgY2FwcyBmb3VuZCBmb3IgJSIgR1NUX1BUUl9GT1JNQVQgIi4uLiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgY2Fwcy5nZXQoKSwgZm91bmQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIHBheWxvYWRU
eXBlV2FzU2V0ID0gc291cmNlLnNldFBheWxvYWRUeXBlKGZvdW5kLT5zZWNvbmQpOworICAgICAg
ICBmb3VuZC0+Zmlyc3QuaXNVc2VkID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGF5bG9h
ZFR5cGVXYXNTZXQgPSBzb3VyY2Uuc2V0UGF5bG9hZFR5cGUoY2Fwcyk7CisKKyAgICBpZiAoIXBh
eWxvYWRUeXBlV2FzU2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNvdXJjZS5wYWQo
KSkgeworICAgICAgICBzb3VyY2Uuc2V0U2lua1BhZChyZXF1ZXN0UGFkKG1fcmVxdWVzdFBhZENv
dW50ZXIsIHNvdXJjZS5hbGxvd2VkQ2FwcygpKSk7CisgICAgICAgIG1fcmVxdWVzdFBhZENvdW50
ZXIrKzsKKyAgICB9CisKKyAgICBhdXRvJiBzaW5rUGFkID0gc291cmNlLnBhZCgpOworICAgIFJF
TEVBU0VfQVNTRVJUKCFnc3RfcGFkX2lzX2xpbmtlZChzaW5rUGFkLmdldCgpKSk7CisgICAgYXV0
byBzb3VyY2VCaW4gPSBzb3VyY2UuYmluKCk7CisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNU
KG1fcGlwZWxpbmUuZ2V0KCkpLCBzb3VyY2VCaW4uZ2V0KCkpOworICAgIHNvdXJjZS5saW5rKCk7
CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBhZElkKGdzdF9wYWRfZ2V0X25hbWUoc2lua1BhZC5n
ZXQoKSkpOworICAgIGF1dG8gZG90RmlsZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFN
RShtX3BpcGVsaW5lLmdldCgpKSwgIi5vdXRnb2luZy0iLCBwYWRJZC5nZXQoKSk7CisgICAgR1NU
X0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSks
IEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Cit9
CisKK0dSZWZQdHI8R3N0UGFkPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXF1ZXN0UGFkKHVu
c2lnbmVkIG1saW5lSW5kZXgsIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGFsbG93ZWRDYXBzKQor
eworICAgIGF1dG8gcGFkSWQgPSBtYWtlU3RyaW5nKCJzaW5rXyIsIG1saW5lSW5kZXgpOworICAg
IGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19jb3B5KGFsbG93ZWRDYXBzLmdldCgpKSk7
CisKKyAgICBnc3RfY2Fwc19tYXBfaW5fcGxhY2UoY2Fwcy5nZXQoKSwgW10oR3N0Q2Fwc0ZlYXR1
cmVzKiwgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9v
bGVhbiB7CisgICAgICAgIGF1dG8qIGVuZFBvaW50ID0gcmVpbnRlcnByZXRfY2FzdDxHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Kj4odXNlckRhdGEpOworICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChz
dHJ1Y3R1cmUsICJwYXlsb2FkIiwgR19UWVBFX0lOVCwgZW5kUG9pbnQtPm1fcHRDb3VudGVyKyss
IG51bGxwdHIpOworICAgICAgICByZXR1cm4gVFJVRTsKKyAgICB9LCB0aGlzKTsKKworICAgIC8v
IEZJWE1FOiBSZXN0cmljdGluZyBjYXBzIGFuZCBjb2RlYy1wcmVmZXJlbmNlcyBicmVha3MgY2Fw
cyBuZWdvdGlhdGlvbiBvZiBvdXRnb2luZyBzb3VyY2VzIGluCisgICAgLy8gc29tZSBjYXNlIChq
aXRzaSkuCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVxdWVzdGlu
ZyBwYWQgJXMgcmVzdHJpY3RlZCB0byAlIiBHU1RfUFRSX0ZPUk1BVCwgcGFkSWQudXRmOCgpLmRh
dGEoKSwgY2Fwcy5nZXQoKSk7CisgICAgYXV0byogcGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9n
ZXRfcGFkX3RlbXBsYXRlKG1fd2VicnRjQmluLmdldCgpLCAic2lua18ldSIpOworICAgIGF1dG8g
c2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9yZXF1ZXN0X3BhZChtX3dlYnJ0Y0Jpbi5n
ZXQoKSwgcGFkVGVtcGxhdGUsIHBhZElkLnV0ZjgoKS5kYXRhKCksIGNhcHMuZ2V0KCkpKTsKKyAg
ICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiB0cmFuc2NlaXZlcjsKKyAgICBnX29i
amVjdF9nZXQoc2lua1BhZC5nZXQoKSwgInRyYW5zY2VpdmVyIiwgJnRyYW5zY2VpdmVyLm91dFB0
cigpLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9zZXQodHJhbnNjZWl2ZXIuZ2V0KCksICJjb2Rl
Yy1wcmVmZXJlbmNlcyIsIGNhcHMuZ2V0KCksIG51bGxwdHIpOworICAgIHJldHVybiBzaW5rUGFk
OworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYWNrKEdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQmIHNlbmRlciwgTWVkaWFTdHJlYW1UcmFjayYgdHJhY2ssIGNvbnN0IEZp
eGVkVmVjdG9yPFN0cmluZz4mKQoreworICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNv
dXJjZSBzb3VyY2U7CisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IHJ0Y1NlbmRlcjsK
KworICAgIGlmICh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNBdWRpbygpKSB7CisgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyBvdXRnb2luZyBhdWRpbyBz
b3VyY2UiKTsKKyAgICAgICAgYXV0byBhdWRpb1NvdXJjZSA9IFJlYWx0aW1lT3V0Z29pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAg
Y29uZmlndXJlQW5kTGlua1NvdXJjZShhdWRpb1NvdXJjZSk7CisKKyAgICAgICAgcnRjU2VuZGVy
ID0gYXVkaW9Tb3VyY2UtPnNlbmRlcigpOworICAgICAgICBzb3VyY2UgPSBXVEZNb3ZlKGF1ZGlv
U291cmNlKTsKKyAgICB9IGVsc2UgeworICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cmFjay5wcml2
YXRlVHJhY2soKS5oYXNWaWRlbygpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVs
aW5lLmdldCgpLCAiQWRkaW5nIG91dGdvaW5nIHZpZGVvIHNvdXJjZSIpOworICAgICAgICBhdXRv
IHZpZGVvU291cmNlID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjcmVh
dGUodHJhY2sucHJpdmF0ZVRyYWNrKCkpOworICAgICAgICBjb25maWd1cmVBbmRMaW5rU291cmNl
KHZpZGVvU291cmNlKTsKKworICAgICAgICBydGNTZW5kZXIgPSB2aWRlb1NvdXJjZS0+c2VuZGVy
KCk7CisgICAgICAgIHNvdXJjZSA9IFdURk1vdmUodmlkZW9Tb3VyY2UpOworICAgIH0KKworICAg
IHNlbmRlci5zZXRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKKworICAgIGlmIChhdXRvIHJ0cFNl
bmRlciA9IHNlbmRlci5ydGNTZW5kZXIoKSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJBbHJlYWR5IGhhcyBhIHNlbmRlci4iKTsKKyAgICAgICAgcmV0dXJu
IHRydWU7CisgICAgfQorCisgICAgc2VuZGVyLnNldFJUQ1NlbmRlcihXVEZNb3ZlKHJ0Y1NlbmRl
cikpOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU2VuZGVyIGNv
bmZpZ3VyZWQiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpyZW1vdmVUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIpCit7
CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVtb3ZpbmcgdHJhY2si
KTsKKyAgICBhdXRvIGJpbiA9IHNlbmRlci5zdG9wU291cmNlKCk7CisgICAgaWYgKGJpbikKKyAg
ICAgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBiaW4u
Z2V0KCkpOworICAgIHNlbmRlci5jbGVhclNvdXJjZSgpOworICAgIG9uTmVnb3RpYXRpb25OZWVk
ZWQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0ZU9mZmVyKGNv
bnN0IFJUQ09mZmVyT3B0aW9ucyYgb3B0aW9ucykKK3sKKyAgICAvLyBodHRwczovL2dpdGxhYi5m
cmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3Rz
LzE4NzcKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gb2ZmZXJPcHRpb25zKGdzdF9zdHJ1
Y3R1cmVfbmV3KCJ3ZWJydGNiaW4tb2ZmZXItb3B0aW9ucyIsICJpY2UtcmVzdGFydCIsIEdfVFlQ
RV9CT09MRUFOLCBvcHRpb25zLmljZVJlc3RhcnQsIG51bGxwdHIpKTsKKyAgICAvLyBGSVhNRTog
UGx1bWIgb3B0aW9ucy52b2ljZUFjdGl2aXR5RGV0ZWN0aW9uLgorICAgIGluaXRpYXRlKHRydWUs
IFdURk1vdmUob2ZmZXJPcHRpb25zKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6ZG9DcmVhdGVBbnN3ZXIoKQoreworICAgIGluaXRpYXRlKGZhbHNlLCBudWxscHRyKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWF0ZShib29sIGlzSW5pdGlhdG9y
LCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBvcHRpb25zKQoreworICAgIG1faXNJbml0aWF0
b3IgPSBpc0luaXRpYXRvcjsKKyAgICBjb25zdCBjaGFyKiB0eXBlID0gaXNJbml0aWF0b3IgPyAi
b2ZmZXIiIDogImFuc3dlciI7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgp
LCAiQ3JlYXRpbmcgJXMiLCB0eXBlKTsKKyAgICBhdXRvIHNpZ25hbE5hbWUgPSBtYWtlU3RyaW5n
KCJjcmVhdGUtIiwgdHlwZSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmlu
LmdldCgpLCBzaWduYWxOYW1lLmFzY2lpKCkuZGF0YSgpLCBvcHRpb25zLnJlbGVhc2UoKSwgZ3N0
X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlzZSwg
Z3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byogZW5kcG9pbnQgPSByZWludGVycHJl
dF9jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqPih1c2VyRGF0YSk7CisgICAgICAgIGF1dG8g
cHJvbWlzZSA9IGFkb3B0R1JlZihyYXdQcm9taXNlKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBn
c3RfcHJvbWlzZV93YWl0KHByb21pc2UuZ2V0KCkpOworICAgICAgICBpZiAocmVzdWx0ICE9IEdT
VF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEKSB7CisgICAgICAgICAgICBlbmRwb2ludC0+Y3JlYXRl
U2Vzc2lvbkRlc2NyaXB0aW9uRmFpbGVkKHsgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIH0KKworICAgICAgICBjb25zdCBhdXRvKiByZXBseSA9IGdzdF9wcm9taXNlX2dldF9yZXBs
eShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQocmVwbHkpOworICAgICAg
ICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQocmVwbHksICJlcnJvciIpKSB7CisgICAgICAg
ICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gcHJvbWlzZUVycm9yOworICAgICAgICAgICAgZ3N0
X3N0cnVjdHVyZV9nZXQocmVwbHksICJlcnJvciIsIEdfVFlQRV9FUlJPUiwgJnByb21pc2VFcnJv
ci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBHVW5pcXVlUHRyPEdFcnJvcj4gZXJy
b3IocHJvbWlzZUVycm9yLnJlbGVhc2UoKSk7CisgICAgICAgICAgICBlbmRwb2ludC0+Y3JlYXRl
U2Vzc2lvbkRlc2NyaXB0aW9uRmFpbGVkKFdURk1vdmUoZXJyb3IpKTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIqIHR5cGUgPSBlbmRwb2ludC0+
bV9pc0luaXRpYXRvciA/ICJvZmZlciIgOiAiYW5zd2VyIjsKKyAgICAgICAgR1VuaXF1ZU91dFB0
cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IHNlc3Npb25EZXNjcmlwdGlvbjsKKyAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksIHR5cGUsIEdTVF9UWVBFX1dFQlJUQ19TRVNTSU9O
X0RFU0NSSVBUSU9OLCAmc2Vzc2lvbkRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKwor
I2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBz
ZHAoZ3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoc2Vzc2lvbkRlc2NyaXB0aW9uLT5zZHApKTsKKyAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChlbmRwb2ludC0+cGlwZWxpbmUoKSwgIkNyZWF0ZWQgJXM6
ICVzIiwgdHlwZSwgc2RwLmdldCgpKTsKKyNlbmRpZgorICAgICAgICBHVW5pcXVlUHRyPEdzdFdl
YlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uLnJl
bGVhc2UoKSk7CisgICAgICAgIGVuZHBvaW50LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNj
ZWVkZWQoV1RGTW92ZShkZXNjcmlwdGlvbikpOworICAgIH0sIHRoaXMsIG51bGxwdHIpKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnZXRTdGF0cyhHc3RQYWQqIHBhZCwgUmVm
PERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQoreworICAgIG1fc3RhdHNDb2xsZWN0b3ItPmdl
dFN0YXRzKFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgcHJvdGVjdGVkVGhpcyA9IFJlZigq
dGhpcyldKGF1dG8mJiByZXBvcnQpIG11dGFibGUgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhy
ZWFkKCkpOworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkgfHwgIXJlcG9y
dCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBwcm9taXNlLT5yZXNvbHZlPElETElu
dGVyZmFjZTxSVENTdGF0c1JlcG9ydD4+KHJlcG9ydC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9
LCBwYWQpOworfQorCitNZWRpYVN0cmVhbSYgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6bWVkaWFT
dHJlYW1Gcm9tUlRDU3RyZWFtKFN0cmluZyBsYWJlbCkKK3sKKyAgICBhdXRvIG1lZGlhU3RyZWFt
ID0gbV9yZW1vdGVTdHJlYW1zQnlJZC5lbnN1cmUobGFiZWwsIFtsYWJlbCwgdGhpc10oKSBtdXRh
YmxlIHsKKyAgICAgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcGVl
ckNvbm5lY3Rpb25CYWNrZW5kLmNvbm5lY3Rpb24oKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkp
OworICAgICAgICByZXR1cm4gTWVkaWFTdHJlYW06OmNyZWF0ZShkb2N1bWVudCwgTWVkaWFTdHJl
YW1Qcml2YXRlOjpjcmVhdGUoZG9jdW1lbnQubG9nZ2VyKCksIHsgfSwgV1RGTW92ZShsYWJlbCkp
KTsKKyAgICB9KTsKKyAgICByZXR1cm4gKm1lZGlhU3RyZWFtLml0ZXJhdG9yLT52YWx1ZTsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRSZW1vdGVTdHJlYW0oR3N0UGFkKiBw
YWQpCit7CisgICAgbV9wZW5kaW5nSW5jb21pbmdTdHJlYW1zKys7CisKKyAgICBhdXRvIGNhcHMg
PSBhZG9wdEdSZWYoZ3N0X3BhZF9xdWVyeV9jYXBzKHBhZCwgbnVsbHB0cikpOworICAgIGNvbnN0
IGNoYXIqIG1lZGlhVHlwZSA9IGNhcHNNZWRpYVR5cGUoY2Fwcy5nZXQoKSk7CisgICAgR1NUX0RF
QlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIHJlbW90ZSAlcyBzdHJlYW0gdG8g
JSIgR1NUX1BUUl9GT1JNQVQgIiAldSBwZW5kaW5nIGluY29taW5nIHN0cmVhbXMsIGNhcHM6ICUi
IEdTVF9QVFJfRk9STUFULCBtZWRpYVR5cGUsIHBhZCwgbV9wZW5kaW5nSW5jb21pbmdTdHJlYW1z
LCBjYXBzLmdldCgpKTsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHJ0
Y1RyYW5zY2VpdmVyOworICAgIGdfb2JqZWN0X2dldChwYWQsICJ0cmFuc2NlaXZlciIsICZydGNU
cmFuc2NlaXZlci5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICBhdXRvKiB0cmFuc2NlaXZlciA9
IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmV4aXN0aW5nVHJhbnNjZWl2ZXIoWyZdKGF1dG8mIHRy
YW5zY2VpdmVyQmFja2VuZCkgeworICAgICAgICByZXR1cm4gcnRjVHJhbnNjZWl2ZXIuZ2V0KCkg
PT0gdHJhbnNjZWl2ZXJCYWNrZW5kLnJ0Y1RyYW5zY2VpdmVyKCk7CisgICAgfSk7CisgICAgaWYg
KCF0cmFuc2NlaXZlcikgeworICAgICAgICBhdXRvIHR5cGUgPSBkb0NhcHNIYXZlVHlwZShjYXBz
LmdldCgpLCAiYXVkaW8iKSA/IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvIDogUmVh
bHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW87CisgICAgICAgIHRyYW5zY2VpdmVyID0gJm1f
cGVlckNvbm5lY3Rpb25CYWNrZW5kLm5ld1JlbW90ZVRyYW5zY2VpdmVyKG1ha2VVbmlxdWU8R1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJ0Y1RyYW5zY2VpdmVyKSksIHR5
cGUpOworICAgIH0KKworICAgIEdVbmlxdWVPdXRQdHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uPiBkZXNjcmlwdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCksICJy
ZW1vdGUtZGVzY3JpcHRpb24iLCAmZGVzY3JpcHRpb24ub3V0UHRyKCksIG51bGxwdHIpOworCisg
ICAgdW5zaWduZWQgbUxpbmVJbmRleDsKKyAgICBnX29iamVjdF9nZXQocnRjVHJhbnNjZWl2ZXIu
Z2V0KCksICJtbGluZWluZGV4IiwgJm1MaW5lSW5kZXgsIG51bGxwdHIpOworICAgIGNvbnN0IGF1
dG8qIG1lZGlhID0gZ3N0X3NkcF9tZXNzYWdlX2dldF9tZWRpYShkZXNjcmlwdGlvbi0+c2RwLCBt
TGluZUluZGV4KTsKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHNkcChnc3Rfc2RwX21lZGlhX2FzX3Rl
eHQobWVkaWEpKTsKKyAgICBhdXRvIHNkcFN0cmluZyA9IG1ha2VTdHJpbmcoc2RwLmdldCgpKTsK
KworICAgIEdVbmlxdWVQdHI8Z2NoYXI+IG5hbWUoZ3N0X3BhZF9nZXRfbmFtZShwYWQpKTsKKyAg
ICBTdHJpbmcgbGFiZWwobmFtZS5nZXQoKSk7CisgICAgYXV0byBrZXkgPSBtYWtlU3RyaW5nKCJt
c2lkOiIpOworICAgIGF1dG8gbGluZXMgPSBzZHBTdHJpbmcuc3BsaXQoJ1xuJyk7CisgICAgZm9y
IChhdXRvJiBsaW5lIDogbGluZXMpIHsKKyAgICAgICAgYXV0byBpID0gbGluZS5maW5kKGtleSk7
CisgICAgICAgIGlmIChpICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBhdXRvIHRtcCA9IGxp
bmUuc3Vic3RyaW5nKGkgKyBrZXkuYXNjaWkoKS5sZW5ndGgoKSk7CisgICAgICAgICAgICBsYWJl
bCA9IHRtcC5zdWJzdHJpbmcoMCwgdG1wLmZpbmQoJyAnKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgIH0KKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIm1zaWQ6ICVzIiwgbGFiZWwuYXNjaWkoKS5kYXRhKCkpOworCisgICAgR3N0RWxlbWVudCog
YmluID0gbnVsbHB0cjsKKyAgICBhdXRvJiB0cmFjayA9IHRyYW5zY2VpdmVyLT5yZWNlaXZlcigp
LnRyYWNrKCk7CisgICAgYXV0byYgc291cmNlID0gdHJhY2sucHJpdmF0ZVRyYWNrKCkuc291cmNl
KCk7CisgICAgaWYgKHNvdXJjZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgYmlu
ID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4oc291
cmNlKS5iaW4oKTsKKyAgICBlbHNlIGlmIChzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkp
CisgICAgICAgIGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lciY+KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1fcGlwZWxp
bmUuZ2V0KCkpLCBiaW4pOworICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVu
dF9nZXRfc3RhdGljX3BhZChiaW4sICJzaW5rIikpOworICAgIGdzdF9wYWRfbGluayhwYWQsIHNp
bmtQYWQuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoYmlu
KTsKKworICAgIHRyYWNrLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgc291cmNlLnNldE11dGVkKGZh
bHNlKTsKKworICAgIGF1dG8mIG1lZGlhU3RyZWFtID0gbWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFt
KGxhYmVsKTsKKyAgICBtZWRpYVN0cmVhbS5hZGRUcmFja0Zyb21QbGF0Zm9ybSh0cmFjayk7Cisg
ICAgbV9wZW5kaW5nU3RyZWFtcy5hcHBlbmQoJm1lZGlhU3RyZWFtKTsKKworICAgIGF1dG8gZG90
RmlsZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwg
Ii5pbmNvbWluZy0iLCBtZWRpYVR5cGUsICctJywgR1NUX09CSkVDVF9OQU1FKHBhZCkpOworICAg
IEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0
KCkpLCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkp
OworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVJlbW90ZVN0cmVhbShH
c3RQYWQqKQoreworICAgIEdTVF9GSVhNRV9PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgInJlbW92
ZVJlbW90ZVN0cmVhbSIpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6b3B0aW9u
YWw8R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHMoY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBS
VENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNv
dXJjZSYmIHNvdXJjZSkKK3sKKyAgICBpZiAoIW1fd2VicnRjQmluKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAi
JXp1IHN0cmVhbXMgaW4gaW5pdCBkYXRhIiwgaW5pdC5zdHJlYW1zLnNpemUoKSk7CisKKyAgICAv
LyBGSVhNRTogU2hvdWxkIHdlIGJ1aWxkIHRoZSBjYXBzIGZyb20gdGhlIGluaXQuc2VuZEVuY29k
aW5ncz8gUHJvYmxlbSBpcyB0aGVyZSBpcyBubworICAgIC8vIGVuY29kaW5nTmFtZSBvciBjbG9j
a1JhdGUgaW4gUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzLgorICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Y29uc3QgY2hhciosIGludD4+IGVuY29kaW5nczsKKyAgICBjb25zdCBjaGFyKiBtZWRpYSA9IGtp
bmQudXRmOCgpLmRhdGEoKTsKKyAgICBpZiAoa2luZCA9PSAidmlkZW8iX3MpIHsKKyAgICAgICAg
ZW5jb2RpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMyk7CisgICAgICAgIGVuY29kaW5ncy5h
cHBlbmQoeyAiVlA4IiwgOTAwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy5hcHBlbmQoeyAiVlA5
IiwgOTAwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy5hcHBlbmQoeyAiSDI2NCIsIDkwMDAwIH0p
OworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5ncy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDEpOworICAgICAgICBlbmNvZGluZ3MuYXBwZW5kKHsgIk9QVVMiLCA0ODAwMCB9KTsKKyAgICB9
CisKKyAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkpOworICAg
IGZvciAoYXV0byYgW2VuY29kaW5nTmFtZSwgY2xvY2tSYXRlXSA6IGVuY29kaW5ncykgeworICAg
ICAgICBnc3RfY2Fwc19hcHBlbmQoY2Fwcy5nZXQoKSwgZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXBw
bGljYXRpb24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCBtZWRpYSwgImVuY29kaW5n
LW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBlbmNvZGluZ05hbWUsCisgICAgICAgICAgICAicGF5bG9h
ZCIsIEdfVFlQRV9JTlQsIG1fcHRDb3VudGVyKyssICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwg
Y2xvY2tSYXRlLCBudWxscHRyKSk7CisgICAgfQorCisgICAgYXV0byBkaXJlY3Rpb24gPSBmcm9t
UlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oaW5pdC5kaXJlY3Rpb24pOworI2lmbmRlZiBHU1Rf
RElTQUJMRV9HU1RfREVCVUcKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRlc2MoZ19lbnVtX3RvX3N0
cmluZyhHU1RfVFlQRV9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTiwgZGlyZWN0aW9u
KSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nICVzIHRy
YW5zY2VpdmVyIGZvciBwYXlsb2FkICUiIEdTVF9QVFJfRk9STUFULCBkZXNjLmdldCgpLCBjYXBz
LmdldCgpKTsKKyNlbmRpZgorCisgICAgLy8gRklYTUU6IE5vbmUgb2YgdGhpcyAoZXhjZXB0ZWQg
ZGlyZWN0aW9uKSBpcyBwYXNzZWQgdG8gd2VicnRjYmluIHlldC4KKyAgICBHVW5pcXVlUHRyPEdz
dFN0cnVjdHVyZT4gaW5pdERhdGEoZ3N0X3N0cnVjdHVyZV9uZXcoInRyYW5zY2VpdmVyLWluaXQt
ZGF0YSIsICJkaXJlY3Rpb24iLCBHU1RfVFlQRV9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVD
VElPTiwgZGlyZWN0aW9uLCBudWxscHRyKSk7CisKKyAgICBHVmFsdWUgc3RyZWFtSWRzVmFsdWUg
PSBHX1ZBTFVFX0lOSVQ7CisgICAgZ192YWx1ZV9pbml0KCZzdHJlYW1JZHNWYWx1ZSwgR1NUX1RZ
UEVfTElTVCk7CisgICAgZm9yIChhdXRvJiBzdHJlYW0gOiBpbml0LnN0cmVhbXMpIHsKKyAgICAg
ICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOworICAgICAgICBnX3ZhbHVlX2luaXQoJnZh
bHVlLCBHX1RZUEVfU1RSSU5HKTsKKyAgICAgICAgZ192YWx1ZV9zZXRfc3RyaW5nKCZ2YWx1ZSwg
c3RyZWFtLT5pZCgpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBl
bmRfdmFsdWUoJnN0cmVhbUlkc1ZhbHVlLCAmdmFsdWUpOworICAgICAgICBnX3ZhbHVlX3Vuc2V0
KCZ2YWx1ZSk7CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZShpbml0RGF0YS5n
ZXQoKSwgInN0cmVhbS1pZHMiLCAmc3RyZWFtSWRzVmFsdWUpOworCisgICAgR1ZhbHVlIGVuY29k
aW5nc1ZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFsdWVfaW5pdCgmZW5jb2RpbmdzVmFs
dWUsIEdTVF9UWVBFX0xJU1QpOworICAgIGlmIChraW5kID09ICJhdWRpbyIpIHsKKyAgICAgICAg
aWYgKCFpbml0LnNlbmRFbmNvZGluZ3MuaXNFbXB0eSgpKSB7CisgICAgICAgICAgICBhdXRvIGVu
Y29kaW5nRGF0YSA9IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoaW5pdC5zZW5kRW5jb2Rpbmdz
WzBdKTsKKyAgICAgICAgICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICAgICAg
ICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdTVF9UWVBFX1NUUlVDVFVSRSk7CisgICAgICAgICAg
ICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSgmdmFsdWUsIGVuY29kaW5nRGF0YS5nZXQoKSk7Cisg
ICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUoJmVuY29kaW5nc1ZhbHVlLCAm
dmFsdWUpOworICAgICAgICAgICAgZ192YWx1ZV91bnNldCgmdmFsdWUpOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChhdXRvJiBlbmNvZGluZyA6IGluaXQuc2VuZEVuY29k
aW5ncykgeworICAgICAgICAgICAgYXV0byBlbmNvZGluZ0RhdGEgPSBmcm9tUlRDRW5jb2RpbmdQ
YXJhbWV0ZXJzKGVuY29kaW5nKTsKKyAgICAgICAgICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVf
SU5JVDsKKyAgICAgICAgICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdTVF9UWVBFX1NUUlVDVFVS
RSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSgmdmFsdWUsIGVuY29kaW5n
RGF0YS5nZXQoKSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUoJmVu
Y29kaW5nc1ZhbHVlLCAmdmFsdWUpOworICAgICAgICAgICAgZ192YWx1ZV91bnNldCgmdmFsdWUp
OworICAgICAgICB9CisgICAgfQorICAgIGdzdF9zdHJ1Y3R1cmVfdGFrZV92YWx1ZShpbml0RGF0
YS5nZXQoKSwgImVuY29kaW5ncyIsICZlbmNvZGluZ3NWYWx1ZSk7CisKKyAgICBHUmVmUHRyPEdz
dFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBydGNUcmFuc2NlaXZlcjsKKyAgICBnX3NpZ25hbF9lbWl0
X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJhZGQtdHJhbnNjZWl2ZXIiLCBkaXJlY3Rpb24s
IGNhcHMuZ2V0KCksICZydGNUcmFuc2NlaXZlci5vdXRQdHIoKSk7CisgICAgaWYgKCFydGNUcmFu
c2NlaXZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKKworICAgIGF1dG8gdHJhbnNj
ZWl2ZXIgPSBtYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4oV1RGTW92
ZShydGNUcmFuc2NlaXZlcikpOworICAgIHJldHVybiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpC
YWNrZW5kcyB7IHRyYW5zY2VpdmVyLT5jcmVhdGVTZW5kZXJCYWNrZW5kKG1fcGVlckNvbm5lY3Rp
b25CYWNrZW5kLCBXVEZNb3ZlKHNvdXJjZSksIFdURk1vdmUoaW5pdERhdGEpKSwgdHJhbnNjZWl2
ZXItPmNyZWF0ZVJlY2VpdmVyQmFja2VuZCgpLCBXVEZNb3ZlKHRyYW5zY2VpdmVyKSB9OworfQor
CitzdGQ6Om9wdGlvbmFsPEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkJhY2tlbmRzPiBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjphZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwg
Y29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiBpbml0KQoreworICAgIHJldHVybiBjcmVhdGVU
cmFuc2NlaXZlckJhY2tlbmRzKHRyYWNrS2luZCwgaW5pdCwgbnVsbHB0cik7Cit9CisKK0dTdHJl
YW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVh
dGVTb3VyY2VGb3JUcmFjayhNZWRpYVN0cmVhbVRyYWNrJiB0cmFjaykKK3sKKyAgICBpZiAodHJh
Y2sucHJpdmF0ZVRyYWNrKCkuaGFzQXVkaW8oKSkKKyAgICAgICAgcmV0dXJuIFJlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsK
KworICAgIFJFTEVBU0VfQVNTRVJUKHRyYWNrLnByaXZhdGVUcmFjaygpLmhhc1ZpZGVvKCkpOwor
ICAgIHJldHVybiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0
cmFjay5wcml2YXRlVHJhY2soKSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYW5zY2VpdmVy
KE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGlu
aXQpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHModHJhY2sua2luZCgp
LCBpbml0LCBjcmVhdGVTb3VyY2VGb3JUcmFjayh0cmFjaykpOworfQorCit2b2lkIEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kJiwgTWVkaWFTdHJlYW1UcmFjayYpCit7CisgICAgR1NUX0ZJWE1FX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAic2V0U2VuZGVyU291cmNlRnJvbVRyYWNrIik7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZD4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNl
bmRlcihHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBiYWNrZW5kKQoreworICAgIEdSZWZQdHI8
R0FycmF5PiB0cmFuc2NlaXZlcnM7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRj
QmluLmdldCgpLCAiZ2V0LXRyYW5zY2VpdmVycyIsICZ0cmFuc2NlaXZlcnMub3V0UHRyKCkpOwor
CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTG9va2luZyBmb3Igc2Vu
ZGVyICVwIGluICV1IGV4aXN0aW5nIHRyYW5zY2VpdmVycyIsIGJhY2tlbmQucnRjU2VuZGVyKCks
IHRyYW5zY2VpdmVycy0+bGVuKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhbnNj
ZWl2ZXJzLT5sZW47IGkrKykgeworICAgICAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogY3Vy
cmVudCA9IGdfYXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdldCgpLCBHc3RXZWJSVENSVFBUcmFu
c2NlaXZlciosIGkpOworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVy
OworICAgICAgICBnX29iamVjdF9nZXQoY3VycmVudCwgInNlbmRlciIsICZzZW5kZXIub3V0UHRy
KCksIG51bGxwdHIpOworCisgICAgICAgIGlmICghc2VuZGVyKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmIChzZW5kZXIuZ2V0KCkgPT0gYmFja2VuZC5ydGNTZW5kZXIoKSkKKyAg
ICAgICAgICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kPihjdXJyZW50KTsKKyAgICB9CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKwordm9p
ZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRJY2VDYW5kaWRhdGUoR1N0cmVhbWVySWNlQ2Fu
ZGlkYXRlJiBjYW5kaWRhdGUsIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRl
Q2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJBZGRpbmcgSUNFIGNhbmRpZGF0ZSAlcyIsIGNhbmRpZGF0ZS5jYW5kaWRhdGUudXRm
OCgpLmRhdGEoKSk7CisKKyAgICBpZiAoIWNhbmRpZGF0ZS5jYW5kaWRhdGUuc3RhcnRzV2l0aCgi
Y2FuZGlkYXRlOiIpKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Rhc2sgPSBjcmVhdGVT
aGFyZWRUYXNrPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRlQ2FsbGJhY2tG
dW5jdGlvbj4oV1RGTW92ZShjYWxsYmFjaykpXSgpIG11dGFibGUgeworICAgICAgICAgICAgdGFz
ay0+cnVuKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiRXhwZWN0IGxpbmU6IGNhbmRpZGF0
ZTo8Y2FuZGlkYXRlLXN0cj4iIH0pOworICAgICAgICB9KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIGF1dG8gcGFyc2VkQ2FuZGlkYXRlID0gcGFyc2VJY2VDYW5kaWRhdGVTRFAoY2Fu
ZGlkYXRlLmNhbmRpZGF0ZSk7CisgICAgaWYgKCFwYXJzZWRDYW5kaWRhdGUpIHsKKyAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxiYWNr
KSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICB0YXNrLT5ydW4oRXhjZXB0aW9uIHsgT3BlcmF0
aW9uRXJyb3IsICJFcnJvciBwcm9jZXNzaW5nIElDRSBjYW5kaWRhdGUiIH0pOworICAgICAgICB9
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIC8vIEZJWE1FOiBpbnZhbGlkIHNkcE1M
aW5lSW5kZXggZXhjZXB0aW9uIG5vdCByZWxheWVkIGZyb20gd2VicnRjYmluLgorICAgIC8vIEZJ
WE1FOiBJZGVhbGx5IHRoaXMgc2hvdWxkIHBhc3MgdGhlIHJlc3VsdC9lcnJvciB0byBhIEdzdFBy
b21pc2Ugb2JqZWN0LgorICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQo
KSwgImFkZC1pY2UtY2FuZGlkYXRlIiwgY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgsIGNhbmRpZGF0
ZS5jYW5kaWRhdGUudXRmOCgpLmRhdGEoKSk7CisgICAgY2FsbE9uTWFpblRocmVhZChbdGFzayA9
IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVD
YWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxiYWNrKSksIGRlc2NyaXB0aW9ucyA9IGRlc2Ny
aXB0aW9uc0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCkpXSgpIG11dGFibGUgeworICAg
ICAgICB0YXNrLT5ydW4oV1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAgICB9KTsKK30KKworc3Rk
Ojp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6Y3JlYXRlRGF0YUNoYW5uZWwoY29uc3QgU3RyaW5nJiBsYWJlbCwgY29uc3QgUlRDRGF0YUNo
YW5uZWxJbml0JiBvcHRpb25zKQoreworICAgIGlmICghbV93ZWJydGNCaW4pCisgICAgICAgIHJl
dHVybiBudWxscHRyOworCisgICAgYXV0byBpbml0ID0gR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyOjpmcm9tUlRDRGF0YUNoYW5uZWxJbml0KG9wdGlvbnMpOworICAgIEdTVF9ERUJVR19PQkpF
Q1QobV9waXBlbGluZS5nZXQoKSwgIkNyZWF0aW5nIGRhdGEgY2hhbm5lbCBmb3IgaW5pdCBvcHRp
b25zICUiIEdTVF9QVFJfRk9STUFULCBpbml0LmdldCgpKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJU
Q0RhdGFDaGFubmVsPiBjaGFubmVsOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0
Y0Jpbi5nZXQoKSwgImNyZWF0ZS1kYXRhLWNoYW5uZWwiLCBsYWJlbC51dGY4KCkuZGF0YSgpLCBp
bml0LmdldCgpLCAmY2hhbm5lbC5vdXRQdHIoKSk7CisgICAgaWYgKCFjaGFubmVsKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyPihXVEZNb3ZlKGNoYW5uZWwpKTsKK30KKwordm9pZCBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpvbkRhdGFDaGFubmVsKEdzdFdlYlJUQ0RhdGFDaGFubmVsKiBkYXRh
Q2hhbm5lbCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJJbmNv
bWluZyBkYXRhIGNoYW5uZWwiKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBj
aGFubmVsID0gZGF0YUNoYW5uZWw7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhp
cyA9IFJlZigqdGhpcyksIGRhdGFDaGFubmVsID0gV1RGTW92ZShjaGFubmVsKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChwcm90ZWN0ZWRUaGlzLT5tX3BpcGVsaW5lLmdl
dCgpLCAiSW5jb21pbmcgZGF0YSBjaGFubmVsIDEiKTsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRo
aXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKHByb3RlY3RlZFRoaXMtPm1fcGlwZWxpbmUuZ2V0KCksICJJbmNvbWluZyBkYXRhIGNo
YW5uZWwgMiIpOworICAgICAgICBhdXRvJiBjb25uZWN0aW9uID0gcHJvdGVjdGVkVGhpcy0+bV9w
ZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29ubmVjdGlvbigpOworICAgICAgICBjb25uZWN0aW9uLmRp
c3BhdGNoRXZlbnQoR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGFubmVsRXZlbnQoKmNv
bm5lY3Rpb24uZG9jdW1lbnQoKSwgV1RGTW92ZShkYXRhQ2hhbm5lbCkpKTsKKyAgICB9KTsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjbG9zZSgpCit7CisgICAgLy8gaHR0cHM6
Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvLS9pc3N1
ZXMvMTE4MQorICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNsb3Npbmci
KTsKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1f
cGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9SRUFEWSk7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKwordm9pZCBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpzdG9wKCkKK3sKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAg
ICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKKworICAgIGlmICghbV9waXBlbGluZSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAi
U3RvcHBpbmciKTsKKyAgICB0ZWFyZG93blBpcGVsaW5lKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6c3VzcGVuZCgpCit7CisgICAgaWYgKCFtX3BpcGVsaW5lKQorICAgICAg
ICByZXR1cm47CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTdXNw
ZW5kaW5nIik7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdT
VF9TVEFURV9QQVVTRUQpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlc3Vt
ZSgpCit7CisgICAgaWYgKCFtX3BpcGVsaW5lKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1Rf
REVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJSZXN1bWluZyIpOworICAgIGdzdF9lbGVt
ZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25OZWdvdGlhdGlvbk5lZWRlZCgpCit7Cisg
ICAgbV9pc05lZ290aWF0aW9uTmVlZGVkID0gdHJ1ZTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIkNoZWNraW5nIG5lZ290aWF0aW9uIHN0YXR1cyIpOworCisgICAg
Y2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyldIHsKKyAgICAgICAg
aWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHByb3RlY3RlZFRoaXMtPm1fcGlwZWxpbmUuZ2V0KCksICJO
ZWdvdGlhdGlvbiBuZWVkZWQhIik7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5l
Y3Rpb25CYWNrZW5kLm1hcmtBc05lZWRpbmdOZWdvdGlhdGlvbigwKTsKKyAgICB9KTsKK30KKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUNvbm5lY3Rpb25DaGFuZ2UoKQorewor
ICAgIEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZTsKKyAgICBnX29iamVjdF9nZXQo
bV93ZWJydGNCaW4uZ2V0KCksICJpY2UtY29ubmVjdGlvbi1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0
cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIGNv
bm5lY3Rpb25TdGF0ZSA9IHRvUlRDSWNlQ29ubmVjdGlvblN0YXRlKHN0YXRlKV0geworICAgICAg
ICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGF1dG8mIGNvbm5lY3Rpb24gPSBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9u
QmFja2VuZC5jb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChjb25uZWN0aW9uLmljZUNvbm5lY3Rp
b25TdGF0ZSgpICE9IGNvbm5lY3Rpb25TdGF0ZSkKKyAgICAgICAgICAgIGNvbm5lY3Rpb24udXBk
YXRlSWNlQ29ubmVjdGlvblN0YXRlKGNvbm5lY3Rpb25TdGF0ZSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VHYXRoZXJpbmdDaGFuZ2UoKQoreworICAg
IEdzdFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIHN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX3dl
YnJ0Y0Jpbi5nZXQoKSwgImljZS1nYXRoZXJpbmctc3RhdGUiLCAmc3RhdGUsIG51bGxwdHIpOwor
ICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCBzdGF0ZV0g
eworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIGF1dG8mIGNvbm5lY3Rpb24gPSBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5jb25uZWN0aW9uKCk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBHU1Rf
V0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfQ09NUExFVEUpCisgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5kb25lR2F0aGVyaW5nQ2FuZGlkYXRlcygp
OworICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RB
VEVfR0FUSEVSSU5HKQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJY2VHYXRoZXJpbmdT
dGF0ZShSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5nKTsKKyAgICAgICAgZWxzZSBpZiAo
c3RhdGUgPT0gR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX05FVykKKyAgICAgICAgICAg
IGNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVyaW5nU3RhdGUoUlRDSWNlR2F0aGVyaW5nU3RhdGU6
Ok5ldyk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VD
YW5kaWRhdGUoZ3VpbnQgc2RwTUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5kaWRhdGUpCit7Cisg
ICAgLy8gRklYTUU6IEdldCBtaWQgZnJvbSBjYW5kaWRhdGU/CisgICAgR1VuaXF1ZU91dFB0cjxH
c3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IGRlc2NyaXB0aW9uOworICAgIGdfb2JqZWN0X2dl
dChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImxvY2FsLWRlc2NyaXB0aW9uIiwgJmRlc2NyaXB0aW9uLm91
dFB0cigpLCBudWxscHRyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm47
CisKKyAgICBjb25zdCBHc3RTRFBNZWRpYSogbWVkaWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0X21l
ZGlhKGRlc2NyaXB0aW9uLT5zZHAsIHNkcE1MaW5lSW5kZXgpOworICAgIFN0cmluZyBjYW5kaWRh
dGVNaWQoZ3N0X3NkcF9tZWRpYV9nZXRfYXR0cmlidXRlX3ZhbChtZWRpYSwgIm1pZCIpKTsKKyAg
ICBTdHJpbmcgY2FuZGlkYXRlU0RQKGNhbmRpZGF0ZSk7CisgICAgY2FsbE9uTWFpblRocmVhZChb
cHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIG1pZCA9IFdURk1vdmUoY2FuZGlkYXRlTWlkKSwg
c2RwID0gV1RGTW92ZShjYW5kaWRhdGVTRFApLCBzZHBNTGluZUluZGV4LCBkZXNjcmlwdGlvbnMg
PSBkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgpKV0oKSBtdXRhYmxl
IHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5u
ZXdJQ0VDYW5kaWRhdGUoV1RGTW92ZShzZHApLCBXVEZNb3ZlKG1pZCksIHNkcE1MaW5lSW5kZXgs
IHsgfSwgV1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNjZWVkZWQoR1VuaXF1
ZVB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRpb24pCit7CisgICAg
Y2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIGRlc2NyaXB0aW9u
ID0gV1RGTW92ZShkZXNjcmlwdGlvbildIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlz
U3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEdVbmlxdWVQdHI8Y2hh
cj4gc2RwKGdzdF9zZHBfbWVzc2FnZV9hc190ZXh0KGRlc2NyaXB0aW9uLT5zZHApKTsKKyAgICAg
ICAgaWYgKHByb3RlY3RlZFRoaXMtPm1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBwcm90ZWN0
ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlclN1Y2NlZWRlZChzZHAu
Z2V0KCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJTdWNjZWVkZWQoc2RwLmdldCgpKTsKKyAgICB9
KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3Jp
cHRpb25GYWlsZWQoR1VuaXF1ZVB0cjxHRXJyb3I+JiYgZXJyb3IpCit7CisgICAgY2FsbE9uTWFp
blRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIGVycm9yID0gV1RGTW92ZShlcnJv
cildIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gZXhjID0gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJy
b3IsIGVycm9yID8gZXJyb3ItPm1lc3NhZ2UgOiAiVW5rbm93biBFcnJvciIgfTsKKyAgICAgICAg
aWYgKHByb3RlY3RlZFRoaXMtPm1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBwcm90ZWN0ZWRU
aGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlckZhaWxlZChXVEZNb3ZlKGV4
YykpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJGYWlsZWQoV1RGTW92ZShleGMpKTsKKyAgICB9KTsK
K30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkK
K3sKKyAgICBHUmVmUHRyPEdBcnJheT4gdHJhbnNjZWl2ZXJzOworICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC10cmFuc2NlaXZlcnMiLCAmdHJhbnNjZWl2
ZXJzLm91dFB0cigpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhbnNjZWl2ZXJz
LT5sZW47IGkrKykgeworICAgICAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogY3VycmVudCA9
IGdfYXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdldCgpLCBHc3RXZWJSVENSVFBUcmFuc2NlaXZl
ciosIGkpOworCisgICAgICAgIGF1dG8qIGV4aXN0aW5nVHJhbnNjZWl2ZXIgPSBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0cmFuc2NlaXZlckJh
Y2tlbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50ID09IHRyYW5zY2VpdmVyQmFja2Vu
ZC5ydGNUcmFuc2NlaXZlcigpOworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGV4aXN0aW5nVHJh
bnNjZWl2ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBHUmVmUHRyPEdzdFdl
YlJUQ1JUUFJlY2VpdmVyPiByZWNlaXZlcjsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBt
aWQ7CisgICAgICAgIGdfb2JqZWN0X2dldChjdXJyZW50LCAicmVjZWl2ZXIiLCAmcmVjZWl2ZXIu
b3V0UHRyKCksICJtaWQiLCAmbWlkLm91dFB0cigpLCBudWxscHRyKTsKKworICAgICAgICBpZiAo
IXJlY2VpdmVyKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFtaWQpCisg
ICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5u
ZXdSZW1vdGVUcmFuc2NlaXZlcihXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kPihXVEZNb3ZlKGN1cnJlbnQpKSwgbV9tZWRpYUZvck1pZC5nZXQobWlkLmdldCgp
KSk7CisgICAgfQorfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZygpCit7CisgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiZ2V0LXN0YXRzIiwgbnVsbHB0ciwgZ3N0
X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlzZSwg
Z3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9taXNlID0gYWRvcHRHUmVmKHJh
d1Byb21pc2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9taXNlX3dhaXQocHJvbWlz
ZS5nZXQoKSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJ
RUQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3QgYXV0byogcmVwbHkgPSBn
c3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlcGx5KTsKKyAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlcGx5LCAi
ZXJyb3IiKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiBlbmRQb2ludCA9
IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVyTWVkaWFFbmRwb2ludCo+KHVzZXJEYXRhKTsKKyAg
ICAgICAgZW5kUG9pbnQtPm9uU3RhdHNEZWxpdmVyZWQocmVwbHkpOworICAgIH0sIHRoaXMsIG51
bGxwdHIpKTsKK30KKworY2xhc3MgUlRDU3RhdHNMb2dnZXIgeworcHVibGljOgorICAgIGV4cGxp
Y2l0IFJUQ1N0YXRzTG9nZ2VyKGNvbnN0IEdzdFN0cnVjdHVyZSogc3RhdHMpCisgICAgICAgIDog
bV9zdGF0cyhzdGF0cykKKyAgICB7IH0KKworICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25z
dCB7IHJldHVybiBnc3RTdHJ1Y3R1cmVUb0pTT05TdHJpbmcobV9zdGF0cyk7IH0KKworcHJpdmF0
ZToKKyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIG1fc3RhdHM7Cit9OworCit2b2lkIEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OnByb2Nlc3NTdGF0cyhjb25zdCBHVmFsdWUqIHZhbHVlKQoreworICAg
IGlmICghR1NUX1ZBTFVFX0hPTERTX1NUUlVDVFVSRSh2YWx1ZSkpCisgICAgICAgIHJldHVybjsK
KworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1
Y3R1cmUodmFsdWUpOworICAgIEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7CisgICAgaWYg
KCFnc3Rfc3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VCUlRDX1NU
QVRTX1RZUEUsICZzdGF0c1R5cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBKdXN0IGNoZWNrIGEgc2luZ2xlIHRpbWVzdGFtcCwgaW5ib3VuZCBSVFAgZm9yIGluc3RhbmNl
LgorICAgIGlmICghbV9zdGF0c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wICYmIHN0YXRzVHlwZSA9
PSBHU1RfV0VCUlRDX1NUQVRTX0lOQk9VTkRfUlRQKSB7CisgICAgICAgIGRvdWJsZSB0aW1lc3Rh
bXA7CisgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUoc3RydWN0dXJlLCAidGlt
ZXN0YW1wIiwgJnRpbWVzdGFtcCkpIHsKKyAgICAgICAgICAgIGF1dG8gdHMgPSBTZWNvbmRzOjpm
cm9tTWlsbGlzZWNvbmRzKHRpbWVzdGFtcCk7CisgICAgICAgICAgICBtX3N0YXRzRmlyc3REZWxp
dmVyZWRUaW1lc3RhbXAgPSB0czsKKworICAgICAgICAgICAgaWYgKCFpc1N0b3BwZWQoKSAmJiBt
X3N0YXRzTG9nVGltZXIucmVwZWF0SW50ZXJ2YWwoKSAhPSBzdGF0c0xvZ0ludGVydmFsKHRzKSkg
eworICAgICAgICAgICAgICAgIG1fc3RhdHNMb2dUaW1lci5zdG9wKCk7CisgICAgICAgICAgICAg
ICAgbV9zdGF0c0xvZ1RpbWVyLnN0YXJ0UmVwZWF0aW5nKHN0YXRzTG9nSW50ZXJ2YWwodHMpKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIGlmIChsb2dnZXIoKS53aWxs
TG9nKGxvZ0NoYW5uZWwoKSwgV1RGTG9nTGV2ZWw6OkRlYnVnKSkgeworICAgICAgICAvLyBTdGF0
cyBhcmUgdmVyeSB2ZXJib3NlLCBsZXQncyBvbmx5IGRpc3BsYXkgdGhlbSBpbiBpbnNwZWN0b3Ig
Y29uc29sZSBpbiB2ZXJib3NlIG1vZGUuCisgICAgICAgIGxvZ2dlcigpLmRlYnVnKExvZ1dlYlJU
QywKKyAgICAgICAgICAgIExvZ2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIoIkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQiLCAib25TdGF0c0RlbGl2ZXJlZCIsIGxvZ0lkZW50aWZpZXIoKSksCisgICAgICAg
ICAgICBSVENTdGF0c0xvZ2dlciB7IHN0cnVjdHVyZSB9KTsKKyAgICB9IGVsc2UgeworICAgICAg
ICBsb2dnZXIoKS5sb2dBbHdheXMoTG9nV2ViUlRDU3RhdHMsCisgICAgICAgICAgICBMb2dnZXI6
OkxvZ1NpdGVJZGVudGlmaWVyKCJHU3RyZWFtZXJNZWRpYUVuZHBvaW50IiwgIm9uU3RhdHNEZWxp
dmVyZWQiLCBsb2dJZGVudGlmaWVyKCkpLAorICAgICAgICAgICAgUlRDU3RhdHNMb2dnZXIgeyBz
dHJ1Y3R1cmUgfSk7CisgICAgfQorfQorCisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
b25TdGF0c0RlbGl2ZXJlZChjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0YXRzKQoreworICAgIEdVbmlx
dWVQdHI8R3N0U3RydWN0dXJlPiBzdGF0c0NvcHkoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0YXRzKSk7
CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRoaXMs
IHN0YXRzID0gV1RGTW92ZShzdGF0c0NvcHkpXSB7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZm9y
ZWFjaChzdGF0cy5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0U3RydWN0dXJlRm9yZWFjaEZ1bmM+KFtd
KEdRdWFyaywgY29uc3QgR1ZhbHVlKiB2YWx1ZSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29s
ZWFuIHsKKyAgICAgICAgICAgIGF1dG8qIGVuZFBvaW50ID0gcmVpbnRlcnByZXRfY2FzdDxHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50Kj4odXNlckRhdGEpOworICAgICAgICAgICAgZW5kUG9pbnQtPnBy
b2Nlc3NTdGF0cyh2YWx1ZSk7CisgICAgICAgICAgICByZXR1cm4gVFJVRTsKKyAgICAgICAgfSks
IHRoaXMpOworICAgIH0pOworfQorI2VuZGlmCisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
K3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RhcnRMb2dnaW5nU3RhdHMoKQoreworICAg
IGlmIChtX3N0YXRzTG9nVGltZXIuaXNBY3RpdmUoKSkKKyAgICAgICAgbV9zdGF0c0xvZ1RpbWVy
LnN0b3AoKTsKKyAgICBtX3N0YXRzTG9nVGltZXIuc3RhcnRSZXBlYXRpbmcoc3RhdHNMb2dJbnRl
cnZhbChTZWNvbmRzOjpuYW4oKSkpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OnN0b3BMb2dnaW5nU3RhdHMoKQoreworICAgIG1fc3RhdHNMb2dUaW1lci5zdG9wKCk7Cit9CisK
K1dURkxvZ0NoYW5uZWwmIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmxvZ0NoYW5uZWwoKSBjb25z
dAoreworICAgIHJldHVybiBMb2dXZWJSVEM7Cit9CisKK1NlY29uZHMgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6c3RhdHNMb2dJbnRlcnZhbChTZWNvbmRzIHJlcG9ydFRpbWVzdGFtcCkgY29uc3QK
K3sKKyAgICBpZiAobG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIFdURkxvZ0xldmVsOjpJ
bmZvKSkKKyAgICAgICAgcmV0dXJuIDJfczsKKworICAgIGlmIChyZXBvcnRUaW1lc3RhbXAgLSBt
X3N0YXRzRmlyc3REZWxpdmVyZWRUaW1lc3RhbXAgPiAxNV9zKQorICAgICAgICByZXR1cm4gMTBf
czsKKworICAgIHJldHVybiA0X3M7Cit9CisjZW5kaWYKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0aW9uPHZvaWQoU3Ry
aW5nJiYpPiYmIGNhbGxiYWNrKQoreworICAgIC8vIFRPRE86IGNvbGxlY3Qgc3RhdHMgYW5kIGxv
b2t1cCBJbmJvdW5kUnRwICJkZWNvZGVyX2ltcGxlbWVudGF0aW9uIiBmaWVsZC4KKyAgICBjYWxs
YmFjayh7IH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNpZiAhUkVMRUFTRV9M
T0dfRElTQUJMRUQKK25hbWVzcGFjZSBXVEYgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBUeXBlPgor
c3RydWN0IExvZ0FyZ3VtZW50OworCit0ZW1wbGF0ZSA8Pgorc3RydWN0IExvZ0FyZ3VtZW50PFdl
YkNvcmU6OlJUQ1N0YXRzTG9nZ2VyPiB7CisgICAgc3RhdGljIFN0cmluZyB0b1N0cmluZyhjb25z
dCBXZWJDb3JlOjpSVENTdGF0c0xvZ2dlciYgbG9nZ2VyKQorICAgIHsKKyAgICAgICAgcmV0dXJu
IFN0cmluZyhsb2dnZXIudG9KU09OU3RyaW5nKCkpOworICAgIH0KK307CisKK307IC8vIG5hbWVz
cGFjZSBXVEYKKyNlbmRpZiAvLyAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmQ2MTQwNmJkZTcwZDQ1YTU3YjRlMjVkZWE5ZjA5YjA0M2U3MjE0OGMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmgKQEAgLTAsMCArMSwxOTMgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRw
U2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgiCisj
aW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFJlY2VpdmVy
LmgiCisKKyNpbmNsdWRlIDx3dGYvTG9nZ2VySGVscGVyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVh
ZFNhZmVSZWZDb3VudGVkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDsK
K2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDsKK2NsYXNzIE1lZGlhU3RyZWFt
VHJhY2s7CitjbGFzcyBSVENTZXNzaW9uRGVzY3JpcHRpb247CitjbGFzcyBSZWFsdGltZU91dGdv
aW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI7CisKK2NsYXNzIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQg
OiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8R1N0cmVhbWVyTWVkaWFFbmRwb2ludCwgV1RG
OjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4KKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAg
ICAsIHByaXZhdGUgTG9nZ2VySGVscGVyCisjZW5kaWYKK3sKK3B1YmxpYzoKKyAgICBzdGF0aWMg
UmVmPEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ+IGNyZWF0ZShHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQmIHBlZXJDb25uZWN0aW9uKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQocGVlckNvbm5lY3Rpb24pKTsgfQorICAgIHZpcnR1YWwgfkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQoKTsKKworICAgIGJvb2wgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBv
aW50Q29uZmlndXJhdGlvbiYpOworICAgIHZvaWQgcmVzdGFydEljZSgpOworCisgICAgdm9pZCBk
b1NldExvY2FsRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKik7CisgICAg
dm9pZCBkb1NldFJlbW90ZURlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYp
OworICAgIHZvaWQgZG9DcmVhdGVPZmZlcihjb25zdCBSVENPZmZlck9wdGlvbnMmKTsKKyAgICB2
b2lkIGRvQ3JlYXRlQW5zd2VyKCk7CisKKyAgICB2b2lkIGdldFN0YXRzKEdzdFBhZCosIFJlZjxE
ZWZlcnJlZFByb21pc2U+JiYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVs
SGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWwoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDRGF0YUNo
YW5uZWxJbml0Jik7CisgICAgdm9pZCBvbkRhdGFDaGFubmVsKEdzdFdlYlJUQ0RhdGFDaGFubmVs
Kik7CisKKyAgICB2b2lkIGFkZEljZUNhbmRpZGF0ZShHU3RyZWFtZXJJY2VDYW5kaWRhdGUmLCBQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrJiYpOworCisgICAg
dm9pZCBjbG9zZSgpOworICAgIHZvaWQgc3RvcCgpOworICAgIGJvb2wgaXNTdG9wcGVkKCkgY29u
c3QgeyByZXR1cm4gIW1fcGlwZWxpbmU7IH0KKworICAgIHZvaWQgc3VzcGVuZCgpOworICAgIHZv
aWQgcmVzdW1lKCk7CisKKyAgICB2b2lkIGdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUo
RnVuY3Rpb248dm9pZChTdHJpbmcmJik+JiYpOworICAgIGJvb2wgaXNOZWdvdGlhdGlvbk5lZWRl
ZCgpIGNvbnN0IHsgcmV0dXJuIG1faXNOZWdvdGlhdGlvbk5lZWRlZDsgfQorCisgICAgdm9pZCBj
b25maWd1cmVBbmRMaW5rU291cmNlKFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1l
ciYpOworCisgICAgYm9vbCBhZGRUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiwgTWVk
aWFTdHJlYW1UcmFjayYsIGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKTsKKyAgICB2b2lkIHJl
bW92ZVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmKTsKKworICAgIHN0cnVjdCBCYWNr
ZW5kcyB7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5k
PiBzZW5kZXJCYWNrZW5kOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kPiByZWNlaXZlckJhY2tlbmQ7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxH
U3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+IHRyYW5zY2VpdmVyQmFja2VuZDsKKyAgICB9
OworICAgIHN0ZDo6b3B0aW9uYWw8QmFja2VuZHM+IGFkZFRyYW5zY2VpdmVyKGNvbnN0IFN0cmlu
ZyYgdHJhY2tLaW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmKTsKKyAgICBzdGQ6Om9w
dGlvbmFsPEJhY2tlbmRzPiBhZGRUcmFuc2NlaXZlcihNZWRpYVN0cmVhbVRyYWNrJiwgY29uc3Qg
UlRDUnRwVHJhbnNjZWl2ZXJJbml0Jik7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0
cFRyYW5zY2VpdmVyQmFja2VuZD4gdHJhbnNjZWl2ZXJCYWNrZW5kRnJvbVNlbmRlcihHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kJik7CisKKyAgICB2b2lkIHNldFNlbmRlclNvdXJjZUZyb21UcmFj
ayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiwgTWVkaWFTdHJlYW1UcmFjayYpOworCisgICAg
dm9pZCBjb2xsZWN0VHJhbnNjZWl2ZXJzKCk7CisKKyAgICB2b2lkIGNyZWF0ZVNlc3Npb25EZXNj
cmlwdGlvblN1Y2NlZWRlZChHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4m
Jik7CisgICAgdm9pZCBjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1ZVB0cjxH
RXJyb3I+JiYpOworCisgICAgR3N0RWxlbWVudCogcGlwZWxpbmUoKSBjb25zdCB7IHJldHVybiBt
X3BpcGVsaW5lLmdldCgpOyB9CisgICAgYm9vbCBoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqKTsK
KworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHZvaWQgcHJvY2Vzc1N0YXRzKGNvbnN0
IEdWYWx1ZSopOworI2VuZGlmCisKK3Byb3RlY3RlZDoKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKKyAgICB2b2lkIG9uU3RhdHNEZWxpdmVyZWQoY29uc3QgR3N0U3RydWN0dXJlKik7CisjZW5k
aWYKKworcHJpdmF0ZToKKyAgICBHU3RyZWFtZXJNZWRpYUVuZHBvaW50KEdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZCYpOworCisgICAgYm9vbCBpbml0aWFsaXplUGlwZWxpbmUoKTsKKyAg
ICB2b2lkIHRlYXJkb3duUGlwZWxpbmUoKTsKKyAgICB2b2lkIGRpc3Bvc2VFbGVtZW50Q2hhaW4o
R3N0RWxlbWVudCopOworCisgICAgdm9pZCBzZXREZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9u
RGVzY3JpcHRpb24qLCBib29sIGlzTG9jYWwsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzdWNjZXNzQ2Fs
bGJhY2ssIEZ1bmN0aW9uPHZvaWQoY29uc3QgR0Vycm9yKik+JiYgZmFpbHVyZUNhbGxiYWNrKTsK
KyAgICB2b2lkIGluaXRpYXRlKGJvb2wgaXNJbml0aWF0b3IsIEdVbmlxdWVQdHI8R3N0U3RydWN0
dXJlPiYmKTsKKworICAgIHZvaWQgb25OZWdvdGlhdGlvbk5lZWRlZCgpOworICAgIHZvaWQgb25J
Y2VDb25uZWN0aW9uQ2hhbmdlKCk7CisgICAgdm9pZCBvbkljZUdhdGhlcmluZ0NoYW5nZSgpOwor
ICAgIHZvaWQgb25JY2VDYW5kaWRhdGUoZ3VpbnQgc2RwTUxpbmVJbmRleCwgZ2NoYXJhcnJheSBj
YW5kaWRhdGUpOworCisgICAgTWVkaWFTdHJlYW0mIG1lZGlhU3RyZWFtRnJvbVJUQ1N0cmVhbShT
dHJpbmcgbGFiZWwpOworCisgICAgdm9pZCBhZGRSZW1vdGVTdHJlYW0oR3N0UGFkKik7CisgICAg
dm9pZCByZW1vdmVSZW1vdGVTdHJlYW0oR3N0UGFkKik7CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJh
Y2tlbmRzPiBjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKGNvbnN0IFN0cmluZyYga2luZCwgY29u
c3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiwgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291
cmNlJiYpOworICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSBjcmVhdGVTb3Vy
Y2VGb3JUcmFjayhNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICB2b2lkIHN0b3JlUmVtb3RlTUxp
bmVJbmZvKEdzdFNEUE1lc3NhZ2UqKTsKKworICAgIEdSZWZQdHI8R3N0UGFkPiByZXF1ZXN0UGFk
KHVuc2lnbmVkIG1saW5lSW5kZXgsIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKTsKKworICAgIHZv
aWQgc2V0UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQoKTsKKworI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAorICAgIHZvaWQgZ2F0aGVyU3RhdHNGb3JMb2dnaW5nKCk7CisgICAgdm9pZCBzdGFy
dExvZ2dpbmdTdGF0cygpOworICAgIHZvaWQgc3RvcExvZ2dpbmdTdGF0cygpOworCisgICAgY29u
c3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xvZ2dlci5nZXQoKTsg
fQorICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2xvZ0lkZW50aWZpZXI7IH0KKyAgICBjb25zdCBjaGFyKiBsb2dDbGFzc05hbWUoKSBjb25zdCBm
aW5hbCB7IHJldHVybiAiR1N0cmVhbWVyTWVkaWFFbmRwb2ludCI7IH0KKyAgICBXVEZMb2dDaGFu
bmVsJiBsb2dDaGFubmVsKCkgY29uc3QgZmluYWw7CisKKyAgICBTZWNvbmRzIHN0YXRzTG9nSW50
ZXJ2YWwoU2Vjb25kcykgY29uc3Q7CisjZW5kaWYKKworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlPiBtX21lZGlhRm9yTWlkOworICAgIFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGUgbWVkaWFUeXBlRm9yTWlkKGNvbnN0IGNoYXIqIG1pZCk7CisKKyAgICBHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kOworICAg
IEdSZWZQdHI8R3N0RWxlbWVudD4gbV93ZWJydGNCaW47CisgICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBtX3BpcGVsaW5lOworCisgICAgSGFzaE1hcDxTdHJpbmcsIFJlZlB0cjxNZWRpYVN0cmVhbT4+
IG1fcmVtb3RlU3RyZWFtc0J5SWQ7CisKKyAgICBzdHJ1Y3QgUGVuZGluZ01MaW5lSW5mbyB7Cisg
ICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAgICAgICAgYm9vbCBpc1VzZWQ7CisgICAg
ICAgIFZlY3RvcjxpbnQ+IHBheWxvYWRUeXBlczsKKyAgICB9OworICAgIFZlY3RvcjxQZW5kaW5n
TUxpbmVJbmZvPiBtX3JlbW90ZU1MaW5lSW5mb3M7CisKKyAgICBSZWY8R1N0cmVhbWVyU3RhdHND
b2xsZWN0b3I+IG1fc3RhdHNDb2xsZWN0b3I7CisKKyAgICB1bnNpZ25lZCBtX3JlcXVlc3RQYWRD
b3VudGVyIHsgMCB9OworICAgIGludCBtX3B0Q291bnRlciB7IDk2IH07CisKKyAgICB1bnNpZ25l
ZCBtX21saW5lSW5kZXggeyAwIH07CisKKyAgICBWZWN0b3I8UmVmPFJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lcj4+IG1fc291cmNlczsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVk
aWFTdHJlYW0+PiBtX3BlbmRpbmdTdHJlYW1zOworICAgIHVuc2lnbmVkIG1fcGVuZGluZ0luY29t
aW5nU3RyZWFtcyB7IDAgfTsKKworICAgIGJvb2wgbV9pc0luaXRpYXRvciB7IGZhbHNlIH07Cisg
ICAgYm9vbCBtX2lzTmVnb3RpYXRpb25OZWVkZWQgeyBmYWxzZSB9OworCisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgVGltZXIgbV9zdGF0c0xvZ1RpbWVyOworICAgIFNlY29uZHMgbV9z
dGF0c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wOworICAgIFJlZjxjb25zdCBMb2dnZXI+IG1fbG9n
Z2VyOworICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRpZmllcjsKKyNlbmRpZgorfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5hMzg0ZWNkZGFmNjYyZjQwNjE5NmFjZWVmYjdhNGQ1MzRhNjcyYmE2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApAQCAtMCwwICsxLDM3MyBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorCisjaWYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhRW5kcG9pbnQuaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kLmgiCisjaW5jbHVkZSAiSWNlQ2FuZGlkYXRlLmgiCisjaW5jbHVkZSAiSlNSVENTdGF0c1Jl
cG9ydC5oIgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCisjaW5jbHVk
ZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGUuaCIKKyNpbmNs
dWRlICJSVENQZWVyQ29ubmVjdGlvbi5oIgorI2luY2x1ZGUgIlJUQ1J0cENhcGFiaWxpdGllcy5o
IgorI2luY2x1ZGUgIlJUQ1J0cFJlY2VpdmVyLmgiCisjaW5jbHVkZSAiUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+
IGNyZWF0ZUdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYg
cGVlckNvbm5lY3Rpb24pCit7CisgICAgZW5zdXJlR1N0cmVhbWVySW5pdGlhbGl6ZWQoKTsKKyAg
ICBpZiAoIWlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxlKCJ3ZWJydGMiKSkgeworICAgICAgICBX
VEZMb2dBbHdheXMoIkdzdFdlYlJUQyBwbHVnaW4gbm90IGZvdW5kLiBNYWtlIHN1cmUgdG8gaW5z
dGFsbCBnc3QtcGx1Z2lucy1iYWQgPj0gMS4yMCB3aXRoIHRoZSB3ZWJydGMgcGx1Z2luIGVuYWJs
ZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIH0KKyAgICByZXR1cm4gV1RGOjpt
YWtlVW5pcXVlPEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZD4ocGVlckNvbm5lY3Rpb24p
OworfQorCitDcmVhdGVQZWVyQ29ubmVjdGlvbkJhY2tlbmQgUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpjcmVhdGUgPSBjcmVhdGVHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ7CisKK3N0ZDo6
b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlY2Vp
dmVyQ2FwYWJpbGl0aWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIGtp
bmQpCit7CisgICAgUlRDUnRwQ2FwYWJpbGl0aWVzIGNhcGFiaWxpdGllczsKKyAgICBjYXBhYmls
aXRpZXMuaGVhZGVyRXh0ZW5zaW9ucy5hcHBlbmQoeyAiaHR0cDovL3d3dy5pZXRmLm9yZy9pZC9k
cmFmdC1ob2xtZXItcm1jYXQtdHJhbnNwb3J0LXdpZGUtY2MtZXh0ZW5zaW9ucy0wMSIgfSk7Cisg
ICAgaWYgKGtpbmQgPT0gImF1ZGlvIl9zKSB7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3Mu
YXBwZW5kKHsgLm1pbWVUeXBlID0gImF1ZGlvL09QVVMiLAorICAgICAgICAgICAgLmNsb2NrUmF0
ZSA9IDQ4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMiwKKyAgICAgICAgICAgIC5zZHBG
bXRwTGluZSA9ICIiCisgICAgICAgIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNhcGFiaWxp
dGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJ1cm46M2dwcDp2aWRlby1vcmllbnRhdGlv
biIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0g
InZpZGVvL1ZQOCIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAg
ICAuc2RwRm10cExpbmUgPSAiIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBl
bmQoeyAubWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5
MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlkPTAiIH0pOworICAg
ICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDki
LAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBM
aW5lID0gInByb2ZpbGUtaWQ9MSIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBw
ZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL0gyNjQiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9
IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7CisgICAgfQorICAgIHJl
dHVybiBjYXBhYmlsaXRpZXM7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVz
PiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRlckNhcGFiaWxpdGllcyhTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBraW5kKQoreworICAgIFJUQ1J0cENhcGFiaWxpdGll
cyBjYXBhYmlsaXRpZXM7CisgICAgY2FwYWJpbGl0aWVzLmhlYWRlckV4dGVuc2lvbnMuYXBwZW5k
KHsgImh0dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQtaG9sbWVyLXJtY2F0LXRyYW5zcG9ydC13
aWRlLWNjLWV4dGVuc2lvbnMtMDEiIH0pOworICAgIGlmIChraW5kID09ICJhdWRpbyJfcykgewor
ICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJhdWRpby9P
UFVTIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA0ODAwMCwKKyAgICAgICAgICAgIC5jaGFu
bmVscyA9IDIsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIiB9KTsKKyAgICB9IGVsc2Ug
eworICAgICAgICBjYXBhYmlsaXRpZXMuaGVhZGVyRXh0ZW5zaW9ucy5hcHBlbmQoeyAidXJuOjNn
cHA6dmlkZW8tb3JpZW50YXRpb24iIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFw
cGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDgiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9
IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7CisgICAgICAgIGNhcGFi
aWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL1ZQOSIsCisgICAgICAg
ICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAicHJv
ZmlsZS1pZD0wIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBlbmQoeyAubWlt
ZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAg
ICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlkPTEiIH0pOworICAgICAgICBjYXBh
YmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9IMjY0IiwKKyAgICAg
ICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIi
IH0pOworICAgIH0KKyAgICByZXR1cm4gY2FwYWJpbGl0aWVzOworfQorCitHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVy
Q29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCisgICAgOiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQo
cGVlckNvbm5lY3Rpb24pCisgICAgLCBtX2VuZHBvaW50KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmNyZWF0ZSgqdGhpcykpCit7CisgICAgZGlzYWJsZUlDRUNhbmRpZGF0ZUZpbHRlcmluZygpOwor
fQorCitHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6On5HU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpzdXNwZW5kKCkKK3sKKyAgICBtX2VuZHBvaW50LT5zdXNwZW5kKCk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN1bWUoKQoreworICAgIG1fZW5k
cG9pbnQtPnJlc3VtZSgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6cmVzdGFydEljZSgpCit7CisgICAgbV9lbmRwb2ludC0+cmVzdGFydEljZSgpOworfQorCiti
b29sIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0Q29uZmlndXJhdGlvbihNZWRp
YUVuZHBvaW50Q29uZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIG1f
ZW5kcG9pbnQtPnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyhSZWY8RGVmZXJyZWRQcm9taXNl
PiYmIHByb21pc2UpCit7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92
ZShwcm9taXNlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZCYgYmFja2VuZEZyb21SVFBTZW5kZXIoUlRDUnRwU2VuZGVyJiBzZW5kZXIpCit7CisgICAgQVNT
RVJUKCFzZW5kZXIuaXNTdG9wcGVkKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kJj4oKnNlbmRlci5iYWNrZW5kKCkpOworfQorCit2b2lkIEdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwU2VuZGVyJiBzZW5kZXIs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBpZiAoIXNlbmRlci5iYWNr
ZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShw
cm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBiYWNrZW5kID0g
YmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOwor
ICAgIGlmIChSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJh
Y2tlbmQuYXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5wYWQoKTsKKyAgICBl
bHNlIGlmIChSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJh
Y2tlbmQudmlkZW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5wYWQoKTsKKyAgICBt
X2VuZHBvaW50LT5nZXRTdGF0cyhwYWQuZ2V0KCksIFdURk1vdmUocHJvbWlzZSkpOworfQorCit2
b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwUmVjZWl2
ZXImIHJlY2VpdmVyLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7CisgICAgaWYg
KCFyZWNlaXZlci5iYWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVs
bHB0ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBH
c3RFbGVtZW50KiBiaW4gPSBudWxscHRyOworICAgIGF1dG8mIHNvdXJjZSA9IHJlY2VpdmVyLnRy
YWNrKCkucHJpdmF0ZVRyYWNrKCkuc291cmNlKCk7CisgICAgaWYgKHNvdXJjZS5pc0luY29taW5n
QXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgYmluID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWlu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyJj4oc291cmNlKS5iaW4oKTsKKyAgICBlbHNlIGlmIChzb3Vy
Y2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0YXRpY19jYXN0PFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSkuYmluKCk7CisgICAg
ZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgYXV0byBz
aW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGJpbiwgInNpbmsi
KSk7CisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihzaW5rUGFk
LmdldCgpKSk7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMoc3JjUGFkLmdldCgpLCBXVEZNb3Zl
KHByb21pc2UpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRv
U2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0
aW9uKQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlv
bik7CisgICAgbV9pc0xvY2FsRGVzY3JpcHRpb25TZXQgPSB0cnVlOworfQorCit2b2lkIEdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBS
VENTZXNzaW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIG1fZW5kcG9pbnQtPmRv
U2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOworICAgIG1faXNSZW1vdGVEZXNjcmlw
dGlvblNldCA9IHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
Ojpkb0NyZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYmIG9wdGlvbnMpCit7CisgICAgbV9lbmRw
b2ludC0+ZG9DcmVhdGVPZmZlcihvcHRpb25zKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlvbnMmJikKK3sKKyAg
ICBpZiAoIW1faXNSZW1vdGVEZXNjcmlwdGlvblNldCkgeworICAgICAgICBjcmVhdGVBbnN3ZXJG
YWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJObyByZW1vdGUgZGVzY3JpcHRp
b24gc2V0IiB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2VuZHBvaW50LT5kb0Ny
ZWF0ZUFuc3dlcigpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
Y2xvc2UoKQoreworICAgIG1fZW5kcG9pbnQtPmNsb3NlKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb1N0b3AoKQoreworICAgIG1fZW5kcG9pbnQtPnN0b3Ao
KTsKKyAgICBtX3BlbmRpbmdSZWNlaXZlcnMuY2xlYXIoKTsKK30KKwordm9pZCBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSYg
Y2FuZGlkYXRlLCBBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIHVu
c2lnbmVkIHNkcE1MaW5lSW5kZXggPSBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCgpID8gY2FuZGlk
YXRlLnNkcE1MaW5lSW5kZXgoKS52YWx1ZSgpIDogMDsKKyAgICBhdXRvIHJ0Y0NhbmRpZGF0ZSA9
IFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJJY2VDYW5kaWRhdGU+KCpuZXcgR1N0cmVhbWVySWNl
Q2FuZGlkYXRlIHsgc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0ZSgpIH0pOworICAg
IG1fZW5kcG9pbnQtPmFkZEljZUNhbmRpZGF0ZSgqcnRjQ2FuZGlkYXRlLCBXVEZNb3ZlKGNhbGxi
YWNrKSk7Cit9CisKK1JlZjxSVENSdHBSZWNlaXZlcj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kPiYmIGJhY2tlbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJp
bmcmIHRyYWNrSWQpCit7CisgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4o
Km1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKworICAgIGF1dG8g
c291cmNlID0gYmFja2VuZC0+Y3JlYXRlU291cmNlKHRyYWNrS2luZCwgdHJhY2tJZCk7CisgICAg
Ly8gUmVtb3RlIHNvdXJjZSBpcyBpbml0aWFsbHkgbXV0ZWQgYW5kIHdpbGwgYmUgdW5tdXRlZCB3
aGVuIHJlY2VpdmluZyB0aGUgZmlyc3QgcGFja2V0LgorICAgIHNvdXJjZS0+c2V0TXV0ZWQodHJ1
ZSk7CisgICAgYXV0byB0cmFja0lEID0gc291cmNlLT5wZXJzaXN0ZW50SUQoKTsKKyAgICBhdXRv
IHJlbW90ZVRyYWNrUHJpdmF0ZSA9IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoZG9j
dW1lbnQubG9nZ2VyKCksIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZSh0cmFja0lEKSk7CisgICAg
YXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShkb2N1bWVudCwgV1RG
TW92ZShyZW1vdGVUcmFja1ByaXZhdGUpKTsKKworICAgIHJldHVybiBSVENSdHBSZWNlaXZlcjo6
Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHJlbW90ZVRyYWNrKSwgV1RGTW92ZShiYWNrZW5kKSk7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IEdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYg
bGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykKK3sKKyAgICByZXR1cm4g
bV9lbmRwb2ludC0+Y3JlYXRlRGF0YUNoYW5uZWwobGFiZWwsIG9wdGlvbnMpOworfQorCitzdGF0
aWMgaW5saW5lIFJlZlB0cjxSVENSdHBTZW5kZXI+IGZpbmRFeGlzdGluZ1NlbmRlcihjb25zdCBW
ZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj4mIHRyYW5zY2VpdmVycywgR1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZCYgc2VuZGVyQmFja2VuZCkKK3sKKyAgICBBU1NFUlQoc2VuZGVyQmFj
a2VuZC5ydGNTZW5kZXIoKSk7CisgICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2Vp
dmVycykgeworICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFuc2NlaXZlci0+c2VuZGVyKCk7Cisg
ICAgICAgIGlmICghc2VuZGVyLmlzU3RvcHBlZCgpICYmIHNlbmRlckJhY2tlbmQucnRjU2VuZGVy
KCkgPT0gYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKS5ydGNTZW5kZXIoKSkKKyAgICAgICAg
ICAgIHJldHVybiBSZWYoc2VuZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OmFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBGaXhlZFZlY3RvcjxTdHJp
bmc+JiYgbWVkaWFTdHJlYW1JZHMpCit7CisgICAgYXV0byBzZW5kZXJCYWNrZW5kID0gV1RGOjpt
YWtlVW5pcXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+KCp0aGlzLCBudWxscHRyLCBudWxs
cHRyKTsKKyAgICBpZiAoIW1fZW5kcG9pbnQtPmFkZFRyYWNrKCpzZW5kZXJCYWNrZW5kLCB0cmFj
aywgbWVkaWFTdHJlYW1JZHMpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9y
LCAiVW5hYmxlIHRvIGFkZCB0cmFjayJfcyB9OworCisgICAgaWYgKGF1dG8gc2VuZGVyID0gZmlu
ZEV4aXN0aW5nU2VuZGVyKG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5zY2VpdmVycygpLCAq
c2VuZGVyQmFja2VuZCkpIHsKKyAgICAgICAgYmFja2VuZEZyb21SVFBTZW5kZXIoKnNlbmRlciku
dGFrZVNvdXJjZSgqc2VuZGVyQmFja2VuZCk7CisgICAgICAgIHNlbmRlci0+c2V0VHJhY2soUmVm
KHRyYWNrKSk7CisgICAgICAgIHNlbmRlci0+c2V0TWVkaWFTdHJlYW1JZHMoV1RGTW92ZShtZWRp
YVN0cmVhbUlkcykpOworICAgICAgICByZXR1cm4gc2VuZGVyLnJlbGVhc2VOb25OdWxsKCk7Cisg
ICAgfQorCisgICAgYXV0byB0cmFuc2NlaXZlckJhY2tlbmQgPSBtX2VuZHBvaW50LT50cmFuc2Nl
aXZlckJhY2tlbmRGcm9tU2VuZGVyKCpzZW5kZXJCYWNrZW5kKTsKKworICAgIGF1dG8gc2VuZGVy
ID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgUmVmKHRyYWNrKSwgV1RG
TW92ZShzZW5kZXJCYWNrZW5kKSk7CisgICAgc2VuZGVyLT5zZXRNZWRpYVN0cmVhbUlkcyhXVEZN
b3ZlKG1lZGlhU3RyZWFtSWRzKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVy
KHRyYW5zY2VpdmVyQmFja2VuZC0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCksIHRyYWNrLmtpbmQo
KSwgdHJhY2suaWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVy
OjpjcmVhdGUoc2VuZGVyLmNvcHlSZWYoKSwgV1RGTW92ZShyZWNlaXZlciksIFdURk1vdmUodHJh
bnNjZWl2ZXJCYWNrZW5kKSk7CisgICAgbV9wZWVyQ29ubmVjdGlvbi5hZGRJbnRlcm5hbFRyYW5z
Y2VpdmVyKFdURk1vdmUodHJhbnNjZWl2ZXIpKTsKKyAgICByZXR1cm4gc2VuZGVyOworfQorCit0
ZW1wbGF0ZTx0eXBlbmFtZSBUPgorRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4g
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlckZyb21UcmFja09y
S2luZChUJiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkK
K3sKKyAgICBhdXRvIGJhY2tlbmRzID0gbV9lbmRwb2ludC0+YWRkVHJhbnNjZWl2ZXIodHJhY2tP
cktpbmQsIGluaXQpOworICAgIGlmICghYmFja2VuZHMpCisgICAgICAgIHJldHVybiBFeGNlcHRp
b24geyBJbnZhbGlkQWNjZXNzRXJyb3IsICJVbmFibGUgdG8gYWRkIHRyYW5zY2VpdmVyIl9zIH07
CisKKyAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKG1fcGVlckNvbm5lY3Rp
b24sIFdURk1vdmUodHJhY2tPcktpbmQpLCBXVEZNb3ZlKGJhY2tlbmRzLT5zZW5kZXJCYWNrZW5k
KSk7CisgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKFdURk1vdmUoYmFja2VuZHMt
PnJlY2VpdmVyQmFja2VuZCksIHNlbmRlci0+dHJhY2tLaW5kKCksIHNlbmRlci0+dHJhY2tJZCgp
KTsKKyAgICBhdXRvIHRyYW5zY2VpdmVyID0gUlRDUnRwVHJhbnNjZWl2ZXI6OmNyZWF0ZShXVEZN
b3ZlKHNlbmRlciksIFdURk1vdmUocmVjZWl2ZXIpLCBXVEZNb3ZlKGJhY2tlbmRzLT50cmFuc2Nl
aXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2
ZXIodHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2ZXI7Cit9CisK
K0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6YWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0
IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gYWRkVHJhbnNjZWl2
ZXJGcm9tVHJhY2tPcktpbmQoU3RyaW5nIHsgdHJhY2tLaW5kIH0sIGluaXQpOworfQorCitFeGNl
cHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OmFkZFRyYW5zY2VpdmVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYmIHRyYWNrLCBjb25z
dCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQpCit7CisgICAgcmV0dXJuIGFkZFRyYW5zY2Vp
dmVyRnJvbVRyYWNrT3JLaW5kKFdURk1vdmUodHJhY2spLCBpbml0KTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhHU3Ry
ZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrKQor
eworICAgIG1fZW5kcG9pbnQtPnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhzZW5kZXIsIHRyYWNr
KTsKK30KKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmIGJh
Y2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIoUlRDUnRwVHJhbnNjZWl2ZXImIHRyYW5zY2VpdmVyKQor
eworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQm
PigqdHJhbnNjZWl2ZXIuYmFja2VuZCgpKTsKK30KKworUlRDUnRwVHJhbnNjZWl2ZXIqIEdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZXhpc3RpbmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0
aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJik+JiYgbWF0Y2hpbmdGdW5j
dGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV9wZWVyQ29ubmVjdGlvbi5j
dXJyZW50VHJhbnNjZWl2ZXJzKCkpIHsKKyAgICAgICAgaWYgKG1hdGNoaW5nRnVuY3Rpb24oYmFj
a2VuZEZyb21SVFBUcmFuc2NlaXZlcigqdHJhbnNjZWl2ZXIpKSkKKyAgICAgICAgICAgIHJldHVy
biB0cmFuc2NlaXZlci5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1JU
Q1J0cFRyYW5zY2VpdmVyJiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6Om5ld1JlbW90
ZVRyYW5zY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ+JiYgdHJhbnNjZWl2ZXJCYWNrZW5kLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUp
Cit7CisgICAgYXV0byB0cmFja0tpbmQgPSB0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5
cGU6OkF1ZGlvID8gImF1ZGlvIl9zIDogInZpZGVvIl9zOworICAgIGF1dG8gc2VuZGVyID0gUlRD
UnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgdHJhY2tLaW5kLCB0cmFuc2NlaXZl
ckJhY2tlbmQtPmNyZWF0ZVNlbmRlckJhY2tlbmQoKnRoaXMsIG51bGxwdHIsIG51bGxwdHIpKTsK
KyAgICBhdXRvIHJlY2VpdmVyID0gY3JlYXRlUmVjZWl2ZXIodHJhbnNjZWl2ZXJCYWNrZW5kLT5j
cmVhdGVSZWNlaXZlckJhY2tlbmQoKSwgdHJhY2tLaW5kLCBzZW5kZXItPnRyYWNrSWQoKSk7Cisg
ICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoV1RGTW92ZShz
ZW5kZXIpLCBXVEZNb3ZlKHJlY2VpdmVyKSwgV1RGTW92ZSh0cmFuc2NlaXZlckJhY2tlbmQpKTsK
KyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIu
Y29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAg
ICBtX2VuZHBvaW50LT5jb2xsZWN0VHJhbnNjZWl2ZXJzKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZW1vdmVUcmFjayhSVENSdHBTZW5kZXImIHNlbmRlcikK
K3sKKyAgICBtX2VuZHBvaW50LT5yZW1vdmVUcmFjayhiYWNrZW5kRnJvbVJUUFNlbmRlcihzZW5k
ZXIpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFwcGx5Um90
YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcygpCit7CisgICAgZm9yIChhdXRvJiB0cmFuc2Nl
aXZlciA6IG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5zY2VpdmVycygpKSB7CisgICAgICAg
IGlmICghdHJhbnNjZWl2ZXItPnNlbmRlcigpLmlzU3RvcHBlZCgpKSB7CisgICAgICAgICAgICBp
ZiAoYXV0byogdmlkZW9Tb3VyY2UgPSBiYWNrZW5kRnJvbVJUUFNlbmRlcih0cmFuc2NlaXZlci0+
c2VuZGVyKCkpLnZpZGVvU291cmNlKCkpCisgICAgICAgICAgICAgICAgdmlkZW9Tb3VyY2UtPnNl
dEFwcGx5Um90YXRpb24odHJ1ZSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1l
KEZ1bmN0aW9uPHZvaWQoU3RyaW5nJiYpPiYmIGNhbGxiYWNrKQoreworICAgIG1fZW5kcG9pbnQt
PmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUoV1RGTW92ZShjYWxsYmFjaykpOworfQor
Citib29sIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6aXNOZWdvdGlhdGlvbk5lZWRl
ZCh1aW50MzJfdCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9lbmRwb2ludC0+aXNOZWdvdGlhdGlv
bk5lZWRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFlYTFhMjYwMTZkNzVmMGJlM2ZkOTgwNjgy
OTYwODhiOWUyYWU1OQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oCkBA
IC0wLDAgKzEsMTIwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUGVlckNvbm5l
Y3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorI2luY2x1
ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFzaE1hcC5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2NsYXNzIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ7CitjbGFzcyBHU3RyZWFtZXJS
dHBSZWNlaXZlckJhY2tlbmQ7CitjbGFzcyBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOworY2xh
c3MgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOworY2xhc3MgUlRDUnRwUmVjZWl2ZXI7
CitjbGFzcyBSVENSdHBSZWNlaXZlckJhY2tlbmQ7CitjbGFzcyBSVENTZXNzaW9uRGVzY3JpcHRp
b247CitjbGFzcyBSVENTdGF0c1JlcG9ydDsKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcjsKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cjsKK2NsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXI7CisKK3N0cnVjdCBHU3RyZWFtZXJJY2VDYW5kaWRhdGUgeworICAgIFdU
Rl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAgICB1bnNpZ25lZCBzZHBNTGluZUluZGV4
OworICAgIFN0cmluZyBjYW5kaWRhdGU7Cit9OworCitjbGFzcyBHU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUGVlckNvbm5lY3Rpb25CYWNrZW5kIHsKKyAgICBX
VEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mKTsKKyAgICB+R1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kKCk7CisKK3ByaXZhdGU6CisgICAgdm9pZCBjbG9zZSgpIGZp
bmFsOworICAgIHZvaWQgZG9DcmVhdGVPZmZlcihSVENPZmZlck9wdGlvbnMmJikgZmluYWw7Cisg
ICAgdm9pZCBkb0NyZWF0ZUFuc3dlcihSVENBbnN3ZXJPcHRpb25zJiYpIGZpbmFsOworICAgIHZv
aWQgZG9TZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiopIGZp
bmFsOworICAgIHZvaWQgZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVz
Y3JpcHRpb24mKSBmaW5hbDsKKyAgICB2b2lkIGRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRp
ZGF0ZSYsIEFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgZG9TdG9w
KCkgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlcj4gY3Jl
YXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVs
SW5pdCYpIGZpbmFsOworICAgIHZvaWQgcmVzdGFydEljZSgpIGZpbmFsOworICAgIGJvb2wgc2V0
Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmKSBmaW5hbDsKKyAgICB2
b2lkIGdldFN0YXRzKFJlZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFsOworICAgIHZvaWQgZ2V0
U3RhdHMoUlRDUnRwU2VuZGVyJiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJikgZmluYWw7CisgICAg
dm9pZCBnZXRTdGF0cyhSVENSdHBSZWNlaXZlciYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpIGZp
bmFsOworCisgICAgdm9pZCBlbXVsYXRlUGxhdGZvcm1FdmVudChjb25zdCBTdHJpbmcmKSBmaW5h
bCB7IH0KKyAgICB2b2lkIGFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcygpIGZp
bmFsOworCisgICAgdm9pZCBnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0aW9u
PHZvaWQoU3RyaW5nJiYpPiYmKSBmaW5hbDsKKworICAgIGJvb2wgaXNOZWdvdGlhdGlvbk5lZWRl
ZCh1aW50MzJfdCkgY29uc3QgZmluYWw7CisKKyAgICBzdGQ6Om9wdGlvbmFsPGJvb2w+IGNhblRy
aWNrbGVJY2VDYW5kaWRhdGVzKCkgY29uc3QgeyByZXR1cm4gdHJ1ZTsgfTsKKworICAgIGZyaWVu
ZCBjbGFzcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OworICAgIGZyaWVuZCBjbGFzcyBHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kOworICAgIFJUQ1BlZXJDb25uZWN0aW9uJiBjb25uZWN0aW9uKCkg
eyByZXR1cm4gbV9wZWVyQ29ubmVjdGlvbjsgfQorCisgICAgdm9pZCBnZXRTdGF0c1N1Y2NlZWRl
ZChjb25zdCBEZWZlcnJlZFByb21pc2UmLCBSZWY8UlRDU3RhdHNSZXBvcnQ+JiYpOworCisgICAg
RXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFNlbmRlcj4+IGFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2sm
LCBGaXhlZFZlY3RvcjxTdHJpbmc+JiYpIGZpbmFsOworICAgIHZvaWQgcmVtb3ZlVHJhY2soUlRD
UnRwU2VuZGVyJikgZmluYWw7CisKKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2
ZXI+PiBhZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENSdHBUcmFuc2NlaXZl
ckluaXQmKSBmaW5hbDsKKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBh
ZGRUcmFuc2NlaXZlcihSZWY8TWVkaWFTdHJlYW1UcmFjaz4mJiwgY29uc3QgUlRDUnRwVHJhbnNj
ZWl2ZXJJbml0JikgZmluYWw7CisgICAgdm9pZCBzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soR1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYsIE1lZGlhU3RyZWFtVHJhY2smKTsKKworICAgIFJUQ1J0
cFRyYW5zY2VpdmVyKiBleGlzdGluZ1RyYW5zY2VpdmVyKFdURjo6RnVuY3Rpb248Ym9vbChHU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmKT4mJik7CisgICAgUlRDUnRwVHJhbnNjZWl2ZXIm
IG5ld1JlbW90ZVRyYW5zY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2Nl
aXZlckJhY2tlbmQ+JiYsIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUpOworCisgICAgdm9pZCBj
b2xsZWN0VHJhbnNjZWl2ZXJzKCkgZmluYWw7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvY2Fs
RGVzY3JpcHRpb25TZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzTG9jYWxEZXNjcmlwdGlv
blNldDsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBFeGNlcHRpb25PcjxSZWY8
UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChUJiYgdHJh
Y2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpOworCisgICAgUmVmPFJUQ1J0
cFJlY2VpdmVyPiBjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kPiYmLCBjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0
cmFja0lkKTsKKworICAgIHZvaWQgc3VzcGVuZCgpIGZpbmFsOworICAgIHZvaWQgcmVzdW1lKCkg
ZmluYWw7CisKKyAgICBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gbV9lbmRwb2ludDsKKyAg
ICBib29sIG1faXNMb2NhbERlc2NyaXB0aW9uU2V0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNS
ZW1vdGVEZXNjcmlwdGlvblNldCB7IGZhbHNlIH07CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEdTdHJlYW1lckljZUNhbmRpZGF0ZT4+IG1fcGVuZGluZ0NhbmRpZGF0ZXM7CisgICAgVmVj
dG9yPFJlZjxSVENSdHBSZWNlaXZlcj4+IG1fcGVuZGluZ1JlY2VpdmVyczsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uOWMxMzQzYjEzOWY1YmE5MmY0MTU1ZjNkMDUwNTA1ZDJjZmFmY2Q3NAotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdT
dHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1JUQ1J0cFBhcmFtZXRlcnMgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRQYXJhbWV0
ZXJzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1Zl
Y3RvcjxSVENSdHBDb250cmlidXRpbmdTb3VyY2U+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2Vu
ZDo6Z2V0Q29udHJpYnV0aW5nU291cmNlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8UlRDUnRwU3luY2hyb25pemF0aW9uU291
cmNlPiBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFN5bmNocm9uaXphdGlvblNvdXJj
ZXMoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30K
KworUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6
Y3JlYXRlU291cmNlKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNr
SWQpCit7CisgICAgaWYgKHRyYWNrS2luZCA9PSAidmlkZW8iX3MpCisgICAgICAgIHJldHVybiBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFja0lkLmlzb2xh
dGVkQ29weSgpKTsKKworICAgIFJFTEVBU0VfQVNTRVJUKHRyYWNrS2luZCA9PSAiYXVkaW8iX3Mp
OworICAgIHJldHVybiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0
ZSh0cmFja0lkLmlzb2xhdGVkQ29weSgpKTsKK30KKworUmVmPFJUQ1J0cFRyYW5zZm9ybUJhY2tl
bmQ+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6cnRjUnRwVHJhbnNmb3JtQmFja2VuZCgp
Cit7CisgICAgcmV0dXJuIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6Y3Jl
YXRlKG1fcnRjUmVjZWl2ZXIpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRHRsc1RyYW5zcG9y
dEJhY2tlbmQ+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tl
bmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJhbnNwb3J0Owor
ICAgIGdfb2JqZWN0X2dldChtX3J0Y1JlY2VpdmVyLmdldCgpLCAidHJhbnNwb3J0IiwgJnRyYW5z
cG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIHRyYW5zcG9ydCA/IG1ha2VVbmlx
dWU8R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ+KHRyYW5zcG9ydCkgOiBudWxscHRyOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0
cFJlY2VpdmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2M2E3NTk3Yjk4Mjc2NzZkZTAzM2ExOWJj
NDNmY2RhMmY4MTMzMDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaApAQCAt
MCwwICsxLDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2lu
Y2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENSdHBSZWNlaXZlckJhY2tl
bmQuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kIGZpbmFsIDogcHVibGlj
IFJUQ1J0cFJlY2VpdmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kKEdSZWZQdHI8
R3N0V2ViUlRDUlRQUmVjZWl2ZXI+JiYgcnRjUmVjZWl2ZXIpCisgICAgICAgIDogbV9ydGNSZWNl
aXZlcihXVEZNb3ZlKHJ0Y1JlY2VpdmVyKSkKKyAgICB7CisgICAgfQorCisgICAgR3N0V2ViUlRD
UlRQUmVjZWl2ZXIqIHJ0Y1JlY2VpdmVyKCkgeyByZXR1cm4gbV9ydGNSZWNlaXZlci5nZXQoKTsg
fQorICAgIFJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBjcmVhdGVTb3VyY2UoY29uc3QgU3RyaW5n
JiB0cmFja0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCk7CisKK3ByaXZhdGU6CisgICAgUlRD
UnRwUGFyYW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkgZmluYWw7CisgICAgVmVjdG9yPFJUQ1J0cENv
bnRyaWJ1dGluZ1NvdXJjZT4gZ2V0Q29udHJpYnV0aW5nU291cmNlcygpIGNvbnN0IGZpbmFsOwor
ICAgIFZlY3RvcjxSVENSdHBTeW5jaHJvbml6YXRpb25Tb3VyY2U+IGdldFN5bmNocm9uaXphdGlv
blNvdXJjZXMoKSBjb25zdCBmaW5hbDsKKyAgICBSZWY8UlRDUnRwVHJhbnNmb3JtQmFja2VuZD4g
cnRjUnRwVHJhbnNmb3JtQmFja2VuZCgpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENE
dGxzVHJhbnNwb3J0QmFja2VuZD4gZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBmaW5hbDsKKworICAg
IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IG1fcnRjUmVjZWl2ZXI7Cit9OworCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
UnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lMjkwODJmZWNhNGQ0
OGE4MzcwMzY5NzkxNzY3ZGJhZGFlMzNmOTBiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJU
cmFuc2Zvcm1CYWNrZW5kLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRw
UmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFu
c2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGUgbWVkaWFUeXBlRnJvbVJlY2VpdmVyKGNvbnN0IEdzdFdl
YlJUQ1JUUFJlY2VpdmVyJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBS
VENSdHBUcmFuc2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGU6OlZpZGVvOworfQorCitHU3RyZWFtZXJS
dHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3Jt
QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiYgcnRjUmVjZWl2ZXIp
CisgICAgOiBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKG1lZGlhVHlwZUZyb21SZWNlaXZl
cigqcnRjUmVjZWl2ZXIpLCBTaWRlOjpSZWNlaXZlcikKKyAgICAsIG1fcnRjUmVjZWl2ZXIocnRj
UmVjZWl2ZXIpCit7Cit9CisKK0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6
fkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCgpCit7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVD
YWxsYmFjayhDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIHNldElucHV0Q2FsbGJhY2soV1RG
TW92ZShjYWxsYmFjaykpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJhbWUoKQoreworICAg
IEFTU0VSVChtZWRpYVR5cGUoKSA9PSBNZWRpYVR5cGU6OlZpZGVvKTsKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRy
YW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljg1ODY2NzZhMDZiN2FiOWViMGIzMmU3ZGY3YzYzNDgxNWE4Yzk3OWYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaApAQCAtMCwwICsxLDQ4IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3Jt
QmFja2VuZCBmaW5hbCA6IHB1YmxpYyBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2Vu
ZD4gY3JlYXRlKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+JiByZWNlaXZlcikg
eyByZXR1cm4gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tl
bmQocmVjZWl2ZXIpKTsgfQorICAgIH5HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tl
bmQoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5z
Zm9ybUJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4mKTsKKworICAg
IC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lkIHNldFRyYW5zZm9ybWFibGVGcmFt
ZUNhbGxiYWNrKENhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVxdWVzdEtleUZyYW1lKCkg
ZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiBtX3J0Y1JlY2VpdmVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOTZiY2JhOTI1ZmU5ZGZmN2Y2ZTU2
YTU1MTY1MmQ4NWUyYjgzMGM3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAK
QEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlh
IFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisK
KyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRl
ICJHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckR0bHNU
cmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNl
RGVmZXJyZWQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJUQ1Bl
ZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDUnRwU2VuZGVyLmgiCisjaW5jbHVkZSAiUmVh
bHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUnVudGltZUVuYWJsZWRG
ZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1dGlvbkNvbnRleHQuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFtZSBTb3VyY2U+CitzdGF0aWMgaW5saW5l
IGJvb2wgdXBkYXRlVHJhY2tTb3VyY2UoU291cmNlJiBzb3VyY2UsIE1lZGlhU3RyZWFtVHJhY2sq
IHRyYWNrKQoreworICAgIGlmICghdHJhY2spIHsKKyAgICAgICAgc291cmNlLnN0b3AoKTsKKyAg
ICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJldHVybiBzb3VyY2Uuc2V0VHJhY2sodHJh
Y2stPnByaXZhdGVUcmFjaygpKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5k
OjpzdGFydFNvdXJjZSgpCit7CisgICAgc3dpdGNoT24obV9zb3VyY2UsIFtdKFJlZjxSZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgc291cmNl
LT5zdGFydCgpOworICAgIH0sIFtdKFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgc291cmNlLT5zdGFydCgpOworICAgIH0sIFtdKHN0
ZDo6bnVsbHB0cl90JikgeworICAgIH0pOworfQorCitXQVJOX1VOVVNFRF9SRVRVUk4gR1JlZlB0
cjxHc3RFbGVtZW50PiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzdG9wU291cmNlKCkKK3sK
KyAgICBzd2l0Y2hPbihtX3NvdXJjZSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0b3AoKTsKKyAgICAgICAg
cmV0dXJuIEdSZWZQdHI8R3N0RWxlbWVudD4oc291cmNlLT5iaW4oKSk7CisgICAgfSwgW10oUmVm
PFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAg
ICBzb3VyY2UtPnN0b3AoKTsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8R3N0RWxlbWVudD4oc291
cmNlLT5iaW4oKSk7CisgICAgfSwgW10oc3RkOjpudWxscHRyX3QmKSB7CisgICAgICAgIHJldHVy
biBHUmVmUHRyPEdzdEVsZW1lbnQ+KG51bGxwdHIpOworICAgIH0pOworICAgIHJldHVybiBudWxs
cHRyOworfQorCitib29sIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJlcGxhY2VUcmFjayhS
VENSdHBTZW5kZXImIHNlbmRlciwgTWVkaWFTdHJlYW1UcmFjayogdHJhY2spCit7CisgICAgaWYg
KCF0cmFjaykgeworICAgICAgICBhdXRvIHN0b3BwZWRTb3VyY2UgPSBzdG9wU291cmNlKCk7Cisg
ICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAgIGlmIChzZW5kZXIudHJhY2soKSkgewor
ICAgICAgICBzd2l0Y2hPbihtX3NvdXJjZSwgWyZdKFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFjay0+c291
cmNlKCkudHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvKTsKKyAgICAg
ICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAgICAgICAgc291cmNlLT5zZXRTb3VyY2UodHJh
Y2stPnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICAg
ICAgfSwgWyZdKFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3Vy
Y2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFjay0+c291cmNlKCkudHlwZSgpID09IFJlYWx0
aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RvcCgp
OworICAgICAgICAgICAgc291cmNlLT5zZXRTb3VyY2UodHJhY2stPnByaXZhdGVUcmFjaygpKTsK
KyAgICAgICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAgICAgICAgfSwgW10oc3RkOjpudWxscHRy
X3QmKSB7CisgICAgICAgIH0pOworICAgIH0KKworICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5k
LT5zZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soKnRoaXMsICp0cmFjayk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK1JUQ1J0cFNlbmRQYXJhbWV0ZXJzIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6
OmdldFBhcmFtZXRlcnMoKSBjb25zdAoreworICAgIHJldHVybiB0b1JUQ1J0cFNlbmRQYXJhbWV0
ZXJzKG1faW5pdERhdGEuZ2V0KCkpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQ6OnNldFBhcmFtZXRlcnMoY29uc3QgUlRDUnRwU2VuZFBhcmFtZXRlcnMmLCBET01Qcm9taXNl
RGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQoreworICAgIGlmICghbV9ydGNTZW5kZXIpIHsKKyAg
ICAgICAgcHJvbWlzZS5yZWplY3QoTm90U3VwcG9ydGVkRXJyb3IpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBwcm9taXNlLnJlc29sdmUoKTsK
K30KKworc3RkOjp1bmlxdWVfcHRyPFJUQ0RUTUZTZW5kZXJCYWNrZW5kPiBHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kOjpjcmVhdGVEVE1GQmFja2VuZCgpCit7CisgICAgcmV0dXJuIG1ha2VVbmlx
dWU8R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ+KCk7Cit9CisKK1JlZjxSVENSdHBUcmFuc2Zv
cm1CYWNrZW5kPiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNr
ZW5kKCkKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6
Y3JlYXRlKG1fcnRjU2VuZGVyKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5k
OjpzZXRNZWRpYVN0cmVhbUlkcyhjb25zdCBGaXhlZFZlY3RvcjxTdHJpbmc+JikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRHRsc1RyYW5zcG9ydEJh
Y2tlbmQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKCkK
K3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICBn
X29iamVjdF9nZXQobV9ydGNTZW5kZXIuZ2V0KCksICJ0cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91
dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KSA6IG51bGxwdHI7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MzMxMDgxY2Y3YjIyNGFiNTY1NWNjMzY4OTU4MTNhMGIzMjY2
ZWZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oCkBAIC0wLDAgKzEsMTIxIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlICJSVENSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRD
UnRwU2VuZGVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZChHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQmIGJhY2tlbmQsIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiYmIHJ0Y1NlbmRlciwg
R1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEpCisgICAgICAgIDogbV9wZWVyQ29u
bmVjdGlvbkJhY2tlbmQoV2Vha1B0ciB7ICZiYWNrZW5kIH0pCisgICAgICAgICwgbV9ydGNTZW5k
ZXIoV1RGTW92ZShydGNTZW5kZXIpKQorICAgICAgICAsIG1faW5pdERhdGEoV1RGTW92ZShpbml0
RGF0YSkpCisgICAgeworICAgIH0KKworICAgIHVzaW5nIFNvdXJjZSA9IHN0ZDo6dmFyaWFudDxz
dGQ6Om51bGxwdHJfdCwgUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4s
IFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+PjsKKyAgICBHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgYmFja2Vu
ZCwgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYgcnRjU2VuZGVyLCBTb3VyY2UmJiBzb3Vy
Y2UsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmIGluaXREYXRhKQorICAgICAgICA6IG1fcGVl
ckNvbm5lY3Rpb25CYWNrZW5kKFdlYWtQdHIgeyAmYmFja2VuZCB9KQorICAgICAgICAsIG1fcnRj
U2VuZGVyKFdURk1vdmUocnRjU2VuZGVyKSkKKyAgICAgICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNv
dXJjZSkpCisgICAgICAgICwgbV9pbml0RGF0YShXVEZNb3ZlKGluaXREYXRhKSkKKyAgICB7Cisg
ICAgfQorCisgICAgdm9pZCBzZXRSVENTZW5kZXIoR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+
JiYgcnRjU2VuZGVyKSB7IG1fcnRjU2VuZGVyID0gV1RGTW92ZShydGNTZW5kZXIpOyB9CisgICAg
R3N0V2ViUlRDUlRQU2VuZGVyKiBydGNTZW5kZXIoKSB7IHJldHVybiBtX3J0Y1NlbmRlci5nZXQo
KTsgfQorCisgICAgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKiBhdWRpb1Nv
dXJjZSgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZSwKKyAg
ICAgICAgICAgIFtdIChSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiYg
c291cmNlKSB7IHJldHVybiBzb3VyY2UucHRyKCk7IH0sCisgICAgICAgICAgICBbXSAoY29uc3Qg
YXV0byYpIC0+IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciogeyByZXR1cm4g
bnVsbHB0cjsgfQorICAgICAgICApOworICAgIH0KKworICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lciogdmlkZW9Tb3VyY2UoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIFdU
Rjo6c3dpdGNoT24obV9zb3VyY2UsCisgICAgICAgICAgICBbXSAoUmVmPFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLnB0cigpOyB9
LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSAtPiBSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXIqIHsgcmV0dXJuIG51bGxwdHI7IH0KKyAgICAgICAgKTsKKyAgICB9CisK
KyAgICBib29sIGhhc1NvdXJjZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChjb25zdCBzdGQ6Om51bGxwdHJfdCYp
IHsgcmV0dXJuIGZhbHNlOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSB7IHJldHVy
biB0cnVlOyB9CisgICAgICAgICk7CisgICAgfQorCisgICAgdm9pZCBjbGVhclNvdXJjZSgpCisg
ICAgeworICAgICAgICBBU1NFUlQoaGFzU291cmNlKCkpOworICAgICAgICBtX3NvdXJjZSA9IG51
bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBzZXRTb3VyY2UoU291cmNlJiYgc291cmNlKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKCFoYXNTb3VyY2UoKSk7CisgICAgICAgIG1fc291cmNlID0gV1RG
TW92ZShzb3VyY2UpOworICAgICAgICBBU1NFUlQoaGFzU291cmNlKCkpOworICAgIH0KKworICAg
IHZvaWQgdGFrZVNvdXJjZShHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBiYWNrZW5kKQorICAg
IHsKKyAgICAgICAgQVNTRVJUKGJhY2tlbmQuaGFzU291cmNlKCkpOworICAgICAgICBzZXRTb3Vy
Y2UoV1RGTW92ZShiYWNrZW5kLm1fc291cmNlKSk7CisgICAgfQorCisgICAgV0FSTl9VTlVTRURf
UkVUVVJOIEdSZWZQdHI8R3N0RWxlbWVudD4gc3RvcFNvdXJjZSgpOworCitwcml2YXRlOgorICAg
IGJvb2wgcmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYsIE1lZGlhU3RyZWFtVHJhY2sqKSBmaW5h
bDsKKyAgICBSVENSdHBTZW5kUGFyYW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkgY29uc3QgZmluYWw7
CisgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFJUQ1J0cFNlbmRQYXJhbWV0ZXJzJiwgRE9N
UHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENE
VE1GU2VuZGVyQmFja2VuZD4gY3JlYXRlRFRNRkJhY2tlbmQoKSBmaW5hbDsKKyAgICBSZWY8UlRD
UnRwVHJhbnNmb3JtQmFja2VuZD4gcnRjUnRwVHJhbnNmb3JtQmFja2VuZCgpIGZpbmFsOworICAg
IHZvaWQgc2V0TWVkaWFTdHJlYW1JZHMoY29uc3QgRml4ZWRWZWN0b3I8U3RyaW5nPiYpIGZpbmFs
OworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gZHRsc1RyYW5z
cG9ydEJhY2tlbmQoKSBmaW5hbDsKKworICAgIHZvaWQgc3RhcnRTb3VyY2UoKTsKKworICAgIFdl
YWtQdHI8R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kPiBtX3BlZXJDb25uZWN0aW9uQmFj
a2VuZDsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9ydGNTZW5kZXI7CisgICAg
U291cmNlIG1fc291cmNlOworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBtX2luaXREYXRh
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3Jt
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mNjZj
NGRlYzFiYjAzYTMyNzdkOTJiMDY1NDI5YzY0MDcyYmUxNDNlCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRw
U2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHAKQEAgLTAsMCArMSw1OSBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJSdHBTZW5kZXJU
cmFuc2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGUgbWVkaWFUeXBlRnJvbVNlbmRlcihjb25zdCBHc3RX
ZWJSVENSVFBTZW5kZXImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJU
Q1J0cFRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZTo6VmlkZW87Cit9CisKK0dTdHJlYW1lclJ0
cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tl
bmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiBydGNTZW5kZXIpCisgICAgOiBH
U3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKG1lZGlhVHlwZUZyb21TZW5kZXIoKnJ0Y1NlbmRl
ciksIFNpZGU6OlNlbmRlcikKKyAgICAsIG1fcnRjU2VuZGVyKHJ0Y1NlbmRlcikKK3sKK30KKwor
R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJlYW1lclJ0cFNlbmRlclRy
YW5zZm9ybUJhY2tlbmQoKQoreworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9y
bUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxiYWNrJiYgY2FsbGJh
Y2spCit7CisgICAgc2V0SW5wdXRDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNr
ZW5kOjpyZXF1ZXN0S2V5RnJhbWUoKQoreworICAgIEFTU0VSVChtZWRpYVR5cGUoKSA9PSBNZWRp
YVR5cGU6OlZpZGVvKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFu
c2Zvcm1CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIwYTU3NmRiMTI2ODNlNzU4OTc4NDJkMTRhNzk1
OGE0OTBlOTI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaApA
QCAtMCwwICsxLDUxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFu
c2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJl
YW1lclNlbmRlclRyYW5zZm9ybWVyOworCitjbGFzcyBHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zv
cm1CYWNrZW5kIGZpbmFsIDogcHVibGljIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQgewor
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R1N0
cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZD4gY3JlYXRlKGNvbnN0IEdSZWZQdHI8R3N0
V2ViUlRDUlRQU2VuZGVyPiYgc2VuZGVyKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1l
clJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoc2VuZGVyKSk7IH0KKyAgICB+R1N0cmVhbWVyUnRw
U2VuZGVyVHJhbnNmb3JtQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEdTdHJl
YW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBT
ZW5kZXI+Jik7CisKKyAgICAvLyBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kCisgICAgdm9pZCBzZXRU
cmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayhDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIHJl
cXVlc3RLZXlGcmFtZSgpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+
IG1fcnRjU2VuZGVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJh
bnNjZWl2ZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
ZDUzYWQwNDA0ZTZiODY4YWJkMmE2YTU0YzQ2MDYzMWMwN2UxNjEzYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMjkgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFj
a2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiUlRDUnRwQ29kZWNDYXBhYmlsaXR5LmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1Vu
aXF1ZVB0ci5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5k
cG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRw
b2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1lclJ0cFRyYW5zY2Vp
dmVyQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kKEdSZWZQdHI8R3N0V2Vi
UlRDUlRQVHJhbnNjZWl2ZXI+JiYgcnRjVHJhbnNjZWl2ZXIpCisgICAgOiBtX3J0Y1RyYW5zY2Vp
dmVyKFdURk1vdmUocnRjVHJhbnNjZWl2ZXIpKQoreworICAgIGdfb2JqZWN0X3NldChtX3J0Y1Ry
YW5zY2VpdmVyLmdldCgpLCAiZG8tbmFjayIsIHRydWUsICJmZWMtdHlwZSIsIEdTVF9XRUJSVENf
RkVDX1RZUEVfVUxQX1JFRCwgbnVsbHB0cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHU3RyZWFt
ZXJSdHBSZWNlaXZlckJhY2tlbmQ+IEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6Y3Jl
YXRlUmVjZWl2ZXJCYWNrZW5kKCkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVy
PiByZWNlaXZlcjsKKyAgICBnX29iamVjdF9nZXQobV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgInJl
Y2VpdmVyIiwgJnJlY2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gV1RGOjpt
YWtlVW5pcXVlPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4oV1RGTW92ZShyZWNlaXZlcikp
OworfQorCitzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZD4gR1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZCYgYmFja2VuZCwgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6
U291cmNlJiYgc291cmNlLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBpbml0RGF0YSkKK3sK
KyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVyOworICAgIGdfb2JqZWN0X2dl
dChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAic2VuZGVyIiwgJnNlbmRlci5vdXRQdHIoKSwgbnVs
bHB0cik7CisgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJSdHBTZW5kZXJCYWNr
ZW5kPihiYWNrZW5kLCBXVEZNb3ZlKHNlbmRlciksIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZShp
bml0RGF0YSkpOworfQorCitSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQ6OmRpcmVjdGlvbigpIGNvbnN0Cit7CisgICAgR3N0V2ViUlRDUlRQ
VHJhbnNjZWl2ZXJEaXJlY3Rpb24gZ3N0RGlyZWN0aW9uOworICAgIGdfb2JqZWN0X2dldChtX3J0
Y1RyYW5zY2VpdmVyLmdldCgpLCAiZGlyZWN0aW9uIiwgJmdzdERpcmVjdGlvbiwgbnVsbHB0cik7
CisgICAgcmV0dXJuIHRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZ3N0RGlyZWN0aW9uKTsK
K30KKworc3RkOjpvcHRpb25hbDxSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbj4gR1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjdXJyZW50RGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBH
c3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlvbiBnc3REaXJlY3Rpb247CisgICAgZ19vYmpl
Y3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJjdXJyZW50LWRpcmVjdGlvbiIsICZnc3RE
aXJlY3Rpb24sIG51bGxwdHIpOworICAgIGlmICghZ3N0RGlyZWN0aW9uKQorICAgICAgICByZXR1
cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiB0b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9u
KGdzdERpcmVjdGlvbik7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
OjpzZXREaXJlY3Rpb24oUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZGlyZWN0aW9uKQorewor
ICAgIGdfb2JqZWN0X3NldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiZGlyZWN0aW9uIiwgZnJv
bVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKGRpcmVjdGlvbiksIG51bGxwdHIpOworfQorCitT
dHJpbmcgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjptaWQoKQoreworICAgIEdVbmlx
dWVPdXRQdHI8Y2hhcj4gbWlkOworICAgIGdfb2JqZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdl
dCgpLCAibWlkIiwgJm1pZC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIG1pZC5nZXQo
KTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnN0b3AoKQorewor
ICAgIC8vIEZJWE1FOiB3ZWJydGNiaW4gdHJhbnNjZWl2ZXJzIGNhbid0IGJlIHN0b3BwZWQgeWV0
LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kOjpzdG9wcGVkKCkgY29uc3QKK3sKKyAgICAvLyBGSVhNRTogd2VicnRjYmluIHRy
YW5zY2VpdmVycyBjYW4ndCBiZSBzdG9wcGVkIHlldC4KKyAgICByZXR1cm4gZmFsc2U7Cit9CisK
K3N0YXRpYyBpbmxpbmUgV0FSTl9VTlVTRURfUkVUVVJOIEV4Y2VwdGlvbk9yPEdzdENhcHMqPiB0
b1J0cENvZGVjQ2FwYWJpbGl0eShjb25zdCBSVENSdHBDb2RlY0NhcGFiaWxpdHkmIGNvZGVjKQor
eworICAgIGlmICghY29kZWMubWltZVR5cGUuc3RhcnRzV2l0aCgidmlkZW8vIikgJiYgIWNvZGVj
Lm1pbWVUeXBlLnN0YXJ0c1dpdGgoImF1ZGlvLyIpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yLCAiUlRDUnRwQ29kZWNDYXBhYmlsaXR5IGJhZCBt
aW1lVHlwZSIgfTsKKworICAgIGF1dG8gY29tcG9uZW50cyA9IGNvZGVjLm1pbWVUeXBlLnNwbGl0
KCcvJyk7CisgICAgYXV0byogY2FwcyA9IGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0aW9u
L3gtcnRwIiwgIm1lZGlhIiwgR19UWVBFX1NUUklORywgY29tcG9uZW50c1swXS5hc2NpaSgpLmRh
dGEoKSwgImVuY29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBjb21wb25lbnRzWzFdLmFzY2lp
KCkuZGF0YSgpLCBudWxscHRyKTsKKyAgICBnc3RfY2Fwc19zZXRfc2ltcGxlKGNhcHMsICJjbG9j
ay1yYXRlIiwgR19UWVBFX0lOVCwgY29kZWMuY2xvY2tSYXRlLCBudWxscHRyKTsKKyAgICBpZiAo
Y29kZWMuY2hhbm5lbHMpCisgICAgICAgIGdzdF9jYXBzX3NldF9zaW1wbGUoY2FwcywgImNoYW5u
ZWxzIiwgR19UWVBFX0lOVCwgKmNvZGVjLmNoYW5uZWxzLCBudWxscHRyKTsKKworICAgIGlmICgh
Y29kZWMuc2RwRm10cExpbmUuaXNFbXB0eSgpKQorICAgICAgICBHU1RfRklYTUUoIlVucHJvY2Vz
c2VkIFNEUCBGbXRwTGluZTogJXMiLCBjb2RlYy5zZHBGbXRwTGluZS51dGY4KCkuZGF0YSgpKTsK
KyAgICBHU1RfREVCVUcoIkNvZGVjIGNhcGFiaWxpdHk6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBz
KTsKKyAgICByZXR1cm4gY2FwczsKK30KKworRXhjZXB0aW9uT3I8dm9pZD4gR1N0cmVhbWVyUnRw
VHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXRDb2RlY1ByZWZlcmVuY2VzKGNvbnN0IFZlY3RvcjxSVENS
dHBDb2RlY0NhcGFiaWxpdHk+JiBjb2RlY3MpCit7CisgICAgYXV0byBnc3RDb2RlY3MgPSBhZG9w
dEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkpOworICAgIGZvciAoYXV0byYgY29kZWMgOiBjb2Rl
Y3MpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSB0b1J0cENvZGVjQ2FwYWJpbGl0eShjb2RlYyk7
CisgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9uKCkpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICAgICAgZ3N0X2NhcHNfYXBwZW5kKGdzdENv
ZGVjcy5nZXQoKSwgcmVzdWx0LnJlbGVhc2VSZXR1cm5WYWx1ZSgpKTsKKyAgICB9CisgICAgZ19v
YmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJjb2RlYy1wcmVmZXJlbmNlcyIsIGdz
dENvZGVjcy5nZXQoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIHsgfTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZl
ckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWE3NzMwNGIwNmU0MTgwZmM3MDcxNDdmNTQ4ODY5ODU4
ODE2YTY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgKQEAgLTAsMCAr
MSw1NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisK
KyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRl
ICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENSdHBU
cmFuc2NlaXZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3Ry
ZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENSdHBUcmFuc2NlaXZlckJhY2tlbmQgeworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIEdTdHJlYW1lclJ0cFRyYW5zY2Vp
dmVyQmFja2VuZChHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiYmKTsKKworICAgIHN0
ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+IGNyZWF0ZVJlY2VpdmVy
QmFja2VuZCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5k
PiBjcmVhdGVTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYsIEdT
dHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYmLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVy
ZT4mJik7CisKKyAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcnRjVHJhbnNjZWl2ZXIoKSB7
IHJldHVybiBtX3J0Y1RyYW5zY2VpdmVyLmdldCgpOyB9CisKK3ByaXZhdGU6CisgICAgUlRDUnRw
VHJhbnNjZWl2ZXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkgY29uc3QgZmluYWw7CisgICAgc3RkOjpv
cHRpb25hbDxSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbj4gY3VycmVudERpcmVjdGlvbigpIGNv
bnN0IGZpbmFsOworICAgIHZvaWQgc2V0RGlyZWN0aW9uKFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0
aW9uKSBmaW5hbDsKKyAgICBTdHJpbmcgbWlkKCkgZmluYWw7CisgICAgdm9pZCBzdG9wKCkgZmlu
YWw7CisgICAgYm9vbCBzdG9wcGVkKCkgY29uc3QgZmluYWw7CisgICAgRXhjZXB0aW9uT3I8dm9p
ZD4gc2V0Q29kZWNQcmVmZXJlbmNlcyhjb25zdCBWZWN0b3I8UlRDUnRwQ29kZWNDYXBhYmlsaXR5
PiYpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gbV9ydGNU
cmFuc2NlaXZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5z
Zm9ybUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOTliNGE2
YTM3ZTVmYjAzY2U5ODM2MzA2Y2JlZmNkZmQ5YTVhMGY1MwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRy
YW5zZm9ybUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBU
cmFuc2Zvcm1CYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6c2V0SW5wdXRDYWxs
YmFjayhDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIExvY2tlciBob2xkTG9jayB7IG1faW5w
dXRDYWxsYmFja0xvY2sgfTsKKyAgICBtX2lucHV0Q2FsbGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNr
KTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpjbGVhclRyYW5zZm9y
bWFibGVGcmFtZUNhbGxiYWNrKCkKK3sKKyAgICBzZXRJbnB1dENhbGxiYWNrKHsgfSk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6cHJvY2Vzc1RyYW5zZm9ybWVkRnJh
bWUoUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBUcmFuc2Zvcm1CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTk1NDQ4ZmM3ZDMyNjE4Zjc4ZTdlODE1
ZmMxNWUxNDk2MTFiMmIzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaApA
QCAtMCwwICsxLDYwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIlJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvTG9jay5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJh
Y2tlbmQgOiBwdWJsaWMgUlRDUnRwVHJhbnNmb3JtQmFja2VuZCB7Citwcm90ZWN0ZWQ6CisgICAg
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZChNZWRpYVR5cGUsIFNpZGUpOworICAgIHZvaWQg
c2V0SW5wdXRDYWxsYmFjayhDYWxsYmFjayYmKTsKKworcHJvdGVjdGVkOgorICAgIE1lZGlhVHlw
ZSBtZWRpYVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX21lZGlhVHlwZTsgfQorCitwcml2
YXRlOgorICAgIC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lkIHByb2Nlc3NUcmFu
c2Zvcm1lZEZyYW1lKFJUQ1J0cFRyYW5zZm9ybWFibGVGcmFtZSYpIGZpbmFsOworICAgIHZvaWQg
Y2xlYXJUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjaygpIGZpbmFsOworICAgIFNpZGUgc2lkZSgp
IGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2lkZTsgfQorCisgICAgTWVkaWFUeXBlIG1fbWVkaWFU
eXBlOworICAgIFNpZGUgbV9zaWRlOworCisgICAgTG9jayBtX2lucHV0Q2FsbGJhY2tMb2NrOwor
ICAgIENhbGxiYWNrIG1faW5wdXRDYWxsYmFjazsKKworICAgIExvY2sgbV9vdXRwdXRDYWxsYmFj
a0xvY2s7Cit9OworCitpbmxpbmUgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVh
bWVyUnRwVHJhbnNmb3JtQmFja2VuZChNZWRpYVR5cGUgbWVkaWFUeXBlLCBTaWRlIHNpZGUpCisg
ICAgOiBtX21lZGlhVHlwZShtZWRpYVR5cGUpCisgICAgLCBtX3NpZGUoc2lkZSkKK3sKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjk0Y2ZlZDczYjc2M2MyMGFmOTA3OTJm
MjY0Yzk1ZDMyYjg0NjhlOWIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5j
cHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2Fs
aWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5k
LmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNp
bmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lcldlYlJUQ1V0aWxzLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGlu
ZSBSVENTY3RwVHJhbnNwb3J0U3RhdGUgdG9SVENTY3RwVHJhbnNwb3J0U3RhdGUoR3N0V2ViUlRD
U0NUUFRyYW5zcG9ydFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBj
YXNlIEdTVF9XRUJSVENfU0NUUF9UUkFOU1BPUlRfU1RBVEVfTkVXOgorICAgIGNhc2UgR1NUX1dF
QlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9DT05ORUNUSU5HOgorICAgICAgICByZXR1cm4gUlRD
U2N0cFRyYW5zcG9ydFN0YXRlOjpDb25uZWN0aW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQ
X1RSQU5TUE9SVF9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENTY3RwVHJhbnNw
b3J0U3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0NUUF9UUkFOU1BPUlRf
U1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDU2N0cFRyYW5zcG9ydFN0YXRlOjpDbG9z
ZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworR1N0
cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5k
KEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4mJiB0cmFuc3BvcnQpCisgICAgOiBtX2Jh
Y2tlbmQoV1RGTW92ZSh0cmFuc3BvcnQpKQoreworICAgIEFTU0VSVChtX2JhY2tlbmQpOworfQor
CitHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lclNjdHBUcmFuc3BvcnRC
YWNrZW5kKCkKK3sKKyAgICB1bnJlZ2lzdGVyQ2xpZW50KCk7Cit9CisKK1VuaXF1ZVJlZjxSVENE
dGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OmR0bHNU
cmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+
IHRyYW5zcG9ydDsKKyAgICBnX29iamVjdF9nZXQobV9iYWNrZW5kLmdldCgpLCAidHJhbnNwb3J0
IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVS
ZWY8R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ+KHRyYW5zcG9ydCk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KENsaWVudCYgY2xp
ZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0gY2xpZW50Owor
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCksICJub3RpZnk6OnN0
YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQqIGJhY2tl
bmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOwor
fQorCit2b2lkIEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50
KCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9iYWNrZW5k
LmdldCgpLCB0aGlzKTsKKyAgICBtX2NsaWVudC5jbGVhcigpOworfQorCit2b2lkIEdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQoKQoreworICAgIGlmICghbV9jbGll
bnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnRTdGF0ZSB0
cmFuc3BvcnRTdGF0ZTsKKyAgICBndWludDE2IG1heENoYW5uZWxzOworICAgIHVpbnQ2NF90IG1h
eE1lc3NhZ2VTaXplOworICAgIGdfb2JqZWN0X2dldChtX2JhY2tlbmQuZ2V0KCksICJzdGF0ZSIs
ICZ0cmFuc3BvcnRTdGF0ZSwgIm1heC1tZXNzYWdlLXNpemUiLCAmbWF4TWVzc2FnZVNpemUsICJt
YXgtY2hhbm5lbHMiLCAmbWF4Q2hhbm5lbHMsIG51bGxwdHIpOworICAgIGNhbGxPbk1haW5UaHJl
YWQoW3RoaXMsIHRyYW5zcG9ydFN0YXRlLCBtYXhDaGFubmVscywgbWF4TWVzc2FnZVNpemVdIHsK
KyAgICAgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBt
X2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENTY3RwVHJhbnNwb3J0U3RhdGUodHJhbnNwb3J0
U3RhdGUpLCBtYXhNZXNzYWdlU2l6ZSwgbWF4Q2hhbm5lbHMpOworICAgIH0pOworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5z
cG9ydEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTgwZmM4NDk4YzA1YzM5N2RjYjA2YzcwYzQzMzA4
YjAyOTBmMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaApAQCAtMCww
ICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1
ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENTY3RwVHJhbnNwb3J0QmFja2Vu
ZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJS
VENTQ1RQVHJhbnNwb3J0IEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ7CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQgZmluYWwgOiBwdWJs
aWMgUlRDU2N0cFRyYW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFt
ZXJTY3RwVHJhbnNwb3J0QmFja2VuZD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwor
cHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKEdSZWZQ
dHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4mJik7CisgICAgfkdTdHJlYW1lclNjdHBUcmFuc3Bv
cnRCYWNrZW5kKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2b2lkIHN0YXRlQ2hhbmdlZCgpOworCitw
cml2YXRlIDoKKyAgICAvLyBSVENTY3RwVHJhbnNwb3J0QmFja2VuZAorICAgIGNvbnN0IHZvaWQq
IGJhY2tlbmQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKyAgICBV
bmlxdWVSZWY8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+IGR0bHNUcmFuc3BvcnRCYWNrZW5kKCkg
ZmluYWw7CisgICAgdm9pZCByZWdpc3RlckNsaWVudChDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lk
IHVucmVnaXN0ZXJDbGllbnQoKSBmaW5hbDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRy
YW5zcG9ydD4gbV9iYWNrZW5kOworICAgIFdlYWtQdHI8Q2xpZW50PiBtX2NsaWVudDsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29s
bGVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2M2NjYxNDE0MDZlM2FjYmU0NzkxMjE1Nzk5YWY2OTNm
ZTAxMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwCkBAIC0wLDAgKzEsMjY5
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCIKKworI2lmIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJKU0RPTU1hcExpa2UuaCIKKyNpbmNsdWRlICJKU1JUQ1N0YXRz
UmVwb3J0LmgiCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRlIDxnc3Qv
d2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisKKyNpbmNsdWRl
IDx3dGYvTWFpblRocmVhZC5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93
ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dl
YnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxp
bmUgdm9pZCBmaWxsUlRDU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlN0YXRzJiBzdGF0cywgY29uc3Qg
R3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZG91YmxlIHRpbWVzdGFtcDsKKyAgICBp
ZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHN0cnVjdHVyZSwgInRpbWVzdGFtcCIsICZ0aW1l
c3RhbXApKQorICAgICAgICBzdGF0cy50aW1lc3RhbXAgPSB0aW1lc3RhbXA7CisgICAgc3RhdHMu
aWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiaWQiKTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGZpbGxSVENSVFBTdHJlYW1TdGF0cyhSVENTdGF0c1JlcG9ydDo6UnRw
U3RyZWFtU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICBzdGF0cy50cmFuc3BvcnRJ
ZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJ0cmFuc3BvcnQtaWQiKTsK
KyAgICBzdGF0cy5jb2RlY0lkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwg
ImNvZGVjLWlkIik7CisKKyAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVy
ZV9nZXRfdWludChzdHJ1Y3R1cmUsICJzc3JjIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuc3Ny
YyA9IHZhbHVlOworCisgICAgLy8gRklYTUU6CisgICAgLy8gc3RhdHMudHJhbnNwb3J0SWQKKyAg
ICAvLyBzdGF0cy5jb2RlY0lkCisgICAgLy8gc3RhdHMubWVkaWFUeXBlCisgICAgLy8gc3RhdHMu
a2luZAorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ0NvZGVjU3RhdHMoUlRDU3RhdHNS
ZXBvcnQ6OkNvZGVjU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkK
K3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICB1bnNpZ25lZCB2
YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUsICJwYXlsb2Fk
LXR5cGUiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5wYXlsb2FkVHlwZSA9IHZhbHVlOworICAg
IGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50KHN0cnVjdHVyZSwgImNsb2NrLXJhdGUiLCAmdmFs
dWUpKQorICAgICAgICBzdGF0cy5jbG9ja1JhdGUgPSB2YWx1ZTsKKworICAgIC8vIEZJWE1FOgor
ICAgIC8vIHN0YXRzLm1pbWVUeXBlID0KKyAgICAvLyBzdGF0cy5jaGFubmVscyA9CisgICAgLy8g
c3RhdHMuc2RwRm10cExpbmUgPQorICAgIC8vIHN0YXRzLmltcGxlbWVudGF0aW9uID0KK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBv
cnQ6OkluYm91bmRSdHBTdHJlYW1TdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQoreworICAgIGZpbGxSVENSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RydWN0dXJlKTsK
KworICAgIHVpbnQ2NF90IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50NjQo
c3RydWN0dXJlLCAicGFja2V0cy1yZWNlaXZlZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnBh
Y2tldHNSZWNlaXZlZCA9IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50NjQo
c3RydWN0dXJlLCAiYnl0ZXMtcmVjZWl2ZWQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5ieXRl
c1JlY2VpdmVkID0gdmFsdWU7CisKKyAgICB1bnNpZ25lZCBwYWNrZXRzTG9zdDsKKyAgICBpZiAo
Z3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUsICJwYWNrZXRzLWxvc3QiLCAmcGFja2V0
c0xvc3QpKQorICAgICAgICBzdGF0cy5wYWNrZXRzTG9zdCA9IHBhY2tldHNMb3N0OworCisgICAg
ZG91YmxlIGppdHRlcjsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHN0cnVjdHVy
ZSwgImppdHRlciIsICZqaXR0ZXIpKQorICAgICAgICBzdGF0cy5qaXR0ZXIgPSBqaXR0ZXI7CisK
KyAgICAvLyBGSVhNRToKKyAgICAvLyBzdGF0cy5mcmFjdGlvbkxvc3QgPQorICAgIC8vIHN0YXRz
LnBhY2tldHNEaXNjYXJkZWQgPQorICAgIC8vIHN0YXRzLnBhY2tldHNSZXBhaXJlZCA9CisgICAg
Ly8gc3RhdHMuYnVyc3RQYWNrZXRzTG9zdCA9CisgICAgLy8gc3RhdHMuYnVyc3RQYWNrZXRzRGlz
Y2FyZGVkID0KKyAgICAvLyBzdGF0cy5idXJzdExvc3NDb3VudCA9CisgICAgLy8gc3RhdHMuYnVy
c3REaXNjYXJkQ291bnQgPQorICAgIC8vIHN0YXRzLmJ1cnN0TG9zc1JhdGUgPQorICAgIC8vIHN0
YXRzLmJ1cnN0RGlzY2FyZFJhdGUgPQorICAgIC8vIHN0YXRzLmdhcExvc3NSYXRlID0KKyAgICAv
LyBzdGF0cy5nYXBEaXNjYXJkUmF0ZSA9CisgICAgLy8gc3RhdHMuZnJhbWVzRGVjb2RlZCA9Cit9
CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsT3V0Ym91bmRSVFBTdHJlYW1TdGF0cyhSVENTdGF0
c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVy
ZSogc3RydWN0dXJlKQoreworICAgIGZpbGxSVENSVFBTdHJlYW1TdGF0cyhzdGF0cywgc3RydWN0
dXJlKTsKKworICAgIHVpbnQ2NF90IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91
aW50NjQoc3RydWN0dXJlLCAicGFja2V0cy1zZW50IiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMu
cGFja2V0c1NlbnQgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0
cnVjdHVyZSwgImJ5dGVzLXNlbnQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5ieXRlc1NlbnQg
PSB2YWx1ZTsKKworICAgIC8vIEZJWE1FCisgICAgLy8gc3RhdHMudGFyZ2V0Qml0cmF0ZSA9Cisg
ICAgLy8gc3RhdHMuZnJhbWVzRW5jb2RlZCA9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxs
UlRDUGVlckNvbm5lY3Rpb25TdGF0cyhSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0
cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZpbGxSVENT
dGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIGludCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0
cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgImRhdGEtY2hhbm5lbHMtb3BlbmVkIiwgJnZhbHVl
KSkKKyAgICAgICAgc3RhdHMuZGF0YUNoYW5uZWxzT3BlbmVkID0gdmFsdWU7CisgICAgaWYgKGdz
dF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJkYXRhLWNoYW5uZWxzLWNsb3NlZCIsICZ2
YWx1ZSkpCisgICAgICAgIHN0YXRzLmRhdGFDaGFubmVsc0Nsb3NlZCA9IHZhbHVlOworfQorCitz
dGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpU
cmFuc3BvcnRTdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQorewor
ICAgIGZpbGxSVENTdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIC8vIEZJWE1FCit9CisK
K3N0YXRpYyBnYm9vbGVhbiBmaWxsUmVwb3J0Q2FsbGJhY2soR1F1YXJrLCBjb25zdCBHVmFsdWUq
IHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBpZiAoIUdTVF9WQUxVRV9IT0xEU19T
VFJVQ1RVUkUodmFsdWUpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIGNvbnN0IEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUodmFsdWUpOworICAg
IEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dl
dChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VCUlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5
cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIERPTU1hcEFkYXB0ZXIm
IHJlcG9ydCA9ICpyZWludGVycHJldF9jYXN0PERPTU1hcEFkYXB0ZXIqPih1c2VyRGF0YSk7CisK
KyAgICBzd2l0Y2ggKHN0YXRzVHlwZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DT0RF
QzogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6Q29kZWNTdGF0cyBzdGF0czsKKyAgICAgICAg
ZmlsbFJUQ0NvZGVjU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8
SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzPj4o
c3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgR1NUX1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUDogeworICAgICAgICBSVENTdGF0c1JlcG9y
dDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzIHN0YXRzOworICAgICAgICBmaWxsSW5ib3VuZFJUUFN0
cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0
cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRz
Pj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgR1NUX1dFQlJUQ19TVEFUU19PVVRCT1VORF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNS
ZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxPdXRib3Vu
ZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElE
TERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJl
YW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUkVNT1RFX0lOQk9VTkRfUlRQOiB7CisgICAg
ICAgIFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAg
IGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJl
cG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpJbmJv
dW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1JFTU9URV9PVVRCT1VORF9S
VFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3Rh
dHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0
c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRz
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfQ1NS
QzoKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0YXRzOiBjc3JjIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19QRUVSX0NPTk5FQ1RJT046IHsKKyAg
ICAgICAgUlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHMgc3RhdHM7CisgICAgICAg
IGZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICBy
ZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6UGVl
ckNvbm5lY3Rpb25TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfVFJBTlNQT1JUOiB7CisgICAg
ICAgIFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJU
Q1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElE
TERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHM+
PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBHU1RfV0VCUlRDX1NUQVRTX1NUUkVBTToKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNh
dGVkIHN0YXRzOiBzdHJlYW0iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRD
X1NUQVRTX0RBVEFfQ0hBTk5FTDoKKyAgICAgICAgR1NUX0ZJWE1FKCJNaXNzaW5nIGRhdGEtY2hh
bm5lbCBzdGF0cyBzdXBwb3J0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJU
Q19TVEFUU19DQU5ESURBVEVfUEFJUjoKKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfTE9DQUxf
Q0FORElEQVRFOgorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19SRU1PVEVfQ0FORElEQVRFOgor
ICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2FuZGlkYXRlIHN0YXRzIHN1cHBvcnQiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX0NFUlRJRklDQVRFOgorICAg
ICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2VydGlmaWNhdGUgc3RhdHMgc3VwcG9ydCIpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RydWN0IENhbGxi
YWNrSG9sZGVyIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgQ2Fs
bGJhY2tIb2xkZXIoR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OkNvbGxlY3RvckNhbGxiYWNrJiYg
Y29sbGVjdG9yQ2FsbGJhY2spCisgICAgICAgIDogY2FsbGJhY2soV1RGTW92ZShjb2xsZWN0b3JD
YWxsYmFjaykpCisgICAgeworICAgIH0KKyAgICBHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Q29s
bGVjdG9yQ2FsbGJhY2sgY2FsbGJhY2s7Cit9OworCit2b2lkIEdTdHJlYW1lclN0YXRzQ29sbGVj
dG9yOjpnZXRTdGF0cyhDb2xsZWN0b3JDYWxsYmFjayYmIGNhbGxiYWNrLCBHc3RQYWQqIHBhZCkK
K3sKKyAgICBpZiAoIW1fd2VicnRjQmluKSB7CisgICAgICAgIGNhbGxiYWNrKG51bGxwdHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBob2xkZXIgPSBXVEY6Om1ha2VVbmlx
dWU8Q2FsbGJhY2tIb2xkZXI+KFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBhdXRvKiBwcm9taXNl
ID0gZ3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJv
bWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9taXNlID0gYWRvcHRH
UmVmKHJhd1Byb21pc2UpOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8Q2FsbGJhY2tIb2xkZXI+
IGhvbGRlcihyZWludGVycHJldF9jYXN0PENhbGxiYWNrSG9sZGVyKj4odXNlckRhdGEpKTsKKyAg
ICAgICAgaWYgKGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZS5nZXQoKSkgIT0gR1NUX1BST01JU0Vf
UkVTVUxUX1JFUExJRUQpIHsKKyAgICAgICAgICAgIGhvbGRlci0+Y2FsbGJhY2sobnVsbHB0cik7
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBhdXRvKiBz
dGF0cyA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgaWYg
KCFzdGF0cykgeworICAgICAgICAgICAgaG9sZGVyLT5jYWxsYmFjayhudWxscHRyKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRX
YWl0KFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgaG9sZGVyID0gaG9sZGVyLmdldCgpXSB7
CisgICAgICAgICAgICBob2xkZXItPmNhbGxiYWNrKFJUQ1N0YXRzUmVwb3J0OjpjcmVhdGUoWyZd
KGF1dG8mIG1hcEFkYXB0ZXIpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvKiBzdGF0cyA9
IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBn
c3Rfc3RydWN0dXJlX2ZvcmVhY2goc3RhdHMsIGZpbGxSZXBvcnRDYWxsYmFjaywgJm1hcEFkYXB0
ZXIpOworICAgICAgICAgICAgfSkpOworICAgICAgICB9KTsKKyAgICB9LCBob2xkZXIucmVsZWFz
ZSgpLCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0
KCksICJnZXQtc3RhdHMiLCBwYWQsIHByb21pc2UpOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTQyNzM1NTNmODI1MTM3MjYxZmE5NDc2YmZlMGFlMTcyYmQwODFiNgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clN0YXRzQ29sbGVjdG9yLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisKKyNpbmNs
dWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+Cisj
aW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUlRDU3RhdHNSZXBvcnQ7CisKK2NsYXNzIEdTdHJlYW1lclN0YXRzQ29sbGVj
dG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9y
LCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29s
bGVjdG9yQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxSVENTdGF0c1Jl
cG9ydD4mJik+OworICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I+IGNyZWF0
ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IoKSk7IH0K
KworICAgIHZvaWQgc2V0RWxlbWVudChHc3RFbGVtZW50KiBlbGVtZW50KSB7IG1fd2VicnRjQmlu
ID0gZWxlbWVudDsgfQorICAgIHZvaWQgZ2V0U3RhdHMoQ29sbGVjdG9yQ2FsbGJhY2smJiwgR3N0
UGFkKik7CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3dlYnJ0Y0JpbjsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRD
KSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJU
Q1V0aWxzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZmMxNDlhM2E4Y2NhYWEzNzhjM2E1OTdhOTIyZGVjMDJl
NmVhMGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwCkBAIC0wLDAgKzEsNDQ4IEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisK
KyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAi
R1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKworI2luY2x1ZGUgIlJUQ0ljZUNhbmRpZGF0ZS5oIgor
I2luY2x1ZGUgIlJUQ0ljZVByb3RvY29sLmgiCisKKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+Cisj
aW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1
ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9T
Y29wZS5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jh
c2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4K
KworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfd2VicnRjX3V0aWxzX2RlYnVnKTsK
KyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfdXRpbHNfZGVidWcKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIFJUQ0ljZUNvbXBvbmVudCB0b1JUQ0lj
ZUNvbXBvbmVudChpbnQgY29tcG9uZW50KQoreworICAgIHJldHVybiBjb21wb25lbnQgPT0gMSA/
IFJUQ0ljZUNvbXBvbmVudDo6UnRwIDogUlRDSWNlQ29tcG9uZW50OjpSdGNwOworfQorCitzdGF0
aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDSWNlUHJvdG9jb2w+IHRvUlRDSWNlUHJvdG9jb2wo
Y29uc3QgU3RyaW5nJiBwcm90b2NvbCkKK3sKKyAgICBpZiAocHJvdG9jb2wuaXNFbXB0eSgpKQor
ICAgICAgICByZXR1cm4geyB9OworICAgIGlmIChwcm90b2NvbCA9PSAidWRwIikKKyAgICAgICAg
cmV0dXJuIFJUQ0ljZVByb3RvY29sOjpVZHA7CisgICAgQVNTRVJUKHByb3RvY29sID09ICJ0Y3Ai
KTsKKyAgICByZXR1cm4gUlRDSWNlUHJvdG9jb2w6OlRjcDsKK30KKworc3RhdGljIGlubGluZSBz
dGQ6Om9wdGlvbmFsPFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU+IHRvUlRDSWNlVGNwQ2FuZGlkYXRl
VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKQorICAg
ICAgICByZXR1cm4geyB9OworICAgIGlmICh0eXBlID09ICJhY3RpdmUiKQorICAgICAgICByZXR1
cm4gUlRDSWNlVGNwQ2FuZGlkYXRlVHlwZTo6QWN0aXZlOworICAgIGlmICh0eXBlID09ICJwYXNz
aXZlIikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU6OlBhc3NpdmU7Cisg
ICAgQVNTRVJUKHR5cGUgPT0gInNvIik7CisgICAgcmV0dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5
cGU6OlNvOworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDSWNlQ2FuZGlkYXRl
VHlwZT4gdG9SVENJY2VDYW5kaWRhdGVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBp
ZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKHR5cGUgPT0g
Imhvc3QiKQorICAgICAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6SG9zdDsKKyAgICBp
ZiAodHlwZSA9PSAic3JmbHgiKQorICAgICAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6
U3JmbHg7CisgICAgaWYgKHR5cGUgPT0gInByZmx4IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNh
bmRpZGF0ZVR5cGU6OlByZmx4OworICAgIEFTU0VSVCh0eXBlID09ICJyZWxheSIpOworICAgIHJl
dHVybiBSVENJY2VDYW5kaWRhdGVUeXBlOjpSZWxheTsKK30KKworUmVmUHRyPFJUQ0Vycm9yPiB0
b1JUQ0Vycm9yKEdFcnJvciogcnRjRXJyb3IpCit7CisgICAgYXV0byBkZXRhaWwgPSB0b1JUQ0Vy
cm9yRGV0YWlsVHlwZShzdGF0aWNfY2FzdDxHc3RXZWJSVENFcnJvcj4ocnRjRXJyb3ItPmNvZGUp
KTsKKyAgICBpZiAoIWRldGFpbCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJu
IFJUQ0Vycm9yOjpjcmVhdGUoKmRldGFpbCwgcnRjRXJyb3ItPm1lc3NhZ2UpOworfQorCitzdGF0
aWMgaW5saW5lIGRvdWJsZSB0b1dlYlJUQ0JpdFJhdGVQcmlvcml0eShSVENQcmlvcml0eVR5cGUg
cHJpb3JpdHkpCit7CisgICAgc3dpdGNoIChwcmlvcml0eSkgeworICAgIGNhc2UgUlRDUHJpb3Jp
dHlUeXBlOjpWZXJ5TG93OgorICAgICAgICByZXR1cm4gMC41OworICAgIGNhc2UgUlRDUHJpb3Jp
dHlUeXBlOjpMb3c6CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBl
OjpNZWRpdW06CisgICAgICAgIHJldHVybiAyOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpI
aWdoOgorICAgICAgICByZXR1cm4gNDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworfQorCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZnJvbVJUQ0VuY29kaW5n
UGFyYW1ldGVycyhjb25zdCBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7
CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IHJ0Y1BhcmFtZXRlcnMoZ3N0X3N0cnVjdHVy
ZV9uZXcoImVuY29kaW5nLXBhcmFtZXRlcnMiLCAiYWN0aXZlIiwgR19UWVBFX0JPT0xFQU4sIHBh
cmFtZXRlcnMuYWN0aXZlLAorICAgICAgICAicmlkIiwgR19UWVBFX1NUUklORywgcGFyYW1ldGVy
cy5yaWQudXRmOCgpLmRhdGEoKSwgImJpdHJhdGUtcHJpb3JpdHkiLCBHX1RZUEVfRE9VQkxFLCB0
b1dlYlJUQ0JpdFJhdGVQcmlvcml0eShwYXJhbWV0ZXJzLnByaW9yaXR5KSwgbnVsbHB0cikpOwor
CisgICAgaWYgKHBhcmFtZXRlcnMuc3NyYykKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQocnRj
UGFyYW1ldGVycy5nZXQoKSwgInNzcmMiLCBHX1RZUEVfVUxPTkcsIHBhcmFtZXRlcnMuc3NyYywg
bnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5tYXhCaXRyYXRlKQorICAgICAgICBnc3Rf
c3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAibWF4LWJpdHJhdGUiLCBHX1RZUEVf
VUxPTkcsIHBhcmFtZXRlcnMubWF4Qml0cmF0ZSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1l
dGVycy5tYXhGcmFtZXJhdGUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRl
cnMuZ2V0KCksICJtYXgtZnJhbWVyYXRlIiwgR19UWVBFX1VMT05HLCBwYXJhbWV0ZXJzLm1heEZy
YW1lcmF0ZSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5zY2FsZVJlc29sdXRpb25E
b3duQnkpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJz
Y2FsZS1yZXNvbHV0aW9uLWRvd24tYnkiLCBHX1RZUEVfRE9VQkxFLCBwYXJhbWV0ZXJzLnNjYWxl
UmVzb2x1dGlvbkRvd25CeSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5uZXR3b3Jr
UHJpb3JpdHkpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCks
ICJuZXR3b3JrLXByaW9yaXR5IiwgR19UWVBFX0lOVCwgKnBhcmFtZXRlcnMubmV0d29ya1ByaW9y
aXR5LCBudWxscHRyKTsKKworICAgIHJldHVybiBydGNQYXJhbWV0ZXJzOworfQorCitzdGF0aWMg
aW5saW5lIFJUQ1ByaW9yaXR5VHlwZSBmcm9tV2ViUlRDQml0UmF0ZVByaW9yaXR5KGRvdWJsZSBw
cmlvcml0eSkKK3sKKyAgICBpZiAocHJpb3JpdHkgPCAwLjcpCisgICAgICAgIHJldHVybiBSVENQ
cmlvcml0eVR5cGU6OlZlcnlMb3c7CisgICAgaWYgKHByaW9yaXR5IDwgMS41KQorICAgICAgICBy
ZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpMb3c7CisgICAgaWYgKHByaW9yaXR5IDwgMi41KQorICAg
ICAgICByZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpNZWRpdW07CisgICAgcmV0dXJuIFJUQ1ByaW9y
aXR5VHlwZTo6SGlnaDsKK30KKworc3RhdGljIGlubGluZSBSVENSdHBFbmNvZGluZ1BhcmFtZXRl
cnMgdG9SVENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3QgR3N0U3RydWN0dXJlKiBydGNQYXJhbWV0
ZXJzKQoreworICAgIFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworCisgICAg
dW5zaWduZWQgc3NyYzsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChydGNQYXJhbWV0
ZXJzLCAic3NyYyIsICZzc3JjKSkKKyAgICAgICAgcGFyYW1ldGVycy5zc3JjID0gc3NyYzsKKwor
ICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJ0Y1BhcmFtZXRlcnMsICJhY3RpdmUiLCBHX1RZUEVfQk9P
TEVBTiwgJihwYXJhbWV0ZXJzLmFjdGl2ZSksIG51bGxwdHIpOworCisgICAgdWludDY0X3QgbWF4
Qml0cmF0ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHJ0Y1BhcmFtZXRlcnMs
ICJtYXgtYml0cmF0ZSIsICZtYXhCaXRyYXRlKSkKKyAgICAgICAgcGFyYW1ldGVycy5tYXhCaXRy
YXRlID0gbWF4Qml0cmF0ZTsKKworICAgIHVpbnQ2NF90IG1heEZyYW1lcmF0ZTsKKyAgICBpZiAo
Z3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHJ0Y1BhcmFtZXRlcnMsICJtYXgtZnJhbWVyYXRlIiwg
Jm1heEZyYW1lcmF0ZSkpCisgICAgICAgIHBhcmFtZXRlcnMubWF4RnJhbWVyYXRlID0gbWF4RnJh
bWVyYXRlOworCisgICAgcGFyYW1ldGVycy5yaWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmco
cnRjUGFyYW1ldGVycywgInJpZCIpOworCisgICAgZG91YmxlIHNjYWxlUmVzb2x1dGlvbkRvd25C
eTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHJ0Y1BhcmFtZXRlcnMsICJzY2Fs
ZS1yZXNvbHV0aW9uLWRvd24tYnkiLCAmc2NhbGVSZXNvbHV0aW9uRG93bkJ5KSkKKyAgICAgICAg
cGFyYW1ldGVycy5zY2FsZVJlc29sdXRpb25Eb3duQnkgPSBzY2FsZVJlc29sdXRpb25Eb3duQnk7
CisKKyAgICBkb3VibGUgYml0cmF0ZVByaW9yaXR5OworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dl
dF9kb3VibGUocnRjUGFyYW1ldGVycywgImJpdHJhdGUtcHJpb3JpdHkiLCAmYml0cmF0ZVByaW9y
aXR5KSkKKyAgICAgICAgcGFyYW1ldGVycy5wcmlvcml0eSA9IGZyb21XZWJSVENCaXRSYXRlUHJp
b3JpdHkoYml0cmF0ZVByaW9yaXR5KTsKKworICAgIGludCBuZXR3b3JrUHJpb3JpdHk7CisgICAg
aWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChydGNQYXJhbWV0ZXJzLCAibmV0d29yay1wcmlvcml0
eSIsICZuZXR3b3JrUHJpb3JpdHkpKQorICAgICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtQcmlvcml0
eSA9IHN0YXRpY19jYXN0PFJUQ1ByaW9yaXR5VHlwZT4obmV0d29ya1ByaW9yaXR5KTsKKworICAg
IHJldHVybiBwYXJhbWV0ZXJzOworfQorCitSVENSdHBTZW5kUGFyYW1ldGVycyB0b1JUQ1J0cFNl
bmRQYXJhbWV0ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSogcnRjUGFyYW1ldGVycykKK3sKKyAgICBp
ZiAoIXJ0Y1BhcmFtZXRlcnMpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBSVENSdHBTZW5k
UGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIGF1dG8qIGVuY29kaW5ncyA9IGdzdF9zdHJ1Y3R1
cmVfZ2V0X3ZhbHVlKHJ0Y1BhcmFtZXRlcnMsICJlbmNvZGluZ3MiKTsKKyAgICB1bnNpZ25lZCBz
aXplID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUoZW5jb2RpbmdzKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGF1dG8qIHZhbHVlID0g
Z3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlKGVuY29kaW5ncywgaSk7CisgICAgICAgIHBhcmFtZXRl
cnMuZW5jb2RpbmdzLmFwcGVuZCh0b1JUQ0VuY29kaW5nUGFyYW1ldGVycyhHU1RfU1RSVUNUVVJF
X0NBU1QodmFsdWUpKSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEhhbmRsZSBydGNQYXJhbWV0
ZXJzLmRlZ3JhZGF0aW9uX3ByZWZlcmVuY2UuCisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9CisK
Kworc3RhdGljIHZvaWQgZW5zdXJlRGVidWdDYXRlZ29yeUluaXRpYWxpemVkKCkKK3sKKyAgICBz
dGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZs
YWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3dlYnJ0Y191
dGlsc19kZWJ1ZywgIndlYmtpdHdlYnJ0Y3V0aWxzIiwgMCwgIldlYktpdCBXZWJSVEMgdXRpbGl0
aWVzIik7CisgICAgfSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDSWNlQ2FuZGlkYXRlOjpGaWVs
ZHM+IHBhcnNlSWNlQ2FuZGlkYXRlU0RQKGNvbnN0IFN0cmluZyYgc2RwKQoreworICAgIGVuc3Vy
ZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpOworICAgIEdTVF9ERUJVRygiUGFyc2luZyBJQ0Ug
Q2FuZGlkYXRlOiAlcyIsIHNkcC51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoIXNkcC5zdGFydHNX
aXRoKCJjYW5kaWRhdGU6IikpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBTdHJpbmcgZm91
bmRhdGlvbjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRJZCA9IDA7CisgICAgU3RyaW5nIHRyYW5z
cG9ydDsKKyAgICB1bnNpZ25lZCBwcmlvcml0eSA9IDA7CisgICAgU3RyaW5nIGFkZHJlc3M7Cisg
ICAgdWludDMyX3QgcG9ydCA9IDA7CisgICAgU3RyaW5nIHR5cGU7CisgICAgU3RyaW5nIHRjcHR5
cGU7CisgICAgU3RyaW5nIHJlbGF0ZWRBZGRyZXNzOworICAgIGd1aW50MTYgcmVsYXRlZFBvcnQg
PSAwOworICAgIFN0cmluZyB1c2VybmFtZUZyYWdtZW50OworICAgIGF1dG8gdG9rZW5zID0gc2Rw
LmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3Vic3RyaW5nKDEwKS5zcGxpdCgnICcpOworCisg
ICAgZm9yIChhdXRvIGl0ID0gdG9rZW5zLmJlZ2luKCk7IGl0ICE9IHRva2Vucy5lbmQoKTsgKytp
dCkgeworICAgICAgICBhdXRvIGkgPSBzdGQ6OmRpc3RhbmNlKHRva2Vucy5iZWdpbigpLCBpdCk7
CisgICAgICAgIGF1dG8gdG9rZW4gPSAqaXQ7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAg
ICBjYXNlIDA6CisgICAgICAgICAgICBmb3VuZGF0aW9uID0gdG9rZW47CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJz
ZUludGVnZXI8dW5zaWduZWQ+KHRva2VuKSkKKyAgICAgICAgICAgICAgICBjb21wb25lbnRJZCA9
ICp2YWx1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHRyYW5zcG9y
dCA9IHRva2VuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAg
ICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVkPih0b2tlbikpCisgICAg
ICAgICAgICAgICAgcHJpb3JpdHkgPSAqdmFsdWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6
CisgICAgICAgICAgICBhZGRyZXNzID0gdG9rZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSA1OgorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZUludGVnZXI8dW5z
aWduZWQ+KHRva2VuKSkKKyAgICAgICAgICAgICAgICBwb3J0ID0gKnZhbHVlOworICAgICAgICAg
ICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlmIChpdCArIDEgPT0gdG9rZW5zLmVuZCgp
KQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgICAgIGl0Kys7CisgICAg
ICAgICAgICBpZiAodG9rZW4gPT0gInR5cCIpCisgICAgICAgICAgICAgICAgdHlwZSA9ICppdDsK
KyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJyYWRkciIpCisgICAgICAgICAgICAgICAg
cmVsYXRlZEFkZHJlc3MgPSAqaXQ7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAicnBv
cnQiKQorICAgICAgICAgICAgICAgIHJlbGF0ZWRQb3J0ID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVk
PigqaXQpLnZhbHVlX29yKDApOworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gPT0gInRjcHR5
cGUiKQorICAgICAgICAgICAgICAgIHRjcHR5cGUgPSAqaXQ7CisgICAgICAgICAgICBlbHNlIGlm
ICh0b2tlbiA9PSAidWZyYWciKQorICAgICAgICAgICAgICAgIHVzZXJuYW1lRnJhZ21lbnQgPSAq
aXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0eXBl
LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFJUQ0ljZUNhbmRpZGF0ZTo6
RmllbGRzIGZpZWxkczsKKyAgICBmaWVsZHMuZm91bmRhdGlvbiA9IGZvdW5kYXRpb247CisgICAg
ZmllbGRzLmNvbXBvbmVudCA9IHRvUlRDSWNlQ29tcG9uZW50KGNvbXBvbmVudElkKTsKKyAgICBm
aWVsZHMucHJpb3JpdHkgPSBwcmlvcml0eTsKKyAgICBmaWVsZHMucHJvdG9jb2wgPSB0b1JUQ0lj
ZVByb3RvY29sKHRyYW5zcG9ydCk7CisgICAgaWYgKCFhZGRyZXNzLmlzRW1wdHkoKSkgeworICAg
ICAgICBmaWVsZHMuYWRkcmVzcyA9IGFkZHJlc3M7CisgICAgICAgIGZpZWxkcy5wb3J0ID0gcG9y
dDsKKyAgICB9CisgICAgZmllbGRzLnR5cGUgPSB0b1JUQ0ljZUNhbmRpZGF0ZVR5cGUodHlwZSk7
CisgICAgZmllbGRzLnRjcFR5cGUgPSB0b1JUQ0ljZVRjcENhbmRpZGF0ZVR5cGUodGNwdHlwZSk7
CisgICAgaWYgKCFyZWxhdGVkQWRkcmVzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZmllbGRzLnJl
bGF0ZWRBZGRyZXNzID0gcmVsYXRlZEFkZHJlc3M7CisgICAgICAgIGZpZWxkcy5yZWxhdGVkUG9y
dCA9IHJlbGF0ZWRQb3J0OworICAgIH0KKyAgICBmaWVsZHMudXNlcm5hbWVGcmFnbWVudCA9IHVz
ZXJuYW1lRnJhZ21lbnQ7CisgICAgcmV0dXJuIGZpZWxkczsKK30KKworc3RhdGljIFN0cmluZyB4
NTA5U2VyaWFsaXplKFg1MDkqIHg1MDkpCit7CisgICAgQklPKiBiaW8gPSBCSU9fbmV3KEJJT19z
X21lbSgpKTsKKyAgICBpZiAoIWJpbykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8g
c2NvcGVFeGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIEJJT19mcmVlKGJp
byk7CisgICAgfSk7CisKKyAgICBpZiAoIVBFTV93cml0ZV9iaW9fWDUwOShiaW8sIHg1MDkpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZm
ZXIucmVzZXJ2ZUNhcGFjaXR5KDQwOTYpOworICAgIGludCBsZW5ndGggPSBCSU9fcmVhZChiaW8s
IGJ1ZmZlci5kYXRhKCksIDQwOTYpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgcmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpOworfQorCitz
dGF0aWMgU3RyaW5nIHByaXZhdGVLZXlTZXJpYWxpemUoRVZQX1BLRVkqIHByaXZhdGVLZXkpCit7
CisgICAgQklPKiBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAgICBpZiAoIWJpbykKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gc2NvcGVFeGl0ID0gV1RGOjptYWtlU2NvcGVF
eGl0KFsmXSB7CisgICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgfSk7CisKKyAgICBpZiAoIVBF
TV93cml0ZV9iaW9fUHJpdmF0ZUtleShiaW8sIHByaXZhdGVLZXksIG51bGxwdHIsIG51bGxwdHIs
IDAsIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9y
PGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzZXJ2ZUNhcGFjaXR5KDQwOTYpOworICAgIGlu
dCBsZW5ndGggPSBCSU9fcmVhZChiaW8sIGJ1ZmZlci5kYXRhKCksIDQwOTYpOworICAgIGlmICgh
bGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIFN0cmluZyhidWZmZXIu
ZGF0YSgpLCBsZW5ndGgpOworfQorCitzdGQ6Om9wdGlvbmFsPFJlZjxSVENDZXJ0aWZpY2F0ZT4+
IGdlbmVyYXRlQ2VydGlmaWNhdGUoUmVmPFNlY3VyaXR5T3JpZ2luPiYmIG9yaWdpbiwgY29uc3Qg
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uJiBpbmZvKQorewor
ICAgIGVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpOworICAgIEVWUF9QS0VZKiBwcml2
YXRlS2V5ID0gRVZQX1BLRVlfbmV3KCk7CisgICAgaWYgKCFwcml2YXRlS2V5KSB7CisgICAgICAg
IEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gY3JlYXRlIHByaXZhdGUga2V5Iik7CisgICAgICAgIHJl
dHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBzY29wZUV4aXQgPSBXVEY6Om1ha2VTY29wZUV4
aXQoWyZdIHsKKyAgICAgICAgRVZQX1BLRVlfZnJlZShwcml2YXRlS2V5KTsKKyAgICB9KTsKKwor
ICAgIHN3aXRjaCAoaW5mby50eXBlKSB7CisgICAgY2FzZSBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OkNlcnRpZmljYXRlSW5mb3JtYXRpb246OlR5cGU6OkVDRFNBUDI1NjogeworICAgICAgICBFQ19L
RVkqIGVjS2V5ID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKE5JRF9YOV82Ml9wcmltZTI1NnYx
KTsKKyAgICAgICAgLy8gRW5zdXJlIGN1cnZlIG5hbWUgaXMgaW5jbHVkZWQgd2hlbiBFQyBrZXkg
aXMgc2VyaWFsaXplZC4KKyAgICAgICAgLy8gV2l0aG91dCB0aGlzIGNhbGwsIE9wZW5TU0wgdmVy
c2lvbnMgYmVmb3JlIDEuMS4wIHdpbGwgY3JlYXRlCisgICAgICAgIC8vIGNlcnRpZmljYXRlcyB0
aGF0IGRvbid0IHdvcmsgZm9yIFRMUy4KKyAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZvciBC
b3JpbmdTU0wgYW5kIE9wZW5TU0wgMS4xLjArCisgICAgICAgIEVDX0tFWV9zZXRfYXNuMV9mbGFn
KGVjS2V5LCBPUEVOU1NMX0VDX05BTUVEX0NVUlZFKTsKKyAgICAgICAgaWYgKCFwcml2YXRlS2V5
IHx8ICFlY0tleSB8fCAhRUNfS0VZX2dlbmVyYXRlX2tleShlY0tleSkgfHwgIUVWUF9QS0VZX2Fz
c2lnbl9FQ19LRVkocHJpdmF0ZUtleSwgZWNLZXkpKSB7CisgICAgICAgICAgICBFQ19LRVlfZnJl
ZShlY0tleSk7CisgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJ
bmZvcm1hdGlvbjo6VHlwZTo6UlNBU1NBUEtDUzF2MTU6IHsKKyAgICAgICAgUlNBKiByc2EgPSBS
U0FfbmV3KCk7CisgICAgICAgIGlmICghcnNhKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgICAgICBCSUdOVU0qIGV4cG9uZW50ID0gQk5fbmV3KCk7CisgICAgICAgIGludCBwdWJsaWNF
eHBvbmVudCA9IGluZm8ucnNhUGFyYW1ldGVycyA/IGluZm8ucnNhUGFyYW1ldGVycy0+cHVibGlj
RXhwb25lbnQgOiA2NTUzNzsKKyAgICAgICAgYXV0byBtb2R1bHVzTGVuZ3RoID0gaW5mby5yc2FQ
YXJhbWV0ZXJzID8gaW5mby5yc2FQYXJhbWV0ZXJzLT5tb2R1bHVzTGVuZ3RoIDogMjA0ODsKKyAg
ICAgICAgaWYgKCFCTl9zZXRfd29yZChleHBvbmVudCwgcHVibGljRXhwb25lbnQpIHx8ICFSU0Ff
Z2VuZXJhdGVfa2V5X2V4KHJzYSwgbW9kdWx1c0xlbmd0aCwgZXhwb25lbnQsIG51bGxwdHIpCisg
ICAgICAgICAgICB8fCAhRVZQX1BLRVlfYXNzaWduX1JTQShwcml2YXRlS2V5LCByc2EpKSB7Cisg
ICAgICAgICAgICBSU0FfZnJlZShyc2EpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgfQorICAgICAgICBCTl9mcmVlKGV4cG9uZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIH0KKworICAgIFg1MDkqIHg1MDkgPSBYNTA5X25ldygpOworICAgIGlmICgheDUwOSkgewor
ICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBjZXJ0aWZpY2F0ZSIpOworICAg
ICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGF1dG8gY2VydFNjb3BlRXhpdCA9IFdURjo6
bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgfSk7CisK
KyAgICBYNTA5X3NldF92ZXJzaW9uKHg1MDksIDIpOworCisgICAgLy8gU2V0IGEgcmFuZG9tIDY0
IGJpdCBpbnRlZ2VyIGFzIHNlcmlhbCBudW1iZXIuCisgICAgQklHTlVNKiBzZXJpYWxOdW1iZXIg
PSBCTl9uZXcoKTsKKyAgICBCTl9wc2V1ZG9fcmFuZChzZXJpYWxOdW1iZXIsIDY0LCAwLCAwKTsK
KyAgICBBU04xX0lOVEVHRVIqIGFzbjFTZXJpYWxOdW1iZXIgPSBYNTA5X2dldF9zZXJpYWxOdW1i
ZXIoeDUwOSk7CisgICAgQk5fdG9fQVNOMV9JTlRFR0VSKHNlcmlhbE51bWJlciwgYXNuMVNlcmlh
bE51bWJlcik7CisgICAgQk5fZnJlZShzZXJpYWxOdW1iZXIpOworCisgICAgLy8gU2V0IGEgcmFu
ZG9tIDggYnl0ZSBiYXNlNjQgc3RyaW5nIGFzIGlzc3Vlci9zdWJqZWN0LgorICAgIFg1MDlfTkFN
RSogbmFtZSA9IFg1MDlfTkFNRV9uZXcoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyOwor
ICAgIGJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDgpOworICAgIFdURjo6Y3J5cHRvZ3Jh
cGhpY2FsbHlSYW5kb21WYWx1ZXMoYnVmZmVyLmRhdGEoKSwgOCk7CisgICAgYXV0byBjb21tb25O
YW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVyKTsKKyAgICBYNTA5X05BTUVfYWRkX2Vu
dHJ5X2J5X05JRChuYW1lLCBOSURfY29tbW9uTmFtZSwgTUJTVFJJTkdfQVNDLCAoY29uc3QgZ3Vj
aGFyKiljb21tb25OYW1lLmFzY2lpKCkuZGF0YSgpLCAtMSwgLTEsIDApOworICAgIFg1MDlfc2V0
X3N1YmplY3RfbmFtZSh4NTA5LCBuYW1lKTsKKyAgICBYNTA5X3NldF9pc3N1ZXJfbmFtZSh4NTA5
LCBuYW1lKTsKKyAgICBYNTA5X05BTUVfZnJlZShuYW1lKTsKKworICAgIC8vIEZhbGxiYWNrIHRv
IDMwIGRheXMsIG1heCBvdXQgYXQgb25lIHllYXIuCisgICAgdWludDY0X3QgZXhwaXJlcyA9IGlu
Zm8uZXhwaXJlcy52YWx1ZV9vcigyNTkyMDAwKTsKKyAgICBleHBpcmVzID0gc3RkOjptaW48dWlu
dDY0X3Q+KGV4cGlyZXMsIDMxNTM2MDAwMDAwKTsKKyAgICBYNTA5X2dtdGltZV9hZGooWDUwOV9n
ZXRtX25vdEJlZm9yZSh4NTA5KSwgMCk7CisgICAgWDUwOV9nbXRpbWVfYWRqKFg1MDlfZ2V0bV9u
b3RBZnRlcih4NTA5KSwgZXhwaXJlcyk7CisgICAgWDUwOV9zZXRfcHVia2V5KHg1MDksIHByaXZh
dGVLZXkpOworCisgICAgaWYgKCFYNTA5X3NpZ24oeDUwOSwgcHJpdmF0ZUtleSwgRVZQX3NoYTI1
NigpKSkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIHNpZ24gY2VydGlmaWNhdGUi
KTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvIHBlbSA9IHg1MDlTZXJp
YWxpemUoeDUwOSk7CisgICAgR1NUX0RFQlVHKCJHZW5lcmF0ZWQgY2VydGlmaWNhdGUgUEVNOiAl
cyIsIHBlbS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0byBzZXJpYWxpemVkUHJpdmF0ZUtleSA9
IHByaXZhdGVLZXlTZXJpYWxpemUocHJpdmF0ZUtleSk7CisgICAgVmVjdG9yPFJUQ0NlcnRpZmlj
YXRlOjpEdGxzRmluZ2VycHJpbnQ+IGZpbmdlcnByaW50czsKKyAgICAvLyBGSVhNRTogRmlsbCBm
aW5nZXJwcmludHMuCisgICAgYXV0byBleHBpcmF0aW9uVGltZSA9IFdURjo6V2FsbFRpbWU6Om5v
dygpLnNlY29uZHNTaW5jZUVwb2NoKCkgKyBXVEY6OlNlY29uZHMoZXhwaXJlcyk7CisgICAgcmV0
dXJuIFJUQ0NlcnRpZmljYXRlOjpjcmVhdGUoV1RGTW92ZShvcmlnaW4pLCBleHBpcmF0aW9uVGlt
ZS5taWxsaXNlY29uZHMoKSwgV1RGTW92ZShmaW5nZXJwcmludHMpLCBXVEZNb3ZlKHBlbSksIFdU
Rk1vdmUoc2VyaWFsaXplZFByaXZhdGVLZXkpKTsKK30KKworYm9vbCBzZHBNZWRpYUhhc0F0dHJp
YnV0ZUtleShjb25zdCBHc3RTRFBNZWRpYSogbWVkaWEsIGNvbnN0IGNoYXIqIGtleSkKK3sKKyAg
ICB1bnNpZ25lZCBsZW4gPSBnc3Rfc2RwX21lZGlhX2F0dHJpYnV0ZXNfbGVuKG1lZGlhKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgY29uc3QgYXV0
byogYXR0cmlidXRlID0gZ3N0X3NkcF9tZWRpYV9nZXRfYXR0cmlidXRlKG1lZGlhLCBpKTsKKyAg
ICAgICAgaWYgKCFnX3N0cmNtcDAoYXR0cmlidXRlLT5rZXksIGtleSkpCisgICAgICAgICAgICBy
ZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4xYjg4ZmE0ZGIwNDdhZmY4YWRhYjhkOTI5OWM1N2I5ZWNjNWRhMThmCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaApAQCAtMCwwICsxLDI2NyBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVh
bWVyLmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRl
ICJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJSVENCdW5kbGVQb2xpY3kuaCIK
KyNpbmNsdWRlICJSVENDZXJ0aWZpY2F0ZS5oIgorI2luY2x1ZGUgIlJUQ0R0bHNUcmFuc3BvcnQu
aCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgorI2luY2x1ZGUgIlJUQ0ljZUNvbm5lY3Rpb25TdGF0
ZS5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFBvbGljeS5oIgorI2luY2x1ZGUgIlJUQ0lj
ZVRyYW5zcG9ydFN0YXRlLmgiCisjaW5jbHVkZSAiUlRDUnRwU2VuZFBhcmFtZXRlcnMuaCIKKyNp
bmNsdWRlICJSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbi5oIgorI2luY2x1ZGUgIlJUQ1NkcFR5
cGUuaCIKKyNpbmNsdWRlICJSVENTaWduYWxpbmdTdGF0ZS5oIgorCisjZGVmaW5lIEdTVF9VU0Vf
VU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1Rf
VVNFX1VOU1RBQkxFX0FQSQorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2lubGluZSBSVENSdHBU
cmFuc2NlaXZlckRpcmVjdGlvbiB0b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVj
dGlvbikgeworICAgIGNhc2UgR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX05P
TkU6CisgICAgICAgIC8vIMKvXF8o44OEKV8vwq8KKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5z
Y2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RSQU5T
Q0VJVkVSX0RJUkVDVElPTl9JTkFDVElWRToKKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2Vp
dmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJ
VkVSX0RJUkVDVElPTl9TRU5ET05MWToKKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVy
RGlyZWN0aW9uOjpTZW5kb25seTsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVS
X0RJUkVDVElPTl9SRUNWT05MWToKKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGly
ZWN0aW9uOjpSZWN2b25seTsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJ
UkVDVElPTl9TRU5EUkVDVjoKKyAgICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0
aW9uOjpTZW5kcmVjdjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICByZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OkluYWN0aXZlOworfQorCitp
bmxpbmUgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZnJvbVJUQ1J0cFRyYW5zY2Vp
dmVyRGlyZWN0aW9uKFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAg
ICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rp
b246OkluYWN0aXZlOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJf
RElSRUNUSU9OX0lOQUNUSVZFOworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246
OlNlbmRvbmx5OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElS
RUNUSU9OX1NFTkRPTkxZOworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OlJl
Y3Zvbmx5OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNU
SU9OX1JFQ1ZPTkxZOworICAgIGNhc2UgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OlNlbmRy
ZWN2OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9O
X1NFTkRSRUNWOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IHJldHVybiBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fTk9ORTsKK30KKwor
c3RhdGljIGlubGluZSBHc3RXZWJSVENTRFBUeXBlIHRvU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShS
VENTZHBUeXBlIHNkcFR5cGUpCit7CisgICAgc3dpdGNoIChzZHBUeXBlKSB7CisgICAgY2FzZSBS
VENTZHBUeXBlOjpPZmZlcjoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfU0RQX1RZUEVfT0ZG
RVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpQcmFuc3dlcjoKKyAgICAgICAgcmV0dXJuIEdTVF9X
RUJSVENfU0RQX1RZUEVfUFJBTlNXRVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpBbnN3ZXI6Cisg
ICAgICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX0FOU1dFUjsKKyAgICBjYXNlIFJUQ1Nk
cFR5cGU6OlJvbGxiYWNrOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19TRFBfVFlQRV9ST0xM
QkFDSzsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX09GRkVSOworfQorCitzdGF0aWMgaW5saW5lIFJUQ1Nk
cFR5cGUgZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5cGUoY29uc3QgR3N0V2ViUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBhdXRvIHR5cGUgPSBkZXNjcmlwdGlvbi50
eXBlOworICAgIGlmICh0eXBlID09IEdTVF9XRUJSVENfU0RQX1RZUEVfT0ZGRVIpCisgICAgICAg
IHJldHVybiBSVENTZHBUeXBlOjpPZmZlcjsKKyAgICBpZiAodHlwZSA9PSBHU1RfV0VCUlRDX1NE
UF9UWVBFX0FOU1dFUikKKyAgICAgICAgcmV0dXJuIFJUQ1NkcFR5cGU6OkFuc3dlcjsKKyAgICBB
U1NFUlQodHlwZSA9PSBHU1RfV0VCUlRDX1NEUF9UWVBFX1BSQU5TV0VSKTsKKyAgICByZXR1cm4g
UlRDU2RwVHlwZTo6UHJhbnN3ZXI7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDU2lnbmFsaW5nU3Rh
dGUgdG9TaWduYWxpbmdTdGF0ZShHc3RXZWJSVENTaWduYWxpbmdTdGF0ZSBzdGF0ZSkKK3sKKyAg
ICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9T
VEFCTEU6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOworICAgIGNh
c2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9MT0NBTF9PRkZFUjoKKyAgICAgICAg
cmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlTG9jYWxPZmZlcjsKKyAgICBjYXNlIEdTVF9X
RUJSVENfU0lHTkFMSU5HX1NUQVRFX0hBVkVfTE9DQUxfUFJBTlNXRVI6CisgICAgICAgIHJldHVy
biBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsUHJhbnN3ZXI7CisgICAgY2FzZSBHU1RfV0VC
UlRDX1NJR05BTElOR19TVEFURV9IQVZFX1JFTU9URV9PRkZFUjoKKyAgICAgICAgcmV0dXJuIFJU
Q1NpZ25hbGluZ1N0YXRlOjpIYXZlUmVtb3RlT2ZmZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJ
R05BTElOR19TVEFURV9IQVZFX1JFTU9URV9QUkFOU1dFUjoKKyAgICAgICAgcmV0dXJuIFJUQ1Np
Z25hbGluZ1N0YXRlOjpIYXZlUmVtb3RlUHJhbnN3ZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJ
R05BTElOR19TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6
Q2xvc2VkOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpTdGFibGU7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRD
SWNlQ29ubmVjdGlvblN0YXRlIHRvUlRDSWNlQ29ubmVjdGlvblN0YXRlKEdzdFdlYlJUQ0lDRUNv
bm5lY3Rpb25TdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBH
U1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0lj
ZUNvbm5lY3Rpb25TdGF0ZTo6TmV3OworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElP
Tl9TVEFURV9DSEVDS0lORzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6
Q2hlY2tpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NPTk5F
Q1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q29ubmVjdGVkOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT01QTEVURUQ6CisgICAg
ICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNvbXBsZXRlZDsKKyAgICBjYXNlIEdT
VF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfRkFJTEVEOgorICAgICAgICByZXR1cm4gUlRD
SWNlQ29ubmVjdGlvblN0YXRlOjpGYWlsZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05O
RUNUSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rp
b25TdGF0ZTo6RGlzY29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElP
Tl9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNs
b3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsKK30KKworc3RhdGljIGlubGluZSBSVENE
dGxzVHJhbnNwb3J0U3RhdGUgdG9SVENEdGxzVHJhbnNwb3J0U3RhdGUoR3N0V2ViUlRDRFRMU1Ry
YW5zcG9ydFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdT
VF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDRHRs
c1RyYW5zcG9ydFN0YXRlOjpOZXc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JU
X1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJhbnNwb3J0U3RhdGU6
OkNvbm5lY3Rpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0NP
Tk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVk
OworICAgIGNhc2UgR1NUX1dFQlJUQ19EVExTX1RSQU5TUE9SVF9TVEFURV9DTE9TRUQ6CisgICAg
ICAgIHJldHVybiBSVENEdGxzVHJhbnNwb3J0U3RhdGU6OkNsb3NlZDsKKyAgICBjYXNlIEdTVF9X
RUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVfRkFJTEVEOgorICAgICAgICByZXR1cm4gUlRDRHRs
c1RyYW5zcG9ydFN0YXRlOjpGYWlsZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlubGluZSBSVENJY2VUcmFuc3BvcnRTdGF0ZSB0b1JU
Q0ljZVRyYW5zcG9ydFN0YXRlKEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZSkKK3sK
KyAgICAvLyBGSVhNRTogTm8gR3N0V2ViUlRDSUNFVHJhbnNwb3J0U3RhdGUgPworICAgIHN3aXRj
aCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfTkVX
OgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6Ok5ldzsKKyAgICBjYXNlIEdT
VF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkc6CisgICAgICAgIHJldHVybiBS
VENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9D
T05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9y
dFN0YXRlOjpDb25uZWN0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NU
QVRFX0NPTVBMRVRFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb21w
bGV0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0ZBSUxFRDoK
KyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpGYWlsZWQ7CisgICAgY2FzZSBH
U1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0
dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpEaXNjb25uZWN0ZWQ7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NMT1NFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRy
YW5zcG9ydFN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6Ok5ldzsKK30KKworc3Rh
dGljIGlubGluZSBSVENJY2VHYXRoZXJpbmdTdGF0ZSB0b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKEdz
dFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAoc3RhdGUpIHsK
KyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9ORVc6CisgICAgICAgIHJl
dHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6TmV3OworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0Vf
R0FUSEVSSU5HX1NUQVRFX0dBVEhFUklORzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUdhdGhlcmlu
Z1N0YXRlOjpHYXRoZXJpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RB
VEVfQ09NUExFVEU6CisgICAgICAgIHJldHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6Q29tcGxl
dGU7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3Rh
dGljIGlubGluZSBHc3RXZWJSVENCdW5kbGVQb2xpY3kgYnVuZGxlUG9saWN5RnJvbUNvbmZpZ3Vy
YXRpb24oY29uc3QgTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7
CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uLmJ1bmRsZVBvbGljeSkgeworICAgIGNhc2UgUlRD
QnVuZGxlUG9saWN5OjpCYWxhbmNlZDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExF
X1BPTElDWV9CQUxBTkNFRDsKKyAgICBjYXNlIFJUQ0J1bmRsZVBvbGljeTo6TWF4Q29tcGF0Ogor
ICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19CVU5ETEVfUE9MSUNZX01BWF9DT01QQVQ7CisgICAg
Y2FzZSBSVENCdW5kbGVQb2xpY3k6Ok1heEJ1bmRsZToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJS
VENfQlVORExFX1BPTElDWV9NQVhfQlVORExFOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElDWV9OT05F
OworfQorCitzdGF0aWMgaW5saW5lIEdzdFdlYlJUQ0lDRVRyYW5zcG9ydFBvbGljeSBpY2VUcmFu
c3BvcnRQb2xpY3lGcm9tQ29uZmlndXJhdGlvbihjb25zdCBNZWRpYUVuZHBvaW50Q29uZmlndXJh
dGlvbiYgY29uZmlndXJhdGlvbikKK3sKKyAgICBzd2l0Y2ggKGNvbmZpZ3VyYXRpb24uaWNlVHJh
bnNwb3J0UG9saWN5KSB7CisgICAgY2FzZSBSVENJY2VUcmFuc3BvcnRQb2xpY3k6OkFsbDoKKyAg
ICAgICAgcmV0dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lfQUxMOworICAgIGNh
c2UgUlRDSWNlVHJhbnNwb3J0UG9saWN5OjpSZWxheToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJS
VENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lfUkVMQVk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJUQ19JQ0VfVFJBTlNQT1JUX1BP
TElDWV9BTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxSVENFcnJvckRldGFp
bFR5cGU+IHRvUlRDRXJyb3JEZXRhaWxUeXBlKEdzdFdlYlJUQ0Vycm9yIGNvZGUpCit7CisgICAg
c3dpdGNoIChjb2RlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0RBVEFfQ0hBTk5FTF9G
QUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRhaWxUeXBlOjpEYXRhQ2hhbm5lbEZh
aWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0RUTFNfRkFJTFVSRToKKyAgICAgICAg
cmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6RHRsc0ZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0VSUk9SX0ZJTkdFUlBSSU5UX0ZBSUxVUkU6CisgICAgICAgIHJldHVybiBSVENFcnJvckRl
dGFpbFR5cGU6OkZpbmdlcnByaW50RmFpbHVyZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1Jf
U0NUUF9GQUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRhaWxUeXBlOjpTY3RwRmFp
bHVyZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfU0RQX1NZTlRBWF9FUlJPUjoKKyAgICAg
ICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6U2RwU3ludGF4RXJyb3I7CisgICAgY2FzZSBH
U1RfV0VCUlRDX0VSUk9SX0hBUkRXQVJFX0VOQ09ERVJfTk9UX0FWQUlMQUJMRToKKyAgICBjYXNl
IEdTVF9XRUJSVENfRVJST1JfRU5DT0RFUl9FUlJPUjoKKyAgICAgICAgLy8gRklYTUUKKyAgICBk
ZWZhdWx0OgorICAgICAgICByZXR1cm4geyB9OworICAgIH07Cit9CisKK1JlZlB0cjxSVENFcnJv
cj4gdG9SVENFcnJvcihHRXJyb3IqKTsKKworR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGZyb21S
VENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3QgUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzJik7CitS
VENSdHBTZW5kUGFyYW1ldGVycyB0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKGNvbnN0IEdzdFN0cnVj
dHVyZSopOworCitzdGQ6Om9wdGlvbmFsPFJlZjxSVENDZXJ0aWZpY2F0ZT4+IGdlbmVyYXRlQ2Vy
dGlmaWNhdGUoUmVmPFNlY3VyaXR5T3JpZ2luPiYmLCBjb25zdCBQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb24mKTsKKworYm9vbCBzZHBNZWRpYUhhc0F0dHJpYnV0
ZUtleShjb25zdCBHc3RTRFBNZWRpYSosIGNvbnN0IGNoYXIqIGtleSk7CisKK30KKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCmluZGV4IGFiOWM3MDkyZTY1ZjUx
MTUyMDEzYzEyYmE0ODAyN2ZkNzBiODI0YjQuLjg1MjVmNDk1MjRiNTkxNmJkNWFjY2M1NDU0NWEw
Njk0MTA0MjE1OWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1l
ci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKQEAg
LTEsMTIgKzEsMjkgQEAKIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAg
ICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAg
ICAiJHtXRUJDT1JFX0RJUn0vTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIiCiAgICAgICAg
ICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIiCiAgICAgICAgICIk
e1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvbXNlIgogICAgICAgICAi
JHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL2VtZSIKICAgICApCiAK
ICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcAorICAgICAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2Vu
ZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNl
VHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcAorICAgICAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQu
Y3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJl
Y2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5j
cHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJh
bnNjZWl2ZXJCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAg
ICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3Iu
Y3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJU
Q1V0aWxzLmNwcAorCiAgICAgICAgIE1vZHVsZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1Nv
dXJjZUdTdHJlYW1lci5jcHAKKwogICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
QXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCkBAIC02MCw2ICs3Nyw3IEBAIGlm
IChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCiAgICAgICAgIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlRGV2aWNlTWFuYWdl
ci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNh
cHR1cmVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJEaXNwbGF5Q2FwdHVyZURldmljZU1hbmFnZXIuY3BwCiAgICAgICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJj
ZS5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZp
ZGVvQ2FwdHVyZVNvdXJjZS5jcHAKQEAgLTY3LDcgKzg1LDEzIEBAIGlmIChFTkFCTEVfVklERU8g
T1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL01vY2tSZWFsdGltZUF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAogICAgICAg
ICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1lVmlkZW9Tb3VyY2VH
U3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcAor
ICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvUmVhbHRpbWVNZWRpYVNvdXJjZUNlbnRlckdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5j
cHAKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1BSSVZBVEVfRlJBTUVXT1JLX0hF
QURFUlMKQEAgLTE0Niw3ICsxNzAsNyBAQCBpZiAoRU5BQkxFX1ZJREVPKQogICAgICAgICApCiAg
ICAgZW5kaWYgKCkKIAotICAgIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNIE9SIEVOQUJMRV9XRUJf
UlRDKQorICAgIGlmIChVU0VfTElCV0VCUlRDKQogICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3Jl
X1NZU1RFTV9JTkNMVURFX0RJUkVDVE9SSUVTCiAgICAgICAgICAgICAke0dTVFJFQU1FUl9DT0RF
Q1BBUlNFUlNfSU5DTFVERV9ESVJTfQogICAgICAgICApCkBAIC0xNTUsNiArMTc5LDIxIEBAIGlm
IChFTkFCTEVfVklERU8pCiAgICAgICAgICAgICAgICAgJHtHU1RSRUFNRVJfQ09ERUNQQVJTRVJT
X0xJQlJBUklFU30KICAgICAgICAgICAgICkKICAgICAgICAgZW5kaWYgKCkKKyAgICBlbHNlaWYg
KFVTRV9HU1RSRUFNRVJfV0VCUlRDKQorICAgICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NZU1RF
TV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICAgICAke0dTVFJFQU1FUl9SVFBfSU5DTFVE
RV9ESVJTfQorICAgICAgICAgICAgJHtHU1RSRUFNRVJfU0RQX0lOQ0xVREVfRElSU30KKyAgICAg
ICAgICAgICR7R1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlN9CisgICAgICAgICkKKyAgICAg
ICAgaWYgKE5PVCBVU0VfR1NUUkVBTUVSX0ZVTEwpCisgICAgICAgICAgICBsaXN0KEFQUEVORCBX
ZWJDb3JlX0xJQlJBUklFUworICAgICAgICAgICAgICAgICR7R1NUUkVBTUVSX1JUUF9MSUJSQVJJ
RVN9CisgICAgICAgICAgICAgICAgJHtHU1RSRUFNRVJfU0RQX0xJQlJBUklFU30KKyAgICAgICAg
ICAgICAgICAke0dTVFJFQU1FUl9XRUJSVENfTElCUkFSSUVTfQorICAgICAgICAgICAgKQorICAg
ICAgICBlbmRpZiAoKQorCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTIE9w
ZW5TU0w6OkNyeXB0bykKICAgICBlbmRpZiAoKQogZW5kaWYgKCkKIApkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJH
U3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1
ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIuY3BwCmluZGV4IGI0ZDVmNjcwM2U5MjllZGYxN2Yx
MDllZjY0ODEzMGFjZTAzOGNhYzQuLmExYWNlOTc2MWRhMmNlMmFhZDQ2NDIxYjliZTZkZjhkM2E5
ZTU0OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHAK
QEAgLTEwMCwxMCArMTAwLDU4IEBAIEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OkF1ZGlv
U291cmNlUHJvdmlkZXJHU3RyZWFtZXIoTWVkaWFTdHJlYW1UcmFja1ByaXZhCiAKICAgICBtX2F1
ZGlvU2lua0JpbiA9IGdzdF9wYXJzZV9iaW5fZnJvbV9kZXNjcmlwdGlvbigidGVlIG5hbWU9YXVk
aW9UZWUiLCB0cnVlLCBudWxscHRyKTsKIAotICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9D
QVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBzcmMsIG1fYXVkaW9TaW5rQmluLmdldCgpLCBudWxscHRy
KTsKLSAgICBnc3RfZWxlbWVudF9saW5rKHNyYywgbV9hdWRpb1NpbmtCaW4uZ2V0KCkpOworICAg
IGF1dG8qIGRlY29kZWJpbiA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJkZWNvZGViaW4zIiwgbnVs
bHB0cik7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKGRlY29kZWJpbiwgInBhZC1hZGRl
ZCIsIEdfQ0FMTEJBQ0soK1tdKEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIqIHByb3ZpZGVy
LCBHc3RQYWQqIHBhZCkgeworICAgICAgICBhdXRvIHBhZENhcHMgPSBhZG9wdEdSZWYoZ3N0X3Bh
ZF9xdWVyeV9jYXBzKHBhZCwgbnVsbHB0cikpOworICAgICAgICBib29sIGlzQXVkaW8gPSBkb0Nh
cHNIYXZlVHlwZShwYWRDYXBzLmdldCgpLCAiYXVkaW8iKTsKKyAgICAgICAgaWYgKHdlYmtpdEdz
dENoZWNrVmVyc2lvbigxLCAxOCwgMCkpCisgICAgICAgICAgICBSRUxFQVNFX0FTU0VSVChpc0F1
ZGlvKTsKKyAgICAgICAgZWxzZSBpZiAoIWlzQXVkaW8pCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNf
cGFkKHByb3ZpZGVyLT5tX2F1ZGlvU2lua0Jpbi5nZXQoKSwgInNpbmsiKSk7CisgICAgICAgIGdz
dF9wYWRfbGluayhwYWQsIHNpbmtQYWQuZ2V0KCkpOworICAgICAgICBnc3RfZWxlbWVudF9zeW5j
X3N0YXRlX3dpdGhfcGFyZW50KHByb3ZpZGVyLT5tX2F1ZGlvU2lua0Jpbi5nZXQoKSk7CisgICAg
fSksIHRoaXMpOworCisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9waXBlbGlu
ZS5nZXQoKSksIHNyYywgZGVjb2RlYmluLCBtX2F1ZGlvU2lua0Jpbi5nZXQoKSwgbnVsbHB0cik7
CisgICAgZ3N0X2VsZW1lbnRfbGluayhzcmMsIGRlY29kZWJpbik7CisKKyAgICBhdXRvIGJ1cyA9
IGFkb3B0R1JlZihnc3RfcGlwZWxpbmVfZ2V0X2J1cyhHU1RfUElQRUxJTkUobV9waXBlbGluZS5n
ZXQoKSkpKTsKKyAgICBBU1NFUlQoYnVzKTsKKworICAgIGdzdF9idXNfc2V0X3N5bmNfaGFuZGxl
cihidXMuZ2V0KCksIFtdKEdzdEJ1cyosIEdzdE1lc3NhZ2UqIG1lc3NhZ2UsIGdwb2ludGVyIHVz
ZXJEYXRhKSAtPiBHc3RCdXNTeW5jUmVwbHkgeworICAgICAgICBhdXRvKiBkZWNvZGViaW4gPSBH
U1RfRUxFTUVOVF9DQVNUKHVzZXJEYXRhKTsKKyAgICAgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUo
bWVzc2FnZSkgIT0gR1NUX01FU1NBR0VfU1RSRUFNX0NPTExFQ1RJT04gfHwgR1NUX01FU1NBR0Vf
U1JDKG1lc3NhZ2UpICE9IEdTVF9PQkpFQ1RfQ0FTVChkZWNvZGViaW4pKSB7CisgICAgICAgICAg
ICBnc3RfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICAgICAgICAgIHJldHVybiBHU1RfQlVT
X0RST1A7CisgICAgICAgIH0KKworICAgICAgICBHUmVmUHRyPEdzdFN0cmVhbUNvbGxlY3Rpb24+
IGNvbGxlY3Rpb247CisgICAgICAgIGdzdF9tZXNzYWdlX3BhcnNlX3N0cmVhbV9jb2xsZWN0aW9u
KG1lc3NhZ2UsICZjb2xsZWN0aW9uLm91dFB0cigpKTsKKyAgICAgICAgaWYgKCFjb2xsZWN0aW9u
KSB7CisgICAgICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtZXNzYWdlKTsKKyAgICAgICAgICAg
IHJldHVybiBHU1RfQlVTX0RST1A7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCBzaXpl
ID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zaXplKGNvbGxlY3Rpb24uZ2V0KCkpOworICAg
ICAgICBHTGlzdCogc3RyZWFtcyA9IG51bGxwdHI7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IDA7IGkgPCBzaXplOyBpKyspIHsKKyAgICAgICAgICAgIGF1dG8qIHN0cmVhbSA9IGdzdF9zdHJl
YW1fY29sbGVjdGlvbl9nZXRfc3RyZWFtKGNvbGxlY3Rpb24uZ2V0KCksIGkpOworICAgICAgICAg
ICAgYXV0byBzdHJlYW1UeXBlID0gZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX3R5cGUoc3RyZWFtKTsK
KyAgICAgICAgICAgIGlmIChzdHJlYW1UeXBlID09IEdTVF9TVFJFQU1fVFlQRV9BVURJTykgewor
ICAgICAgICAgICAgICAgIHN0cmVhbXMgPSBnX2xpc3RfYXBwZW5kKHN0cmVhbXMsIGNvbnN0X2Nh
c3Q8Y2hhcio+KGdzdF9zdHJlYW1fZ2V0X3N0cmVhbV9pZChzdHJlYW0pKSk7CisgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKHN0cmVh
bXMpIHsKKyAgICAgICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQoZGVjb2RlYmluLCBnc3Rf
ZXZlbnRfbmV3X3NlbGVjdF9zdHJlYW1zKHN0cmVhbXMpKTsKKyAgICAgICAgICAgIGdfbGlzdF9m
cmVlKHN0cmVhbXMpOworICAgICAgICB9CiAKLSAgICBjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNh
bGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCkpOworICAgICAgICBnc3RfbWVzc2FnZV91bnJlZihtZXNz
YWdlKTsKKyAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAgICB9LCBnc3Rfb2JqZWN0X3Jl
ZihkZWNvZGViaW4pLCBnc3Rfb2JqZWN0X3VucmVmKTsKIH0KICNlbmRpZgogCkBAIC0xMjAsMTAg
KzE2OCw4IEBAIEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6On5BdWRpb1NvdXJjZVByb3Zp
ZGVyR1N0cmVhbWVyKCkKIAogICAgIHNldENsaWVudChudWxscHRyKTsKICNpZiBFTkFCTEUoTUVE
SUFfU1RSRUFNKQotICAgIGlmIChtX3BpcGVsaW5lKSB7Ci0gICAgICAgIGRpc2Nvbm5lY3RTaW1w
bGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5nZXQoKSk7CisgICAgaWYgKG1fcGlwZWxp
bmUpCiAgICAgICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1Rf
U1RBVEVfTlVMTCk7Ci0gICAgfQogI2VuZGlmCiB9CiAKQEAgLTM0NSw3ICszOTEsNiBAQCB2b2lk
IEF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OmhhbmRsZU5ld0RlaW50ZXJsZWF2ZVBhZChH
c3RQYWQqIHBhZCkKIAogICAgIEdRdWFyayBxdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3Ry
aW5nKCJwZWVyIik7CiAgICAgZ19vYmplY3Rfc2V0X3FkYXRhKEdfT0JKRUNUKHBhZCksIHF1YXJr
LCBzaW5rUGFkLmdldCgpKTsKLQogICAgIG1fZGVpbnRlcmxlYXZlU291cmNlUGFkcysrOwogICAg
IEdRdWFyayBjaGFubmVsSWRRdWFyayA9IGdfcXVhcmtfZnJvbV9zdGF0aWNfc3RyaW5nKCJjaGFu
bmVsLWlkIik7CiAgICAgZ19vYmplY3Rfc2V0X3FkYXRhKEdfT0JKRUNUKHNpbmspLCBjaGFubmVs
SWRRdWFyaywgR0lOVF9UT19QT0lOVEVSKG1fZGVpbnRlcmxlYXZlU291cmNlUGFkcykpOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1l
ckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKaW5kZXggNmYyODg3
MmFmYjExNzZlNTEzZDJiZGY1NWE2MjIxZDRmNmZiMGFlNy4uZGQzMTNiMzE0MjQwNmNhZjU3OTRl
YWM3Y2MyYWY4ZDY0ZTU0NWFhMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
YXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oCkBAIC0zMiwxOSArMzIsMTYgQEAgY2xhc3MgR1N0cmVhbWVyQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbiBmaW5hbDogcHVibGljIEF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gewog
cHVibGljOgogICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oR3N0QXVkaW9JbmZv
JiYgaW5mbykKICAgICAgICAgOiBtX2luZm8oV1RGTW92ZShpbmZvKSkKLSAgICAgICAgLCBtX2Nh
cHMoYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpKQogICAgIHsKICAg
ICB9CiAKICAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKGNvbnN0IEdzdEF1ZGlv
SW5mbyYgaW5mbykKICAgICAgICAgOiBtX2luZm8oaW5mbykKLSAgICAgICAgLCBtX2NhcHMoYWRv
cHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpKQogICAgIHsKICAgICB9CiAK
ICAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uKEdzdEF1ZGlvSW5mbyogaW5mbykK
ICAgICAgICAgOiBtX2luZm8oKmluZm8pCi0gICAgICAgICwgbV9jYXBzKGFkb3B0R1JlZihnc3Rf
YXVkaW9faW5mb190b19jYXBzKCZtX2luZm8pKSkKICAgICB7CiAgICAgfQogCkBAIC05OSw3ICs5
NiwxMiBAQCBwdWJsaWM6CiAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEdTdHJlYW1lckF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24mIG90aGVyKSB7IHJldHVybiBnc3RfYXVkaW9faW5mb19pc19lcXVh
bCgmbV9pbmZvLCAmb3RoZXIubV9pbmZvKTsgfQogICAgIGJvb2wgb3BlcmF0b3IhPShjb25zdCBH
U3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1cm4gIW9wZXJhdG9y
ID09IChvdGhlcik7IH0KIAotICAgIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGNhcHMoKSBjb25z
dCB7IHJldHVybiBtX2NhcHM7IH0KKyAgICBjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBjYXBzKCkK
KyAgICB7CisgICAgICAgIGlmICghbV9jYXBzKQorICAgICAgICAgICAgbV9jYXBzID0gYWRvcHRH
UmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpOworICAgICAgICByZXR1cm4gbV9j
YXBzOworICAgIH0KICAgICBjb25zdCBHc3RBdWRpb0luZm8mIGdldEluZm8oKSBjb25zdCB7IHJl
dHVybiBtX2luZm87IH0KIAogcHJpdmF0ZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcApp
bmRleCAyM2FjMTI1NzY2MjE5N2ZhNGVhYzk3YTk5N2NiNWQwZmVlZTc0MzkwLi4xNWY2ZjZkMjQy
YWE3NjkxNzM1YWE3Mjg0MmYyNTk1Zjc1ZDU4MzY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFt
ZXIuY3BwCkBAIC0yNyw2ICsyNywxMiBAQAogI2luY2x1ZGUgPGdzdC9nbC9lZ2wvZ3N0ZWdsaW1h
Z2UuaD4KICNlbmRpZgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjZGVmaW5lIEdTVF9V
U0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBH
U1RfVVNFX1VOU1RBQkxFX0FQSQorI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0
ZTw+IEdSZWZQdHI8R3N0TWluaU9iamVjdD4gYWRvcHRHUmVmKEdzdE1pbmlPYmplY3QqIHB0cikK
QEAgLTU2OSw2ICs1NzUsMTQzIEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdEVHTElt
YWdlPihHc3RFR0xJbWFnZSogcHRyKQogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9HTCkKIAor
I2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJU
Q1JUUFJlY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHB0cikKK3sKKyAg
ICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4ocHRyLCBHUmVmUHRyQWRvcHQp
OworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBSZWNlaXZlciogcmVmR1B0cjxHc3RXZWJS
VENSVFBSZWNlaXZlcj4oR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHB0cikKK3sKKyAgICBpZiAocHRy
KQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJu
IHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2
ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAg
Z3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJU
Q1JUUFNlbmRlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFNlbmRlciogcHRyKQoreworICAgIHJl
dHVybiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQor
Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBTZW5kZXIqIHJlZkdQdHI8R3N0V2ViUlRDUlRQU2Vu
ZGVyPihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBn
c3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwor
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPihHc3RXZWJSVENS
VFBTZW5kZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVm
KHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+
IGFkb3B0R1JlZihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcHRyKQoreworICAgIHJldHVybiBH
UmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9CisK
K3RlbXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiByZWZHUHRyPEdzdFdlYlJUQ1JU
UFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcHRyKQoreworICAgIGlmIChw
dHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpFQ1QocHRyKSk7CisKKyAgICByZXR1
cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFu
c2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQor
ICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8
R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGFkb3B0R1JlZihHc3RXZWJSVENEYXRhQ2hhbm5lbCogcHRy
KQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihwdHIsIEdSZWZQ
dHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RhdGFDaGFubmVsKiByZWZHUHRy
PEdzdFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCogcHRyKQoreworICAg
IGlmIChwdHIpCisgICAgICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChwdHIpKTsKKworICAgIHJl
dHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0RhdGFD
aGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAg
ICAgIGdfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2Vi
UlRDRFRMU1RyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqIHB0cikK
K3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PihwdHIsIEdSZWZQ
dHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqIHJlZkdQ
dHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcHRyKQor
eworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpFQ1QocHRyKSk7
CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RX
ZWJSVENEVExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0KiBwdHIpCit7CisgICAg
aWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8
PiBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0lDRVRy
YW5zcG9ydCogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9y
dD4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENJQ0VUcmFu
c3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJQ0VUcmFuc3Bv
cnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JK
RUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJQ0VUcmFuc3BvcnQqIHB0cikK
K3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3Rl
bXBsYXRlPD4gR1JlZlB0cjxHc3RQcm9taXNlPiBhZG9wdEdSZWYoR3N0UHJvbWlzZSogcHRyKQor
eworICAgIHJldHVybiBHUmVmUHRyPEdzdFByb21pc2U+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30K
KwordGVtcGxhdGU8PiBHc3RQcm9taXNlKiByZWZHUHRyPEdzdFByb21pc2U+KEdzdFByb21pc2Uq
IHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3RfcHJvbWlzZV9yZWYocHRyKTsKKwor
ICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8R3N0UHJvbWlz
ZT4oR3N0UHJvbWlzZSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9wcm9taXNl
X3VucmVmKHB0cik7Cit9CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwogfSAv
LyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFt
ZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRy
R1N0cmVhbWVyLmgKaW5kZXggMDc4ZDNjNTYzOTc0ZjZhMmIzYWYxZWI4Mzk4NjQ5ODc5NDVmYTdk
OC4uOWE1MjY5YzVmYjlkOGM2YTc3MzZlN2RmYmYyYTgzNjIzYTMwNTBiMiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFt
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1Jl
ZlB0ckdTdHJlYW1lci5oCkBAIC0zMyw2ICszMywxNiBAQCB0eXBlZGVmIHN0cnVjdCBfR3N0R0xD
b250ZXh0IEdzdEdMQ29udGV4dDsKIHR5cGVkZWYgc3RydWN0IF9Hc3RFR0xJbWFnZSBHc3RFR0xJ
bWFnZTsKICNlbmRpZgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCit0eXBlZGVmIHN0cnVj
dCBfR3N0UHJvbWlzZSBHc3RQcm9taXNlOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ0RUTFNU
cmFuc3BvcnQgR3N0V2ViUlRDRFRMU1RyYW5zcG9ydDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJS
VENEYXRhQ2hhbm5lbCBHc3RXZWJSVENEYXRhQ2hhbm5lbDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RX
ZWJSVENJQ0VUcmFuc3BvcnQgR3N0V2ViUlRDSUNFVHJhbnNwb3J0OwordHlwZWRlZiBzdHJ1Y3Qg
X0dzdFdlYlJUQ1JUUFJlY2VpdmVyIEdzdFdlYlJUQ1JUUFJlY2VpdmVyOwordHlwZWRlZiBzdHJ1
Y3QgX0dzdFdlYlJUQ1JUUFNlbmRlciBHc3RXZWJSVENSVFBTZW5kZXI7Cit0eXBlZGVmIHN0cnVj
dCBfR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI7CisjZW5k
aWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RQbHVnaW4+IGFk
b3B0R1JlZihHc3RQbHVnaW4qIHB0cik7CkBAIC0xNDYsNiArMTU2LDM3IEBAIHRlbXBsYXRlPD4g
R3N0RUdMSW1hZ2UqIHJlZkdQdHI8R3N0RUdMSW1hZ2U+KEdzdEVHTEltYWdlKiBwdHIpOwogdGVt
cGxhdGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RFR0xJbWFnZT4oR3N0RUdMSW1hZ2UqIHB0cik7CiAj
ZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQordGVtcGxhdGUgPD4gR1JlZlB0cjxH
c3RXZWJSVENSVFBSZWNlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFJlY2VpdmVyKik7Cit0
ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBSZWNlaXZlciogcmVmR1B0cjxHc3RXZWJSVENSVFBSZWNl
aXZlcj4oR3N0V2ViUlRDUlRQUmVjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRy
PEdzdFdlYlJUQ1JUUFJlY2VpdmVyPihHc3RXZWJSVENSVFBSZWNlaXZlciopOworCit0ZW1wbGF0
ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFNl
bmRlciopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQU2VuZGVyKiByZWZHUHRyPEdzdFdlYlJU
Q1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVm
R1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KEdzdFdlYlJUQ1JUUFNlbmRlciopOworCit0ZW1wbGF0
ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRD
UlRQVHJhbnNjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBy
ZWZHUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciop
OwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KEdz
dFdlYlJUQ1JUUFRyYW5zY2VpdmVyKik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRD
RGF0YUNoYW5uZWw+IGFkb3B0R1JlZihHc3RXZWJSVENEYXRhQ2hhbm5lbCopOwordGVtcGxhdGUg
PD4gR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+KEdz
dFdlYlJUQ0RhdGFDaGFubmVsKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJS
VENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsKKwordGVtcGxhdGUgPD4gR1Jl
ZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiBhZG9wdEdSZWYoR3N0V2ViUlRDRFRMU1RyYW5z
cG9ydCopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcmVmR1B0cjxHc3RX
ZWJSVENEVExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0Kik7Cit0ZW1wbGF0ZSA8
PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJh
bnNwb3J0Kik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PiBh
ZG9wdEdSZWYoR3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENJ
Q0VUcmFuc3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJQ0VU
cmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5z
cG9ydD4oR3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0
UHJvbWlzZT4gYWRvcHRHUmVmKEdzdFByb21pc2UqKTsKK3RlbXBsYXRlIDw+IEdzdFByb21pc2Uq
IHJlZkdQdHI8R3N0UHJvbWlzZT4oR3N0UHJvbWlzZSopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZkdQdHI8R3N0UHJvbWlzZT4oR3N0UHJvbWlzZSopOworCisjZW5kaWYKKwogfSAvLyBuYW1lc3Bh
Y2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9u
LmNwcAppbmRleCA5ZjQ5NWRkZjkwMmRmNGZmZGY1M2FmZThjMGY2NzRmNTZjYmY1ZmUxLi5hOGNi
ZTVjNzJlMjMwMjFjZmU0N2M4MmFhMWRlY2MzOGUzNjQyNjFjIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVy
Q29tbW9uLmNwcApAQCAtMTg5LDYgKzE4OSw5IEBAIGNvbnN0IGNoYXIqIGNhcHNNZWRpYVR5cGUo
Y29uc3QgR3N0Q2FwcyogY2FwcykKICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1
Y3R1cmUsICJhcHBsaWNhdGlvbi94LWNlbmMiKSB8fCBnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0
cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtY2JjcyIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUo
c3RydWN0dXJlLCAiYXBwbGljYXRpb24veC13ZWJtLWVuYyIpKQogICAgICAgICByZXR1cm4gZ3N0
X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKTsK
ICNlbmRpZgorICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxp
Y2F0aW9uL3gtcnRwIikpCisgICAgICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmco
c3RydWN0dXJlLCAibWVkaWEiKTsKKwogICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9uYW1l
KHN0cnVjdHVyZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oCmluZGV4IGJm
NzRlY2YwMmNjMjJmNjA2ZWJjYjlmZTg1YzAzNGIyNmM0MDY0NDEuLmU1MjQ3MWNhN2VhNjJhMzE1
OGM1MjMzMzYwNjM1MmVjNjMxNTJhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIu
aApAQCAtMzAsNiArMzAsMTIgQEAKICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAKKyNpZiBkZWZpbmVkKEJVSUxESU5HX1dlYkNv
cmUpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQ
SQorI2luY2x1ZGUgPGdzdC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJM
RV9BUEkKKyNlbmRpZgorCiAjaWYgVVNFKFdQRV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRikK
ICNpbmNsdWRlIDx3cGUvZXh0ZW5zaW9ucy92aWRlby1wbGFuZS1kaXNwbGF5LWRtYWJ1Zi5oPgog
I2VuZGlmCkBAIC00OSw2ICs1NSwxMCBAQCBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RCeXRl
UmVhZGVyLCBnc3RfYnl0ZV9yZWFkZXJfZnJlZSkKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdz
dFZpZGVvQ29udmVydGVyLCBnc3RfdmlkZW9fY29udmVydGVyX2ZyZWUpCiBXVEZfREVGSU5FX0dQ
VFJfREVMRVRFUihHc3RBdWRpb0NvbnZlcnRlciwgZ3N0X2F1ZGlvX2NvbnZlcnRlcl9mcmVlKQog
CisjaWYgZGVmaW5lZChCVUlMRElOR19XZWJDb3JlKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
K1dURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiwgZ3N0
X3dlYnJ0Y19zZXNzaW9uX2Rlc2NyaXB0aW9uX2ZyZWUpCisjZW5kaWYKKwogI2lmIFVTRShXUEVf
VklERU9fUExBTkVfRElTUExBWV9ETUFCVUYpCiBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihzdHJ1
Y3Qgd3BlX3ZpZGVvX3BsYW5lX2Rpc3BsYXlfZG1hYnVmX3NvdXJjZSwgd3BlX3ZpZGVvX3BsYW5l
X2Rpc3BsYXlfZG1hYnVmX3NvdXJjZV9kZXN0cm95KQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZS5jcHAKaW5kZXggZWMzMmJhODVjY2Y4NDcyNTM4MzUyNjgxODU5YzQwNzdlYmQ0OTky
ZC4uMTgyNjZmMTIyYzRiMTg2NzRhMWY3OWJhYjkxZjA1NDk2N2ZjYjcwMCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogCiAjaWYgUExBVEZPUk0oQ09D
T0EpCiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5o
IgotI2VsaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNF
KExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNlbGlmIEVOQUJMRShXRUJfQVVESU8pICYm
IEVOQUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiQXVkaW9T
b3VyY2VQcm92aWRlckdTdHJlYW1lci5oIgogI2Vsc2UKICNpbmNsdWRlICJXZWJBdWRpb1NvdXJj
ZVByb3ZpZGVyLmgiCkBAIC0xOTksNyArMTk5LDcgQEAgUmVmUHRyPFdlYkF1ZGlvU291cmNlUHJv
dmlkZXI+IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGVBdWRpb1NvdXJjZVByb3ZpZGUK
IAogI2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHJldHVybiBNZWRpYVN0cmVhbVRyYWNrQXVkaW9T
b3VyY2VQcm92aWRlckNvY29hOjpjcmVhdGUoKnRoaXMpOwotI2VsaWYgVVNFKExJQldFQlJUQykg
JiYgVVNFKEdTVFJFQU1FUikKKyNlbGlmIFVTRShHU1RSRUFNRVIpCiAgICAgcmV0dXJuIEF1ZGlv
U291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OmNyZWF0ZSgqdGhpcyk7CiAjZWxzZQogICAgIHJldHVy
biBudWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3Bw
CmluZGV4IDI2ZWU0MjYzYjlkYjg3ODFkYmFlNjFlMWEzMDEyZWY3ZGM3MDk3MjUuLjM1ZTY1YzBl
YjBiZDQ4MWQzZjg1YTlkZDA1YjY2YmY5NTY5MGU3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVy
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKQEAgLTI5LDI5ICsyOSw0NiBAQAogI2luY2x1ZGUg
IkxpYldlYlJUQ0F1ZGlvRm9ybWF0LmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPGdzdC9hcHAvZ3N0
YXBwc2luay5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoTElCV0VCUlRDKQot
c3RhdGljIGNvbnN0ZXhwciBzaXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IExpYldlYlJU
Q0F1ZGlvRm9ybWF0OjpzYW1wbGVSYXRlOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19hdWRp
b0NhcHR1cmVTYW1wbGVSYXRlID0gTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGU7CiAj
ZWxzZQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IDQ4
MDAwOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0g
NDgwMDA7CiAjZW5kaWYKIAogR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9D
YXB0dXJlcihHU3RyZWFtZXJDYXB0dXJlRGV2aWNlIGRldmljZSkKLSAgICA6IEdTdHJlYW1lckNh
cHR1cmVyKGRldmljZSwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3
IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSkp
CisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcihkZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdf
c2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgc19hdWRpb0NhcHR1cmVT
YW1wbGVSYXRlLCBudWxscHRyKSkpCiB7CiB9CiAKIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdT
dHJlYW1lckF1ZGlvQ2FwdHVyZXIoKQotICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIs
IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19U
WVBFX0lOVCwgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSwgbnVsbHB0cikpLCBDYXB0dXJlRGV2aWNl
OjpEZXZpY2VUeXBlOjpNaWNyb3Bob25lKQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNy
YyIsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwg
R19UWVBFX0lOVCwgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSksIENhcHR1cmVE
ZXZpY2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmUpCiB7CiB9CiAKIEdzdEVsZW1lbnQqIEdTdHJl
YW1lckF1ZGlvQ2FwdHVyZXI6OmNyZWF0ZUNvbnZlcnRlcigpCiB7Ci0gICAgcmV0dXJuIG1ha2VH
U3RyZWFtZXJCaW4oImF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUiLCB0cnVlKTsKKyAgICBh
dXRvKiBiaW4gPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBhdXRvKiBhdWRpb2NvbnZlcnQg
PSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvY29udmVydCIsIG51bGxwdHIpOworICAg
IGF1dG8qIGF1ZGlvcmVzYW1wbGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvcmVz
YW1wbGUiLCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChiaW4p
LCBhdWRpb2NvbnZlcnQsIGF1ZGlvcmVzYW1wbGUsIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50
X2xpbmsoYXVkaW9jb252ZXJ0LCBhdWRpb3Jlc2FtcGxlKTsKKworI2lmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorICAgIGlmIChhdXRvKiB3ZWJydGNkc3AgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgi
d2VicnRjZHNwIiwgbnVsbHB0cikpIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0KHdlYnJ0Y2RzcCwg
ImVjaG8tY2FuY2VsIiwgZmFsc2UsICJ2b2ljZS1kZXRlY3Rpb24iLCB0cnVlLCBudWxscHRyKTsK
KyAgICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKGJpbiksIHdlYnJ0Y2RzcCk7CisgICAg
ICAgIGdzdF9lbGVtZW50X2xpbmsod2VicnRjZHNwLCBhdWRpb2NvbnZlcnQpOworICAgIH0KKyNl
bmRpZgorCisgICAgaWYgKGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxpbmtl
ZF9wYWQoR1NUX0JJTl9DQVNUKGJpbiksIEdTVF9QQURfU1JDKSkpCisgICAgICAgIGdzdF9lbGVt
ZW50X2FkZF9wYWQoR1NUX0VMRU1FTlRfQ0FTVChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldygic3Jj
IiwgcGFkLmdldCgpKSk7CisgICAgaWYgKGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmlu
ZF91bmxpbmtlZF9wYWQoR1NUX0JJTl9DQVNUKGJpbiksIEdTVF9QQURfU0lOSykpKQorICAgICAg
ICBnc3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1QoYmluKSwgZ3N0X2dob3N0X3Bh
ZF9uZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKKworICAgIHJldHVybiBiaW47CiB9CiAKIGJvb2wg
R1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6c2V0U2FtcGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJDYXB0dXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCmluZGV4IGM5ZTBkNWViNjBlMmJjMzhl
ZjNhOWE1ZDUzMmM0Mzg4MDEwOTZmNGUuLjE5NjE2NjcxOGQ4MjU2ZjM0MDJlOWJlMmY2MTE4NDE0
MjRkYWExY2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcApAQCAtMTAw
LDcgKzEwMCw3IEBAIEdzdEVsZW1lbnQqIEdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2Uo
KQogICAgICAgICBtX3NyYyA9IG1ha2VFbGVtZW50KG1fc291cmNlRmFjdG9yeSk7CiAgICAgICAg
IEFTU0VSVChtX3NyYyk7CiAgICAgICAgIGlmIChHU1RfSVNfQVBQX1NSQyhtX3NyYy5nZXQoKSkp
Ci0gICAgICAgICAgICBnX29iamVjdF9zZXQobV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwg
ImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgbnVsbHB0cik7CisgICAgICAgICAgICBnX29iamVj
dF9zZXQobV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9GT1JNQVRf
VElNRSwgImRvLXRpbWVzdGFtcCIsIHRydWUsIG51bGxwdHIpOwogCiAgICAgICAgIGF1dG8gc3Jj
UGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fc3JjLmdldCgpLCAi
c3JjIikpOwogICAgICAgICBpZiAobV9kZXZpY2VUeXBlID09IENhcHR1cmVEZXZpY2U6OkRldmlj
ZVR5cGU6OkNhbWVyYSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2Vu
ZGVyQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmExZGU1MmJkNTgxOTRjNzM3NmE2YTFhNGYzZmZl
NGRlZGMxYTcyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAKQEAgLTAs
MCArMSw3NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgiCisKKyNpZiBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OkdTdHJlYW1lckRUTUZTZW5k
ZXJCYWNrZW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitHU3RyZWFtZXJEVE1G
U2VuZGVyQmFja2VuZDo6fkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCitib29sIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpjYW5J
bnNlcnREVE1GKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsK
K30KKwordm9pZCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6cGxheVRvbmUoY29uc3QgU3Ry
aW5nJiwgc2l6ZV90LCBzaXplX3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3Ry
aW5nIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjp0b25lcygpIGNvbnN0Cit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitzaXplX3QgR1N0cmVhbWVyRFRN
RlNlbmRlckJhY2tlbmQ6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiAwOworfQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6
OmludGVyVG9uZUdhcCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gMDsKK30KKwordm9pZCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6b25Ub25lUGxheWVk
KEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgb25Ub25lUGxheWVkKQoreworICAgIG1f
b25Ub25lUGxheWVkID0gV1RGTW92ZShvblRvbmVQbGF5ZWQpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmM1Nzk3MDUwY2VjOWI0YjBhYTZkOWVmZTk4MDhhZTVjOTA4OGZiMzMKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaApAQCAtMCwwICsxLDUwIEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJUQ0RUTUZTZW5k
ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCisvLyBVc2UgZWFnZXIgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9y
eSBzaW5jZSB3ZSBjYWxsIG1ha2VXZWFrUHRyKCkgZnJvbSBhbm90aGVyIHRocmVhZC4KK2NsYXNz
IEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0RUTUZTZW5kZXJC
YWNrZW5kLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQs
IFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRFRNRlNlbmRlckJh
Y2tlbmQoKTsKKyAgICB+R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKTsKKworcHJpdmF0ZToK
KyAgICAvLyBSVENEVE1GU2VuZGVyQmFja2VuZAorICAgIGJvb2wgY2FuSW5zZXJ0RFRNRigpIGZp
bmFsOworICAgIHZvaWQgcGxheVRvbmUoY29uc3QgU3RyaW5nJiB0b25lLCBzaXplX3QgZHVyYXRp
b24sIHNpemVfdCBpbnRlclRvbmVHYXApIGZpbmFsOworICAgIHZvaWQgb25Ub25lUGxheWVkKEZ1
bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpIGZpbmFsOworICAgIFN0cmluZyB0b25lcygp
IGNvbnN0IGZpbmFsOworICAgIHNpemVfdCBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHNp
emVfdCBpbnRlclRvbmVHYXAoKSBjb25zdCBmaW5hbDsKKworICAgIEZ1bmN0aW9uPHZvaWQoY29u
c3QgU3RyaW5nJik+IG1fb25Ub25lUGxheWVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKaW5k
ZXggOTk1NGZhNjU4MzEzYTlhNDVhNTJlM2NmNzYxZjEwMWYzNGQ5YWFkNS4uMDViYTIwZjcwNGZl
N2I2YzIyNmFmNzcwYWFhYTExMDE5M2M1MjhlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNl
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCkBAIC0zNCwxNyArMzQsMjMgQEAKICNpbmNs
dWRlICJWaWRlb0ZyYW1lTWV0YWRhdGFHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNr
UHJpdmF0ZU1lZGlhU3RyZWFtLmgiCiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNs
dWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVk
ZSA8Z3N0L2FwcC9nc3RhcHBzcmMuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmlu
ZXIuaD4KICNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBl
Lmg+CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGF0aWMgR3N0U3RhdGljUGFkVGVt
cGxhdGUgdmlkZW9TcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJ2aWRlb19z
cmMldSIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NB
UFMoInZpZGVvL3gtcmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwOCIpKTsKKyAgICBHU1RfU1RB
VElDX0NBUFMoInZpZGVvL3gtcmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwODt2aWRlby94LXZw
OTthcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbyIpKTsKIAogc3RhdGljIEdz
dFN0YXRpY1BhZFRlbXBsYXRlIGF1ZGlvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1Q
TEFURSgiYXVkaW9fc3JjJXUiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElNRVMsCi0gICAg
R1NUX1NUQVRJQ19DQVBTKCJhdWRpby94LXJhdyhBTlkpOyIpKTsKKyAgICBHU1RfU1RBVElDX0NB
UFMoImF1ZGlvL3gtcmF3KEFOWSk7YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVk
aW8iKSk7CiAKIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0TWVkaWFTdHJlYW1TcmNE
ZWJ1Zyk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVn
CkBAIC0yMjEsNyArMjI3LDcgQEAgcHVibGljOgogCiAgICAgICAgIGlmIChkcm9wKSB7CiAgICAg
ICAgICAgICBtX25lZWRzRGlzY29udCA9IHRydWU7Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpF
Q1QobV9zcmMuZ2V0KCksICIlcyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4gbm90IHB1c2hpbmciLCBt
X3RyYWNrLmhhc1ZpZGVvKCkgPyAiVmlkZW8iIDogIkF1ZGlvIik7CisgICAgICAgICAgICBHU1Rf
VFJBQ0VfT0JKRUNUKG1fc3JjLmdldCgpLCAiJXMgcXVldWUgZnVsbCBhbHJlYWR5Li4uIG5vdCBw
dXNoaW5nIiwgbV90cmFjay5oYXNWaWRlbygpID8gIlZpZGVvIiA6ICJBdWRpbyIpOwogICAgICAg
ICAgICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTY1Miw2ICs2NTgsNyBAQCB2b2lkIHdlYmtp
dE1lZGlhU3RyZWFtU3JjQWRkVHJhY2soV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlh
U3RyZWFtVHJhY2tQcgogICAgIGNvbnN0IGNoYXIqIHNvdXJjZVR5cGU7CiAgICAgdW5zaWduZWQg
Y291bnRlcjsKICAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkVGVtcGxhdGU7CisKICAgICBp
ZiAodHJhY2stPmhhc0F1ZGlvKCkpIHsKICAgICAgICAgcGFkVGVtcGxhdGUgPSAmYXVkaW9TcmNU
ZW1wbGF0ZTsKICAgICAgICAgc291cmNlVHlwZSA9ICJhdWRpbyI7CkBAIC02NjMsOSArNjcwLDE5
IEBAIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNy
Yyogc2VsZiwgTWVkaWFTdHJlYW1UcmFja1ByCiAgICAgICAgIGNvdW50ZXIgPSBzZWxmLT5wcml2
LT52aWRlb1BhZENvdW50ZXIuZXhjaGFuZ2VBZGQoMSk7CiAgICAgfQogCi0gICAgYXV0byBwYWRO
YW1lID0gbWFrZVN0cmluZyhzb3VyY2VUeXBlLCAiX3NyYyIsIGNvdW50ZXIpOworI2lmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQorICAgIGlmICh0cmFjay0+c291cmNlKCkuaXNJbmNvbWluZ0F1ZGlv
U291cmNlKCkpIHsKKyAgICAgICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJ
bmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgpKTsKKyAgICAgICAg
c291cmNlLnJlZ2lzdGVyQ2xpZW50KCk7CisgICAgfSBlbHNlIGlmICh0cmFjay0+c291cmNlKCku
aXNJbmNvbWluZ1ZpZGVvU291cmNlKCkpIHsKKyAgICAgICAgYXV0byYgc291cmNlID0gc3RhdGlj
X2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJj
ZSgpKTsKKyAgICAgICAgc291cmNlLnJlZ2lzdGVyQ2xpZW50KCk7CisgICAgfQorI2VuZGlmCisK
ICAgICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJTZXR1cCAlcyBzb3VyY2UgZm9yIHRyYWNrICVz
LCBvbmx5IHRyYWNrOiAlcyIsIHNvdXJjZVR5cGUsIHRyYWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCks
IGJvb2xGb3JQcmludGluZyhvbmx5VHJhY2spKTsKIAorICAgIGF1dG8gcGFkTmFtZSA9IG1ha2VT
dHJpbmcoc291cmNlVHlwZSwgIl9zcmMiLCBjb3VudGVyKTsKICAgICBhdXRvIHNvdXJjZSA9IG1h
a2VVbmlxdWU8SW50ZXJuYWxTb3VyY2U+KEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksICp0cmFjaywg
cGFkTmFtZSk7CiAgICAgYXV0byogZWxlbWVudCA9IHNvdXJjZS0+Z2V0KCk7CiAgICAgZ3N0X2Jp
bl9hZGQoR1NUX0JJTl9DQVNUKHNlbGYpLCBlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29k
ZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKaW5kZXggZmFjNDcwNWZiOGE3Y2YyZGMyM2VhNTExYjE1
ZmNmNDg1NTJjZjMzYS4uYTc2ZWYxZWZmZDE2ZmEyNmI2ZGUzNTc0ZjQ2NGY1ZDIzM2M5NWVmZSAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKQEAgLTI5Nyw5
ICsyOTcsMTEgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2NsYXNz
X2luaXQoV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyQ2xhc3MKICAgICAgICAgICAgIGdfb2JqZWN0
X3NldChzZWxmLT5wcml2LT5wYXJzZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxs
cHRyKTsKICAgICAgICAgfSwgInRhcmdldC1iaXRyYXRlIiwgc2V0Qml0cmF0ZUJpdFBlclNlYywg
ImludGVydmFsLWludHJhZnJhbWVzIik7CiAgICAgRW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihY
MjY0LCAieDI2NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKLSAgICAgICAgInZp
ZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVhbSxwcm9maWxl
PWJhc2VsaW5lIiwKKyAgICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZv
cm1hdD1ieXRlLXN0cmVhbSxwcm9maWxlPWNvbnN0cmFpbmVkLWJhc2VsaW5lIiwKICAgICAgICAg
W10oV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyKiBzZWxmKSB7CiAgICAgICAgICAgICBnc3RfdXRp
bF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVChzZWxmLT5wcml2LT5lbmNvZGVyLmdldCgpKSwgInR1
bmUiLCAiemVyb2xhdGVuY3kiKTsKKyAgICAgICAgICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJn
KEdfT0JKRUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAic3BlZWQtcHJlc2V0IiwgInVs
dHJhZmFzdCIpOworICAgICAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNlbGYtPnByaXYt
PmVuY29kZXIuZ2V0KCkpLCAia2V5LWludC1tYXgiLCAxNSwgTlVMTCk7CiAgICAgICAgICAgICBn
X29iamVjdF9zZXQoc2VsZi0+cHJpdi0+cGFyc2VyLmdldCgpLCAiY29uZmlnLWludGVydmFsIiwg
MSwgbnVsbHB0cik7CiAgICAgICAgIH0sICJiaXRyYXRlIiwgc2V0Qml0cmF0ZUtiaXRQZXJTZWMs
ICJrZXktaW50LW1heCIpOwogICAgIEVuY29kZXJzOjpyZWdpc3RlckVuY29kZXIoT3BlbkgyNjQs
ICJvcGVuaDI2NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
ci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTZmNTVhMmQ1ZmEzYjA1NzhmNTQxODAyNmZmOTg1OThiZWRiYTU2
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0w
LDAgKzEsNzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVk
aW9EYXRhLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcjo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmIGF1ZGlv
VHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6QXVkaW8sIFdURk1vdmUoYXVkaW9UcmFja0lkKSkKKyAgICAsIFJlYWx0aW1lSW5jb21p
bmdTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIHN0YXJ0KCk7Cit9CisKK1JlYWx0aW1lSW5jb21p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcigpCit7CisgICAgc3RvcCgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBvcGVuVmFsdmUoKTsK
K30KKwordm9pZCBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9k
dWNpbmdEYXRhKCkKK3sKKyAgICBjbG9zZVZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
cjo6Y2FwYWJpbGl0aWVzKCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFi
aWxpdGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRp
bmdzKCkKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisKK3ZvaWQgUmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBsZShHUmVmUHRyPEdz
dFNhbXBsZT4mJiBnc3RTYW1wbGUpCit7CisgICAgYXV0byogYnVmZmVyID0gZ3N0X3NhbXBsZV9n
ZXRfYnVmZmVyKGdzdFNhbXBsZS5nZXQoKSk7CisgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbiBkZXNjcmlwdGlvbjsKKyAgICBHU3RyZWFtZXJBdWRpb0RhdGEgZnJhbWVzKFdURk1v
dmUoZ3N0U2FtcGxlKSwgZGVzY3JpcHRpb24uZ2V0SW5mbygpKTsKKworICAgIGF1ZGlvU2FtcGxl
c0F2YWlsYWJsZShNZWRpYVRpbWUoR1NUX1RJTUVfQVNfVVNFQ09ORFMoR1NUX0JVRkZFUl9QVFMo
YnVmZmVyKSksIEdfVVNFQ19QRVJfU0VDKSwgZnJhbWVzLCBkZXNjcmlwdGlvbiwgMCk7Cit9CisK
K30KKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjY2NjhkYjUzYmNmOWMxNmQzMDFiODE3MmU2OGIxOTE4OTA3ZmRhZWMKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NyBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyIDog
cHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2UsIHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNl
R1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcj4gY3JlYXRlKFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkgeyByZXR1cm4g
YWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92
ZShhdWRpb1RyYWNrSWQpKSk7IH0KKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lcihTdHJpbmcmJik7CisgICAgflJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcigpOworCitwcml2YXRlOgorICAgIC8vIFJlYWx0aW1lTWVkaWFTb3Vy
Y2UgQVBJCisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0
b3BQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNh
cGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGZpbmFsOworICAgIGJvb2wgaXNJbmNvbWluZ0F1
ZGlvU291cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gUmVhbHRp
bWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciBBUEkKKyAgICB2b2lkIGRpc3BhdGNoU2FtcGxlKEdS
ZWZQdHI8R3N0U2FtcGxlPiYmKSBmaW5hbDsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5ncyBtX2N1cnJlbnRTZXR0aW5nczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
U1BFQ0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6
OlJlYWx0aW1lTWVkaWFTb3VyY2UmIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmlzSW5jb21pbmdB
dWRpb1NvdXJjZSgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFs
dGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NGIxNjU0MmI3NzUx
MDJkMjZmMTVkMjBlNmZlZjVlMzNjOWVkZDcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3Vy
Y2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1
ZGUgIk1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5r
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK0dTVF9ERUJVR19DQVRFR09S
WV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRf
REVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1Nv
dXJjZUdTdHJlYW1lcigpCit7CisgICAgbV9iaW4gPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAg
ICBtX3ZhbHZlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOwor
ICAgIG1fdGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ0ZWUiLCBudWxscHRyKTsKKyAg
ICBnX29iamVjdF9zZXQobV90ZWUuZ2V0KCksICJhbGxvdy1ub3QtbGlua2VkIiwgdHJ1ZSwgbnVs
bHB0cik7CisKKyAgICBhdXRvKiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVl
dWUiLCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5n
ZXQoKSksIG1fdmFsdmUuZ2V0KCksIHF1ZXVlLCBtX3RlZS5nZXQoKSwgbnVsbHB0cik7CisKKyAg
ICBnc3RfZWxlbWVudF9saW5rX21hbnkobV92YWx2ZS5nZXQoKSwgcXVldWUsIG1fdGVlLmdldCgp
LCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fdmFs
dmUuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUp
OworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV90ZWUuZ2V0KCkpOwor
CisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KG1fdmFsdmUuZ2V0KCksICJzaW5rIikpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4u
Z2V0KCksIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgc2lua1BhZC5nZXQoKSkpOworfQorCit2
b2lkIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmNsb3NlVmFsdmUoKSBjb25zdAor
eworICAgIGlmIChtX3ZhbHZlKQorICAgICAgICBnX29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwg
ImRyb3AiLCB0cnVlLCBudWxscHRyKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nU291cmNl
R1N0cmVhbWVyOjpvcGVuVmFsdmUoKSBjb25zdAoreworICAgIGlmIChtX3ZhbHZlKQorICAgICAg
ICBnX29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3AiLCBmYWxzZSwgbnVsbHB0cik7Cit9
CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVnaXN0ZXJDbGllbnQo
KQoreworICAgIEdTVF9ERUJVRygiUmVnaXN0ZXJpbmcgbmV3IGNsaWVudCIpOworICAgIGF1dG8q
IHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAg
IGF1dG8qIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsiLCBudWxscHRy
KTsKKyAgICBnX29iamVjdF9zZXQoc2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAi
ZW1pdC1zaWduYWxzIiwgVFJVRSwgIm1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7CisgICAgZ19z
aWduYWxfY29ubmVjdF9zd2FwcGVkKHNpbmssICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSygrW10o
UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciogc2VsZiwgR3N0RWxlbWVudCogc2luaykg
LT4gR3N0Rmxvd1JldHVybiB7CisgICAgICAgIGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9h
cHBfc2lua19wdWxsX3NhbXBsZShHU1RfQVBQX1NJTksoc2luaykpKTsKKyAgICAgICAgc2VsZi0+
ZGlzcGF0Y2hTYW1wbGUoV1RGTW92ZShzYW1wbGUpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9X
X09LOworICAgIH0pLCB0aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChzaW5r
LCAibmV3LXByZXJvbGwiLCBHX0NBTExCQUNLKCtbXShSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyKiBzZWxmLCBHc3RFbGVtZW50KiBzaW5rKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAg
ICAgYXV0byBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1Rf
QVBQX1NJTksoc2luaykpKTsKKyAgICAgICAgc2VsZi0+ZGlzcGF0Y2hTYW1wbGUoV1RGTW92ZShz
YW1wbGUpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0pLCB0aGlzKTsKKwor
ICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgcXVldWUsIHNp
bmssIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX3RlZS5nZXQoKSwgcXVl
dWUsIHNpbmssIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJl
bnQocXVldWUpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc2luayk7
CisKKyAgICBhdXRvIGRvdEZpbGVOYW1lID0gbWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUobV9i
aW4uZ2V0KCkpLCAiLmluY29taW5nIik7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9X
SVRIX1RTKEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FM
TCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdT
b3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQ2
NGM0OTcwY2NiOGQxMWI3OWE1YzIwZDdmMTM1MmU2ZjRhZmJiMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUlu
Y29taW5nU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAg
ICBHc3RFbGVtZW50KiBiaW4oKSB7IHJldHVybiBtX2Jpbi5nZXQoKTsgfQorICAgIHZvaWQgcmVn
aXN0ZXJDbGllbnQoKTsKKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXIoKTsKKworICAgIHZvaWQgY2xvc2VWYWx2ZSgpIGNvbnN0OworICAgIHZvaWQgb3Bl
blZhbHZlKCkgY29uc3Q7CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmFsdmU7CisKK3By
aXZhdGU6CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxl
PiYmKSB7IH0KKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9iaW47CisgICAgR1JlZlB0cjxH
c3RFbGVtZW50PiBtX3RlZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4z
ZDY4ZWU1YjkxMjZiZTZlN2U4MDJmYjJiZDFjNmE4OTVjNGQ1MzdkCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJWaWRlb0ZyYW1lTWV0YWRhdGFHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvcnRwL3J0
cC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFN0cmluZyYm
IHZpZGVvVHJhY2tJZCkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZTo6VmlkZW8sIFdURk1vdmUodmlkZW9UcmFja0lkKSkKKyAgICAsIFJlYWx0aW1l
SW5jb21pbmdTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBw
b3J0ZWRDb25zdHJhaW50cyBjb25zdHJhaW50czsKKyAgICBjb25zdHJhaW50cy5zZXRTdXBwb3J0
c1dpZHRoKHRydWUpOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0KHRydWUpOwor
ICAgIG1fY3VycmVudFNldHRpbmdzID0gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHsgfTsK
KyAgICBtX2N1cnJlbnRTZXR0aW5ncy0+c2V0U3VwcG9ydGVkQ29uc3RyYWludHMoV1RGTW92ZShj
b25zdHJhaW50cykpOworCisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50
X2dldF9zdGF0aWNfcGFkKG1fdmFsdmUuZ2V0KCksICJzaW5rIikpOworICAgIGdzdF9wYWRfYWRk
X3Byb2JlKHNpbmtQYWQuZ2V0KCksIHN0YXRpY19jYXN0PEdzdFBhZFByb2JlVHlwZT4oR1NUX1BB
RF9QUk9CRV9UWVBFX0JVRkZFUiksIFtdKEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5mbywg
Z3BvaW50ZXIpIC0+IEdzdFBhZFByb2JlUmV0dXJuIHsKKyAgICAgICAgYXV0byB2aWRlb1NhbXBs
ZU1ldGFkYXRhID0gc3RkOjptYWtlX29wdGlvbmFsPFZpZGVvU2FtcGxlTWV0YWRhdGE+KHsgfSk7
CisgICAgICAgIHZpZGVvU2FtcGxlTWV0YWRhdGEtPnJlY2VpdmVUaW1lID0gTW9ub3RvbmljVGlt
ZTo6bm93KCkuc2Vjb25kc1NpbmNlRXBvY2goKTsKKworICAgICAgICBhdXRvKiBidWZmZXIgPSBH
U1RfQlVGRkVSX0NBU1QoR1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEoaW5mbykpOworICAgICAgICBH
c3RSVFBCdWZmZXIgcnRwQnVmZmVyIEdTVF9SVFBfQlVGRkVSX0lOSVQ7CisgICAgICAgIGlmIChn
c3RfcnRwX2J1ZmZlcl9tYXAoYnVmZmVyLCBHU1RfTUFQX1JFQUQsICZydHBCdWZmZXIpKSB7Cisg
ICAgICAgICAgICB2aWRlb1NhbXBsZU1ldGFkYXRhLT5ydHBUaW1lc3RhbXAgPSBnc3RfcnRwX2J1
ZmZlcl9nZXRfdGltZXN0YW1wKCZydHBCdWZmZXIpOworICAgICAgICAgICAgZ3N0X3J0cF9idWZm
ZXJfdW5tYXAoJnJ0cEJ1ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyID0gd2Via2l0
R3N0QnVmZmVyU2V0VmlkZW9TYW1wbGVNZXRhZGF0YShidWZmZXIsIFdURk1vdmUodmlkZW9TYW1w
bGVNZXRhZGF0YSkpOworICAgICAgICBHU1RfUEFEX1BST0JFX0lORk9fREFUQShpbmZvKSA9IGJ1
ZmZlcjsKKyAgICAgICAgcmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7CisgICAgfSwgbnVsbHB0ciwg
bnVsbHB0cik7CisKKyAgICBzdGFydCgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBvcGVuVmFsdmUo
KTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQ
cm9kdWNpbmdEYXRhKCkKK3sKKyAgICBjbG9zZVZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcjo6Y2FwYWJpbGl0aWVzKCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNh
cGFiaWxpdGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNl
dHRpbmdzKCkKK3sKKyAgICBpZiAobV9jdXJyZW50U2V0dGluZ3MpCisgICAgICAgIHJldHVybiBt
X2N1cnJlbnRTZXR0aW5ncy52YWx1ZSgpOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBv
cnRlZENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRz
V2lkdGgodHJ1ZSk7CisgICAgY29uc3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7CisK
KyAgICBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgYXV0byYgc2l6
ZSA9IHRoaXMtPnNpemUoKTsKKyAgICBzZXR0aW5ncy5zZXRXaWR0aChzaXplLndpZHRoKCkpOwor
ICAgIHNldHRpbmdzLnNldEhlaWdodChzaXplLmhlaWdodCgpKTsKKyAgICBzZXR0aW5ncy5zZXRT
dXBwb3J0ZWRDb25zdHJhaW50cyhjb25zdHJhaW50cyk7CisKKyAgICBtX2N1cnJlbnRTZXR0aW5n
cyA9IFdURk1vdmUoc2V0dGluZ3MpOworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5ncy52YWx1
ZSgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0
dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6Rmxh
Zz4gc2V0dGluZ3MpCit7CisgICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRpbWVN
ZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzOjpGbGFnOjpIZWlnaHQgfSkpCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0gc3RkOjpu
dWxsb3B0OworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6
ZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYgZ3N0U2FtcGxlKQoreworICAgIHZp
ZGVvU2FtcGxlQXZhaWxhYmxlKE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVXcmFwcGVkU2Ft
cGxlKGdzdFNhbXBsZSksIHsgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5
YmMzMDA2OWNkMzMyMDkyMzE4YmJmNzc4YWI5M2Q5MTg0ODMxZmIKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyIDogcHVibGljIFJl
YWx0aW1lTWVkaWFTb3VyY2UsIHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lcj4gY3JlYXRlKFN0cmluZyYmIHZpZGVvVHJhY2tJZCkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZSh2aWRlb1Ry
YWNrSWQpKSk7IH0KKyAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKCkg
PSBkZWZhdWx0OworCitwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
R1N0cmVhbWVyKFN0cmluZyYmKTsKKworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1lZGlhU291
cmNlIEFQSQorICAgIHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBz
dG9wUHJvZHVjaW5nRGF0YSgpICBmaW5hbDsKKyAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9w
dGlvblNldDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KSBmaW5hbDsKKyAgICBj
b25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBmaW5h
bDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgZmlu
YWw7CisgICAgYm9vbCBpc0luY29taW5nVmlkZW9Tb3VyY2UoKSBjb25zdCBmaW5hbCB7IHJldHVy
biB0cnVlOyB9CisKKyAgICAvLyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIEFQSQor
ICAgIHZvaWQgZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYpIGZpbmFsOworCisg
ICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNl
dHRpbmdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cikKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNv
dXJjZSYgc291cmNlKSB7IHJldHVybiBzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCk7IH0K
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2lu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iZWNkYzVhYmRlMmYxNGM4Mzcz
MzVkZjZiZGFmNTI2Njk3Mjg4YmZkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSw5NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNp
bmNsdWRlICJHU3RyZWFtZXJBdWRpb0NhcHR1cmVTb3VyY2UuaCIKKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRF
Uk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVM
VCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIHNvdXJjZSkK
KyAgICA6IFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpCit7CisgICAgbV9h
bGxvd2VkQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94
LXJ0cCIsICJtZWRpYSIsIEdfVFlQRV9TVFJJTkcsICJhdWRpbyIsCisgICAgICAgICJlbmNvZGlu
Zy1uYW1lIiwgR19UWVBFX1NUUklORywgIk9QVVMiLCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQs
IDQ4MDAwLCBudWxscHRyKSk7CisKKyAgICBtX2F1ZGlvY29udmVydCA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgbnVsbHB0cik7CisgICAgbV9hdWRpb3Jlc2FtcGxl
ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb3Jlc2FtcGxlIiwgbnVsbHB0cik7CisK
KyAgICBtX2VuY29kZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgib3B1c2VuYyIsIG51bGxwdHIp
OworICAgIGlmICghbV9lbmNvZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBGSVhNRTog
RW5hYmxlIGR0eCB0b28/CisgICAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1QobV9l
bmNvZGVyLmdldCgpKSwgImF1ZGlvLXR5cGUiLCAidm9pY2UiKTsKKworICAgIG1fcGF5bG9hZGVy
ID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoInJ0cG9wdXNwYXkiLCBudWxscHRyKTsKKyAgICBpZiAo
IW1fcGF5bG9hZGVyKQorICAgICAgICByZXR1cm47CisKKyAgICBnX29iamVjdF9zZXQobV9wYXls
b2FkZXIuZ2V0KCksICJhdXRvLWhlYWRlci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisK
KyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fYXVkaW9j
b252ZXJ0LmdldCgpLCBtX2F1ZGlvcmVzYW1wbGUuZ2V0KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9w
YXlsb2FkZXIuZ2V0KCksIG51bGxwdHIpOworICAgIHNldFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkp
OworfQorCitib29sIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5
bG9hZFR5cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcykKK3sKKyAgICBHU1RfREVCVUdf
T0JKRUNUKG1fYmluLmdldCgpLCAiT3V0Z29pbmcgYXVkaW8gc291cmNlIHBheWxvYWQgY2Fwczog
JSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAgIGF1dG8qIHN0cnVjdHVyZSA9IGdz
dF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgMCk7CisgICAgaWYgKGNvbnN0IGNoYXIq
IGVuY29kaW5nTmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJlbmNv
ZGluZy1uYW1lIikpIHsKKyAgICAgICAgaWYgKCFlcXVhbChlbmNvZGluZ05hbWUsICJPUFVTIikp
IHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJVbnN1cHBvcnRl
ZCBvdXRnb2luZyBhdWRpbyBlbmNvZGluZzogJXMiLCBlbmNvZGluZ05hbWUpOworICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0VS
Uk9SX09CSkVDVChtX2Jpbi5nZXQoKSwgImVuY29kaW5nLW5hbWUgbm90IGZvdW5kIik7CisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBpZiAoY29uc3QgY2hhciogdXNlSW5iYW5k
RmVjID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgInVzZWluYmFuZGZlYyIp
KSB7CisgICAgICAgIGlmICghc3RyY21wKHVzZUluYmFuZEZlYywgIjEiKSkKKyAgICAgICAgICAg
IGdfb2JqZWN0X3NldChtX2VuY29kZXIuZ2V0KCksICJpbmJhbmQtZmVjIiwgdHJ1ZSwgbnVsbHB0
cik7CisgICAgfQorCisgICAgaWYgKGNvbnN0IGNoYXIqIG1pblBUaW1lID0gZ3N0X3N0cnVjdHVy
ZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm1pbnB0aW1lIikpIHsKKyAgICAgICAgU3RyaW5nIHRp
bWUobWluUFRpbWUpOworICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlckFsbG93
aW5nVHJhaWxpbmdKdW5rPGludDY0X3Q+KHRpbWUpKQorICAgICAgICAgICAgZ19vYmplY3Rfc2V0
KG1fcGF5bG9hZGVyLmdldCgpLCAibWluLXB0aW1lIiwgKnZhbHVlICogR1NUX01TRUNPTkQsIG51
bGxwdHIpOworICAgIH0KKworICAgIGludCBwYXlsb2FkVHlwZTsKKyAgICBpZiAoZ3N0X3N0cnVj
dHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgInBheWxvYWQiLCAmcGF5bG9hZFR5cGUpKQorICAgICAg
ICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJwdCIsIHBheWxvYWRUeXBlLCBudWxs
cHRyKTsKKworICAgIGdfb2JqZWN0X3NldChtX2NhcHNGaWx0ZXIuZ2V0KCksICJjYXBzIiwgY2Fw
cy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBnc3RfZWxlbWVudF9saW5rX21hbnkobV9vdXRnb2lu
Z1NvdXJjZS5nZXQoKSwgbV92YWx2ZS5nZXQoKSwgbV9hdWRpb2NvbnZlcnQuZ2V0KCksIG1fYXVk
aW9yZXNhbXBsZS5nZXQoKSwgbV9wcmVFbmNvZGVyUXVldWUuZ2V0KCksIG1fZW5jb2Rlci5nZXQo
KSwgbV9wYXlsb2FkZXIuZ2V0KCksIG1fcG9zdEVuY29kZXJRdWV1ZS5nZXQoKSwgbnVsbHB0cik7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxOTAy
YjVmNjkxNDI1NDhiYTE3YzcwNjM0NzY4ZWU1YWM5YjViYTEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRn
b2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lciBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlR1N0cmVhbWVyPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIGF1
ZGlvU291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcihXVEZNb3ZlKGF1ZGlvU291cmNlKSkpOyB9CisKKyAgICBib29sIHNldFBh
eWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsKKworcHJvdGVjdGVkOgor
ICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxl
bWVudD4gbV9hdWRpb2NvbnZlcnQ7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2F1ZGlvcmVz
YW1wbGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjI2NzIwYjJiNGJj
MDg4MjcyNTgzYzA1ZTgzMjIyMjQyMjVmNmFjYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTQ5IEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lck1l
ZGlhU3RyZWFtU291cmNlLmgiCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNs
dWRlIDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisK
K0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7
CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIG1fYmlu
ID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7CisKKyAgICBtX3ZhbHZlID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAgIG1fcHJlRW5jb2RlclF1ZXVlID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIG1fcG9zdEVuY29k
ZXJRdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxscHRyKTsKKyAg
ICBtX2NhcHNGaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBu
dWxscHRyKTsKKworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgp
KSwgbV92YWx2ZS5nZXQoKSwgbV9wcmVFbmNvZGVyUXVldWUuZ2V0KCksCisgICAgICAgIG1fcG9z
dEVuY29kZXJRdWV1ZS5nZXQoKSwgbV9jYXBzRmlsdGVyLmdldCgpLCBudWxscHRyKTsKKworICAg
IGF1dG8gc3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fY2Fw
c0ZpbHRlci5nZXQoKSwgInNyYyIpKTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKG1fYmluLmdl
dCgpLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgc3JjUGFkLmdldCgpKSk7Cit9CisKK1JlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcigpCit7CisgICAgc3RvcCgpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0
YXRlKG1fYmluLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisgICAgaWYgKGF1dG8gcGlwZWxpbmUg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3BhcmVudChtX2Jpbi5nZXQoKSkpKQorICAgICAg
ICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NBU1QocGlwZWxpbmUuZ2V0KCkpLCBtX2Jpbi5nZXQo
KSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRT
b3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKK3sKKyAgICBp
ZiAobV9zb3VyY2UgJiYgIW1faW5pdGlhbFNldHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0
aW5ncyA9IG1fc291cmNlLnZhbHVlKCktPnNldHRpbmdzKCk7CisKKyAgICBpZiAobV9zb3VyY2Up
CisgICAgICAgIG1fc291cmNlLnZhbHVlKCktPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBt
X3NvdXJjZSA9IFdURk1vdmUobmV3U291cmNlKTsKKyAgICBpbml0aWFsaXplRnJvbVRyYWNrKCk7
Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzdGFydCgp
Cit7CisgICAgbV9zb3VyY2UudmFsdWUoKS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1faXNT
dG9wcGVkID0gZmFsc2U7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyOjpzdG9wKCkKK3sKKyAgICBpZiAobV9zb3VyY2UpIHsKKyAgICAgICAgbV9zb3VyY2Uu
dmFsdWUoKS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgICAgICBnc3RfZWxlbWVudF9zZW5k
X2V2ZW50KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIGdzdF9ldmVudF9uZXdfZW9zKCkpOworCisg
ICAgICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9iaW4uZ2V0KCksIHRydWUpOwor
ICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSwgR1NU
X1NUQVRFX05VTEwpOworCisgICAgICAgIGlmIChtX3dlYnJ0Y1NpbmtQYWQpIHsKKyAgICAgICAg
ICAgIGF1dG8gc3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1f
YmluLmdldCgpLCAic3JjIikpOworICAgICAgICAgICAgZ3N0X3BhZF91bmxpbmsoc3JjUGFkLmdl
dCgpLCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworCisgICAgICAgICAgICBhdXRvIHBhcmVudCA9
IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wYXJlbnRfZWxlbWVudChtX3dlYnJ0Y1NpbmtQYWQuZ2V0
KCkpKTsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocGFyZW50LmdldCgpLCAiUmVtb3Zp
bmcgcGFkICUiIEdTVF9QVFJfRk9STUFULCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworICAgICAg
ICAgICAgZ3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZChwYXJlbnQuZ2V0KCksIG1fd2Vi
cnRjU2lua1BhZC5nZXQoKSk7CisgICAgICAgIH0KKworICAgICAgICBnc3RfZWxlbWVudF9zZXRf
bG9ja2VkX3N0YXRlKG1fYmluLmdldCgpLCBmYWxzZSk7CisgICAgICAgIG1fc291cmNlLnJlc2V0
KCk7CisgICAgfQorICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsKK30KKwordm9pZCBSZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZU11dGVkQ2hhbmdlZCgpCit7CisgICAg
aWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuOworICAgIEFTU0VSVChtX211dGVkICE9IG1f
c291cmNlLnZhbHVlKCktPm11dGVkKCkpOworICAgIG1fbXV0ZWQgPSBtX3NvdXJjZS52YWx1ZSgp
LT5tdXRlZCgpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1l
cjo6c291cmNlRW5hYmxlZENoYW5nZWQoKQoreworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAg
IHJldHVybjsKKworICAgIG1fZW5hYmxlZCA9IG1fc291cmNlLnZhbHVlKCktPmVuYWJsZWQoKTsK
KyAgICBpZiAobV92YWx2ZSkKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fdmFsdmUuZ2V0KCksICJk
cm9wIiwgIW1fZW5hYmxlZCwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyOjppbml0aWFsaXplRnJvbVRyYWNrKCkKK3sKKyAgICBtX211dGVk
ID0gbV9zb3VyY2UudmFsdWUoKS0+bXV0ZWQoKTsKKyAgICBtX2VuYWJsZWQgPSBtX3NvdXJjZS52
YWx1ZSgpLT5lbmFibGVkKCk7CisgICAgbV9vdXRnb2luZ1NvdXJjZSA9IHdlYmtpdE1lZGlhU3Ry
ZWFtU3JjTmV3KCk7CisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwg
bV9vdXRnb2luZ1NvdXJjZS5nZXQoKSk7CisgICAgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFj
ayhXRUJLSVRfTUVESUFfU1RSRUFNX1NSQyhtX291dGdvaW5nU291cmNlLmdldCgpKSwgbV9zb3Vy
Y2UtPnB0cigpLCB0cnVlKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXI6OmxpbmsoKQoreworICAgIGdzdF9lbGVtZW50X2xpbmsobV9wb3N0RW5jb2RlclF1
ZXVlLmdldCgpLCBtX2NhcHNGaWx0ZXIuZ2V0KCkpOworCisgICAgYXV0byBzcmNQYWQgPSBhZG9w
dEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9iaW4uZ2V0KCksICJzcmMiKSk7Cisg
ICAgZ3N0X3BhZF9saW5rKHNyY1BhZC5nZXQoKSwgbV93ZWJydGNTaW5rUGFkLmdldCgpKTsKKyAg
ICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fYmluLmdldCgpKTsKK30KKwor
dm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFNpbmtQYWQoY29u
c3QgR1JlZlB0cjxHc3RQYWQ+JiBwYWQpCit7CisgICAgbV93ZWJydGNTaW5rUGFkID0gcGFkOwor
ICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHRyYW5zY2VpdmVyOworICAgIGdf
b2JqZWN0X2dldChtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCksICJ0cmFuc2NlaXZlciIsICZ0cmFuc2Nl
aXZlci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgZ19vYmplY3RfZ2V0KHRyYW5zY2VpdmVyLmdl
dCgpLCAic2VuZGVyIiwgJm1fc2VuZGVyLm91dFB0cigpLCBudWxscHRyKTsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uYjNlYWJhOTk0OTZiNDE2YmNhMmM3YjU1YzFmODZmODhiMGQz
OTEzMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaApAQCAt
MCwwICsxLDg1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJl
YW1lci5oIgorI2luY2x1ZGUgIk1lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmgiCisjaW5jbHVkZSA8
d3RmL1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyIDogcHVibGljIFRocmVhZFNh
ZmVSZWZDb3VudGVkPFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcj4sIHB1Ymxp
YyBNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6T2JzZXJ2ZXIgeworcHVibGljOgorICAgIH5SZWFs
dGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKKworICAgIHZvaWQgc3RhcnQoKTsK
KyAgICB2b2lkIHN0b3AoKTsKKyAgICB2b2lkIHNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU+JiYpOworICAgIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJiBzb3VyY2UoKSBjb25z
dCB7IHJldHVybiBtX3NvdXJjZS0+Z2V0KCk7IH0KKworICAgIGNvbnN0IEdSZWZQdHI8R3N0Q2Fw
cz4mIGFsbG93ZWRDYXBzKCkgY29uc3QgeyByZXR1cm4gbV9hbGxvd2VkQ2FwczsgfQorCisgICAg
dm9pZCBsaW5rKCk7CisgICAgY29uc3QgR1JlZlB0cjxHc3RQYWQ+JiBwYWQoKSBjb25zdCB7IHJl
dHVybiBtX3dlYnJ0Y1NpbmtQYWQ7IH0KKyAgICB2b2lkIHNldFNpbmtQYWQoY29uc3QgR1JlZlB0
cjxHc3RQYWQ+Jik7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVyKCkg
Y29uc3QgeyByZXR1cm4gbV9zZW5kZXI7IH0KKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGJpbigp
IGNvbnN0IHsgcmV0dXJuIG1fYmluOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2V0UGF5bG9hZFR5
cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3Rl
ZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsK
KworICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21UcmFjaygpOworCisgICAgYm9vbCBtX2VuYWJsZWQg
eyB0cnVlIH07CisgICAgYm9vbCBtX211dGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNTdG9w
cGVkIHsgZmFsc2UgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZT4+IG1fc291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzPiBtX2luaXRpYWxTZXR0aW5nczsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYmlu
OworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9vdXRnb2luZ1NvdXJjZTsKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fdmFsdmU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ByZUVuY29k
ZXJRdWV1ZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZW5jb2RlcjsKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fcGF5bG9hZGVyOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9wb3N0
RW5jb2RlclF1ZXVlOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9jYXBzRmlsdGVyOworICAg
IEdSZWZQdHI8R3N0Q2Fwcz4gbV9hbGxvd2VkQ2FwczsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JU
UFNlbmRlcj4gbV9zZW5kZXI7CisgICAgR1JlZlB0cjxHc3RQYWQ+IG1fd2VicnRjU2lua1BhZDsK
KworcHJpdmF0ZToKKyAgICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOworICAgIHZvaWQgc291
cmNlRW5hYmxlZENoYW5nZWQoKTsKKworICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpP
YnNlcnZlciBBUEkKKyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlJikgb3ZlcnJpZGUgeyBzb3VyY2VNdXRlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJh
Y2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgc291
cmNlRW5hYmxlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVk
aWFTdHJlYW1UcmFja1ByaXZhdGUmKSBvdmVycmlkZSB7IGluaXRpYWxpemVGcm9tVHJhY2soKTsg
fQorICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRl
IHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiOGY2MzRiMjM0MDA3
YjFlOTYwYmJhMWU1NjczOTNmNjEyY2YyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKworR1NUX0RFQlVH
X0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUg
R1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+JiYgc291cmNlKQorICAgIDogUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
KCkKK3sKKyAgICByZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CisKKyAgICBtX3Zp
ZGVvQ29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252ZXJ0IiwgbnVs
bHB0cik7CisgICAgbV9lbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3ZWJydGN2
aWRlb2VuY29kZXIiLCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FT
VChtX2Jpbi5nZXQoKSksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX2VuY29kZXIuZ2V0KCksIG51
bGxwdHIpOworCisgICAgYXV0byogcGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9nZXRfcGFkX3Rl
bXBsYXRlKG1fZW5jb2Rlci5nZXQoKSwgInNyYyIpOworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1Jl
Zihnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzKHBhZFRlbXBsYXRlKSk7CisgICAgbV9hbGxvd2Vk
Q2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZ3N0X2NhcHNfZm9y
ZWFjaChjYXBzLmdldCgpLCByZWludGVycHJldF9jYXN0PEdzdENhcHNGb3JlYWNoRnVuYz4oK1td
KEdzdENhcHNGZWF0dXJlcyosIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9pbnRlciB1c2Vy
RGF0YSkgeworICAgICAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAgY29uc3Qg
Y2hhciogbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKKyAgICAgICAg
Y29uc3QgY2hhciogZW5jb2RpbmdOYW1lID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGVxdWFsKG5h
bWUsICJ2aWRlby94LXZwOCIpKQorICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIlZQOCI7Cisg
ICAgICAgIGVsc2UgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LXZwOSIpKQorICAgICAgICAgICAg
ZW5jb2RpbmdOYW1lID0gIlZQOSI7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsKG5hbWUsICJ2aWRl
by94LWgyNjQiKSkKKyAgICAgICAgICAgIGVuY29kaW5nTmFtZSA9ICJIMjY0IjsKKyAgICAgICAg
aWYgKGVuY29kaW5nTmFtZSkKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUo
c291cmNlLT5tX2FsbG93ZWRDYXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGljYXRp
b24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAidmlkZW8iLCAiZW5jb2RpbmctbmFt
ZSIsIEdfVFlQRV9TVFJJTkcsIGVuY29kaW5nTmFtZSwgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5U
LCA5MDAwMCwgbnVsbHB0cikpOworICAgIH0pLCB0aGlzKTsKKworICAgIHNldFNvdXJjZShXVEZN
b3ZlKHNvdXJjZSkpOworfQorCitib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcjo6c2V0UGF5bG9hZFR5cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcykKK3sKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fYmluLmdldCgpLCAiT3V0Z29pbmcgdmlkZW8gc291cmNlIHBh
eWxvYWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAgIGF1dG8qIHN0
cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgMCk7CisgICAgR1Jl
ZlB0cjxHc3RDYXBzPiBlbmNvZGVyQ2FwczsKKyAgICBpZiAoY29uc3QgY2hhciogZW5jb2RpbmdO
YW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImVuY29kaW5nLW5hbWUi
KSkgeworICAgICAgICBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiVlA4IikpIHsKKyAgICAgICAg
ICAgIGVuY29kZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZp
ZGVvL3gtdnA4IikpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxl
bWVudCgicnRwdnA4cGF5IiwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5j
b2RpbmdOYW1lLCAiVlA5IikpIHsKKyAgICAgICAgICAgIGVuY29kZXJDYXBzID0gYWRvcHRHUmVm
KGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtdnA5IikpOworICAgICAgICAgICAg
bV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwdnA5cGF5IiwgbnVsbHB0cik7
CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiSDI2NCIpKSB7CisgICAg
ICAgICAgICBlbmNvZGVyQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxl
KCJ2aWRlby94LWgyNjQiKSk7CisgICAgICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFt
ZXJFbGVtZW50KCJydHBoMjY0cGF5IiwgbnVsbHB0cik7CisgICAgICAgICAgICAvLyBGSVhNRTog
aHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1nb29k
Ly0vaXNzdWVzLzg5MworICAgICAgICAgICAgLy8gZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19P
QkpFQ1QobV9wYXlsb2FkZXIuZ2V0KCkpLCAiYWdncmVnYXRlLW1vZGUiLCAiemVyby1sYXRlbmN5
Iik7CisgICAgICAgICAgICAvLyBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJjb25m
aWctaW50ZXJ2YWwiLCAtMSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBHU1RfRVJST1JfT0JKRUNUKG1fYmluLmdldCgpLCAiVW5zdXBwb3J0ZWQgb3V0Z29pbmcgdmlk
ZW8gZW5jb2Rpbmc6ICVzIiwgZW5jb2RpbmdOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9i
aW4uZ2V0KCksICJlbmNvZGluZy1uYW1lIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgfQorCisgICAgaWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgLy8gRklYTUU6IFJlLWVuYWJsZSB0aGlzLiBDdXJyZW50bHkgdHJpZ2dlcnMgY2Fw
cyBuZWdvdGlhdGlvbiBlcnJvci4KKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCks
ICJhdXRvLWhlYWRlci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBnX29iamVj
dF9zZXQobV9lbmNvZGVyLmdldCgpLCAiZm9ybWF0IiwgZW5jb2RlckNhcHMuZ2V0KCksIG51bGxw
dHIpOworCisgICAgaW50IHBheWxvYWRUeXBlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9p
bnQoc3RydWN0dXJlLCAicGF5bG9hZCIsICZwYXlsb2FkVHlwZSkpCisgICAgICAgIGdfb2JqZWN0
X3NldChtX3BheWxvYWRlci5nZXQoKSwgInB0IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIpOworCisg
ICAgYXV0byBmaWx0ZXJlZENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwoZ3N0X3N0
cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSksIG51bGxwdHIpKTsKKyAgICBnX29iamVjdF9zZXQobV9j
YXBzRmlsdGVyLmdldCgpLCAiY2FwcyIsIGZpbHRlcmVkQ2Fwcy5nZXQoKSwgbnVsbHB0cik7CisK
KyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3BheWxvYWRlci5n
ZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCks
IG1fdmFsdmUuZ2V0KCksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX3ByZUVuY29kZXJRdWV1ZS5n
ZXQoKSwKKyAgICAgICAgbV9lbmNvZGVyLmdldCgpLCBtX3BheWxvYWRlci5nZXQoKSwgbV9wb3N0
RW5jb2RlclF1ZXVlLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
R1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE1MWZkY2EwMjMzMjI0NWFjYzlhZmYyMTVkMjk1MGQx
ZWY1MzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaApA
QCAtMCwwICsxLDQ3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyIGZpbmFsIDogcHVibGlj
IFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAgc3Rh
dGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+IGNyZWF0ZShSZWY8
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3
IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKHNvdXJjZSkpKTsg
fQorCisgICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikg
eyBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9CisKKyAgICBi
b29sIHNldFBheWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsKKworcHJv
dGVjdGVkOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCisgICAgYm9vbCBtX3Nob3VsZEFw
cGx5Um90YXRpb24geyBmYWxzZSB9OworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVu
dD4gbV92aWRlb0NvbnZlcnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rl
c3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNw
cAppbmRleCBkNTJmNzliZjI3ZGNjODZiM2E1OGY0MDc5MzA5ZTEwYjY2ZTg5ZmFjLi4zOGE2YmFk
MGNjZDNiZTNhMDk3OWYwN2RlZjhjMDU1NzA5NTczMDVjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCkBAIC01OTksNiArNTk5LDkgQEAgdm9pZCBJbnRlcm5hbHM6OnJlc2V0VG9D
b25zaXN0ZW50U3RhdGUoUGFnZSYgcGFnZSkKICAgICBydGNQcm92aWRlci5zZXRIMjY1U3VwcG9y
dCh0cnVlKTsKICAgICBydGNQcm92aWRlci5zZXRWUDlTdXBwb3J0KHRydWUsIHRydWUpOwogICAg
IHJ0Y1Byb3ZpZGVyLmNsZWFyRmFjdG9yeSgpOworI2VsaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisgICAgcGFnZS5zZXR0aW5ncygpLnNldFdlYlJUQ0VuY3J5cHRpb25FbmFibGVkKHRydWUpOwor
ICAgIHBhZ2Uuc2V0dGluZ3MoKS5zZXRQZWVyQ29ubmVjdGlvbkVuYWJsZWQodHJ1ZSk7CiAjZW5k
aWYKIAogICAgIHBhZ2Uuc2V0RnVsbHNjcmVlbkF1dG9IaWRlRHVyYXRpb24oMF9zKTsKQEAgLTE2
MTUsNiArMTYxOCw3IEBAIHZvaWQgSW50ZXJuYWxzOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdW
aWRlb1NvdXJjZXMoUlRDUGVlckNvbm5lY3Rpb24mIGNvbm5lY3RpCiB7CiAgICAgY29ubmVjdGlv
bi5hcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKTsKIH0KKwogdm9pZCBJbnRl
cm5hbHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KGJvb2wgdmFsdWUpCiB7CiAjaWYgVVNFKExJQldF
QlJUQykKQEAgLTE2MjIsNiArMTYyNiw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRXZWJSVENIMjY1
U3VwcG9ydChib29sIHZhbHVlKQogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLnNl
dEgyNjVTdXBwb3J0KHZhbHVlKTsKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5j
bGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAj
ZW5kaWYKIH0KIApAQCAtMTYzMiw2ICsxNjM4LDkgQEAgdm9pZCBJbnRlcm5hbHM6OnNldFdlYlJU
Q1ZQOVN1cHBvcnQoYm9vbCBzdXBwb3J0VlA5UHJvZmlsZTAsIGJvb2wgc3VwcG9ydFZQOVByb2YK
ICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRWUDlTdXBwb3J0KHN1cHBvcnRW
UDlQcm9maWxlMCwgc3VwcG9ydFZQOVByb2ZpbGUyKTsKICAgICAgICAgcGFnZS0+bGliV2ViUlRD
UHJvdmlkZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJB
TShzdXBwb3J0VlA5UHJvZmlsZTApOworICAgIFVOVVNFRF9QQVJBTShzdXBwb3J0VlA5UHJvZmls
ZTIpOwogI2VuZGlmCiB9CiAKQEAgLTE2NDIsNiArMTY1MSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpz
ZXRXZWJSVENWUDlWVEJTdXBwb3J0KGJvb2wgdmFsdWUpCiAgICAgICAgIHBhZ2UtPmxpYldlYlJU
Q1Byb3ZpZGVyKCkuc2V0VlA5VlRCU3VwcG9ydCh2YWx1ZSk7CiAgICAgICAgIHBhZ2UtPmxpYldl
YlJUQ1Byb3ZpZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAgICAgfQorI2Vsc2UKKyAgICBVTlVTRURf
UEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2ODIsNiArMTY5Myw4IEBAIHZvaWQgSW50
ZXJuYWxzOjpzZXRFbmFibGVXZWJSVENFbmNyeXB0aW9uKGJvb2wgdmFsdWUpCiAjaWYgVVNFKExJ
QldFQlJUQykKICAgICBpZiAoYXV0byogcGFnZSA9IGNvbnRleHREb2N1bWVudCgpLT5wYWdlKCkp
CiAgICAgICAgIHBhZ2UtPnNldHRpbmdzKCkuc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQodmFs
dWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2
OTIsNiArMTcwNSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRVc2VEVExTMTAoYm9vbCB1c2VEVExT
MTApCiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAgcmV0
dXJuOwogICAgIGRvY3VtZW50LT5wYWdlKCktPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0VXNlRFRM
UzEwKHVzZURUTFMxMCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1c2VEVExTMTApOwogI2Vu
ZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNtYWtlIGIv
U291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKaW5kZXggOWQ5N2E0YjUwY2IwZjk4MGY1
Yjg0MDU3YzJiYWVlODk5Nzk5ZGY2Ni4uNDg2MjU1N2E5OWIzNTkyZTAwMTllNzZiMjhhZTU1MWFj
ZDg5NDVmMiAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKKysr
IGIvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKQEAgLTI2LDYgKzI2LDkgQEAKICMg
IGdzdHJlYW1lci12aWRlbzogICAgICBHU1RSRUFNRVJfVklERU9fSU5DTFVERV9ESVJTIGFuZCBH
U1RSRUFNRVJfVklERU9fTElCUkFSSUVTCiAjICBnc3RyZWFtZXItY29kZWNwYXJzZXI6R1NUUkVB
TUVSX0NPREVDUEFSU0VSU19JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9DT0RFQ1BBUlNFUlNf
TElCUkFSSUVTCiAjICBnc3RyZWFtZXItZnVsbDogICAgICAgR1NUUkVBTUVSX0ZVTExfSU5DTFVE
RV9ESVJTIGFuZCBHU1RSRUFNRVJfRlVMTF9MSUJSQVJJRVMKKyMgIGdzdHJlYW1lci1ydHA6ICAg
ICAgICBHU1RSRUFNRVJfUlRQX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1JUUF9MSUJSQVJJ
RVMKKyMgIGdzdHJlYW1lci1zZHA6ICAgICAgICBHU1RSRUFNRVJfU0RQX0lOQ0xVREVfRElSUyBh
bmQgR1NUUkVBTUVSX1NEUF9MSUJSQVJJRVMKKyMgIGdzdHJlYW1lci13ZWJydGM6ICAgICBHU1RS
RUFNRVJfV0VCUlRDX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1dFQlJUQ19MSUJSQVJJRVMK
ICMKICMgQ29weXJpZ2h0IChDKSAyMDEyIFJhcGhhZWwgS3VibyBkYSBDb3N0YSA8cmFrdWNvQHdl
YmtpdC5vcmc+CiAjCkBAIC0xMDYsNiArMTA5LDkgQEAgRklORF9HU1RSRUFNRVJfQ09NUE9ORU5U
KEdTVFJFQU1FUl9QQlVUSUxTIGdzdHJlYW1lci1wYnV0aWxzLTEuMCBnc3RwYnV0aWxzLTEuMCkK
IEZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVEFHIGdzdHJlYW1lci10YWctMS4w
IGdzdHRhZy0xLjApCiBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX1ZJREVPIGdz
dHJlYW1lci12aWRlby0xLjAgZ3N0dmlkZW8tMS4wKQogRklORF9HU1RSRUFNRVJfQ09NUE9ORU5U
KEdTVFJFQU1FUl9DT0RFQ1BBUlNFUlMgZ3N0cmVhbWVyLWNvZGVjcGFyc2Vycy0xLjAgZ3N0Y29k
ZWNwYXJzZXJzLTEuMCkKK0ZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfUlRQIGdz
dHJlYW1lci1ydHAtMS4wIGdzdHJ0cC0xLjApCitGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NU
UkVBTUVSX1NEUCBnc3RyZWFtZXItc2RwLTEuMCBnc3RzZHAtMS4wKQorRklORF9HU1RSRUFNRVJf
Q09NUE9ORU5UKEdTVFJFQU1FUl9XRUJSVEMgZ3N0cmVhbWVyLXdlYnJ0Yy0xLjAgZ3N0d2VicnRj
LTEuMCkKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0KICMgMy4gUHJvY2VzcyB0aGUgQ09NUE9ORU5UUyBwYXNzZWQgdG8gRklORF9QQUNLQUdFCkBA
IC0xNDgsNCArMTU0LDYgQEAgbWFya19hc19hZHZhbmNlZCgKICAgICBHU1RSRUFNRVJfQ09ERUNQ
QVJTRVJTX0xJQlJBUklFUwogICAgIEdTVFJFQU1FUl9GVUxMX0lOQ0xVREVfRElSUwogICAgIEdT
VFJFQU1FUl9GVUxMX0xJQlJBUklFUworICAgIEdTVFJFQU1FUl9XRUJSVENfSU5DTFVERV9ESVJT
CisgICAgR1NUUkVBTUVSX1dFQlJUQ19MSUJSQVJJRVMKICkKZGlmZiAtLWdpdCBhL1NvdXJjZS9j
bWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tz
LmNtYWtlCmluZGV4IDc3ZTk1ODQ1ZTk5MTNhNTk3OGRhZDEwY2ZjNDMwMDkzYjQzYzdhYTMuLmM4
ZDBmYWZiMjNmYjE4ZmM1OWI5MWUwY2UwNGMxNGVlNDU5YjI0NzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0dTdHJlYW1l
ckNoZWNrcy5jbWFrZQpAQCAtMjgsNiArMjgsMTAgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFC
TEVfV0VCX0FVRElPKQogICAgICAgICAgICAgICBsaXN0KEFQUEVORCBHU1RSRUFNRVJfQ09NUE9O
RU5UUyBhdWRpbyBmZnQpCiAgICAgICAgICAgZW5kaWYgKCkKIAorICAgICAgICAgIGlmIChVU0Vf
R1NUUkVBTUVSX1dFQl9SVEMpCisgICAgICAgICAgICAgIGxpc3QoQVBQRU5EIEdTVFJFQU1FUl9D
T01QT05FTlRTIHdlYnJ0YykKKyAgICAgICAgICBlbmRpZiAoKQorCiAgICAgICAgICAgZmluZF9w
YWNrYWdlKEdTdHJlYW1lciAxLjE0LjAgUkVRVUlSRUQgQ09NUE9ORU5UUyAke0dTVFJFQU1FUl9D
T01QT05FTlRTfSkKIAogICAgICAgICAgIGlmIChFTkFCTEVfV0VCX0FVRElPKQpAQCAtNDksMTEg
KzUzLDIxIEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAg
ICBpZiAoVVNFX0dTVFJFQU1FUl9HTCBBTkQgTk9UIFBDX0dTVFJFQU1FUl9HTF9GT1VORCkKICAg
ICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiR1N0cmVhbWVyR0wgaXMgbmVlZGVkIGZv
ciBVU0VfR1NUUkVBTUVSX0dMLiIpCiAgICAgICAgICAgZW5kaWYgKCkKKworICAgICAgICAgIGlm
IChVU0VfR1NUUkVBTUVSX1dFQlJUQyBBTkQgKFBDX0dTVFJFQU1FUl9WRVJTSU9OIFZFUlNJT05f
TEVTUyAiMS4yMCIgT1IgTk9UIFBDX0dTVFJFQU1FUl9XRUJSVENfRk9VTkQpKQorICAgICAgICAg
ICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJHU3RyZWFtZXJXZWJSVEMgPj0gMS4yMCBpcyBuZWVk
ZWQgZm9yIFVTRV9HU1RSRUFNRVJfV0VCUlRDLiIpCisgICAgICAgICAgZW5kaWYgKCkKICAgICAg
IGVuZGlmICgpCiBlbmRpZiAoKQogCiBpZiAoRU5BQkxFX01FRElBX1NUUkVBTSBBTkQgRU5BQkxF
X1dFQl9SVEMpCi0gICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0xJQldFQlJUQyBUUlVF
KQorICAgIGlmIChVU0VfR1NUUkVBTUVSX1dFQlJUQykKKyAgICAgICAgU0VUX0FORF9FWFBPU0Vf
VE9fQlVJTEQoVVNFX0xJQldFQlJUQyBGQUxTRSkKKworICAgICAgICBmaW5kX3BhY2thZ2UoT3Bl
blNTTCBSRVFVSVJFRCkKKyAgICBlbHNlICgpCisgICAgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFVTRV9MSUJXRUJSVEMgVFJVRSkKKyAgICBlbmRpZiAoKQogZWxzZSAoKQogICAgIFNFVF9B
TkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJSVEMgRkFMU0UpCiBlbmRpZiAoKQpkaWZmIC0t
Z2l0IGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlIGIvU291cmNlL2Nt
YWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlCmluZGV4IDFmMWEyMTNjMjEwMTBkMzJhY2Mx
N2ZiOTFjYjUyMGMxYmQyMzhlYWIuLjJmMzAwYTA3MDY0ODkxZjY3NmVjYWM1ZDJlYWZkN2NjODU2
ODkyOTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFr
ZQorKysgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UKQEAgLTEwLDMg
KzEwLDQgQEAgV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9GVUxMICJXaGV0aGVy
IHRvIGVuYWJsZSBzdXBwb3J0IGZvciBzdGF0aWMgR1MKIFdFQktJVF9PUFRJT05fREVGSU5FKFVT
RV9HU1RSRUFNRVJfTkFUSVZFX1ZJREVPICJUb2dnbGUgbmF0aXZlIHZpZGVvIHN1cHBvcnQgaW4g
R1N0cmVhbWVyIG1lZGlhIHBsYXllciIgUFJJVkFURSBPRkYpCiBXRUJLSVRfT1BUSU9OX0RFRklO
RShVU0VfR1NUUkVBTUVSX05BVElWRV9BVURJTyAiVG9nZ2xlIG5hdGl2ZSBhdWRpbyBzdXBwb3J0
IGluIEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIiIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9E
RUZJTkUoVVNFX0dTVFJFQU1FUl9URVhUX1NJTksgIlRvZ2dsZSB0ZXh0IHNpbmsgc3VwcG9ydCBp
biBHU3RyZWFtZXIgbWVkaWEgcGxheWVyIiBQUklWQVRFIE9OKQorV0VCS0lUX09QVElPTl9ERUZJ
TkUoVVNFX0dTVFJFQU1FUl9XRUJSVEMgIldoZXRoZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFdl
YlJUQyIgUFJJVkFURSBPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBl
bmRlbmNpZXMuY21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtl
CmluZGV4IGY0MmM3ZTcwNjk3N2JmMTZjOWYyOWJmM2RlMzA4YzVlOTY4MDI5OTYuLjA5YjZjMjVl
OGQ1OTJkNTg4NGU4OTQ2YmE2YWY1OGQyZmRiMTYxOWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFr
ZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0dTdHJlYW1l
ckRlcGVuZGVuY2llcy5jbWFrZQpAQCAtMSwzICsxLDQgQEAKIFdFQktJVF9PUFRJT05fREVQRU5E
KFVTRV9HU1RSRUFNRVJfR0wgRU5BQkxFX1ZJREVPKQogV0VCS0lUX09QVElPTl9ERVBFTkQoVVNF
X0dTVFJFQU1FUl9NUEVHVFMgRU5BQkxFX1ZJREVPKQogV0VCS0lUX09QVElPTl9ERVBFTkQoVVNF
X1dQRV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRiBVU0VfR1NUUkVBTUVSX0dMKQorV0VCS0lU
X09QVElPTl9ERVBFTkQoVVNFX0dTVFJFQU1FUl9XRUJSVEMgRU5BQkxFX1dFQl9SVEMpCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZTAxMGNjNDUx
MTIwMjAwNjljNjRkN2NiZDBmNDI5ZDg3Y2EzNDczNi4uYjc0MWYzZTZmZmRhY2E5NGEzNGIwN2Qw
NzkzOTA5NjQ5NTJiYzMwYSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAyLTEyICBQaGlsaXBwZSBOb3JtYW5k
ICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBJbml0aWFsIGlt
cG9ydCBvZiB0aGUgR3N0V2ViUlRDIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZmxhdHBhay9mbGF0cGFrdXRpbHMucHk6CisgICAgICAg
IChXZWJraXRGbGF0cGFrLnJ1bl9pbl9zYW5kYm94KTogQWxsb3cgbGlibmljZSBkZWJ1ZyBsb2cg
ZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gcnVudGltZSBzYW5kYm94LgorCiAyMDIyLTAyLTE4ICBE
YXZpZCBLaWx6ZXIgIDxkZGtpbHplckBhcHBsZS5jb20+CiAKICAgICAgICAgW1Rvb2xzXSBTYW5p
dGl6ZXIgYnVpbGRzIHNob3VsZCBvYmV5IGBzZXQtd2Via2l0LWNvbmZpZ3VyYXRpb24gLS1mb3Jj
ZS1vcHRpbWl6YXRpb24tbGV2ZWxgCmRpZmYgLS1naXQgYS9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1
dGlscy5weSBiL1Rvb2xzL2ZsYXRwYWsvZmxhdHBha3V0aWxzLnB5CmluZGV4IDA3NTZiMDllY2U1
ZWZiYjFjYTdiNTlhMzJhNmI4Nzc0Y2NhNzNhNGQuLmFiNTdiNTM5NDNiZDhlNWI2YjMwYTliNTYw
MzU0MjA1MTQ3NTg4NWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZsYXRwYWsvZmxhdHBha3V0aWxzLnB5
CisrKyBiL1Rvb2xzL2ZsYXRwYWsvZmxhdHBha3V0aWxzLnB5CkBAIC04MzgsNiArODM4LDcgQEAg
Y2xhc3MgV2Via2l0RmxhdHBhazoKICAgICAgICAgICAgICJNRVNBIiwKICAgICAgICAgICAgICJM
SUJHTCIsCiAgICAgICAgICAgICAiUElQRVdJUkUiLAorICAgICAgICAgICAgIk5JQ0UiLAogICAg
ICAgICAgICAgIlJVU1QiLAogICAgICAgICAgICAgIlNDQ0FDSEUiLAogICAgICAgICAgICAgIlNQ
QSIsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggOTlhOGI3MDFiNjFjMWIxMDMzZGIwMmI2ZWE3OGYzNjM0MzRmYjQ2MC4uNjQ3
MjkxNWJjNjBhMmJkZWY0YmNmMmUzZTEyMDU1NTg2YjdiODM3YiAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4
IEBACisyMDIyLTAyLTEyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1N0cmVhbWVyXSBJbml0aWFsIGltcG9ydCBvZiB0aGUgR3N0V2ViUlRDIGJh
Y2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NjU0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
cGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zOiBGbGFnIG1vc3QgV2ViUlRDIGFzIGZhaWxp
bmcuIER1cmluZyB0aGlzIGZpcnN0IGRldmVsb3BtZW50CisgICAgICAgIGN5Y2xlIEkgZm9jdXNl
ZCBtb3N0bHkgb24gZml4aW5nIGNyYXNoZXMgYW5kIG9ubHkgZml4ZWQgYSBmZXcgZmFpbHVyZXMu
IFRoZSByZW1haW5pbmcgb25lcworICAgICAgICB3aWxsIGJlIGFkcmVzc2VkIGluIGZvbGxvdy11
cCBwYXRjaGVzLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJl
bW90ZURlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0
aW9uLW9mZmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9m
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YWJsZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorCiAyMDIyLTAyLTE4ICBCZW4gTmhhbSAgPG5oYW1AYXBwbGUuY29tPgogCiAgICAgICAg
IEhvb2sgdXAgUHVzaE1hbmFnZXIgdG8gcGVybWlzc2lvbiBzdGF0ZQpkaWZmIC0tZ2l0IGEvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDJhZmZmZGIzOGE0YjFkNzg3OGUyMThh
ZTk1NjIxZDZmODJmNWUzZmMuLmMyZjgzMjJlNTY5OGM3MTA1YTdjMzRlM2JlZjRjMTc5NDBhYTgy
YTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9u
cworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTg1
Nyw3ICs4NTcsNyBAQCB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLWNvbmN1cnJlbnQt
cGxheWJhY2suaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS92aWRl
by1pbnRlcnJ1cHRpb24td2l0aC1yZXN1bWUtbm90LWFsbG93aW5nLXBsYXkuaHRtbCBbIEZhaWx1
cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS92aWRlby1tdWx0aXBsZS1jb25jdXJyZW50
LXBsYXliYWNrLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvd2Vi
YXVkaW8tYmFja2dyb3VuZC1wbGF5YmFjay5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2Iv
MjMxODExIHdlYnJ0Yy9jb25jdXJyZW50VmlkZW9QbGF5YmFjazIuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzMTgxMSB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jb25jdXJyZW50
VmlkZW9QbGF5YmFjazIuaHRtbCBbIEZhaWx1cmUgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMx
ODExIG1lZGlhL21lZGlhLXNlc3Npb24vY2FsbEFjdGlvbkhhbmRsZXIuaHRtbCBbIFRpbWVvdXQg
XQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS9tZWRpYS1zZXNzaW9uL3BsYXktYWZ0ZXItc2Vl
ay5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL3JlbW90ZS1jb250
cm9sLWNvbW1hbmQtaXMtdXNlci1nZXN0dXJlLmh0bWwgWyBUaW1lb3V0IF0KQEAgLTg3MCwxMCAr
ODcwLDEwIEBAIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvdmlkZW8tc3lzdGVtLXNsZWVwLmh0
bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgd2ViYXVkaW8vYXVkaW9jb250ZXh0
LXN0YXRlLWludGVycnVwdGVkLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEg
d2ViYXVkaW8vc3VzcGVuZC1jb250ZXh0LXdoaWxlLWludGVycnVwdGVkLmh0bWwgWyBUaW1lb3V0
IF0KIAorIyBydmZjIHJlbGF0ZWQgZmFpbHVyZXMKIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvdmlkZW8tcnZmYyBbIFBhc3MgXQogZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEt
cnZmYy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIHdlYnJ0Yy9wZWVyQ29ubmVjdGlvbi1ydmZjLmh0
bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9jYW52YXMtdG8tcGVlci1jb25uZWN0aW9uLmh0bWwgWyBG
YWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdmlkZW8tcnZmYy9yZXF1
ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLXdlYnJ0Yy5odHRwcy5odG1sIFsgU2tpcCBdCiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3ZpZGVvLXJ2ZmMvcmVxdWVzdC12aWRlby1mcmFt
ZS1jYWxsYmFjay1iZWZvcmUteHItc2Vzc2lvbi5odHRwcy5odG1sIFsgU2tpcCBdCiBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3ZpZGVvLXJ2ZmMvcmVxdWVzdC12aWRlby1mcmFtZS1j
YWxsYmFjay1kdXJpbmcteHItc2Vzc2lvbi5odHRwcy5odG1sIFsgU2tpcCBdCkBAIC04OTEsNiAr
ODkxLDk1IEBAIHdlYmtpdC5vcmcvYi8yMzQwODQgbWVkaWEvdHJhY2svYXVkaW8tdHJhY2stY29u
ZmlndXJhdGlvbi5odG1sIFsgRmFpbHVyZSBdCiAjIGJpdHJhdGUgZXN0aW1hdGlvbi4KIHdlYmtp
dC5vcmcvYi8yMzQwODQgbWVkaWEvdHJhY2svdmlkZW8tdHJhY2stY29uZmlndXJhdGlvbi5odG1s
IFsgRmFpbHVyZSBdCiAKKyMgRGF0YUNoYW5uZWwgR3N0V2ViUlRDIGltcGxlbWVudGF0aW9uIGlu
Y29tcGxldGUKK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2RhdGFjaGFubmVsIFsgU2tpcCBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy90cmFuc2Zlci1kYXRhY2hhbm5l
bC1zZXJ2aWNlLXdvcmtlci5odHRwcy5odG1sIFsgU2tpcCBdCisKKyMgVGhlIEdzdFdlYlJUQyBi
YWNrZW5kIGRvZXNuJ3Qgc3VwcG9ydCB0cmFuc2Zvcm1zIHlldC4KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgaHR0cC93cHQvd2VicnRjL2F1ZGlvdmlkZW8tc2NyaXB0LXRyYW5zZm9ybS5odG1sIFsgU2tp
cCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy92aWRlby1zY3JpcHQtdHJh
bnNmb3JtLWtleWZyYW1lLW9ubHkuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBo
dHRwL3dwdC93ZWJydGMvdmlkZW8tc2NyaXB0LXRyYW5zZm9ybS5odG1sIFsgU2tpcCBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVu
Y29kZWQtdHJhbnNmb3JtL3NjcmlwdC1hdWRpby10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dl
YnJ0Yy1lbmNvZGVkLXRyYW5zZm9ybS9zY3JpcHQtY2hhbmdlLXRyYW5zZm9ybS5odHRwcy5odG1s
IFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3JtL3NjcmlwdC1tZXRhZGF0YS10cmFuc2Zvcm0u
aHR0cHMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1lbmNvZGVkLXRyYW5zZm9ybS9zY3JpcHQtdHJhbnNmb3Jt
Lmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2NyaXB0LXdyaXRlLXR3
aWNlLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCisKK3dlYmtpdC5vcmcvYi8yMzU4ODUg
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1hZGRJY2VDYW5kaWRhdGUuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLWFkZFRyYWNrLXJldXNlLXNlbmRlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taGF2ZS1sb2Nh
bC1vZmZlci5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhhdmUtbG9jYWwtcHJhbnN3ZXIuaHRtbCBbIENyYXNoIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1o
YXZlLXJlbW90ZS1vZmZlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZh
c3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taGF2ZS1yZW1vdGUtcHJhbnN3ZXIuaHRt
bCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1pY2VjYW5kaWRhdGUtZXZlbnQuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3QtYW5z
d2VyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1z
ZXR1cC1jYWxsYmFja3Mtc2luZ2xlLWRpYWxvZy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbWVkaWEtc2V0dXAt
c2luZ2xlLWRpYWxvZy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbWVkaWEtc2V0dXAtdHdvLWRpYWxvZ3MuaHRt
bCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1wYWdlLWNhY2hlLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3RlbHktYXNzaWduZWQtdHJh
bnNjZWl2ZXItbWlkLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9t
ZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRMb2NhbERlc2NyaXB0aW9uLW9mZmVyLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1zdGF0c1NlbGVjdG9yLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9jaGFuZ2UtdHJhY2tzLW1lZGlhLXN0cmVhbS1iZWlu
Zy1wbGF5ZWQuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93
ZWJydGMvdGhpcmQtcGFydHktZnJhbWUtaWNlLWNhbmRpZGF0ZS1maWx0ZXJpbmcuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL3dlYnJ0Yy1leHRlbnNpb25zL1JUQ1J0cFBhcmFtZXRlcnMtbWF4RnJhbWVyYXRlLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJydGMtZXh0ZW5zaW9ucy9SVENSdHBTeW5jaHJvbml6YXRpb25Tb3VyY2UtY2Fw
dHVyZVRpbWVzdGFtcC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9y
dGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLXByaW9yaXR5L1JUQ1J0cFBhcmFtZXRl
cnMtZW5jb2RpbmdzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW5zcGVj
dG9yL3BhZ2Uvb3ZlcnJpZGVTZXR0aW5nLUlDRUNhbmRpZGF0ZUZpbHRlcmluZ0VuYWJsZWQuaHRt
bCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL21lZGlhLWNhcGFiaWxpdGllcy9kZWNvZGluZ0luZm8ud2VicnRjLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy9tZWRpYS1jYXBhYmlsaXRpZXMvZW5jb2RpbmdJbmZvLndlYnJ0Yy5odG1sIFsgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9hZGRUcmFuc2NlaXZlci10aGVuLWFkZFRy
YWNrLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2F1ZGlvLW11
dGVkLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2F1
ZGlvLXBlZXItY29ubmVjdGlvbi1nNzIyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8y
MzU4ODUgd2VicnRjL2F1ZGlvLXBlZXItY29ubmVjdGlvbi13ZWJhdWRpby5odG1sIFsgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9hdWRpby1yZXBsYWNlLXRyYWNrLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2F1ZGlvLXNhbXBsZXJhdGUt
Y2hhbmdlLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9hdWRpby12
aWRlby1lbGVtZW50LXBsYXlpbmcuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSB3ZWJydGMvY2FuZGlkYXRlLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8y
MzU4ODUgd2VicnRjL2NhbnZhcy10by1wZWVyLWNvbm5lY3Rpb24uaHRtbCBbIFRpbWVvdXQgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2xvbmUtYXVkaW8tdHJhY2suaHRt
bCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2xvc2luZy1wZWVyY29u
bmVjdGlvbi5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9kaXJl
Y3Rpb24tY2hhbmdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L2Rpc2FibGUtZW5jcnlwdGlvbi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy9lcGhlbWVyYWwtY2VydGlmaWNhdGVzLWFuZC1jbmFtZXMuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRhdGUtYWZ0
ZXItcmVsb2FkLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2gy
NjQtcGFja2V0aXphdGlvbi1tb2RlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL2xpYndlYnJ0Yy9zZXRMb2NhbERlc2NyaXB0aW9uQ3Jhc2guaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvbXVsdGktdmlkZW8uaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvbm8tcG9ydC16ZXJvLWluLXVwZC1jYW5k
aWRhdGVzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXIt
Y29ubmVjdGlvbi1hdWRpby1tdXRlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi1hdWRpby1tdXRlMi5odG1sIFsgVGltZW91dCBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tYXVkaW8tdW5tdXRlLmh0
bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlv
bi1jcmVhdGVNZWRpYVN0cmVhbURlc3RpbmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0ZS5odG1s
IFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24t
cmVtb3RlLWF1ZGlvLW11dGUyLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL3BlZXItY29ubmVjdGlvbi10cmFjay1lbmQuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlcmNvbm5lY3Rpb24tcGFnZS1jYWNoZS1sb25nLmh0bWwg
WyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXJjb25uZWN0aW9uLXBh
Z2UtY2FjaGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcmVj
ZWl2ZXItdHJhY2stc2hvdWxkLXN0YXktbGl2ZS1ldmVuLWlmLXJlY2VpdmVyLWlzLWluYWN0aXZl
Lmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3JlbGVhc2UtYWZ0
ZXItZ2V0dGluZy10cmFjay5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy9yZW1vdGVBdWRpby1uZXZlci1wbGF5ZWQuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvcmVtb3ZlLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL3V0Zjgtc2RwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL3ZpZGVvLWFkZFRyYW5zY2VpdmVyLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLWF1dG9wbGF5Lmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLWdldFBhcmFtZXRlcnMuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tbWVkaWFzdHJlYW10cmFj
ay1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRl
by1tdXRlLXZwOC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92
aWRlby1tdXRlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3Zp
ZGVvLXJlY2VpdmVycy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy92aWRlby1yZXBsYWNlLXRyYWNrLXRvLW51bGwuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVwbGFjZS10cmFjay5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby11bm11dGUuaHRtbCBbIENyYXNoIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXZwOC12aWRlb3JhbmdlLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZwOC10aGVuLWgyNjQuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdnA5LXN2Yy5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92cDkuaHRtbCBbIEZhaWx1cmUgXQorCiAjLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIyBFbmQgb2YgR1N0cmVhbWVyLXJlbGF0ZWQgYnVn
cwogIy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTE0MTYsMTQgKzE1MDUsMTQg
QEAgd2Via2l0Lm9yZy9iLzc5MjAzIHdlYmtpdC5vcmcvYi8xODY2NzggZmFzdC9tZWRpYXN0cmVh
bS9NZWRpYVN0cmVhbS12aWRlby1lbGVtZW4KIAogZmFzdC9tZWRpYXN0cmVhbS9NZWRpYURldmlj
ZXMtYWRkRXZlbnRMaXN0ZW5lci5odG1sIFsgRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIF0KIAot
d2Via2l0Lm9yZy9iLzE5MTAwNiB3ZWJydGMvc2ltdWxjYXN0LWgyNjQuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzE5MTAwNiB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9zaW11bGNh
c3QtaDI2NC5odG1sIFsgRmFpbHVyZSBUaW1lb3V0IF0KIAogd2Via2l0Lm9yZy9iLzE5MzY0MSB3
ZWJydGMvdmlkZW8tc2V0RGlyZWN0aW9uLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQogCiB3ZWJraXQu
b3JnL2IvMTk0NjExIGh0dHAvd3B0L3dlYnJ0Yy9nZXRVc2VyTWVkaWEtcHJvY2Vzc1N3YXBwaW5n
Lmh0bWwgWyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIwMTI2NyBbIFJlbGVhc2UgXSB3ZWJy
dGMvdmlkZW8taDI2NC5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMjI1
ODUgWyBEZWJ1ZyBdIHdlYnJ0Yy92aWRlby1oMjY0Lmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3Jn
L2IvMjIyNTg1IHdlYmtpdC5vcmcvYi8yMzU4ODUgWyBEZWJ1ZyBdIHdlYnJ0Yy92aWRlby1oMjY0
Lmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIxMDI3MiB3ZWJydGMvZGF0
YWNoYW5uZWwvbXVsdGlwbGUtY29ubmVjdGlvbnMuaHRtbCBbIFRpbWVvdXQgUGFzcyBdCiAKQEAg
LTE0MzQsNyArMTUyMyw3IEBAIHdlYmtpdC5vcmcvYi8yMTUwMDcgWyBEZWJ1ZyBdIHdlYnJ0Yy9o
MjY0LWhpZ2guaHRtbCBbIFNsb3cgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMTY1Mzggd2Vi
cnRjL2NhcHR1cmVDYW52YXMtd2VicnRjLXNvZnR3YXJlLWgyNjQtYmFzZWxpbmUuaHRtbCBbIFNs
b3cgRmFpbHVyZSBdCiAKLXdlYmtpdC5vcmcvYi8yMTY3NjMgd2VicnRjL2NhcHR1cmVDYW52YXMt
d2VicnRjLXNvZnR3YXJlLWgyNjQtaGlnaC5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMjE2NzYzIHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2NhcHR1cmVDYW52YXMtd2Vi
cnRjLXNvZnR3YXJlLWgyNjQtaGlnaC5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBUaW1lb3V0IF0KIAog
d2Via2l0Lm9yZy9iLzIxODIyMSB3ZWJydGMvdnA5LXByb2ZpbGUyLmh0bWwgWyBUaW1lb3V0IEZh
aWx1cmUgXQogCkBAIC0yMjI1LDEzICsyMzE0LDEzIEBAIHdlYmtpdC5vcmcvYi8xODYxMDAgY3Nz
My9jb2xvci1maWx0ZXJzL2NvbG9yLWZpbHRlci1jb2xvci1wcm9wZXJ0eS1saXN0LWl0ZW0uaHRt
CiB3ZWJraXQub3JnL2IvMTg2MTAwIGZhc3QvaGlkcGkvZmlsdGVycy10dXJidWxlbmNlLmh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xODcwNDQgd2ViYW5pbWF0aW9ucy9v
cGFjaXR5LWFuaW1hdGlvbi15aWVsZHMtY29tcG9zaXRpbmctc3Bhbi5odG1sIFsgRmFpbHVyZSBd
CiAKLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL2RhdGFjaGFubmVsL21kbnMtaWNlLWNhbmRp
ZGF0ZXMuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2Iv
MjM1ODg1IHdlYnJ0Yy9kYXRhY2hhbm5lbC9tZG5zLWljZS1jYW5kaWRhdGVzLmh0bWwgWyBUaW1l
b3V0IEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tYWRkVHJhY2su
aHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tZGlzYWJs
ZWQtYmxhY2suaHRtbCBbIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVv
LXJlbW90ZS1tdXRlLmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92
aWRlby1yZXBsYWNlLW11dGVkLXRyYWNrLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8x
ODcwNjQgd2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVwbGFjZS1tdXRlZC10cmFj
ay5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xODcwNjQgd2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tZGlzYWJsZWQtYmxhY2suaHRtbCBbIENyYXNoIFRpbWVv
dXQgXQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRl
by1yZW1vdGUtbXV0ZS5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTg3MDY0
IHdlYnJ0Yy92aWRlby1yb3RhdGlvbi5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTg3
MDY0IHdlYnJ0Yy92aWRlby1yb3RhdGlvbi1uby1jdm8uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1yb3RhdGlvbi1u
by1jdm8uaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQogd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMv
dmlkZW8td2l0aC1kYXRhLWNoYW5uZWwuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE4
NzA2NCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQZWVyQ29ubmVj
dGlvbi1nZXRTdGF0cy5odHRwcy5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIApAQCAtMjUyNiw3ICsy
NjE1LDcgQEAgbWVkaWEvdmlkZW8tcmVtb3RlLWNvbnRyb2wtcGxheXBhdXNlLmh0bWwgWyBTa2lw
IF0KIAogd2Via2l0Lm9yZy9iLzIwNzA2MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1yZXBsYXkuaHRtbCBbIEZhaWx1cmUgUGFzcyBdCiAK
LXdlYmtpdC5vcmcvYi8yMjkzNDYgd2VicnRjL211bHRpLWF1ZGlvLmh0bWwgWyBUaW1lb3V0IFBh
c3MgXQord2Via2l0Lm9yZy9iLzIyOTM0NiB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9tdWx0
aS1hdWRpby5odG1sIFsgVGltZW91dCBQYXNzIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMjI5
NzE1IFsgRGVidWcgXSBmYXN0L21lZGlhc3RyZWFtL2dldERpc3BsYXlNZWRpYS1tYXgtY29uc3Ry
YWludHMzLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMjk3MTUgWyBEZWJ1ZyBdIGZh
c3QvbWVkaWFzdHJlYW0vc2NyZWVuY2FwdHVyZS11c2VyLWdlc3R1cmUuaHRtbCBbIFRpbWVvdXQg
XQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLWxvY2FsRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWxv
Y2FsRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5NWE5YjYxOTAwOWE3NDMy
YTEyOTM2YTdjNmE4MTg5MDg0ZDJjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNj
cmlwdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGVzdHMgUlRDUGVlckNvbm5l
Y3Rpb24gbG9jYWxEZXNjcmlwdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2Vy
aWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisK
K1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVx
dWVzdFN1Y2NlZWRlZDEsIHJlcXVlc3RGYWlsZWQxKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24u
CitQQVNTIHJlcXVlc3RTdWNjZWVkZWQgd2FzIGNhbGxlZC4KK1BBU1MgcGMuc2V0TG9jYWxEZXNj
cmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDIsIHJlcXVl
c3RGYWlsZWQyKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHJlcXVlc3RGYWlsZWQg
d2FzIGNhbGxlZC4KK1BBU1MgcGMubG9jYWxEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZB
SUwgcGMubG9jYWxEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIGxvY2FsLiBXYXMgdD0wIDAKKy4K
K1BBU1MgcGMubG9jYWxEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMubG9jYWxE
ZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIGxvY2FsLiBXYXMgdD0wIDAKKy4KK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
cmVtb3RlRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xp
Yi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4
cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDUzZWM1YzIxNjBkMDMyNzNjMTk4MWY4ZWQ5ZmExODM4
NGZkMDc1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4cGVjdGVk
LnR4dApAQCAtMCwwICsxLDE5IEBACitUZXN0cyBSVENQZWVyQ29ubmVjdGlvbiByZW1vdGVEZXNj
cmlwdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBt
ZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcGMuc2V0UmVt
b3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKHJlcXVlc3RTdWNjZWVkZWQx
LCByZXF1ZXN0RmFpbGVkMSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyByZXF1ZXN0
U3VjY2VlZGVkIHdhcyBjYWxsZWQuCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Np
b25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgcmVxdWVzdEZhaWxlZDIpOyBk
aWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdEZhaWxlZCB3YXMgY2FsbGVkLgor
UEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMucmVtb3Rl
RGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSByZW1vdGUuIFdhcyB0PTAgMAorLgorUEFTUyBwYy5y
ZW1vdGVEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRp
b24uc2RwIHNob3VsZCBiZSByZW1vdGUuIFdhcyB0PTAgMAorLgorUEFTUyBzdWNjZXNzZnVsbHlQ
YXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1v
dGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
bGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRp
b24tb2ZmZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjYzQxODEwYjhkZTE5MWRkZWU1OWEw
ZWM1OWMzNTE5OTFiZTdmYmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3Jp
cHRpb24tb2ZmZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzkgQEAKK1Rlc3QgUlRDUGVlckNv
bm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24gY2FsbGVkIHdpdGggYW4gUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uIG9mIHR5cGUgJ29mZmVyJworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworKioqIENyZWF0ZSAocmVtb3RlKSBvZmZlciB3aXRoIGF1ZGlvIChyZW1vdGVPZmZlcjEpCisq
KiogRG9uZSwgc3RhcnQgdGVzdGluZyB3aXRoIHJlbW90ZU9mZmVyMQorUEFTUyBwYy5zaWduYWxp
bmdTdGF0ZSBpcyAnc3RhYmxlJworUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitQ
QVNTIHBjLnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjLmN1cnJlbnRS
ZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK1BBU1MgcmVtb3RlT2ZmZXIxIHNldCBhcyByZW1v
dGUgZGVzY3JpcHRpb24KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9m
ZmVyJworRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUgW29iamVjdCBPYmplY3Rd
LiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgorRkFJTCBwYy5wZW5kaW5nUmVt
b3RlRGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3QgUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uXS4KK1BBU1MgcGMuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIGlz
IG51bGwKKworUEFTUyByZW1vdGVPZmZlcjEgc2V0IGFzIHJlbW90ZSBkZXNjcmlwdGlvbiAoYWdh
aW4pCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKKworKioq
IFRyeSBzZXR0aW5nIGxvY2FsIGRlc2NyaXB0aW9ucyB3aXRoIGJhZCB0eXBlcyBmb3IgdGhlIGN1
cnJlbnQgc3RhdGUKK1BBU1MgcHJvbWlzZSBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbih7dHlwZTon
YW5zd2VyJywgc2RwOnJlbW90ZU9mZmVyMS5zZHB9KTsgcmVqZWN0ZWQgd2l0aCBPcGVyYXRpb25F
cnJvcjogVW5hYmxlIHRvIGFwcGx5IHNlc3Npb24gcmVtb3RlIGRlc2NyaXB0aW9uCitQQVNTIHBy
b21pc2UgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oe3R5cGU6J3ByYW5zd2VyJywgc2RwOnJlbW90
ZU9mZmVyMS5zZHB9KTsgcmVqZWN0ZWQgd2l0aCBPcGVyYXRpb25FcnJvcjogVW5hYmxlIHRvIGFw
cGx5IHNlc3Npb24gcmVtb3RlIGRlc2NyaXB0aW9uCisKKyoqKiBDcmVhdGUgKHJlbW90ZSkgb2Zm
ZXIgd2l0aCB2aWRlbyAocmVtb3RlT2ZmZXIyKQorKioqIERvbmUsIHN0YXJ0IHRlc3Rpbmcgd2l0
aCByZW1vdGVPZmZlcjIKK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9m
ZmVyJworCitQQVNTIHJlbW90ZU9mZmVyMiBzZXQgYXMgcmVtb3RlIGRlc2NyaXB0aW9uCitQQVNT
IHBjLnNpZ25hbGluZ1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKK0ZBSUwgcGMucmVtb3Rl
RGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3QgUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uXS4KK0ZBSUwgcGMucGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uIHNob3Vs
ZCBiZSBbb2JqZWN0IE9iamVjdF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbl0u
CitQQVNTIHBjLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
c3RhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjcwMTY2ZGNhNTYzZWNlNDdmNDhjMDcyMmNjMDg3YTNlMmY5NjZjNGUKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tc3RhYmxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUxIEBACitUZXN0cyBSVENQ
ZWVyQ29ubmVjdGlvbiBpbiBzdGFibGUgc3RhdGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldExv
Y2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZpbmlzaElmU3VjY2VlZGVk
LCByZXF1ZXN0RmFpbGVkMSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRMb2Nh
bERlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwgZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52
YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9yLiBXYXMgT3BlcmF0aW9uRXJyb3IuCitGQUlMIHBj
LmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitG
QUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBu
dWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRMb2Nh
bERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihmaW5pc2hJZlN1Y2NlZWRlZCwg
cmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0TG9jYWxE
ZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVhc29uLm5hbWUgc2hvdWxkIGJlIEludmFs
aWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIE9wZXJhdGlvbkVycm9yLgorRkFJTCBwYy5s
b2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorRkFJ
TCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVs
bC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMuc2V0UmVtb3Rl
RGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZpbmlzaElmU3VjY2VlZGVkLCBy
ZXF1ZXN0RmFpbGVkMyk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRSZW1vdGVE
ZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVhc29uLm5hbWUgc2hvdWxkIGJlIEludmFs
aWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIE9wZXJhdGlvbkVycm9yLgorRkFJTCBwYy5s
b2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorRkFJ
TCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVs
bC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMuc2V0UmVtb3Rl
RGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZpbmlzaElmU3VjY2VlZGVkLCBy
ZXF1ZXN0RmFpbGVkNCk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRSZW1vdGVE
ZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVhc29uLm5hbWUgc2hvdWxkIGJlIEludmFs
aWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIE9wZXJhdGlvbkVycm9yLgorRkFJTCBwYy5s
b2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorRkFJ
TCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVs
bC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMuc2V0TG9jYWxE
ZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDEsIGZp
bmlzaElmRmFpbGVkKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldExvY2FsRGVz
Y3JpcHRpb24gc3VjY2VlZGVkLgorUEFTUyBwYy5sb2NhbERlc2NyaXB0aW9uLnR5cGUgaXMgIm9m
ZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgbG9jYWwuIFdhcyB0
PTAgMAorLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0
aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgImhhdmUtbG9jYWwtb2Zm
ZXIiCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4g
V2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNl
cHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3RhYmxlIgorUEFT
UyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVz
dFN1Y2NlZWRlZDIsIGZpbmlzaElmRmFpbGVkKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQ
QVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIHN1Y2NlZWRlZC4KK0ZBSUwgcGMubG9jYWxEZXNjcmlw
dGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMucmVtb3Rl
RGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uLnNk
cCBzaG91bGQgYmUgcmVtb3RlLiBXYXMgdD0wIDAKKy4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUg
aXMgImhhdmUtcmVtb3RlLW9mZmVyIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQor
CitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRl
eCA3Yjk0M2E1YTc0MzU1NDhkNDVkN2I0OWQ5MDE3ZmY4ZjY4OTJlMWVlLi5mNzhkMGU1ZWIyMDBh
Yjg1ZGYwMWVlOTJlMzA5NzcxMGNlNjdkNDcwIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1w
b3J0IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIEdzdFdlYlJUQyBieSBkZWZhdWx0IGlmIGEgcmVj
ZW50LWVub3VnaCAoPj0gMS4yMCkgdmVyc2lvbiBpcyBhdmFpbGFibGUuCisKKyAgICAgICAgKiBT
b3VyY2UvY21ha2UvRmluZEdTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2Uv
R1N0cmVhbWVyQ2hlY2tzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJE
ZWZpbml0aW9ucy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5k
ZW5jaWVzLmNtYWtlOgorCiAyMDIyLTAyLTE4ICBSb2JlcnQgSmVubmVyICA8SmVubmVyQGFwcGxl
LmNvbT4KIAogICAgICAgICBVbnJldmlld2VkLCByZXZlcnRpbmcgcjI5MDE0OS4K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453288</attachid>
            <date>2022-02-26 01:36:35 -0800</date>
            <delta_ts>2022-03-06 08:03:46 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220226013633.patch</filename>
            <type>text/plain</type>
            <size>327852</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwNTA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGIwZWQ4NjRlZWY0YWFjZGI5ZTUyMmM3
YmMxNmRkNDI2OTY3MzQ3MWYuLmRmNDg2YTgxYzI1MDkxYWY1YmFmODNmMDE0NzM2NmNjNGM1YTZk
ZDggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAyLTI0ICBSeWFuIEhhZGRhZCAgPHJ5YW5o
YWRkYWRAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHJldmVydGluZyByMjkwNDUy
LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCmluZGV4IGYzOWRmZjEzYWRiNTM3OGI1ZGE2NTVkMDZjYTIxMTZmOWUxOTA4MDMu
LjQ1M2VkOTFkN2FhZWZjY2E1ODMwMTEwYjIwNDY4YjM2MjMyYTk1NDEgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwzNzQgQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBp
Z2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0IG9mIHRoZSBH
c3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1
Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgSW5pdGlhbCBHc3RXZWJSVEMgYmFja2VuZC4gQSBsb3Qgb2YgZmVhdHVyZXMgdW5p
bXBsZW1lbnRlZCBzdGlsbCwgYnV0IHdlIHdpbGwgaW5jcmVtZW50YWxseQorICAgICAgICBpbXBy
b3ZlIHRoZSBsYXlvdXQgdGVzdCBjb3ZlcmFnZSBpbiBmb2xsb3ctdXAgcGF0Y2hlcy4gTW9zdCBu
b3RhYmxlIHNob3J0LWNvbWluZ3MgY3VycmVudGx5OgorCisgICAgICAgIC0gRGF0YUNoYW5uZWwg
c3VwcG9ydCBpcyBpbmNvbXBsZXRlIChidWcgMjM1ODc5KQorICAgICAgICAtIE5ldHdvcmsgdHJh
ZmZpYyBub3Qgcm91dGVkIHRocm91Z2ggTmV0d29yayBwcm9jZXNzIHlldAorICAgICAgICAtIFN0
YXRzIHN1cHBvcnQgaW5jb21wbGV0ZQorICAgICAgICAtIERUTUYgc3VwcG9ydCB1bmltcGxlbWVu
dGVkCisgICAgICAgIC0gSUNFIHJlc3RhcnRzIG5vdCBzdXBwb3J0ZWQgeWV0CisgICAgICAgIC0g
UmUtbmVnb3RpYXRpb24gdW5saWtlbHkgdG8gd29yaworICAgICAgICAtIFNpbXVsY2FzdCBub3Qg
aGFuZGxlZCB5ZXQKKyAgICAgICAgLSBCYWxhbmNlZCBidW5kbGUgbm90IHN1cHBvcnRlZAorICAg
ICAgICAtIFJUWCBhbmQgRkVDIHVuLXRlc3RlZCwgYnV0IHNob3VsZG4ndCBiZSBoYXJkIHRvIGZp
eAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwOgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2VuZXJhdGVDZXJ0aWZpY2F0
ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpSVENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcjo6ZnJvbVJUQ0RhdGFDaGFubmVsSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNoYW5uZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcik6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6On5HU3RyZWFt
ZXJEYXRhQ2hhbm5lbEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNo
YW5uZWxIYW5kbGVyOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0
YUNoYW5uZWxIYW5kbGVyOjpzZW5kU3RyaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnNlbmRSYXdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGVja1N0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6cmVhZHlTdGF0ZUNoYW5nZWQpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbk1lc3NhZ2VEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNz
YWdlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxl
cjo6b25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6Om9uQnVmZmVyZWRBbW91bnRMb3cpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0
YUNoYW5uZWxIYW5kbGVyOjpwb3N0VGFzayk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmg6IEFkZGVkLgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRC
YWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEdGxzVHJhbnNw
b3J0QmFja2VuZDo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFtZXJEdGxzVHJhbnNw
b3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFj
a2VuZDo6aWNlVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCk6
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1Ry
YW5zcG9ydEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVySWNlVHJh
bnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRC
YWNrZW5kOjp+R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjppY2VUcmFuc3BvcnRDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnVu
cmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0
QmFja2VuZDo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRy
YW5zcG9ydEJhY2tlbmQ6OmdhdGhlcmluZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJN
ZWRpYUVuZHBvaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYWxpemVQaXBlbGluZSk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp+R1N0cmVhbWVyTWVkaWFFbmRwb2ludCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp0ZWFyZG93blBpcGVsaW5l
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmhhbmRsZU1lc3Nh
Z2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZGlzcG9zZUVs
ZW1lbnRDaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpz
ZXRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OnJlc3RhcnRJY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmV0Y2hEZXNjcmlwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpmZXRjaFNpZ25hbGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OmRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6ZG9TZXRMb2NhbERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvU2V0UmVtb3RlRGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2V0RGVzY3JpcHRpb25DYWxsRGF0YTo6U2V0
RGVzY3JpcHRpb25DYWxsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpzZXREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpzdG9yZVJlbW90ZU1MaW5lSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50Ojpjb25maWd1cmVBbmRMaW5rU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlcXVlc3RQYWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkVHJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVtb3ZlVHJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVPZmZlcik6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0ZUFuc3dlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWF0ZSk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnZXRTdGF0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjptZWRpYVN0cmVhbUZyb21SVENTdHJlYW0pOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkUmVtb3RlU3RyZWFtKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVJlbW90ZVN0
cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVU
cmFuc2NlaXZlckJhY2tlbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OmFkZFRyYW5zY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmNyZWF0ZVNvdXJjZUZvclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp0cmFuc2NlaXZlckJhY2tlbmRGcm9tU2Vu
ZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZEljZUNh
bmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVh
dGVEYXRhQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpvbkRhdGFDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0
b3ApOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3VzcGVuZCk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXN1bWUpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25OZWdvdGlhdGlvbk5lZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUNvbm5l
Y3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
b25JY2VHYXRoZXJpbmdDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6b25JY2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlv
bkZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb2xs
ZWN0VHJhbnNjZWl2ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSVENTdGF0c0xv
Z2dlcjo6UlRDU3RhdHNMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI6
OnRvSlNPTlN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50Ojpwcm9jZXNzU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6b25TdGF0c0RlbGl2ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpzdGFydExvZ2dpbmdTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wTG9nZ2luZ1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmxvZ0NoYW5uZWwgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RhdHNMb2dJbnRlcnZhbCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnYXRoZXJEZWNvZGVySW1w
bGVtZW50YXRpb25OYW1lKToKKyAgICAgICAgKFdURjo6TG9nQXJndW1lbnQ8V2ViQ29yZTo6UlRD
U3RhdHNMb2dnZXI+Ojp0b1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppc1N0b3BwZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aXNOZWdvdGlhdGlvbk5lZWRlZCBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpwaXBlbGluZSBjb25zdCk6
CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpyZWNlaXZlckNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRlckNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpyZXN0YXJ0SWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdldFN0YXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmJhY2tlbmRGcm9tUlRQU2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRMb2NhbERlc2NyaXB0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRSZW1vdGVEZXNj
cmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmRvQ3JlYXRlT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpkb0NyZWF0ZUFuc3dlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9BZGRJY2VDYW5kaWRhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVSZWNlaXZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNy
ZWF0ZURhdGFDaGFubmVsSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRXhpc3RpbmdT
ZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjphZGRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OmFkZFRyYW5zY2VpdmVyRnJvbVRyYWNrT3JLaW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhbnNjZWl2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzZXRTZW5kZXJTb3Vy
Y2VGcm9tVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6YmFja2VuZEZyb21SVFBUcmFuc2NlaXZl
cik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmV4
aXN0aW5nVHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpuZXdSZW1vdGVUcmFuc2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNvbGxlY3RUcmFuc2NlaXZlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZW1vdmVUcmFj
ayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFw
cGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlv
bk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
Ojppc05lZ290aWF0aW9uTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaDogQWRkZWQuCisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNl
aXZlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRDb250cmlidXRpbmdTb3VyY2VzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0U3luY2hyb25pemF0
aW9uU291cmNlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZl
ckJhY2tlbmQ6OmNyZWF0ZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBS
ZWNlaXZlckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCk6Cisg
ICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6bWVkaWFUeXBlRnJvbVJlY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwUmVjZWl2
ZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2Vp
dmVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tl
bmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6cmVxdWVzdEtleUZyYW1lKToKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZl
clRyYW5zZm9ybUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6dXBkYXRlVHJhY2tTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyUnRwU2VuZGVyQmFja2VuZDo6c3RhcnRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c3RvcFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpyZXBsYWNlVHJhY2spOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6Z2V0UGFyYW1ldGVycyBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzZXRQYXJhbWV0ZXJzKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmNyZWF0ZURUTUZC
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJ0
Y1J0cFRyYW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZDo6c2V0TWVkaWFTdHJlYW1JZHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyUnRwU2VuZGVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAqIE1v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
UnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
bWVkaWFUeXBlRnJvbVNlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5k
ZXJUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6On5H
U3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNh
bGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJh
Y2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oOiBBZGRlZC4KKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Nl
aXZlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6Y3JlYXRlUmVjZWl2
ZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZDo6Y3JlYXRlU2VuZGVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQ6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmN1cnJlbnREaXJlY3Rpb24gY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXRE
aXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kOjptaWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZDo6c3RvcHBlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQ6OnNldENvZGVjUHJlZmVyZW5jZXMpOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oOiBB
ZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBUcmFuc2Zvcm1CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpzZXRJbnB1dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OmNsZWFyVHJhbnNmb3JtYWJsZUZyYW1l
Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2Vu
ZDo6cHJvY2Vzc1RyYW5zZm9ybWVkRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBU
cmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6dG9SVENTY3RwVHJhbnNwb3J0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVh
bWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6
c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJUQ1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZp
bGxSVENSVFBTdHJlYW1TdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUlRDQ29kZWNTdGF0
cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OmZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKToKKyAgICAgICAgKFdlYkNv
cmU6OmZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxS
VENUcmFuc3BvcnRTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVwb3J0Q2FsbGJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6Q2FsbGJhY2tIb2xkZXI6OkNhbGxiYWNrSG9sZGVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpnZXRTdGF0cyk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0
b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6
Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpzZXRF
bGVtZW50KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJXZWJSVENVdGlscy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VDb21w
b25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VQcm90b2NvbCk6CisgICAgICAgIChX
ZWJDb3JlOjp0b1JUQ0ljZVRjcENhbmRpZGF0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9S
VENJY2VDYW5kaWRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDRXJyb3IpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9XZWJSVENCaXRSYXRlUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29y
ZTo6ZnJvbVJUQ0VuY29kaW5nUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpmcm9tV2Vi
UlRDQml0UmF0ZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDRW5jb2RpbmdQYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDUnRwU2VuZFBhcmFtZXRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6ZW5zdXJlRGVidWdDYXRlZ29yeUluaXRpYWxpemVkKToKKyAgICAgICAg
KFdlYkNvcmU6OnBhcnNlSWNlQ2FuZGlkYXRlU0RQKToKKyAgICAgICAgKFdlYkNvcmU6Ong1MDlT
ZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6cHJpdmF0ZUtleVNlcmlhbGl6ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpnZW5lcmF0ZUNlcnRpZmljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNk
cE1lZGlhSGFzQXR0cmlidXRlS2V5KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVJU
Q1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Vzc2lvbkRl
c2NyaXB0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpmcm9tU2Vzc2lvbkRlc2NyaXB0aW9u
VHlwZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1NpZ25hbGluZ1N0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OnRvUlRDSWNlQ29ubmVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRD
RHRsc1RyYW5zcG9ydFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlVHJhbnNwb3J0
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VHYXRoZXJpbmdTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpidW5kbGVQb2xpY3lGcm9tQ29uZmlndXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjppY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29uZmlndXJhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjp0b1JUQ0Vycm9yRGV0YWlsVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vR1N0cmVh
bWVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb1NvdXJj
ZVByb3ZpZGVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJv
dmlkZXJHU3RyZWFtZXI6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIpOgorICAgICAgICAo
V2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6fkF1ZGlvU291cmNlUHJvdmlk
ZXJHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJl
YW1lcjo6aGFuZGxlTmV3RGVpbnRlcmxlYXZlUGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRp
by9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcDoKKyAgICAg
ICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENSVFBS
ZWNlaXZlcj4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+
KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KToKKyAgICAgICAg
KFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4pOgorICAgICAgICAoV1RGOjpyZWZH
UHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxH
c3RXZWJSVENSVFBUcmFuc2NlaXZlcj4pOgorICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJU
Q0RhdGFDaGFubmVsPik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hh
bm5lbD4pOgorICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KToK
KyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KToKKyAgICAg
ICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KToKKyAgICAgICAgKFdURjo6
ZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4pOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpjYXBzTWVkaWFUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1VuaXF1ZVB0ckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpjcmVhdGVBdWRpb1NvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OmNyZWF0
ZUNvbnZlcnRlcik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckNhcHR1cmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckNhcHR1cmVy
OjpjcmVhdGVTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjp+R1N0cmVh
bWVyRFRNRlNlbmRlckJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNl
bmRlckJhY2tlbmQ6OmNhbkluc2VydERUTUYpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
RFRNRlNlbmRlckJhY2tlbmQ6OnBsYXlUb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ckRUTUZTZW5kZXJCYWNrZW5kOjp0b25lcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6ZHVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmludGVyVG9uZUdhcCBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6b25Ub25lUGxheWVkKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNl
bmRlckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcDoKKyAgICAgICAgKHdlYmtpdE1l
ZGlhU3RyZWFtU3JjQWRkVHJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwOgorICAgICAgICAod2Via2l0X3dlYnJ0
Y192aWRlb19lbmNvZGVyX2NsYXNzX2luaXQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcjo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lSW5j
b21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9k
dWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBsZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKToKKyAgICAgICAgKGlzVHlwZSk6
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21p
bmdTb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
SW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6bG9j
a1ZhbHZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXI6OnJlbGVhc2VWYWx2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGlt
ZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpyZWdpc3RlckNsaWVudCk6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFt
ZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyOjpiaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdT
dHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cjo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdE
YXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcjo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXR0aW5ncyk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRp
bmdzRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5
bG9hZFR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFs
dGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdT
dHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
Ojp+UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2V0U291cmNlKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c3Rh
cnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJj
ZUdTdHJlYW1lcjo6c291cmNlTXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c291cmNlRW5hYmxlZENoYW5nZWQpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpp
bml0aWFsaXplRnJvbVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lcjo6bGluayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFNpbmtQYWQpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXI6OnNvdXJjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmFsbG93ZWRDYXBzIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6cGFkIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6c2VuZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lcjo6YmluIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUpOgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0
cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQu
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVy
bmFsczo6c2V0V2ViUlRDSDI2NVN1cHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxz
OjpzZXRXZWJSVENWUDlTdXBwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0
V2ViUlRDVlA5VlRCU3VwcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldEVu
YWJsZVdlYlJUQ0VuY3J5cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRV
c2VEVExTMTApOgorCiAyMDIyLTAyLTI1ICBaYW4gRG9iZXJzZWsgIDx6ZG9iZXJzZWtAaWdhbGlh
LmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIFVuY291cGxlIGxpYmdibSwgbGliZHJtIGRlcGVu
ZGVuY2llcyBmcm9tIEFOR0xFIGZ1bmN0aW9uYWxpdHkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYv
U2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlcy55YW1sIGIvU291cmNlL1dURi9TY3Jp
cHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlhbWwKaW5kZXggNGFhNjdhMzEyOTgwNGRh
OWZmOGU2YTQ0OTQ1OTZjNDY2MWZmOWUxNi4uYjY2Yzc0MGU4MDcyY2M1OWM1YmEyN2M1ZWU0MzM2
NDE2ZjlmMWNmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dl
YlByZWZlcmVuY2VzLnlhbWwKKysrIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dl
YlByZWZlcmVuY2VzLnlhbWwKQEAgLTE3MjIsNyArMTcyMiw5IEBAIFBlZXJDb25uZWN0aW9uRW5h
YmxlZDoKICAgICBXZWJLaXRMZWdhY3k6CiAgICAgICBkZWZhdWx0OiB0cnVlCiAgICAgV2ViS2l0
OgotICAgICAgZGVmYXVsdDogV2ViQ29yZTo6TGliV2ViUlRDUHJvdmlkZXI6OndlYlJUQ0F2YWls
YWJsZSgpCisgICAgICAiVVNFKExJQldFQlJUQykiOiBXZWJDb3JlOjpMaWJXZWJSVENQcm92aWRl
cjo6d2ViUlRDQXZhaWxhYmxlKCkKKyAgICAgICJVU0UoR1NUUkVBTUVSX1dFQlJUQykiOiB0cnVl
CisgICAgICBkZWZhdWx0OiBmYWxzZQogICAgIFdlYkNvcmU6CiAgICAgICBkZWZhdWx0OiB0cnVl
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJl
bmNlc0V4cGVyaW1lbnRhbC55YW1sIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dl
YlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKaW5kZXggZTA3YTQ5MDY3NWUwZDZkZWFlNTZl
N2E3ZjQ5ZjhiZGRiMmM4MWM5NC4uYjE2NmFiZjc4Y2JmZjdkM2M2YzZjOGJmYmI4Mzk3ZTljZjgw
ZTUyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZl
cmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKKysrIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVu
Y2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKQEAgLTE3MDksOSArMTcwOSwxMSBA
QCBXZWJSVENFbmNvZGVkVHJhbnNmb3JtRW5hYmxlZDoKICAgICBXZWJLaXRMZWdhY3k6CiAgICAg
ICBkZWZhdWx0OiBmYWxzZQogICAgIFdlYktpdDoKLSAgICAgIGRlZmF1bHQ6IHRydWUKKyAgICAg
ICJVU0UoTElCV0VCUlRDKSI6IHRydWUKKyAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgV2ViQ29y
ZToKLSAgICAgIGRlZmF1bHQ6IHRydWUKKyAgICAgICJVU0UoTElCV0VCUlRDKSI6IHRydWUKKyAg
ICAgIGRlZmF1bHQ6IGZhbHNlCiAKICMgRklYTUU6IElzIHRoaXMgaW1wbGVtZW50ZWQgZm9yIFdl
YktpdExlZ2FjeT8gSWYgbm90LCB0aGlzIHNob3VsZCBiZSBleGNsdWRlZCBmcm9tIFdlYktpdExl
Z2FjeSBlbnRpcmVseS4KIFdlYlJUQ0gyNjRMb3dMYXRlbmN5RW5jb2RlckVuYWJsZWQ6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuY3BwIGIvU291cmNlL1dURi93dGYv
Z2xpYi9HUmVmUHRyLmNwcAppbmRleCAxYjlhZGUzZjkzNmVlNTY0ZDM4MmMwN2VmOTY2NTc2YWI2
NjE5YjQxLi45MzEyYTNlODk0YmQ4YTBkN2ExMWE2YTQ1Y2NiZDM2ODczZjhjNTBmIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuY3BwCisrKyBiL1NvdXJjZS9XVEYvd3Rm
L2dsaWIvR1JlZlB0ci5jcHAKQEAgLTIyMyw2ICsyMjMsMjIgQEAgdGVtcGxhdGUgPD4gdm9pZCBk
ZXJlZkdQdHIoR1VyaSogcHRyKQogfQogI2VuZGlmCiAKK3RlbXBsYXRlIDw+CitHQXJyYXkqIHJl
ZkdQdHIoR0FycmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19hcnJheV9yZWYo
cHRyKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+Cit2b2lkIGRlcmVmR1B0
cihHQXJyYXkqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX2FycmF5X3VucmVmKHB0
cik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdMSUIpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuaCBiL1NvdXJjZS9XVEYvd3RmL2ds
aWIvR1JlZlB0ci5oCmluZGV4IGU3MjFmZDU1ZjQyYWMzZDc2YjQwMTc2MGUwYTE5Yjk5ZmUzZTBm
OGIuLjY2NzM2MDc4N2FjNWY2NDk2MGJlMWQ1NDYyZGRlNTlkNzM1NWY2YTMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIv
R1JlZlB0ci5oCkBAIC0yNTAsNiArMjUwLDggQEAgdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklW
QVRFIEdEYXRlVGltZSogcmVmR1B0cihHRGF0ZVRpbWUqIHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZf
RVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIoR0RhdGVUaW1lKiBwdHIpOwogdGVtcGxhdGUg
PD4gV1RGX0VYUE9SVF9QUklWQVRFIEdEQnVzTm9kZUluZm8qIHJlZkdQdHIoR0RCdXNOb2RlSW5m
byogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihH
REJ1c05vZGVJbmZvKiBwdHIpOwordGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdBcnJh
eSogcmVmR1B0cihHQXJyYXkqKTsKK3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lk
IGRlcmVmR1B0cihHQXJyYXkqKTsKIAogI2lmIEhBVkUoR1VSSSkKIHRlbXBsYXRlIDw+IFdURl9F
WFBPUlRfUFJJVkFURSBHVXJpKiByZWZHUHRyKEdVcmkqKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGll
cy5jcHAKaW5kZXggZGZiOWJkYWM1NjZiNzk2NWJhYWNmZTBjZmVlNzA2MTQzOGIxOTViMi4uOGM3
NDRmY2QxMzc3MDA2ZmJiOTA3NjZlYmIzYmM0Yzg0ZThkY2NiZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNhcGFi
aWxpdGllcy5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCBzdGF0aWMgdm9pZCBnYXRoZXJEZWNvZGlu
Z0luZm8oRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYURlY29kaW5nQ29uZmlndXJhdGlvbiYmCiAg
ICAgY29uZmlndXJhdGlvbi5jYW5FeHBvc2VWUDkgPSBkb2N1bWVudC5zZXR0aW5ncygpLnZwOURl
Y29kZXJFbmFibGVkKCk7CiAjZW5kaWYKIAotI2lmIEVOQUJMRShXRUJfUlRDKQorI2lmIEVOQUJM
RShXRUJfUlRDKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIGlmIChjb25maWd1cmF0aW9uLnR5cGUg
PT0gTWVkaWFEZWNvZGluZ1R5cGU6OldlYlJUQykgewogICAgICAgICBpZiAoYXV0byogcGFnZSA9
IGRvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCku
Y3JlYXRlRGVjb2RpbmdDb25maWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJhdGlvbiksIFdURk1v
dmUoZGVjb2RpbmdDYWxsYmFjaykpOwpAQCAtMjAwLDcgKzIwMCw3IEBAIHN0YXRpYyB2b2lkIGdh
dGhlckVuY29kaW5nSW5mbyhEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhRW5jb2RpbmdDb25maWd1
cmF0aW9uJiYKICAgICAgICAgY2FsbGJhY2soV1RGTW92ZShyZXN1bHQpKTsKICAgICB9OwogCi0j
aWYgRU5BQkxFKFdFQl9SVEMpCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShMSUJXRUJSVEMp
CiAgICAgaWYgKGNvbmZpZ3VyYXRpb24udHlwZSA9PSBNZWRpYUVuY29kaW5nVHlwZTo6V2ViUlRD
KSB7CiAgICAgICAgIGlmIChhdXRvKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAg
ICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5jcmVhdGVFbmNvZGluZ0NvbmZpZ3VyYXRpb24o
V1RGTW92ZShjb25maWd1cmF0aW9uKSwgV1RGTW92ZShlbmNvZGluZ0NhbGxiYWNrKSk7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAK
aW5kZXggNTA2ZjMzNzRiN2U2ZDc2ZDU5OGY0OTUzZDg0OWMzOGVhYWM3MjdlOS4uN2I5YjViNjZk
YTUxNTMyNGU2NjZjZjRiMWJhM2Y1Y2QyZmFlMGJkMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcApAQCAtNDAsNiArNDAsNyBA
QAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIK
ICNpbmNsdWRlICJKU01lZGlhRGV2aWNlSW5mby5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNp
bmNsdWRlICJNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3RyYWludHMuaCIKICNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTZXR0aW5ncy5oIgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVj
dGlvbkJhY2tlbmQuY3BwCmluZGV4IDg2ZDc1NzM5OTJmNGQ1YmQ0YzM1M2RjYjYwOTcyNjRlOTg1
ZDU3ZTguLjBlNzAxYmZkNDdlOTI4NGJhMTc4MTY0MWQ5MjI3YTNhZjg1OWQ1NzYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcHAKQEAgLTUzLDkgKzUzLDE0IEBACiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVt
YmVycy5oPgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiR1N0cmVhbWVy
V2ViUlRDVXRpbHMuaCIKKyNlbmRpZgorCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLSNpZiAhVVNF
KExJQldFQlJUQykKKyNpZiAhVVNFKExJQldFQlJUQykgJiYgIVVTRShHU1RSRUFNRVJfV0VCUlRD
KQorCiBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3JlYXRl
Tm9QZWVyQ29ubmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5lY3Rpb24mKQogewogICAgIHJldHVy
biBudWxscHRyOwpAQCAtNDM3LDEzICs0NDIsMTkgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmdlbmVyYXRlQ2VydGlmaWNhdGUoRG9jdW1lbnQmIGRvY3VtZW50LCBjb25zdCBDZXJ0aWYK
ICAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1
cm47CiAgICAgfQorCiAgICAgTGliV2ViUlRDQ2VydGlmaWNhdGVHZW5lcmF0b3I6OmdlbmVyYXRl
Q2VydGlmaWNhdGUoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwgcGFnZS0+bGliV2ViUlRDUHJv
dmlkZXIoKSwgaW5mbywgW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpXShhdXRvJiYgcmVzdWx0
KSBtdXRhYmxlIHsKICAgICAgICAgcHJvbWlzZS5zZXR0bGUoV1RGTW92ZShyZXN1bHQpKTsKICAg
ICB9KTsKKyNlbGlmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorICAgIGF1dG8gY2VydGlmaWNhdGUg
PSA6OldlYkNvcmU6OmdlbmVyYXRlQ2VydGlmaWNhdGUoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4o
KSwgaW5mbyk7CisgICAgaWYgKGNlcnRpZmljYXRlLmhhc192YWx1ZSgpKQorICAgICAgICBwcm9t
aXNlLnJlc29sdmUoKmNlcnRpZmljYXRlKTsKKyAgICBlbHNlCisgICAgICAgIHByb21pc2UucmVq
ZWN0KE5vdFN1cHBvcnRlZEVycm9yKTsKICNlbHNlCiAgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50
KTsKLSAgICBVTlVTRURfUEFSQU0oZXhwaXJlcyk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOwor
ICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKICAgICBwcm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRF
cnJvcik7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggNWJkZGZlYzdlNGRmYzlkOWMw
Mjk5YzllMjdjYTlkYzIyZGY2NDEwNC4uOTBkZTYzOTkzNGVkNjFjNWMwYjEwMTJjMGFhNTM5N2Rk
MGQ4YjMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgRXhjZXB0aW9uT3I8
UmVmPFJUQ1BlZXJDb25uZWN0aW9uPj4gUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZShEb2N1bWVu
dCYgZG9jdW1lbnQKICAgICBpZiAoIXBlZXJDb25uZWN0aW9uLT5pc0Nsb3NlZCgpKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKSB7CiAgICAgICAgICAgICBwZWVy
Q29ubmVjdGlvbi0+cmVnaXN0ZXJUb0NvbnRyb2xsZXIocGFnZS0+cnRjQ29udHJvbGxlcigpKTsK
LSNpZiAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorI2lmIFVTRShMSUJX
RUJSVEMpICYmICghTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRCkKICAgICAg
ICAgICAgIGlmICghcGFnZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgICAg
ICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLnNldExvZ2dpbmdMZXZlbChMb2dXZWJSVEMu
bGV2ZWwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kNGFlMzk2MTUwN2JkMWFlNGQ5ODAzMWE5MzAyZjcz
NzFlYTc0ZjJhCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcApAQCAtMCww
ICsxLDMwOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIgorCisjaWYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbC5oIgor
I2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsRXZlbnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgor
I2luY2x1ZGUgIlJUQ1ByaW9yaXR5VHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2Rl
YnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVi
dWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gR1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpmcm9tUlRDRGF0YUNoYW5uZWxJbml0KGNvbnN0IFJU
Q0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVy
ZT4gaW5pdChnc3Rfc3RydWN0dXJlX25ldygib3B0aW9ucyIsICJwcm90b2NvbCIsIEdfVFlQRV9T
VFJJTkcsIG9wdGlvbnMucHJvdG9jb2wudXRmOCgpLmRhdGEoKSwgbnVsbHB0cikpOworCisgICAg
aWYgKG9wdGlvbnMub3JkZXJlZCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQo
KSwgIm9yZGVyZWQiLCBHX1RZUEVfQk9PTEVBTiwgKm9wdGlvbnMub3JkZXJlZCwgbnVsbHB0cik7
CisgICAgaWYgKG9wdGlvbnMubWF4UGFja2V0TGlmZVRpbWUpCisgICAgICAgIGdzdF9zdHJ1Y3R1
cmVfc2V0KGluaXQuZ2V0KCksICJtYXgtcGFja2V0LWxpZmV0aW1lIiwgR19UWVBFX0lOVCwgKm9w
dGlvbnMubWF4UGFja2V0TGlmZVRpbWUsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25zLm1heFJl
dHJhbnNtaXRzKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAibWF4LXJl
dHJhbnNtaXRzIiwgR19UWVBFX0lOVCwgKm9wdGlvbnMubWF4UmV0cmFuc21pdHMsIG51bGxwdHIp
OworICAgIGlmIChvcHRpb25zLm5lZ290aWF0ZWQpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
KGluaXQuZ2V0KCksICJuZWdvdGlhdGVkIiwgR19UWVBFX0JPT0xFQU4sICpvcHRpb25zLm5lZ290
aWF0ZWQsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25zLmlkKQorICAgICAgICBnc3Rfc3RydWN0
dXJlX3NldChpbml0LmdldCgpLCAiaWQiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5pZCwgbnVsbHB0
cik7CisKKyAgICBHc3RXZWJSVENQcmlvcml0eVR5cGUgcHJpb3JpdHlUeXBlOworICAgIHN3aXRj
aCAob3B0aW9ucy5wcmlvcml0eSkgeworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93
OgorICAgICAgICBwcmlvcml0eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfVkVSWV9M
T1c7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpMb3c6CisgICAg
ICAgIHByaW9yaXR5VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9MT1c7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpNZWRpdW06CisgICAgICAgIHByaW9y
aXR5VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9NRURJVU07CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpIaWdoOgorICAgICAgICBwcmlvcml0eVR5cGUg
PSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfSElHSDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJwcmlvcml0eSIsIEdTVF9UWVBFX1dF
QlJUQ19QUklPUklUWV9UWVBFLCBwcmlvcml0eVR5cGUsIG51bGxwdHIpOworCisgICAgcmV0dXJu
IGluaXQ7Cit9CisKK1JlZjxSVENEYXRhQ2hhbm5lbEV2ZW50PiBHU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXI6OmNyZWF0ZURhdGFDaGFubmVsRXZlbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBHUmVm
UHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmIGRhdGFDaGFubmVsKQoreworICAgIEdVbmlxdWVP
dXRQdHI8Y2hhcj4gbGFiZWw7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBwcm90b2NvbDsKKyAg
ICBnYm9vbGVhbiBvcmRlcmVkLCBuZWdvdGlhdGVkOworICAgIGdpbnQgbWF4UGFja2V0TGlmZVRp
bWUsIG1heFJldHJhbnNtaXRzLCBpZDsKKyAgICBnX29iamVjdF9nZXQoZGF0YUNoYW5uZWwuZ2V0
KCksICJvcmRlcmVkIiwgJm9yZGVyZWQsICJsYWJlbCIsICZsYWJlbC5vdXRQdHIoKSwKKyAgICAg
ICAgIm1heC1wYWNrZXQtbGlmZXRpbWUiLCAmbWF4UGFja2V0TGlmZVRpbWUsICJtYXgtcmV0cmFu
c21pdHMiLCAmbWF4UmV0cmFuc21pdHMsCisgICAgICAgICJwcm90b2NvbCIsICZwcm90b2NvbC5v
dXRQdHIoKSwgIm5lZ290aWF0ZWQiLCAmbmVnb3RpYXRlZCwgImlkIiwgJmlkLCBudWxscHRyKTsK
KworICAgIFJUQ0RhdGFDaGFubmVsSW5pdCBpbml0OworICAgIGluaXQub3JkZXJlZCA9IG9yZGVy
ZWQ7CisgICAgaW5pdC5tYXhQYWNrZXRMaWZlVGltZSA9IG1heFBhY2tldExpZmVUaW1lOworICAg
IGluaXQubWF4UmV0cmFuc21pdHMgPSBtYXhSZXRyYW5zbWl0czsKKyAgICBpbml0LnByb3RvY29s
ID0gU3RyaW5nKHByb3RvY29sLmdldCgpKTsKKyAgICBpbml0Lm5lZ290aWF0ZWQgPSBuZWdvdGlh
dGVkOworICAgIGluaXQuaWQgPSBpZDsKKworICAgIGF1dG8gaGFuZGxlciA9IFdURjo6bWFrZVVu
aXF1ZTxHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI+KFdURk1vdmUoZGF0YUNoYW5uZWwpKTsK
KyAgICBhdXRvIGNoYW5uZWwgPSBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlKGRvY3VtZW50LCBXVEZN
b3ZlKGhhbmRsZXIpLCBTdHJpbmc6OmZyb21VVEY4KGxhYmVsLmdldCgpKSwgV1RGTW92ZShpbml0
KSk7CisgICAgcmV0dXJuIFJUQ0RhdGFDaGFubmVsRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
ZGF0YWNoYW5uZWxFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFi
bGU6Ok5vLCBXVEZNb3ZlKGNoYW5uZWwpKTsKK30KKworR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hh
bm5lbD4mJiBjaGFubmVsKQorICAgIDogbV9jaGFubmVsKFdURk1vdmUoY2hhbm5lbCkpCit7Cisg
ICAgQVNTRVJUKG1fY2hhbm5lbCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9j
aGFubmVsLmdldCgpLCAibm90aWZ5OjpyZWFkeS1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJl
YW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlcikgeworICAgICAgICBoYW5kbGVyLT5yZWFk
eVN0YXRlQ2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tbWVzc2FnZS1kYXRhIiwgR19DQUxMQkFDSygrW10o
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBHQnl0ZXMqIGJ5dGVzKSB7Cisg
ICAgICAgIGhhbmRsZXItPm9uTWVzc2FnZURhdGEoYnl0ZXMpOworICAgIH0pLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tbWVzc2FnZS1z
dHJpbmciLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRs
ZXIsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpIHsKKyAgICAgICAgaGFuZGxlci0+b25NZXNzYWdlU3Ry
aW5nKG1lc3NhZ2UpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBw
ZWQobV9jaGFubmVsLmdldCgpLCAib24tZXJyb3IiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJE
YXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIsIEdFcnJvciogZXJyb3IpIHsKKyAgICAgICAgaGFu
ZGxlci0+b25FcnJvcihlcnJvcik7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX2NoYW5uZWwuZ2V0KCksICJvbi1idWZmZXJlZC1hbW91bnQtbG93IiwgR19D
QUxMQkFDSygrW10oR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcGFzcyB0aGUgYW1vdW50IGRlbHRhIGZyb20gd2VicnRj
YmluIHRvIHRoZSBXZWJDb3JlIGhhbmRsZXIuCisgICAgICAgIGhhbmRsZXItPm9uQnVmZmVyZWRB
bW91bnRMb3coKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK0dTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcjo6fkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcigpCit7CisgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fY2hhbm5lbC5nZXQoKSwgdGhpcyk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZXRDbGllbnQoUlRDRGF0YUNoYW5uZWxI
YW5kbGVyQ2xpZW50JiBjbGllbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyIGNv
bnRleHRJZGVudGlmaWVyKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsK
KyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICAqbV9jbGllbnQgPSBjbGllbnQ7CisgICAgbV9j
b250ZXh0SWRlbnRpZmllciA9IGNvbnRleHRJZGVudGlmaWVyOworCisgICAgZm9yIChhdXRvJiBt
ZXNzYWdlIDogbV9wZW5kaW5nTWVzc2FnZXMpIHsKKyAgICAgICAgc3dpdGNoT24obWVzc2FnZSwg
WyZdKFJlZjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiYgZGF0YSkgeworICAgICAgICAgICAgR1NU
X0RFQlVHKCJOb3RpZnlpbmcgcXVldWVkIHJhdyBkYXRhIChzaXplOiAlenUpIiwgZGF0YS0+c2l6
ZSgpKTsKKyAgICAgICAgICAgIGNsaWVudC5kaWRSZWNlaXZlUmF3RGF0YShkYXRhLT5tYWtlQ29u
dGlndW91cygpLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgICAgIH0sIFsmXShTdHJpbmcm
IHRleHQpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiTm90aWZ5aW5nIHF1ZXVlZCBzdHJpbmcg
JXMiLCB0ZXh0LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNsaWVudC5kaWRSZWNlaXZl
U3RyaW5nRGF0YSh0ZXh0KTsKKyAgICAgICAgfSwgWyZdKFN0YXRlQ2hhbmdlIHN0YXRlQ2hhbmdl
KSB7CisgICAgICAgICAgICBpZiAoc3RhdGVDaGFuZ2UuZXJyb3IpIHsKKyAgICAgICAgICAgICAg
ICBpZiAoYXV0byBydGNFcnJvciA9IHRvUlRDRXJyb3IoKnN0YXRlQ2hhbmdlLmVycm9yKSkKKyAg
ICAgICAgICAgICAgICAgICAgY2xpZW50LmRpZERldGVjdEVycm9yKHJ0Y0Vycm9yLnJlbGVhc2VO
b25OdWxsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgR1NUX0RFQlVHKCJEaXNwYXRj
aGluZyBzdGF0ZSBjaGFuZ2UgdG8gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRlQ2hhbmdlLnN0
YXRlKSk7CisgICAgICAgICAgICBjbGllbnQuZGlkQ2hhbmdlUmVhZHlTdGF0ZShzdGF0ZUNoYW5n
ZS5zdGF0ZSk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBtX3BlbmRpbmdNZXNzYWdlcy5jbGVh
cigpOworfQorCitib29sIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFN0cmluZ0Rh
dGEoY29uc3QgQ1N0cmluZyYgdGV4dCkKK3sKKyAgICBHU1RfREVCVUcoIlNlbmRpbmcgc3RyaW5n
ICVzIiwgdGV4dC5kYXRhKCkpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2NoYW5uZWwu
Z2V0KCksICJzZW5kLXN0cmluZyIsIHRleHQuZGF0YSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworYm9vbCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnNlbmRSYXdEYXRhKGNvbnN0IHVp
bnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXV0byBieXRlcyA9IGFkb3B0R1Jl
ZihnX2J5dGVzX25ldyhkYXRhLCBsZW5ndGgpKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9jaGFubmVsLmdldCgpLCAic2VuZC1kYXRhIiwgYnl0ZXMuZ2V0KCkpOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2xvc2UoKQorewor
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2NoYW5uZWwuZ2V0KCksICJjbG9zZSIpOworfQor
Cit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2hlY2tTdGF0ZSgpCit7CisgICAg
QVNTRVJUKG1fY2xpZW50TG9jay5pc0hlbGQoKSk7CisKKyAgICBHc3RXZWJSVENEYXRhQ2hhbm5l
bFN0YXRlIGNoYW5uZWxTdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV9jaGFubmVsLmdldCgpLCAi
cmVhZHktc3RhdGUiLCAmY2hhbm5lbFN0YXRlLCBudWxscHRyKTsKKworICAgIFJUQ0RhdGFDaGFu
bmVsU3RhdGUgc3RhdGU7CisgICAgc3dpdGNoIChjaGFubmVsU3RhdGUpIHsKKyAgICBjYXNlIEdT
VF9XRUJSVENfREFUQV9DSEFOTkVMX1NUQVRFX05FVzoKKyAgICBjYXNlIEdTVF9XRUJSVENfREFU
QV9DSEFOTkVMX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgIHN0YXRlID0gUlRDRGF0YUNoYW5u
ZWxTdGF0ZTo6Q29ubmVjdGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRD
X0RBVEFfQ0hBTk5FTF9TVEFURV9PUEVOOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVs
U3RhdGU6Ok9wZW47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRBX0NI
QU5ORUxfU1RBVEVfQ0xPU0lORzoKKyAgICAgICAgc3RhdGUgPSBSVENEYXRhQ2hhbm5lbFN0YXRl
OjpDbG9zaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9XRUJSVENfREFUQV9DSEFO
TkVMX1NUQVRFX0NMT1NFRDoKKyAgICAgICAgc3RhdGUgPSBSVENEYXRhQ2hhbm5lbFN0YXRlOjpD
bG9zZWQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghbV9jbGllbnQpIHsKKyAg
ICAgICAgR1NUX0RFQlVHKCJObyBjbGllbnQgeWV0LCBxdWV1ZWluZyBzdGF0ZSIpOworICAgICAg
ICBtX3BlbmRpbmdNZXNzYWdlcy5hcHBlbmQoU3RhdGVDaGFuZ2UgeyBzdGF0ZSwgeyB9IH0pOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCEqbV9jbGllbnQpCisgICAgICAgIHJl
dHVybjsKKworICAgIEdTVF9ERUJVRygiRGlzcGF0Y2hpbmcgc3RhdGUgY2hhbmdlIHRvICVkIiwg
c3RhdGljX2Nhc3Q8aW50PihzdGF0ZSkpOworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVu
dCwgc3RhdGVdIHsKKyAgICAgICAgaWYgKCEqY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBjbGllbnQudmFsdWUoKS0+ZGlkQ2hhbmdlUmVhZHlTdGF0ZShzdGF0ZSk7CisgICAg
fSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpyZWFkeVN0YXRlQ2hh
bmdlZCgpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9OworICAgIGNoZWNr
U3RhdGUoKTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uTWVzc2Fn
ZURhdGEoR0J5dGVzKiBieXRlcykKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2Nr
IH07CisKKyAgICBpZiAoIW1fY2xpZW50KSB7CisgICAgICAgIG1fcGVuZGluZ01lc3NhZ2VzLmFw
cGVuZChGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpjcmVhdGUoYnl0ZXMpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghKm1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBwb3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnQsIGJ5dGVzID0gR1JlZlB0cjxHQnl0ZXM+KGJ5
dGVzKV0geworICAgICAgICBpZiAoISpjbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGdzaXplIHNpemUgPSAwOworICAgICAgICBjb25zdCBhdXRvKiBkYXRhID0gcmVpbnRlcnBy
ZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZ19ieXRlc19nZXRfZGF0YShieXRlcy5nZXQoKSwgJnNp
emUpKTsKKyAgICAgICAgY2xpZW50LnZhbHVlKCktPmRpZFJlY2VpdmVSYXdEYXRhKGRhdGEsIHNp
emUpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25N
ZXNzYWdlU3RyaW5nKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgTG9ja2VyIGxvY2tlciB7
IG1fY2xpZW50TG9jayB9OworCisgICAgR1NUX0RFQlVHKCJJbmNvbWluZyBzdHJpbmc6ICVzIiwg
bWVzc2FnZSk7CisgICAgaWYgKCFtX2NsaWVudCkgeworICAgICAgICBHU1RfREVCVUcoIk5vIGNs
aWVudCB5ZXQsIGtlZXBpbmcgYXMgYnVmZmVyZWQgbWVzc2FnZSIpOworICAgICAgICBtX3BlbmRp
bmdNZXNzYWdlcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKSk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBpZiAoISptX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR1NUX0RFQlVHKCJEaXNwYXRjaGluZyBwYXlsb2FkIik7CisgICAgcG9zdFRhc2soW2NsaWVu
dCA9IG1fY2xpZW50LCBzdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpXSB7CisgICAg
ICAgIGlmICghKmNsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjbGllbnQu
dmFsdWUoKS0+ZGlkUmVjZWl2ZVN0cmluZ0RhdGEoc3RyaW5nKTsKKyAgICAgICAgR1NUX0RFQlVH
KCJEb25lIik7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
OjpvbkVycm9yKEdFcnJvciogZXJyb3IpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50
TG9jayB9OworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9X
QVJOSU5HKCJHb3QgZGF0YS1jaGFubmVsIGVycm9yICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAg
IEdVbmlxdWVQdHI8R0Vycm9yPiBlcnJvckNvcHkoZ19lcnJvcl9jb3B5KGVycm9yKSk7CisgICAg
cG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50LCBlcnJvciA9IFdURk1vdmUoZXJyb3JDb3B5KV0g
eworICAgICAgICBpZiAoIWNsaWVudCB8fCAhZXJyb3IpCisgICAgICAgICAgICByZXR1cm47CisK
KyAgICAgICAgYXV0byBydGNFcnJvciA9IHRvUlRDRXJyb3IoZXJyb3IuZ2V0KCkpOworICAgICAg
ICBpZiAoIXJ0Y0Vycm9yKQorICAgICAgICAgICAgcnRjRXJyb3IgPSBSVENFcnJvcjo6Y3JlYXRl
KFJUQ0Vycm9yOjpJbml0IHsgUlRDRXJyb3JEZXRhaWxUeXBlOjpEYXRhQ2hhbm5lbEZhaWx1cmUs
IHsgfSwgeyB9LCB7IH0sIHsgfSB9LCB7IH0pOworICAgICAgICBjbGllbnQudmFsdWUoKS0+ZGlk
RGV0ZWN0RXJyb3IocnRjRXJyb3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfSk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbkJ1ZmZlcmVkQW1vdW50TG93KCkKK3sK
KyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisgICAgaWYgKCFtX2NsaWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50XSB7Cisg
ICAgICAgIGlmICghY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIEZJ
WE1FOiBQYXNzIGFtb3VudCB0byBoYW5kbGVyIGluc3RlYWQgb2YgMC4KKyAgICAgICAgY2xpZW50
LnZhbHVlKCktPmJ1ZmZlcmVkQW1vdW50SXNEZWNyZWFzaW5nKDApOworICAgIH0pOworfQorCit2
b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6cG9zdFRhc2soRnVuY3Rpb248dm9pZCgp
PiYmIGZ1bmN0aW9uKQoreworICAgIEFTU0VSVChtX2NsaWVudExvY2suaXNIZWxkKCkpOworCisg
ICAgaWYgKCFtX2NvbnRleHRJZGVudGlmaWVyKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQo
V1RGTW92ZShmdW5jdGlvbikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFNjcmlwdEV4
ZWN1dGlvbkNvbnRleHQ6OnBvc3RUYXNrVG8obV9jb250ZXh0SWRlbnRpZmllciwgV1RGTW92ZShm
dW5jdGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTIzNzg3YTczZDZkMzE3ZmQyNzQ5ZjYxZTljNzZhZTJi
ZWRkYzFlNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oCkBAIC0wLDAgKzEs
ODYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ0RhdGFDaGFu
bmVsSGFuZGxlci5oIgorI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsU3RhdGUuaCIKKyNpbmNsdWRl
ICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNsdWRl
IDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBSVENEYXRhQ2hhbm5lbEV2ZW50OworY2xh
c3MgUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50Oworc3RydWN0IFJUQ0RhdGFDaGFubmVsSW5p
dDsKKworY2xhc3MgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyIGZpbmFsIDogcHVibGljIFJU
Q0RhdGFDaGFubmVsSGFuZGxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKEdSZWZQdHI8R3N0
V2ViUlRDRGF0YUNoYW5uZWw+JiYpOworICAgIH5HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIo
KTsKKworICAgIHN0YXRpYyBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZnJvbVJUQ0RhdGFDaGFu
bmVsSW5pdChjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKTsKKyAgICBzdGF0aWMgUmVmPFJUQ0Rh
dGFDaGFubmVsRXZlbnQ+IGNyZWF0ZURhdGFDaGFubmVsRXZlbnQoRG9jdW1lbnQmLCBHUmVmUHRy
PEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmKTsKKworICAgIHZvaWQgb25NZXNzYWdlRGF0YShHQnl0
ZXMqKTsKKyAgICB2b2lkIG9uTWVzc2FnZVN0cmluZyhjb25zdCBjaGFyKik7CisgICAgdm9pZCBv
bkVycm9yKEdFcnJvciopOworICAgIHZvaWQgb25CdWZmZXJlZEFtb3VudExvdygpOworICAgIHZv
aWQgcmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENEYXRhQ2hhbm5l
bEhhbmRsZXIgQVBJCisgICAgdm9pZCBzZXRDbGllbnQoUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xp
ZW50JiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIpIGZpbmFsOworICAgIGJvb2wg
c2VuZFN0cmluZ0RhdGEoY29uc3QgQ1N0cmluZyYpIGZpbmFsOworICAgIGJvb2wgc2VuZFJhd0Rh
dGEoY29uc3QgdWludDhfdCosIHNpemVfdCkgZmluYWw7CisgICAgdm9pZCBjbG9zZSgpIGZpbmFs
OworCisgICAgdm9pZCBjaGVja1N0YXRlKCk7CisgICAgdm9pZCBwb3N0VGFzayhGdW5jdGlvbjx2
b2lkKCk+JiYpOworCisgICAgc3RydWN0IFN0YXRlQ2hhbmdlIHsKKyAgICAgICAgUlRDRGF0YUNo
YW5uZWxTdGF0ZSBzdGF0ZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxHRXJyb3IqPiBlcnJvcjsK
KyAgICB9OworICAgIHVzaW5nIE1lc3NhZ2UgPSBzdGQ6OnZhcmlhbnQ8U3RhdGVDaGFuZ2UsIFN0
cmluZywgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+PjsKKyAgICB1c2luZyBQZW5kaW5nTWVz
c2FnZXMgPSBWZWN0b3I8TWVzc2FnZT47CisKKyAgICBMb2NrIG1fY2xpZW50TG9jazsKKyAgICBH
UmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBtX2NoYW5uZWw7CisgICAgc3RkOjpvcHRpb25h
bDxXZWFrUHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudD4+IG1fY2xpZW50IFdURl9HVUFS
REVEX0JZX0xPQ0sobV9jbGllbnRMb2NrKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRl
bnRpZmllciBtX2NvbnRleHRJZGVudGlmaWVyOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+
IG1fcHJldmlvdXNCdWZmZXJlZEFtb3VudDsKKyAgICBQZW5kaW5nTWVzc2FnZXMgbV9wZW5kaW5n
TWVzc2FnZXMgV1RGX0dVQVJERURfQllfTE9DSyhtX2NsaWVudExvY2spOworCisgICAgTG9jayBt
X29wZW5Mb2NrOworICAgIENvbmRpdGlvbiBtX29wZW5Db25kaXRpb24gV1RGX0dVQVJERURfQllf
TE9DSyhtX29wZW5Mb2NrKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkMTQ0OTIwZmNkNDAwMWQ1
ZjVmZWFjMzJlYjM2ZTIwYWIzNWZjNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFj
a2VuZC5jcHAKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckR0bHNUcmFuc3BvcnRC
YWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisKKyNpbmNsdWRlICJHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BcnJheUJ1
ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVyRHRsc1Ry
YW5zcG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiYgdHJh
bnNwb3J0KQorICAgIDogbV9iYWNrZW5kKHRyYW5zcG9ydCkKK3sKKyAgICBBU1NFUlQobV9iYWNr
ZW5kKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworfQorCitHU3RyZWFtZXJEdGxzVHJh
bnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICB1
bnJlZ2lzdGVyQ2xpZW50KCk7Cit9CisKK1VuaXF1ZVJlZjxSVENJY2VUcmFuc3BvcnRCYWNrZW5k
PiBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0QmFja2VuZCgpCit7
CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZD4o
bV9iYWNrZW5kKTsKK30KKwordm9pZCBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6cmVn
aXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7Cisg
ICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fYmFj
a2VuZC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEdGxz
VHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5kLT5zdGF0ZUNoYW5n
ZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfYnlfZGF0YShtX2JhY2tlbmQuZ2V0KCksIHRoaXMpOworICAgIG1fY2xpZW50LmNsZWFy
KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdl
ZCgpIGNvbnN0Cit7CisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3dlYWtUaGlzID0gV2Vh
a1B0ciB7IHRoaXMgfV0geworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBpZiAoIXdlYWtUaGlzLT5tX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IHJlbW90ZUNlcnRpZmljYXRlOworICAg
ICAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IGNlcnRpZmljYXRlOworICAgICAgICBHc3RXZWJSVENE
VExTVHJhbnNwb3J0U3RhdGUgc3RhdGU7CisgICAgICAgIGdfb2JqZWN0X2dldCh3ZWFrVGhpcy0+
bV9iYWNrZW5kLmdldCgpLCAic3RhdGUiLCAmc3RhdGUsICJyZW1vdGUtY2VydGlmaWNhdGUiLCAm
cmVtb3RlQ2VydGlmaWNhdGUub3V0UHRyKCksICJjZXJ0aWZpY2F0ZSIsICZjZXJ0aWZpY2F0ZS5v
dXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICAgICAgVmVjdG9yPFJlZjxKU0M6OkFycmF5QnVmZmVy
Pj4gY2VydGlmaWNhdGVzOworICAgICAgICBjZXJ0aWZpY2F0ZXMucmVzZXJ2ZUluaXRpYWxDYXBh
Y2l0eSgyKTsKKyAgICAgICAgaWYgKHJlbW90ZUNlcnRpZmljYXRlKSB7CisgICAgICAgICAgICBh
dXRvIHJlbW90ZUNlcnRpZmljYXRlU3RyaW5nID0gbWFrZVN0cmluZyhyZW1vdGVDZXJ0aWZpY2F0
ZS5nZXQoKSk7CisgICAgICAgICAgICBhdXRvIGpzUmVtb3RlQ2VydGlmaWNhdGUgPSBKU0M6OkFy
cmF5QnVmZmVyOjpjcmVhdGUocmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcuY2hhcmFjdGVyczgoKSwg
cmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcuc2l6ZUluQnl0ZXMoKSk7CisgICAgICAgICAgICBjZXJ0
aWZpY2F0ZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoanNSZW1vdGVDZXJ0aWZpY2F0ZSkpOwor
CisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlU3RyaW5nID0gbWFrZVN0cmluZyhjZXJ0aWZp
Y2F0ZS5nZXQoKSk7CisgICAgICAgICAgICBhdXRvIGpzQ2VydGlmaWNhdGUgPSBKU0M6OkFycmF5
QnVmZmVyOjpjcmVhdGUoY2VydGlmaWNhdGVTdHJpbmcuY2hhcmFjdGVyczgoKSwgY2VydGlmaWNh
dGVTdHJpbmcuc2l6ZUluQnl0ZXMoKSk7CisgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMudW5jaGVj
a2VkQXBwZW5kKFdURk1vdmUoanNDZXJ0aWZpY2F0ZSkpOworICAgICAgICB9CisgICAgICAgIHdl
YWtUaGlzLT5tX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENEdGxzVHJhbnNwb3J0U3RhdGUo
c3RhdGUpLCBXVEZNb3ZlKGNlcnRpZmljYXRlcykpOworICAgIH0pOworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4yYzFkYzg4NDA4Mjc3NmIzMGIwMGEyOTJhMTk2MDc1MDhlMDQ0
MWRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaApAQCAtMCwwICsxLDUz
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQuaCIKKyNpbmNsdWRlICJSVENEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0
Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQs
IHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCwgV2Vh
a1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKKworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lckR0bHNUcmFuc3BvcnRC
YWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mKTsKKyAgICB+R1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENEdGxz
VHJhbnNwb3J0QmFja2VuZAorICAgIGNvbnN0IHZvaWQqIGJhY2tlbmQoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKyAgICBVbmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0
QmFja2VuZD4gaWNlVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworICAgIHZvaWQgcmVnaXN0ZXJD
bGllbnQoQ2xpZW50JikgZmluYWw7CisgICAgdm9pZCB1bnJlZ2lzdGVyQ2xpZW50KCkgZmluYWw7
CisKKyAgICB2b2lkIHN0YXRlQ2hhbmdlZCgpIGNvbnN0OworCisgICAgR1JlZlB0cjxHc3RXZWJS
VENEVExTVHJhbnNwb3J0PiBtX2JhY2tlbmQ7CisgICAgV2Vha1B0cjxDbGllbnQ+IG1fY2xpZW50
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjBiY2ZlZTBmODM4NWMz
M2U3NTk1ZTViY2JlNTgxNzJjYjE5YjdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZC5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIw
MjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJJY2VUcmFuc3BvcnRC
YWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPEphdmFTY3Jp
cHRDb3JlL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OkdT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJh
bnNwb3J0PiYgdHJhbnNwb3J0KQorICAgIDogbV9iYWNrZW5kKHRyYW5zcG9ydCkKK3sKKyAgICBB
U1NFUlQobV9iYWNrZW5kKTsKKworICAgIGljZVRyYW5zcG9ydENoYW5nZWQoKTsKKyAgICBnX3Np
Z25hbF9jb25uZWN0X3N3YXBwZWQobV9iYWNrZW5kLmdldCgpLCAibm90aWZ5Ojp0cmFuc3BvcnQi
LCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKiBiYWNrZW5kKSB7
CisgICAgICAgIGJhY2tlbmQtPmljZVRyYW5zcG9ydENoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7
Cit9CisKK0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFtZXJJY2VUcmFuc3Bv
cnRCYWNrZW5kKCkKK3sKKyAgICBpZiAoR19JU19PQkpFQ1QobV9pY2VUcmFuc3BvcnQuZ2V0KCkp
KQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9pY2VUcmFu
c3BvcnQuZ2V0KCksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlf
ZGF0YShtX2JhY2tlbmQuZ2V0KCksIHRoaXMpOworfQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydENoYW5nZWQoKQoreworICAgIGlmIChHX0lTX09CSkVD
VChtX2ljZVRyYW5zcG9ydC5nZXQoKSkpCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nv
bm5lY3RfYnlfZGF0YShtX2ljZVRyYW5zcG9ydC5nZXQoKSwgdGhpcyk7CisKKyAgICBnX29iamVj
dF9nZXQobV9iYWNrZW5kLmdldCgpLCAidHJhbnNwb3J0IiwgJm1faWNlVHJhbnNwb3J0Lm91dFB0
cigpLCBudWxscHRyKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2ljZVRyYW5z
cG9ydC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJJY2VU
cmFuc3BvcnRCYWNrZW5kKiBiYWNrZW5kKSB7CisgICAgICAgIGJhY2tlbmQtPnN0YXRlQ2hhbmdl
ZCgpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9pY2VU
cmFuc3BvcnQuZ2V0KCksICJub3RpZnk6OmdhdGhlcmluZy1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1td
KEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2Vu
ZC0+Z2F0aGVyaW5nU3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworfQorCit2b2lkIEdT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KENsaWVudCYgY2xpZW50
KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0gY2xpZW50OworCisg
ICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHRyYW5zcG9ydFN0YXRlOworICAgIEdzdFdl
YlJUQ0lDRUdhdGhlcmluZ1N0YXRlIGdhdGhlcmluZ1N0YXRlOworICAgIGdfb2JqZWN0X2dldCht
X2ljZVRyYW5zcG9ydC5nZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0YXRlLCAiZ2F0aGVyaW5n
LXN0YXRlIiwgJmdhdGhlcmluZ1N0YXRlLCBudWxscHRyKTsKKworICAgIGNhbGxPbk1haW5UaHJl
YWQoW3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH0sIHRyYW5zcG9ydFN0YXRlLCBnYXRoZXJp
bmdTdGF0ZV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV9jbGllbnQp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gV2Ugc3RhcnQgb2JzZXJ2aW5nIGEg
Yml0IGxhdGUgYW5kIG1pZ2h0IG1pc3MgdGhlIGNoZWNraW5nIHN0YXRlLiBTeW50aGVzaXplIGl0
IGFzIG5lZWRlZC4KKyAgICAgICAgaWYgKHRyYW5zcG9ydFN0YXRlID4gR1NUX1dFQlJUQ19JQ0Vf
Q09OTkVDVElPTl9TVEFURV9DSEVDS0lORyAmJiB0cmFuc3BvcnRTdGF0ZSAhPSBHU1RfV0VCUlRD
X0lDRV9DT05ORUNUSU9OX1NUQVRFX0NMT1NFRCkKKyAgICAgICAgICAgIHdlYWtUaGlzLT5tX2Ns
aWVudC0+b25TdGF0ZUNoYW5nZWQoUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5nKTsKKwor
ICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDSWNlVHJhbnNw
b3J0U3RhdGUodHJhbnNwb3J0U3RhdGUpKTsKKyAgICAgICAgd2Vha1RoaXMtPm1fY2xpZW50LT5v
bkdhdGhlcmluZ1N0YXRlQ2hhbmdlZCh0b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKGdhdGhlcmluZ1N0
YXRlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6
dW5yZWdpc3RlckNsaWVudCgpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2NsaWVu
dC5jbGVhcigpOworfQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRl
Q2hhbmdlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHRyYW5zcG9ydFN0YXRlOworICAgIGdf
b2JqZWN0X2dldChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0YXRl
LCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAq
dGhpcyB9LCB0cmFuc3BvcnRTdGF0ZV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFr
VGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5t
X2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENJY2VUcmFuc3BvcnRTdGF0ZSh0cmFuc3BvcnRT
dGF0ZSkpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6
OmdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgZ2F0aGVyaW5n
U3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1faWNlVHJhbnNwb3J0LmdldCgpLCAiZ2F0aGVyaW5n
LXN0YXRlIiwgJmdhdGhlcmluZ1N0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFk
KFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCBnYXRoZXJpbmdTdGF0ZV0geworICAgICAg
ICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIHdlYWtUaGlzLT5tX2NsaWVudC0+b25HYXRoZXJpbmdTdGF0ZUNoYW5nZWQo
dG9SVENJY2VHYXRoZXJpbmdTdGF0ZShnYXRoZXJpbmdTdGF0ZSkpOworICAgIH0pOworfQorCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFu
c3BvcnRCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTk3YTM5NTdlMzJlMWExYTFhMzE1NTRmMDlkMGY2
NjZlOTE1MmJkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaApAQCAtMCww
ICsxLDU1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UK
KworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1
ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRCYWNrZW5k
LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0ljZVRy
YW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJJY2VUcmFuc3Bv
cnRCYWNrZW5kPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0
V2ViUlRDRFRMU1RyYW5zcG9ydD4mKTsKKyAgICB+R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQKKyAgICBjb25z
dCB2b2lkKiBiYWNrZW5kKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9
CisKKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAgIHZvaWQgdW5y
ZWdpc3RlckNsaWVudCgpIGZpbmFsOworCisgICAgdm9pZCBzdGF0ZUNoYW5nZWQoKSBjb25zdDsK
KyAgICB2b2lkIGdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpIGNvbnN0OworICAgIHZvaWQgaWNlVHJh
bnNwb3J0Q2hhbmdlZCgpOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiBt
X2JhY2tlbmQ7CisgICAgR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IG1faWNlVHJhbnNw
b3J0OworICAgIFdlYWtQdHI8Q2xpZW50PiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNzE5MDEwNmUyZTJlODAwMzhkM2IwNGIwOWRjMTNiN2ZhZDBhMmU4OQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lck1lZGlhRW5kcG9pbnQuY3BwCkBAIC0wLDAgKzEsMTI0MSBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lck1lZGlhRW5kcG9pbnQuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5j
bHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBS
ZWNlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJy
ZWQuaCIKKyNpbmNsdWRlICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisjaW5jbHVkZSAiTG9nZ2luZy5o
IgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbC5oIgorI2luY2x1ZGUgIlJU
Q0RhdGFDaGFubmVsRXZlbnQuaCIKKyNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGUuaCIKKyNpbmNs
dWRlICJSVENPZmZlck9wdGlvbnMuaCIKKyNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbi5oIgor
I2luY2x1ZGUgIlJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiUlRDU2Vzc2lv
bkRlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiUlRDU3RhdHNSZXBvcnQuaCIKKyNpbmNsdWRlICJS
VENUcmFja0V2ZW50LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisKKyNpbmNs
dWRlIDxnc3Qvc2RwL3NkcC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVk
ZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJjZVByaW9yaXR5
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgorCitH
U1RfREVCVUdfQ0FURUdPUlkod2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5l
IEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludChHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmIHBlZXJDb25uZWN0aW9uKQorICAg
IDogbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCisgICAgLCBtX3N0YXRz
Q29sbGVjdG9yKEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpjcmVhdGUoKSkKKyNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKKyAgICAsIG1fc3RhdHNMb2dUaW1lcigqdGhpcywgJkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZykKKyAgICAsIG1fbG9nZ2VyKHBlZXJD
b25uZWN0aW9uLmxvZ2dlcigpKQorICAgICwgbV9sb2dJZGVudGlmaWVyKHBlZXJDb25uZWN0aW9u
LmxvZ0lkZW50aWZpZXIoKSkKKyNlbmRpZgoreworICAgIGVuc3VyZUdTdHJlYW1lckluaXRpYWxp
emVkKCk7CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdSZWdpc3RlcmVkRmxhZzsK
KyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBbXSB7CisgICAgICAgIEdT
VF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcsICJ3ZWJr
aXR3ZWJydGNlbmRwb2ludCIsIDAsICJXZWJLaXQgV2ViUlRDIGVuZC1wb2ludCIpOworICAgIH0p
OworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYWxpemVQaXBlbGluZSgp
Cit7CisgICAgc3RhdGljIHVpbnQzMl90IG5QaXBlbGluZSA9IDA7CisgICAgYXV0byBwaXBlbGlu
ZU5hbWUgPSBtYWtlU3RyaW5nKCJ3ZWJraXQtd2VicnQtcGlwZWxpbmUtIiwgblBpcGVsaW5lKTsK
KyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyhwaXBlbGluZU5hbWUuYXNjaWkoKS5k
YXRhKCkpOworCisgICAgY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5l
LmdldCgpLCBbdGhpc10oR3N0TWVzc2FnZSogbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVNZXNz
YWdlKG1lc3NhZ2UpOworICAgIH0pOworCisgICAgYXV0byBiaW5OYW1lID0gbWFrZVN0cmluZygi
d2Via2l0LXdlYnJ0Y2Jpbi0iLCBuUGlwZWxpbmUrKyk7CisgICAgbV93ZWJydGNCaW4gPSBtYWtl
R1N0cmVhbWVyRWxlbWVudCgid2VicnRjYmluIiwgYmluTmFtZS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9zdGF0
c0NvbGxlY3Rvci0+c2V0RWxlbWVudChtX3dlYnJ0Y0Jpbi5nZXQoKSk7CisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAibm90aWZ5OjppY2UtY29ubmVjdGlv
bi1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50
KSB7CisgICAgICAgIGVuZFBvaW50LT5vbkljZUNvbm5lY3Rpb25DaGFuZ2UoKTsKKyAgICB9KSwg
dGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAi
bm90aWZ5OjppY2UtZ2F0aGVyaW5nLXN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVk
aWFFbmRwb2ludCogZW5kUG9pbnQpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uSWNlR2F0aGVyaW5n
Q2hhbmdlKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLW5lZ290aWF0aW9uLW5lZWRlZCIsIEdfQ0FMTEJBQ0soK1td
KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50KSB7CisgICAgICAgIGVuZFBvaW50LT5v
bk5lZ290aWF0aW9uTmVlZGVkKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLWljZS1jYW5kaWRhdGUiLCBHX0NBTExC
QUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCwgZ3VpbnQgc2RwTUxpbmVJ
bmRleCwgZ2NoYXJhcnJheSBjYW5kaWRhdGUpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uSWNlQ2Fu
ZGlkYXRlKHNkcE1MaW5lSW5kZXgsIGNhbmRpZGF0ZSk7CisgICAgfSksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInBhZC1hZGRlZCIsIEdf
Q0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RQYWQqIHBh
ZCkgeworICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5vdGlmaWNhdGlvbnMuCisgICAg
ICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9QQURfU1JDKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFtwcm90ZWN0ZWRU
aGlzID0gUmVmKCplbmRQb2ludCksIHBhZF0geworICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRo
aXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
cHJvdGVjdGVkVGhpcy0+YWRkUmVtb3RlU3RyZWFtKHBhZCk7CisgICAgICAgIH0pOworICAgIH0p
LCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCks
ICJwYWQtcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVu
ZFBvaW50LCBHc3RQYWQqIHBhZCkgeworICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5v
dGlmaWNhdGlvbnMuCisgICAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9Q
QURfU1JDKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRB
bmRXYWl0KFtwcm90ZWN0ZWRUaGlzID0gUmVmKCplbmRQb2ludCksIHBhZF0geworICAgICAgICAg
ICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+cmVtb3ZlUmVtb3RlU3RyZWFtKHBhZCk7
CisgICAgICAgIH0pOworICAgIH0pLCB0aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLWRhdGEtY2hhbm5lbCIsIEdfQ0FMTEJBQ0soK1td
KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RXZWJSVENEYXRhQ2hhbm5lbCog
Y2hhbm5lbCkgeworICAgICAgICBlbmRQb2ludC0+b25EYXRhQ2hhbm5lbChjaGFubmVsKTsKKyAg
ICB9KSwgdGhpcyk7CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9waXBlbGluZS5n
ZXQoKSksIG1fd2VicnRjQmluLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6fkdTdHJlYW1lck1lZGlhRW5kcG9pbnQoKQoreworICAgIGlmICht
X3BpcGVsaW5lKQorICAgICAgICB0ZWFyZG93blBpcGVsaW5lKCk7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6dGVhcmRvd25QaXBlbGluZSgpCit7CisgICAgUkVMRUFTRV9BU1NF
UlQobV9waXBlbGluZSk7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3RvcExvZ2dp
bmdTdGF0cygpOworI2VuZGlmCisgICAgbV9zdGF0c0NvbGxlY3Rvci0+c2V0RWxlbWVudChudWxs
cHRyKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX3dlYnJ0
Y0Jpbi5nZXQoKSwgdGhpcyk7CisgICAgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFj
ayhtX3BpcGVsaW5lLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGlu
ZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworCisgICAgbV9zb3VyY2VzLmNsZWFyKCk7CisgICAg
bV9yZW1vdGVNTGluZUluZm9zLmNsZWFyKCk7CisgICAgbV9yZW1vdGVTdHJlYW1zQnlJZC5jbGVh
cigpOworICAgIG1fd2VicnRjQmluID0gbnVsbHB0cjsKKyAgICBtX3BpcGVsaW5lID0gbnVsbHB0
cjsKK30KKworYm9vbCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpoYW5kbGVNZXNzYWdlKEdzdE1l
c3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2Up
KSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAgIEdTVF9ERUJVR19CSU5fVE9f
RE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJV
R19HUkFQSF9TSE9XX0FMTCwgImVvcyIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9N
RVNTQUdFX0VMRU1FTlQ6IHsKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGdzdF9tZXNzYWdl
X2dldF9zdHJ1Y3R1cmUobWVzc2FnZSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKGdzdF9zdHJ1
Y3R1cmVfZ2V0X25hbWUoZGF0YSksICJHc3RCaW5Gb3J3YXJkZWQiKSkgeworICAgICAgICAgICAg
R1JlZlB0cjxHc3RNZXNzYWdlPiBzdWJNZXNzYWdlOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVy
ZV9nZXQoZGF0YSwgIm1lc3NhZ2UiLCBHU1RfVFlQRV9NRVNTQUdFLCAmc3ViTWVzc2FnZS5vdXRQ
dHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShzdWJNZXNz
YWdlLmdldCgpKSA9PSBHU1RfTUVTU0FHRV9FT1MpCisgICAgICAgICAgICAgICAgZGlzcG9zZUVs
ZW1lbnRDaGFpbihHU1RfRUxFTUVOVF9DQVNUKEdTVF9NRVNTQUdFX1NSQyhzdWJNZXNzYWdlLmdl
dCgpKSkpOworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0Ogor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6ZGlzcG9zZUVsZW1lbnRDaGFpbihHc3RFbGVtZW50KiBlbGVtZW50
KQoreworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkdvdCBlbGVtZW50
IEVPUyBtZXNzYWdlIGZyb20gJSIgR1NUX1BUUl9GT1JNQVQsIGVsZW1lbnQpOworCisgICAgYXV0
byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZWxlbWVudCwgInNp
bmsiKSk7CisgICAgYXV0byBwZWVyID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIocGFkLmdl
dCgpKSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fcGlwZWxpbmUuZ2V0
KCksIFRSVUUpOworICAgIGdzdF9wYWRfdW5saW5rKHBlZXIuZ2V0KCksIHBhZC5nZXQoKSk7Cisg
ICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBlbGVtZW50
KTsKKyAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKG1fd2VicnRjQmluLmdldCgp
LCBwZWVyLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoZWxlbWVudCwgR1NUX1NU
QVRFX05VTEwpOworICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9waXBlbGluZS5n
ZXQoKSwgRkFMU0UpOworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldENvbmZp
Z3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7Cisg
ICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIHRlYXJkb3duUGlwZWxpbmUoKTsKKworICAgIGlm
ICghaW5pdGlhbGl6ZVBpcGVsaW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1
dG8gYnVuZGxlUG9saWN5ID0gYnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oY29uZmlndXJh
dGlvbik7CisgICAgYXV0byBpY2VUcmFuc3BvcnRQb2xpY3kgPSBpY2VUcmFuc3BvcnRQb2xpY3lG
cm9tQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKKyAgICBnX29iamVjdF9zZXQobV93ZWJy
dGNCaW4uZ2V0KCksICJidW5kbGUtcG9saWN5IiwgYnVuZGxlUG9saWN5LCAiaWNlLXRyYW5zcG9y
dC1wb2xpY3kiLCBpY2VUcmFuc3BvcnRQb2xpY3ksIG51bGxwdHIpOworCisgICAgZm9yIChhdXRv
JiBzZXJ2ZXIgOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHsKKyAgICAgICAgYm9vbCBzdHVu
U2V0ID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgdXJsIDogc2VydmVyLnVybHMpIHsKKyAg
ICAgICAgICAgIGlmICh1cmwucHJvdG9jb2woKS5zdGFydHNXaXRoKCJ0dXJuIikpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIHZhbGlkID0gdXJsLnN0cmluZygpLmlzb2xhdGVkQ29weSgpLnJlcGxh
Y2UoInR1cm46IiwgInR1cm46Ly8iKS5yZXBsYWNlKCJ0dXJuczoiLCAidHVybnM6Ly8iKTsKKyAg
ICAgICAgICAgICAgICBVUkwgdmFsaWRVUkwoVVJMKCksIHZhbGlkKTsKKyAgICAgICAgICAgICAg
ICAvLyBGSVhNRTogbGlibmljZSBjdXJyZW50bHkgZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBJUHY2
IGFkZHJlc3NlcyB2ZXJ5IHdlbGwuCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkVVJMLmhvc3Qo
KS5zdGFydHNXaXRoKCdbJykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAg
ICAgICAgICAgIHZhbGlkVVJMLnNldFVzZXIoc2VydmVyLnVzZXJuYW1lKTsKKyAgICAgICAgICAg
ICAgICB2YWxpZFVSTC5zZXRQYXNzd29yZChzZXJ2ZXIuY3JlZGVudGlhbCk7CisgICAgICAgICAg
ICAgICAgYm9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBnX3NpZ25hbF9lbWl0
X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJhZGQtdHVybi1zZXJ2ZXIiLCB2YWxpZFVSTC5z
dHJpbmcoKS51dGY4KCkuZGF0YSgpLCAmcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJl
c3VsdCkKKyAgICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVuYWJsZSB0byB1c2UgVFVS
TiBzZXJ2ZXI6ICVzIiwgdmFsaWRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBpZiAoIXN0dW5TZXQgJiYgdXJsLnByb3RvY29sKCkuc3RhcnRz
V2l0aCgic3R1biIpKSB7CisgICAgICAgICAgICAgICAgYXV0byB2YWxpZCA9IHVybC5zdHJpbmco
KS5pc29sYXRlZENvcHkoKS5yZXBsYWNlKCJzdHVuOiIsICJzdHVuOi8vIik7CisgICAgICAgICAg
ICAgICAgVVJMIHZhbGlkVVJMKFVSTCgpLCB2YWxpZCk7CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IGxpYm5pY2UgY3VycmVudGx5IGRvZXNuJ3Qgc2VlbSB0byBoYW5kbGUgSVB2NiBhZGRyZXNz
ZXMgdmVyeSB3ZWxsLgorICAgICAgICAgICAgICAgIGlmICh2YWxpZFVSTC5ob3N0KCkuc3RhcnRz
V2l0aCgnWycpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICB2YWxpZFVSTC5zZXRVc2VyKHNlcnZlci51c2VybmFtZSk7CisgICAgICAgICAgICAgICAgdmFs
aWRVUkwuc2V0UGFzc3dvcmQoc2VydmVyLmNyZWRlbnRpYWwpOworICAgICAgICAgICAgICAgIGdf
b2JqZWN0X3NldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInN0dW4tc2VydmVyIiwgdmFsaWRVUkwuc3Ry
aW5nKCkudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgc3R1blNldCA9
IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXSVA6IGh0
dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0v
bWVyZ2VfcmVxdWVzdHMvMzAyCisgICAgR1NUX0ZJWE1FKCIlenUgY3VzdG9tIGNlcnRpZmljYXRl
cyBub3QgcHJvcGFnYXRlZCB0byB3ZWJydGNiaW4iLCBjb25maWd1cmF0aW9uLmNlcnRpZmljYXRl
cy5zaXplKCkpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
IEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0
KCksICJFbmQtcG9pbnQgcmVhZHkiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpyZXN0YXJ0SWNlKCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNU
KG1fcGlwZWxpbmUuZ2V0KCksICJyZXN0YXJ0aW5nIElDRSIpOworICAgIC8vIFdJUCBpbiBodHRw
czovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21l
cmdlX3JlcXVlc3RzLzE4NzcKKyAgICBpbml0aWF0ZSh0cnVlLCBnc3Rfc3RydWN0dXJlX25ldygi
d2VicnRjYmluLW9mZmVyLW9wdGlvbnMiLCAiaWNlLXJlc3RhcnQiLCBHX1RZUEVfQk9PTEVBTiwg
VFJVRSwgbnVsbHB0cikpOworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UlRD
U2RwVHlwZSwgU3RyaW5nPj4gZmV0Y2hEZXNjcmlwdGlvbihHc3RFbGVtZW50KiB3ZWJydGNCaW4s
IGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaWYgKCF3ZWJydGNCaW4pCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4g
ZGVzY3JpcHRpb247CisgICAgZ19vYmplY3RfZ2V0KHdlYnJ0Y0JpbiwgbWFrZVN0cmluZyhuYW1l
LCAiLWRlc2NyaXB0aW9uIikudXRmOCgpLmRhdGEoKSwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBu
dWxscHRyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHBTdHJpbmcoZ3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoZGVz
Y3JpcHRpb24tPnNkcCkpOworICAgIEdTVF9UUkFDRV9PQkpFQ1Qod2VicnRjQmluLCAiJXMtZGVz
Y3JpcHRpb24gU0RQOiAlcyIsIG5hbWUsIHNkcFN0cmluZy5nZXQoKSk7CisgICAgcmV0dXJuIHsg
eyBmcm9tU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZSgqZGVzY3JpcHRpb24uZ2V0KCkpLCBzZHBTdHJp
bmcuZ2V0KCkgfSB9OworfQorCitzdGF0aWMgR3N0V2ViUlRDU2lnbmFsaW5nU3RhdGUgZmV0Y2hT
aWduYWxpbmdTdGF0ZShHc3RFbGVtZW50KiB3ZWJydGNCaW4pCit7CisgICAgR3N0V2ViUlRDU2ln
bmFsaW5nU3RhdGUgc3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KHdlYnJ0Y0JpbiwgInNpZ25hbGlu
Zy1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0cik7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJV
RworICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGVzYyhnX2VudW1fdG9fc3RyaW5nKEdTVF9UWVBFX1dF
QlJUQ19TSUdOQUxJTkdfU1RBVEUsIHN0YXRlKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVCh3ZWJy
dGNCaW4sICJTaWduYWxpbmcgc3RhdGUgc2V0IHRvICVzIiwgZGVzYy5nZXQoKSk7CisjZW5kaWYK
KyAgICByZXR1cm4gc3RhdGU7Cit9CisKK2VudW0gY2xhc3MgR2F0aGVyU2lnbmFsaW5nU3RhdGUg
eyBObywgWWVzIH07CitzdGF0aWMgc3RkOjpvcHRpb25hbDxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OkRlc2NyaXB0aW9uU3RhdGVzPiBkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKEdzdEVsZW1lbnQq
IHdlYnJ0Y0JpbiwgR2F0aGVyU2lnbmFsaW5nU3RhdGUgZ2F0aGVyU2lnbmFsaW5nU3RhdGUgPSBH
YXRoZXJTaWduYWxpbmdTdGF0ZTo6Tm8pCit7CisgICAgc3RkOjpvcHRpb25hbDxSVENTZHBUeXBl
PiBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcFR5cGUsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9u
U2RwVHlwZSwgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwVHlwZSwgcGVuZGluZ1JlbW90ZURl
c2NyaXB0aW9uU2RwVHlwZTsKKyAgICBTdHJpbmcgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHAs
IHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHAs
IHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvblNkcDsKKyAgICBpZiAoYXV0byBjdXJyZW50TG9jYWxE
ZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAiY3VycmVudC1sb2NhbCIp
KSB7CisgICAgICAgIGF1dG8gW3NkcFR5cGUsIGRlc2NyaXB0aW9uXSA9ICpjdXJyZW50TG9jYWxE
ZXNjcmlwdGlvbjsKKyAgICAgICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHBUeXBlID0gc2Rw
VHlwZTsKKyAgICAgICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2Ny
aXB0aW9uKTsKKyAgICB9CisgICAgaWYgKGF1dG8gcGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gPSBm
ZXRjaERlc2NyaXB0aW9uKHdlYnJ0Y0JpbiwgInBlbmRpbmctbG9jYWwiKSkgeworICAgICAgICBh
dXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAqcGVuZGluZ0xvY2FsRGVzY3JpcHRpb247Cisg
ICAgICAgIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSA9IHNkcFR5cGU7CisgICAgICAg
IHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAg
fQorICAgIGlmIChhdXRvIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRp
b24od2VicnRjQmluLCAiY3VycmVudC1yZW1vdGUiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBl
LCBkZXNjcmlwdGlvbl0gPSAqY3VycmVudFJlbW90ZURlc2NyaXB0aW9uOworICAgICAgICBjdXJy
ZW50UmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgY3VycmVudFJl
bW90ZURlc2NyaXB0aW9uU2RwID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlm
IChhdXRvIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRj
QmluLCAicGVuZGluZy1yZW1vdGUiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlw
dGlvbl0gPSAqcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uOworICAgICAgICBwZW5kaW5nUmVtb3Rl
RGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgcGVuZGluZ1JlbW90ZURlc2Ny
aXB0aW9uU2RwID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgc3RkOjpvcHRp
b25hbDxSVENTaWduYWxpbmdTdGF0ZT4gc2lnbmFsaW5nU3RhdGU7CisgICAgaWYgKGdhdGhlclNp
Z25hbGluZ1N0YXRlID09IEdhdGhlclNpZ25hbGluZ1N0YXRlOjpZZXMpCisgICAgICAgIHNpZ25h
bGluZ1N0YXRlID0gdG9TaWduYWxpbmdTdGF0ZShmZXRjaFNpZ25hbGluZ1N0YXRlKHdlYnJ0Y0Jp
bikpOworCisgICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6RGVzY3JpcHRpb25TdGF0
ZXMgeworICAgICAgICBzaWduYWxpbmdTdGF0ZSwKKyAgICAgICAgY3VycmVudExvY2FsRGVzY3Jp
cHRpb25TZHBUeXBlLCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcCwKKyAgICAgICAgcGVuZGlu
Z0xvY2FsRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvblNkcCwKKyAg
ICAgICAgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwVHlwZSwgY3VycmVudFJlbW90ZURlc2Ny
aXB0aW9uU2RwLAorICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5k
aW5nUmVtb3RlRGVzY3JpcHRpb25TZHAKKyAgICB9OworfQorCit2b2lkIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRp
b24qIGRlc2NyaXB0aW9uKQoreworICAgIHNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uLCB0cnVl
LCBbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyldIHsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlv
bnMgPSBkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKHByb3RlY3RlZFRoaXMtPm1fd2VicnRjQmlu
LmdldCgpLCBHYXRoZXJTaWduYWxpbmdTdGF0ZTo6WWVzKTsKKyAgICAgICAgR1JlZlB0cjxHc3RX
ZWJSVENTQ1RQVHJhbnNwb3J0PiB0cmFuc3BvcnQ7CisgICAgICAgIGdfb2JqZWN0X2dldChwcm90
ZWN0ZWRUaGlzLT5tX3dlYnJ0Y0Jpbi5nZXQoKSwgInNjdHAtdHJhbnNwb3J0IiwgJnRyYW5zcG9y
dC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5l
Y3Rpb25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRpb25TdWNjZWVkZWQoV1RGTW92ZShkZXNjcmlw
dGlvbnMpLCB0cmFuc3BvcnQgPyBtYWtlVW5pcXVlPEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNr
ZW5kPihXVEZNb3ZlKHRyYW5zcG9ydCkpIDogbnVsbHB0cik7CisgICAgfSwgW3Byb3RlY3RlZFRo
aXMgPSBSZWYoKnRoaXMpXShjb25zdCBHRXJyb3IqIGVycm9yKSB7CisgICAgICAgIGlmIChlcnJv
ciAmJiBlcnJvci0+Y29kZSA9PSBHU1RfV0VCUlRDX0VSUk9SX0lOVkFMSURfU1RBVEUpCisgICAg
ICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRMb2NhbERl
c2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRv
IHNldCBsb2NhbCBhbnN3ZXIgc2RwOiBubyBwZW5kaW5nIHJlbW90ZSBkZXNjcmlwdGlvbi4iX3Mg
fSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5l
Y3Rpb25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0
aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiBsb2NhbCBkZXNjcmlwdGlvbiJfcyB9
KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRSZW1vdGVE
ZXNjcmlwdGlvblN1Y2NlZWRlZCgpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5l
LmdldCgpLCAiQWNraW5nIHJlbW90ZSBkZXNjcmlwdGlvbiIpOworICAgIGF1dG8gZGVzY3JpcHRp
b25zID0gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0JpbihtX3dlYnJ0Y0Jpbi5nZXQoKSwgR2F0aGVy
U2lnbmFsaW5nU3RhdGU6Olllcyk7CisgICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0
PiB0cmFuc3BvcnQ7CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAic2N0cC10
cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5zZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZChXVEZNb3ZlKGRlc2Ny
aXB0aW9ucyksIHRyYW5zcG9ydCA/IG1ha2VVbmlxdWU8R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJh
Y2tlbmQ+KFdURk1vdmUodHJhbnNwb3J0KSkgOiBudWxscHRyKTsKK30KKwordm9pZCBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Ojpkb1NldFJlbW90ZURlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgc2V0RGVzY3JpcHRpb24oJmRlc2NyaXB0
aW9uLCBmYWxzZSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpXSB7CisgICAgICAgIHByb3Rl
Y3RlZFRoaXMtPnNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKCk7CisgICAgfSwgW3Byb3Rl
Y3RlZFRoaXMgPSBSZWYoKnRoaXMpXShjb25zdCBHRXJyb3IqIGVycm9yKSB7CisgICAgICAgIGlm
IChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHU1RfV0VCUlRDX0VSUk9SX0lOVkFMSURfU1RBVEUp
CisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRS
ZW1vdGVEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZh
aWxlZCB0byBzZXQgcmVtb3RlIGFuc3dlciBzZHAiX3MgfSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldFJlbW90ZURl
c2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFw
cGx5IHNlc3Npb24gcmVtb3RlIGRlc2NyaXB0aW9uIl9zIH0pOworICAgIH0pOworI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAorICAgIHN0YXJ0TG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKwor
c3RydWN0IFNldERlc2NyaXB0aW9uQ2FsbERhdGEgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNU
X0FMTE9DQVRFRDsKKyAgICBTZXREZXNjcmlwdGlvbkNhbGxEYXRhKEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQmIGVuZFBvaW50LCBGdW5jdGlvbjx2b2lkKCk+JiYgc3VjY2Vzc0NhbGxiYWNrLCBGdW5j
dGlvbjx2b2lkKGNvbnN0IEdFcnJvciopPiYmIGZhaWx1cmVDYWxsYmFjaykKKyAgICAgICAgOiBz
dWNjZXNzQ2FsbGJhY2soV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spKQorICAgICAgICAsIGZhaWx1
cmVDYWxsYmFjayhXVEZNb3ZlKGZhaWx1cmVDYWxsYmFjaykpCisgICAgICAgICwgZW5kUG9pbnQo
ZW5kUG9pbnQpIHsgfQorCisgICAgRnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2s7Cisg
ICAgRnVuY3Rpb248dm9pZChjb25zdCBHRXJyb3IqKT4gZmFpbHVyZUNhbGxiYWNrOworICAgIEdT
dHJlYW1lck1lZGlhRW5kcG9pbnQmIGVuZFBvaW50OworfTsKKwordm9pZCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpzZXREZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRl
c2NyaXB0aW9uLCBib29sIGlzTG9jYWwsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzdWNjZXNzQ2FsbGJh
Y2ssIEZ1bmN0aW9uPHZvaWQoY29uc3QgR0Vycm9yKik+JiYgZmFpbHVyZUNhbGxiYWNrKQorewor
ICAgIEdzdFNEUE1lc3NhZ2UqIG1lc3NhZ2U7CisgICAgYXV0byBzZHBUeXBlID0gUlRDU2RwVHlw
ZTo6T2ZmZXI7CisKKyAgICBpZiAoZGVzY3JpcHRpb24pIHsKKyAgICAgICAgaWYgKGdzdF9zZHBf
bWVzc2FnZV9uZXdfZnJvbV90ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRlc2Ny
aXB0aW9uLT5zZHAoKS5jaGFyYWN0ZXJzOCgpKSwgJm1lc3NhZ2UpICE9IEdTVF9TRFBfT0spIHsK
KyAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgfQorICAgICAgICBzZHBUeXBlID0gZGVzY3JpcHRpb24tPnR5cGUoKTsKKyAg
ICB9IGVsc2UgaWYgKGdzdF9zZHBfbWVzc2FnZV9uZXcoJm1lc3NhZ2UpICE9IEdTVF9TRFBfT0sp
IHsKKyAgICAgICAgZmFpbHVyZUNhbGxiYWNrKG51bGxwdHIpOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgaWYgKCFpc0xvY2FsKQorICAgICAgICBzdG9yZVJlbW90ZU1MaW5lSW5mbyht
ZXNzYWdlKTsKKworICAgIGF1dG8gdHlwZSA9IHRvU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShzZHBU
eXBlKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDcmVhdGluZyAl
cyBzZXNzaW9uIGZvciBTRFAgJXMiLCBpc0xvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLCBnc3Rf
d2VicnRjX3NkcF90eXBlX3RvX3N0cmluZyh0eXBlKSk7CisKKyAgICBHVW5pcXVlUHRyPEdzdFdl
YlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gc2Vzc2lvbkRlc2NyaXB0aW9uKGdzdF93ZWJydGNfc2Vz
c2lvbl9kZXNjcmlwdGlvbl9uZXcodHlwZSwgbWVzc2FnZSkpOworICAgIGF1dG8gc2lnbmFsTmFt
ZSA9IG1ha2VTdHJpbmcoInNldC0iLCBpc0xvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLCAiLWRl
c2NyaXB0aW9uIik7CisgICAgYXV0byBkYXRhID0gbWFrZVVuaXF1ZTxTZXREZXNjcmlwdGlvbkNh
bGxEYXRhPigqdGhpcywgV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spLCBXVEZNb3ZlKGZhaWx1cmVD
YWxsYmFjaykpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwg
c2lnbmFsTmFtZS5hc2NpaSgpLmRhdGEoKSwgc2Vzc2lvbkRlc2NyaXB0aW9uLmdldCgpLCBnc3Rf
cHJvbWlzZV9uZXdfd2l0aF9jaGFuZ2VfZnVuYyhbXShHc3RQcm9taXNlKiByYXdQcm9taXNlLCBn
cG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8U2V0RGVzY3JpcHRp
b25DYWxsRGF0YT4gZGF0YShyZWludGVycHJldF9jYXN0PFNldERlc2NyaXB0aW9uQ2FsbERhdGEq
Pih1c2VyRGF0YSkpOworICAgICAgICBhdXRvIHByb21pc2UgPSBhZG9wdEdSZWYocmF3UHJvbWlz
ZSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZ3N0X3Byb21pc2Vfd2FpdChwcm9taXNlLmdldCgp
KTsKKyAgICAgICAgY29uc3QgYXV0byogcmVwbHkgPSBnc3RfcHJvbWlzZV9nZXRfcmVwbHkocHJv
bWlzZS5nZXQoKSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JF
UExJRUQgfHwgKHJlcGx5ICYmIGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlcGx5LCAiZXJyb3Ii
KSkpIHsKKyAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAg
ICAgIGlmIChyZXBseSkgeworICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJlcGx5
LCAiZXJyb3IiLCBHX1RZUEVfRVJST1IsICZlcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAg
ICAgICAgICAgICAgR1NUX0VSUk9SX09CSkVDVChkYXRhLT5lbmRQb2ludC5waXBlbGluZSgpLCAi
VW5hYmxlIHRvIHNldCBkZXNjcmlwdGlvbiwgZXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwor
ICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZXJyb3IgPSBlcnJv
ci5nZXQoKSwgcHJvdGVjdGVkVGhpcyA9IFJlZihkYXRhLT5lbmRQb2ludCksIGZhaWx1cmVDYWxs
YmFjayA9IFdURk1vdmUoZGF0YS0+ZmFpbHVyZUNhbGxiYWNrKV0geworICAgICAgICAgICAgICAg
IGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjayhlcnJvcik7CisgICAgICAgICAg
ICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKGRhdGEtPmVuZFBvaW50KSwgc3VjY2Vzc0NhbGxi
YWNrID0gV1RGTW92ZShkYXRhLT5zdWNjZXNzQ2FsbGJhY2spXSB7CisgICAgICAgICAgICBpZiAo
cHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgc3VjY2Vzc0NhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAgIH0sIGRhdGEucmVs
ZWFzZSgpLCBudWxscHRyKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3Rv
cmVSZW1vdGVNTGluZUluZm8oR3N0U0RQTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBtX3JlbW90
ZU1MaW5lSW5mb3MuY2xlYXIoKTsKKyAgICB1bnNpZ25lZCB0b3RhbE1lZGlhcyA9IGdzdF9zZHBf
bWVzc2FnZV9tZWRpYXNfbGVuKG1lc3NhZ2UpOworICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5yZXNl
cnZlQ2FwYWNpdHkodG90YWxNZWRpYXMpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGlu
ZS5nZXQoKSwgIlN0b3JpbmcgJXUgcmVtb3RlIHBlbmRpbmcgbWxpbmVzIiwgdG90YWxNZWRpYXMp
OworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCB0b3RhbE1lZGlhczsgaSsrKSB7CisgICAg
ICAgIGNvbnN0IEdzdFNEUE1lZGlhKiBtZWRpYSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEo
bWVzc2FnZSwgaSk7CisgICAgICAgIGNvbnN0IGNoYXIqIHR5cCA9IGdzdF9zZHBfbWVkaWFfZ2V0
X21lZGlhKG1lZGlhKTsKKyAgICAgICAgaWYgKCFnX3N0cl9lcXVhbCh0eXAsICJhdWRpbyIpICYm
ICFnX3N0cl9lcXVhbCh0eXAsICJ2aWRlbyIpKQorICAgICAgICAgICAgY29udGludWU7CisKKyNp
Zm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbWVk
aWFSZXByZXNlbnRhdGlvbihnc3Rfc2RwX21lZGlhX2FzX3RleHQobWVkaWEpKTsKKyAgICAgICAg
R1NUX0xPR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlByb2Nlc3NpbmcgbWVkaWE6XG4lcyIs
IG1lZGlhUmVwcmVzZW50YXRpb24uZ2V0KCkpOworI2VuZGlmCisgICAgICAgIGNvbnN0IGNoYXIq
IG1pZCA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZV92YWwobWVkaWEsICJtaWQiKTsKKyAg
ICAgICAgaWYgKCFtaWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICBib29sIGlz
SW5hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpaSA9IDA7IGlpIDwgZ3N0
X3NkcF9tZWRpYV9hdHRyaWJ1dGVzX2xlbihtZWRpYSk7IGlpKyspIHsKKyAgICAgICAgICAgIGNv
bnN0IEdzdFNEUEF0dHJpYnV0ZSogYXR0ciA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZSht
ZWRpYSwgaWkpOworICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXR0ci0+a2V5LCAiaW5hY3Rp
dmUiKSkgeworICAgICAgICAgICAgICAgIGlzSW5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAg
ICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChpc0luYWN0
aXZlKSB7CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJT
a2lwcGluZyBpbmFjdGl2ZSBtZWRpYSIpOworICAgICAgICAgICAgY29udGludWU7CisgICAgICAg
IH0KKworICAgICAgICBtX21lZGlhRm9yTWlkLnNldChTdHJpbmcobWlkKSwgZ19zdHJfZXF1YWwo
dHlwLCAiYXVkaW8iKSA/IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvIDogUmVhbHRp
bWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pOworCisgICAgICAgIC8vIGh0dHBzOi8vZ2l0bGFi
LmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVz
dHMvMTkwNworICAgICAgICBpZiAoc2RwTWVkaWFIYXNBdHRyaWJ1dGVLZXkobWVkaWEsICJpY2Ut
bGl0ZSIpKSB7CisgICAgICAgICAgICBHUmVmUHRyPEdPYmplY3Q+IGljZTsKKyAgICAgICAgICAg
IGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImljZS1hZ2VudCIsICZpY2Uub3V0UHRy
KCksIG51bGxwdHIpOworICAgICAgICAgICAgZ19vYmplY3Rfc2V0KGljZS5nZXQoKSwgImljZS1s
aXRlIiwgVFJVRSwgbnVsbHB0cik7CisgICAgICAgIH0KKworICAgICAgICBhdXRvIGNhcHMgPSBh
ZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkpOworICAgICAgICBWZWN0b3I8aW50PiBwYXls
b2FkVHlwZXM7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsRm9ybWF0cyA9IGdzdF9zZHBfbWVkaWFf
Zm9ybWF0c19sZW4obWVkaWEpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJNZWRpYSAlcyBoYXMgJXUgZm9ybWF0cyIsIHR5cCwgdG90YWxGb3JtYXRzKTsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBqID0gMDsgaiA8IHRvdGFsRm9ybWF0czsgaisrKSB7CisgICAg
ICAgICAgICBhdXRvIGZvcm1hdCA9IFN0cmluZyhnc3Rfc2RwX21lZGlhX2dldF9mb3JtYXQobWVk
aWEsIGopKTsKKyAgICAgICAgICAgIGF1dG8gcGF5bG9hZFR5cGUgPSBwYXJzZUludGVnZXI8aW50
Pihmb3JtYXQpOworICAgICAgICAgICAgaWYgKCFwYXlsb2FkVHlwZSB8fCAhKnBheWxvYWRUeXBl
KSB7CisgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJJbnZhbGlkIHBheWxvYWQgdHlwZTogJXMiLCBmb3JtYXQudXRmOCgpLmRhdGEoKSk7CisgICAg
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRvIGZv
cm1hdENhcHMgPSBhZG9wdEdSZWYoZ3N0X3NkcF9tZWRpYV9nZXRfY2Fwc19mcm9tX21lZGlhKG1l
ZGlhLCAqcGF5bG9hZFR5cGUpKTsKKyAgICAgICAgICAgIGlmICghZm9ybWF0Q2FwcykgeworICAg
ICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTm8gY2Fw
cyBmb3VuZCBmb3IgcGF5bG9hZCB0eXBlICVkIiwgKnBheWxvYWRUeXBlKTsKKyAgICAgICAgICAg
ICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVsYXkgU0RQ
IGF0dHJpYnV0ZXMgdG8gdGhlIGNhcHMsIHRoaXMgaXMgc3BlY2lhbGx5IHVzZWZ1bCBzbyB0aGF0
IGVsZW1lbnRzIGluCisgICAgICAgICAgICAvLyB3ZWJydGNiaW4gd2lsbCBiZSBhYmxlIHRvIGVu
YWJsZSBSVFAgaGVhZGVyIGV4dGVuc2lvbnMuCisgICAgICAgICAgICBnc3Rfc2RwX21lZGlhX2F0
dHJpYnV0ZXNfdG9fY2FwcyhtZWRpYSwgZm9ybWF0Q2Fwcy5nZXQoKSk7CisKKyAgICAgICAgICAg
IGdzdF9jYXBzX2FwcGVuZChjYXBzLmdldCgpLCBmb3JtYXRDYXBzLmxlYWtSZWYoKSk7CisgICAg
ICAgICAgICBtX3B0Q291bnRlciA9IHN0ZDo6bWF4KG1fcHRDb3VudGVyLCAqcGF5bG9hZFR5cGUg
KyAxKTsKKyAgICAgICAgICAgIHBheWxvYWRUeXBlcy5hcHBlbmQoKnBheWxvYWRUeXBlKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRvdGFsQ2FwcyA9IGdzdF9jYXBzX2dldF9zaXpl
KGNhcHMuZ2V0KCkpOworICAgICAgICBpZiAodG90YWxDYXBzKSB7CisgICAgICAgICAgICBmb3Ig
KHVuc2lnbmVkIGogPSAwOyBqIDwgdG90YWxDYXBzOyBqKyspIHsKKyAgICAgICAgICAgICAgICBH
c3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQo
KSwgaik7CisgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZShzdHJ1Y3R1cmUs
ICJhcHBsaWNhdGlvbi94LXJ0cCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ2FjaGluZyBwYXlsb2FkIGNhcHM6ICUiIEdT
VF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKKyAgICAgICAgICAgIG1fcmVtb3RlTUxpbmVJbmZv
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGNhcHMpLCBmYWxzZSwgV1RGTW92ZShwYXlsb2Fk
VHlwZXMpIH0pOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OmNvbmZpZ3VyZUFuZExpbmtTb3VyY2UoUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyJiBzb3VyY2UpCit7CisgICAgYXV0byBjYXBzID0gc291cmNlLmFsbG93ZWRDYXBz
KCk7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UGVuZGluZ01MaW5lSW5mbywgR1JlZlB0
cjxHc3RDYXBzPj4+IGZvdW5kOworICAgIGZvciAoYXV0byYgbUxpbmVJbmZvIDogbV9yZW1vdGVN
TGluZUluZm9zKSB7CisgICAgICAgIGlmIChtTGluZUluZm8uaXNVc2VkKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGdzdF9jYXBzX2dl
dF9zaXplKG1MaW5lSW5mby5jYXBzLmdldCgpKTsgaSsrKSB7CisgICAgICAgICAgICBhdXRvKiBz
dHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKG1MaW5lSW5mby5jYXBzLmdldCgpLCBp
KTsKKyAgICAgICAgICAgIGF1dG8gY2FwczIgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwo
Z3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSksIG51bGxwdHIpKTsKKyAgICAgICAgICAgIGF1
dG8gaW50ZXJzZWN0ZWQgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfaW50ZXJzZWN0KGNhcHMuZ2V0KCks
IGNhcHMyLmdldCgpKSk7CisgICAgICAgICAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5KGludGVy
c2VjdGVkLmdldCgpKSkgeworICAgICAgICAgICAgICAgIGZvdW5kID0gc3RkOjptYWtlX3BhaXIo
bUxpbmVJbmZvLCBXVEZNb3ZlKGludGVyc2VjdGVkKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvdW5kLmhhc192YWx1ZSgp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYm9vbCBwYXlsb2FkVHlwZVdhc1Nl
dCA9IGZhbHNlOworICAgIGlmIChmb3VuZCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJVbnVzZWQgYW5kIGNvbXBhdGlibGUgY2FwcyBmb3VuZCBmb3IgJSIg
R1NUX1BUUl9GT1JNQVQgIi4uLiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSwgZm91bmQt
PnNlY29uZC5nZXQoKSk7CisgICAgICAgIHBheWxvYWRUeXBlV2FzU2V0ID0gc291cmNlLnNldFBh
eWxvYWRUeXBlKGZvdW5kLT5zZWNvbmQpOworICAgICAgICBmb3VuZC0+Zmlyc3QuaXNVc2VkID0g
dHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGF5bG9hZFR5cGVXYXNTZXQgPSBzb3VyY2Uuc2V0
UGF5bG9hZFR5cGUoY2Fwcyk7CisKKyAgICBpZiAoIXBheWxvYWRUeXBlV2FzU2V0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXNvdXJjZS5wYWQoKSkgeworICAgICAgICBzb3VyY2Uuc2V0
U2lua1BhZChyZXF1ZXN0UGFkKG1fcmVxdWVzdFBhZENvdW50ZXIsIHNvdXJjZS5hbGxvd2VkQ2Fw
cygpKSk7CisgICAgICAgIG1fcmVxdWVzdFBhZENvdW50ZXIrKzsKKyAgICB9CisKKyAgICBhdXRv
JiBzaW5rUGFkID0gc291cmNlLnBhZCgpOworICAgIFJFTEVBU0VfQVNTRVJUKCFnc3RfcGFkX2lz
X2xpbmtlZChzaW5rUGFkLmdldCgpKSk7CisgICAgYXV0byBzb3VyY2VCaW4gPSBzb3VyY2UuYmlu
KCk7CisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBzb3Vy
Y2VCaW4uZ2V0KCkpOworICAgIHNvdXJjZS5saW5rKCk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+
IHBhZElkKGdzdF9wYWRfZ2V0X25hbWUoc2lua1BhZC5nZXQoKSkpOworICAgIGF1dG8gZG90Rmls
ZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwgIi5v
dXRnb2luZy0iLCBwYWRJZC5nZXQoKSk7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9X
SVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FM
TCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK0dSZWZQdHI8R3N0UGFkPiBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpyZXF1ZXN0UGFkKHVuc2lnbmVkIG1saW5lSW5kZXgsIGNvbnN0
IEdSZWZQdHI8R3N0Q2Fwcz4mIGFsbG93ZWRDYXBzKQoreworICAgIGF1dG8gcGFkSWQgPSBtYWtl
U3RyaW5nKCJzaW5rXyIsIG1saW5lSW5kZXgpOworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19jb3B5KGFsbG93ZWRDYXBzLmdldCgpKSk7CisKKyAgICBnc3RfY2Fwc19tYXBfaW5f
cGxhY2UoY2Fwcy5nZXQoKSwgW10oR3N0Q2Fwc0ZlYXR1cmVzKiwgR3N0U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIGF1dG8qIGVu
ZFBvaW50ID0gcmVpbnRlcnByZXRfY2FzdDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50Kj4odXNlckRh
dGEpOworICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1cmUsICJwYXlsb2FkIiwgR19U
WVBFX0lOVCwgZW5kUG9pbnQtPm1fcHRDb3VudGVyKyssIG51bGxwdHIpOworICAgICAgICByZXR1
cm4gVFJVRTsKKyAgICB9LCB0aGlzKTsKKworICAgIC8vIEZJWE1FOiBSZXN0cmljdGluZyBjYXBz
IGFuZCBjb2RlYy1wcmVmZXJlbmNlcyBicmVha3MgY2FwcyBuZWdvdGlhdGlvbiBvZiBvdXRnb2lu
ZyBzb3VyY2VzIGluCisgICAgLy8gc29tZSBjYXNlIChqaXRzaSkuCisgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVxdWVzdGluZyBwYWQgJXMgcmVzdHJpY3RlZCB0byAl
IiBHU1RfUFRSX0ZPUk1BVCwgcGFkSWQudXRmOCgpLmRhdGEoKSwgY2Fwcy5nZXQoKSk7CisgICAg
YXV0byogcGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9nZXRfcGFkX3RlbXBsYXRlKG1fd2VicnRj
QmluLmdldCgpLCAic2lua18ldSIpOworICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9yZXF1ZXN0X3BhZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgcGFkVGVtcGxhdGUsIHBhZElk
LnV0ZjgoKS5kYXRhKCksIGNhcHMuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRy
YW5zY2VpdmVyPiB0cmFuc2NlaXZlcjsKKyAgICBnX29iamVjdF9nZXQoc2lua1BhZC5nZXQoKSwg
InRyYW5zY2VpdmVyIiwgJnRyYW5zY2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBnX29i
amVjdF9zZXQodHJhbnNjZWl2ZXIuZ2V0KCksICJjb2RlYy1wcmVmZXJlbmNlcyIsIGNhcHMuZ2V0
KCksIG51bGxwdHIpOworICAgIHJldHVybiBzaW5rUGFkOworfQorCitib29sIEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmFkZFRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIHNlbmRlciwg
TWVkaWFTdHJlYW1UcmFjayYgdHJhY2ssIGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKQorewor
ICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSBzb3VyY2U7CisgICAgR1JlZlB0
cjxHc3RXZWJSVENSVFBTZW5kZXI+IHJ0Y1NlbmRlcjsKKworICAgIGlmICh0cmFjay5wcml2YXRl
VHJhY2soKS5oYXNBdWRpbygpKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGlu
ZS5nZXQoKSwgIkFkZGluZyBvdXRnb2luZyBhdWRpbyBzb3VyY2UiKTsKKyAgICAgICAgYXV0byBh
dWRpb1NvdXJjZSA9IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRl
KHRyYWNrLnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAgY29uZmlndXJlQW5kTGlua1NvdXJjZShh
dWRpb1NvdXJjZSk7CisKKyAgICAgICAgcnRjU2VuZGVyID0gYXVkaW9Tb3VyY2UtPnNlbmRlcigp
OworICAgICAgICBzb3VyY2UgPSBXVEZNb3ZlKGF1ZGlvU291cmNlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNWaWRlbygpKTsK
KyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIG91dGdv
aW5nIHZpZGVvIHNvdXJjZSIpOworICAgICAgICBhdXRvIHZpZGVvU291cmNlID0gUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJhY2sucHJpdmF0ZVRyYWNrKCkp
OworICAgICAgICBjb25maWd1cmVBbmRMaW5rU291cmNlKHZpZGVvU291cmNlKTsKKworICAgICAg
ICBydGNTZW5kZXIgPSB2aWRlb1NvdXJjZS0+c2VuZGVyKCk7CisgICAgICAgIHNvdXJjZSA9IFdU
Rk1vdmUodmlkZW9Tb3VyY2UpOworICAgIH0KKworICAgIHNlbmRlci5zZXRTb3VyY2UoV1RGTW92
ZShzb3VyY2UpKTsKKworICAgIGlmIChhdXRvIHJ0cFNlbmRlciA9IHNlbmRlci5ydGNTZW5kZXIo
KSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBbHJlYWR5
IGhhcyBhIHNlbmRlci4iKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc2Vu
ZGVyLnNldFJUQ1NlbmRlcihXVEZNb3ZlKHJ0Y1NlbmRlcikpOworCisgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU2VuZGVyIGNvbmZpZ3VyZWQiKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVUcmFjayhHU3Ry
ZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiUmVtb3ZpbmcgdHJhY2siKTsKKyAgICBpZiAoYXV0byBiaW4gPSBz
ZW5kZXIuc3RvcFNvdXJjZSgpKQorICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NBU1Qo
bV9waXBlbGluZS5nZXQoKSksIGJpbi5nZXQoKSk7CisgICAgc2VuZGVyLmNsZWFyU291cmNlKCk7
CisgICAgb25OZWdvdGlhdGlvbk5lZWRlZCgpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OmRvQ3JlYXRlT2ZmZXIoY29uc3QgUlRDT2ZmZXJPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdp
bnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTg3NworICAgIC8vIEZJWE1FOiBQbHVtYiBvcHRpb25z
LnZvaWNlQWN0aXZpdHlEZXRlY3Rpb24uCisgICAgaW5pdGlhdGUodHJ1ZSwgZ3N0X3N0cnVjdHVy
ZV9uZXcoIndlYnJ0Y2Jpbi1vZmZlci1vcHRpb25zIiwgImljZS1yZXN0YXJ0IiwgR19UWVBFX0JP
T0xFQU4sIG9wdGlvbnMuaWNlUmVzdGFydCwgbnVsbHB0cikpOworfQorCit2b2lkIEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlQW5zd2VyKCkKK3sKKyAgICBpbml0aWF0ZShmYWxzZSwg
bnVsbHB0cik7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aW5pdGlhdGUoYm9v
bCBpc0luaXRpYXRvciwgR3N0U3RydWN0dXJlKiByYXdPcHRpb25zKQoreworICAgIG1faXNJbml0
aWF0b3IgPSBpc0luaXRpYXRvcjsKKyAgICBjb25zdCBjaGFyKiB0eXBlID0gaXNJbml0aWF0b3Ig
PyAib2ZmZXIiIDogImFuc3dlciI7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdl
dCgpLCAiQ3JlYXRpbmcgJXMiLCB0eXBlKTsKKyAgICBhdXRvIHNpZ25hbE5hbWUgPSBtYWtlU3Ry
aW5nKCJjcmVhdGUtIiwgdHlwZSk7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IG9wdGlv
bnMocmF3T3B0aW9ucyk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdl
dCgpLCBzaWduYWxOYW1lLmFzY2lpKCkuZGF0YSgpLCBvcHRpb25zLmdldCgpLCBnc3RfcHJvbWlz
ZV9uZXdfd2l0aF9jaGFuZ2VfZnVuYyhbXShHc3RQcm9taXNlKiByYXdQcm9taXNlLCBncG9pbnRl
ciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvKiBlbmRwb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R1N0cmVhbWVyTWVkaWFFbmRwb2ludCo+KHVzZXJEYXRhKTsKKyAgICAgICAgYXV0byBwcm9taXNl
ID0gYWRvcHRHUmVmKHJhd1Byb21pc2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9t
aXNlX3dhaXQocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01J
U0VfUkVTVUxUX1JFUExJRUQpIHsKKyAgICAgICAgICAgIGVuZHBvaW50LT5jcmVhdGVTZXNzaW9u
RGVzY3JpcHRpb25GYWlsZWQoeyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGNvbnN0IGF1dG8qIHJlcGx5ID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21p
c2UuZ2V0KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBseSk7CisgICAgICAgIGlmIChn
c3Rfc3RydWN0dXJlX2hhc19maWVsZChyZXBseSwgImVycm9yIikpIHsKKyAgICAgICAgICAgIEdV
bmlxdWVPdXRQdHI8R0Vycm9yPiBwcm9taXNlRXJyb3I7CisgICAgICAgICAgICBnc3Rfc3RydWN0
dXJlX2dldChyZXBseSwgImVycm9yIiwgR19UWVBFX0VSUk9SLCAmcHJvbWlzZUVycm9yLm91dFB0
cigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8R0Vycm9yPiBlcnJvcihwcm9t
aXNlRXJyb3IucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGVuZHBvaW50LT5jcmVhdGVTZXNzaW9u
RGVzY3JpcHRpb25GYWlsZWQoV1RGTW92ZShlcnJvcikpOworICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB9CisKKyAgICAgICAgY29uc3QgY2hhciogdHlwZSA9IGVuZHBvaW50LT5tX2lzSW5p
dGlhdG9yID8gIm9mZmVyIiA6ICJhbnN3ZXIiOworICAgICAgICBHVW5pcXVlT3V0UHRyPEdzdFdl
YlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gc2Vzc2lvbkRlc2NyaXB0aW9uOworICAgICAgICBnc3Rf
c3RydWN0dXJlX2dldChyZXBseSwgdHlwZSwgR1NUX1RZUEVfV0VCUlRDX1NFU1NJT05fREVTQ1JJ
UFRJT04sICZzZXNzaW9uRGVzY3JpcHRpb24ub3V0UHRyKCksIG51bGxwdHIpOworCisjaWZuZGVm
IEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHNkcChnc3Rf
c2RwX21lc3NhZ2VfYXNfdGV4dChzZXNzaW9uRGVzY3JpcHRpb24tPnNkcCkpOworICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKGVuZHBvaW50LT5waXBlbGluZSgpLCAiQ3JlYXRlZCAlczogJXMiLCB0
eXBlLCBzZHAuZ2V0KCkpOworI2VuZGlmCisgICAgICAgIEdVbmlxdWVQdHI8R3N0V2ViUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24ucmVsZWFzZSgp
KTsKKyAgICAgICAgZW5kcG9pbnQtPmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvblN1Y2NlZWRlZChX
VEZNb3ZlKGRlc2NyaXB0aW9uKSk7CisgICAgfSwgdGhpcywgbnVsbHB0cikpOworfQorCit2b2lk
IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmdldFN0YXRzKEdzdFBhZCogcGFkLCBSZWY8RGVmZXJy
ZWRQcm9taXNlPiYmIHByb21pc2UpCit7CisgICAgbV9zdGF0c0NvbGxlY3Rvci0+Z2V0U3RhdHMo
W3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCBwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKV0o
YXV0byYmIHJlcG9ydCkgbXV0YWJsZSB7CisgICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7
CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSB8fCAhcmVwb3J0KQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIHByb21pc2UtPnJlc29sdmU8SURMSW50ZXJmYWNl
PFJUQ1N0YXRzUmVwb3J0Pj4ocmVwb3J0LnJlbGVhc2VOb25OdWxsKCkpOworICAgIH0sIHBhZCk7
Cit9CisKK01lZGlhU3RyZWFtJiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjptZWRpYVN0cmVhbUZy
b21SVENTdHJlYW0oU3RyaW5nIGxhYmVsKQoreworICAgIGF1dG8gbWVkaWFTdHJlYW0gPSBtX3Jl
bW90ZVN0cmVhbXNCeUlkLmVuc3VyZShsYWJlbCwgW2xhYmVsLCB0aGlzXSgpIG11dGFibGUgewor
ICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRvd25jYXN0PERvY3VtZW50PigqbV9wZWVyQ29ubmVj
dGlvbkJhY2tlbmQuY29ubmVjdGlvbigpLnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAg
ICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3JlYXRlKGRvY3VtZW50LCBNZWRpYVN0cmVhbVByaXZh
dGU6OmNyZWF0ZShkb2N1bWVudC5sb2dnZXIoKSwgeyB9LCBXVEZNb3ZlKGxhYmVsKSkpOworICAg
IH0pOworICAgIHJldHVybiAqbWVkaWFTdHJlYW0uaXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lk
IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFJlbW90ZVN0cmVhbShHc3RQYWQqIHBhZCkKK3sK
KyAgICBtX3BlbmRpbmdJbmNvbWluZ1N0cmVhbXMrKzsKKworICAgIGF1dG8gY2FwcyA9IGFkb3B0
R1JlZihnc3RfcGFkX3F1ZXJ5X2NhcHMocGFkLCBudWxscHRyKSk7CisgICAgY29uc3QgY2hhciog
bWVkaWFUeXBlID0gY2Fwc01lZGlhVHlwZShjYXBzLmdldCgpKTsKKyAgICBHU1RfREVCVUdfT0JK
RUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBZGRpbmcgcmVtb3RlICVzIHN0cmVhbSB0byAlIiBHU1Rf
UFRSX0ZPUk1BVCAiICV1IHBlbmRpbmcgaW5jb21pbmcgc3RyZWFtcywgY2FwczogJSIgR1NUX1BU
Ul9GT1JNQVQsIG1lZGlhVHlwZSwgcGFkLCBtX3BlbmRpbmdJbmNvbWluZ1N0cmVhbXMsIGNhcHMu
Z2V0KCkpOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gcnRjVHJhbnNj
ZWl2ZXI7CisgICAgZ19vYmplY3RfZ2V0KHBhZCwgInRyYW5zY2VpdmVyIiwgJnJ0Y1RyYW5zY2Vp
dmVyLm91dFB0cigpLCBudWxscHRyKTsKKworICAgIGF1dG8qIHRyYW5zY2VpdmVyID0gbV9wZWVy
Q29ubmVjdGlvbkJhY2tlbmQuZXhpc3RpbmdUcmFuc2NlaXZlcihbJl0oYXV0byYgdHJhbnNjZWl2
ZXJCYWNrZW5kKSB7CisgICAgICAgIHJldHVybiBydGNUcmFuc2NlaXZlci5nZXQoKSA9PSB0cmFu
c2NlaXZlckJhY2tlbmQucnRjVHJhbnNjZWl2ZXIoKTsKKyAgICB9KTsKKyAgICBpZiAoIXRyYW5z
Y2VpdmVyKSB7CisgICAgICAgIGF1dG8gdHlwZSA9IGRvQ2Fwc0hhdmVUeXBlKGNhcHMuZ2V0KCks
ICJhdWRpbyIpID8gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8gOiBSZWFsdGltZU1l
ZGlhU291cmNlOjpUeXBlOjpWaWRlbzsKKyAgICAgICAgdHJhbnNjZWl2ZXIgPSAmbV9wZWVyQ29u
bmVjdGlvbkJhY2tlbmQubmV3UmVtb3RlVHJhbnNjZWl2ZXIobWFrZVVuaXF1ZTxHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQ+KFdURk1vdmUocnRjVHJhbnNjZWl2ZXIpKSwgdHlwZSk7Cisg
ICAgfQorCisgICAgR1VuaXF1ZU91dFB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IGRl
c2NyaXB0aW9uOworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInJlbW90ZS1k
ZXNjcmlwdGlvbiIsICZkZXNjcmlwdGlvbi5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICB1bnNp
Z25lZCBtTGluZUluZGV4OworICAgIGdfb2JqZWN0X2dldChydGNUcmFuc2NlaXZlci5nZXQoKSwg
Im1saW5laW5kZXgiLCAmbUxpbmVJbmRleCwgbnVsbHB0cik7CisgICAgY29uc3QgYXV0byogbWVk
aWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0X21lZGlhKGRlc2NyaXB0aW9uLT5zZHAsIG1MaW5lSW5k
ZXgpOworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc2RwKGdzdF9zZHBfbWVkaWFfYXNfdGV4dChtZWRp
YSkpOworICAgIGF1dG8gc2RwU3RyaW5nID0gbWFrZVN0cmluZyhzZHAuZ2V0KCkpOworCisgICAg
R1VuaXF1ZVB0cjxnY2hhcj4gbmFtZShnc3RfcGFkX2dldF9uYW1lKHBhZCkpOworICAgIFN0cmlu
ZyBsYWJlbChuYW1lLmdldCgpKTsKKyAgICBhdXRvIGtleSA9IG1ha2VTdHJpbmcoIm1zaWQ6Iik7
CisgICAgYXV0byBsaW5lcyA9IHNkcFN0cmluZy5zcGxpdCgnXG4nKTsKKyAgICBmb3IgKGF1dG8m
IGxpbmUgOiBsaW5lcykgeworICAgICAgICBhdXRvIGkgPSBsaW5lLmZpbmQoa2V5KTsKKyAgICAg
ICAgaWYgKGkgIT0gbm90Rm91bmQpIHsKKyAgICAgICAgICAgIGF1dG8gdG1wID0gbGluZS5zdWJz
dHJpbmcoaSArIGtleS5hc2NpaSgpLmxlbmd0aCgpKTsKKyAgICAgICAgICAgIGxhYmVsID0gdG1w
LnN1YnN0cmluZygwLCB0bXAuZmluZCgnICcpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICB9CisgICAgfQorCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAibXNp
ZDogJXMiLCBsYWJlbC5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBHc3RFbGVtZW50KiBiaW4gPSBu
dWxscHRyOworICAgIGF1dG8mIHRyYWNrID0gdHJhbnNjZWl2ZXItPnJlY2VpdmVyKCkudHJhY2so
KTsKKyAgICBhdXRvJiBzb3VyY2UgPSB0cmFjay5wcml2YXRlVHJhY2soKS5zb3VyY2UoKTsKKyAg
ICBpZiAoc291cmNlLmlzSW5jb21pbmdBdWRpb1NvdXJjZSgpKQorICAgICAgICBiaW4gPSBzdGF0
aWNfY2FzdDxSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXImPihzb3VyY2UpLmJp
bigpOworICAgIGVsc2UgaWYgKHNvdXJjZS5pc0luY29taW5nVmlkZW9Tb3VyY2UoKSkKKyAgICAg
ICAgYmluID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVy
Jj4oc291cmNlKS5iaW4oKTsKKyAgICBlbHNlCisgICAgICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQo
KSksIGJpbik7CisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9z
dGF0aWNfcGFkKGJpbiwgInNpbmsiKSk7CisgICAgZ3N0X3BhZF9saW5rKHBhZCwgc2lua1BhZC5n
ZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChiaW4pOworCisg
ICAgdHJhY2suc2V0RW5hYmxlZCh0cnVlKTsKKyAgICBzb3VyY2Uuc2V0TXV0ZWQoZmFsc2UpOwor
CisgICAgYXV0byYgbWVkaWFTdHJlYW0gPSBtZWRpYVN0cmVhbUZyb21SVENTdHJlYW0obGFiZWwp
OworICAgIG1lZGlhU3RyZWFtLmFkZFRyYWNrRnJvbVBsYXRmb3JtKHRyYWNrKTsKKyAgICBtX3Bl
bmRpbmdTdHJlYW1zLmFwcGVuZCgmbWVkaWFTdHJlYW0pOworCisgICAgYXV0byBkb3RGaWxlTmFt
ZSA9IG1ha2VTdHJpbmcoR1NUX09CSkVDVF9OQU1FKG1fcGlwZWxpbmUuZ2V0KCkpLCAiLmluY29t
aW5nLSIsIG1lZGlhVHlwZSwgJy0nLCBHU1RfT0JKRUNUX05BTUUocGFkKSk7CisgICAgR1NUX0RF
QlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdT
VF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVtb3ZlUmVtb3RlU3RyZWFtKEdzdFBhZCop
Cit7CisgICAgR1NUX0ZJWE1FX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAicmVtb3ZlUmVtb3Rl
U3RyZWFtIik7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RkOjpvcHRpb25hbDxHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3Jl
YXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFJUQ1J0cFRy
YW5zY2VpdmVySW5pdCYgaW5pdCwgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiYg
c291cmNlKQoreworICAgIGlmICghbV93ZWJydGNCaW4pCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICIlenUgc3Ry
ZWFtcyBpbiBpbml0IGRhdGEiLCBpbml0LnN0cmVhbXMuc2l6ZSgpKTsKKworICAgIC8vIEZJWE1F
OiBTaG91bGQgd2UgYnVpbGQgdGhlIGNhcHMgZnJvbSB0aGUgaW5pdC5zZW5kRW5jb2RpbmdzPyBQ
cm9ibGVtIGlzIHRoZXJlIGlzIG5vCisgICAgLy8gZW5jb2RpbmdOYW1lIG9yIGNsb2NrUmF0ZSBp
biBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMuCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxjb25zdCBj
aGFyKiwgaW50Pj4gZW5jb2RpbmdzOworICAgIGNvbnN0IGNoYXIqIG1lZGlhID0ga2luZC51dGY4
KCkuZGF0YSgpOworICAgIGlmIChraW5kID09ICJ2aWRlbyJfcykgeworICAgICAgICBlbmNvZGlu
Z3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzKTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tl
ZEFwcGVuZCh7ICJWUDgiLCA5MDAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFw
cGVuZCh7ICJWUDkiLCA5MDAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVu
ZCh7ICJIMjY0IiwgOTAwMDAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jb2RpbmdzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7CisgICAgICAgIGVuY29kaW5ncy51bmNoZWNrZWRBcHBl
bmQoeyAiT1BVUyIsIDQ4MDAwIH0pOworICAgIH0KKworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1Jl
Zihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZm9yIChhdXRvJiBbZW5jb2RpbmdOYW1lLCBj
bG9ja1JhdGVdIDogZW5jb2RpbmdzKSB7CisgICAgICAgIGdzdF9jYXBzX2FwcGVuZChjYXBzLmdl
dCgpLCBnc3RfY2Fwc19uZXdfc2ltcGxlKCJhcHBsaWNhdGlvbi94LXJ0cCIsICJtZWRpYSIsIEdf
VFlQRV9TVFJJTkcsIG1lZGlhLCAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGVuY29k
aW5nTmFtZSwKKyAgICAgICAgICAgICJwYXlsb2FkIiwgR19UWVBFX0lOVCwgbV9wdENvdW50ZXIr
KywgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCBjbG9ja1JhdGUsIG51bGxwdHIpKTsKKyAgICB9
CisKKyAgICBhdXRvIGRpcmVjdGlvbiA9IGZyb21SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihp
bml0LmRpcmVjdGlvbik7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIEdVbmlx
dWVQdHI8Y2hhcj4gZGVzYyhnX2VudW1fdG9fc3RyaW5nKEdTVF9UWVBFX1dFQlJUQ19SVFBfVFJB
TlNDRUlWRVJfRElSRUNUSU9OLCBkaXJlY3Rpb24pKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJBZGRpbmcgJXMgdHJhbnNjZWl2ZXIgZm9yIHBheWxvYWQgJSIgR1NU
X1BUUl9GT1JNQVQsIGRlc2MuZ2V0KCksIGNhcHMuZ2V0KCkpOworI2VuZGlmCisKKyAgICAvLyBG
SVhNRTogTm9uZSBvZiB0aGlzIChleGNlcHRlZCBkaXJlY3Rpb24pIGlzIHBhc3NlZCB0byB3ZWJy
dGNiaW4geWV0LgorICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBpbml0RGF0YShnc3Rfc3Ry
dWN0dXJlX25ldygidHJhbnNjZWl2ZXItaW5pdC1kYXRhIiwgImRpcmVjdGlvbiIsIEdTVF9UWVBF
X1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OLCBkaXJlY3Rpb24sIG51bGxwdHIpKTsK
KworICAgIEdWYWx1ZSBzdHJlYW1JZHNWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICBnX3ZhbHVl
X2luaXQoJnN0cmVhbUlkc1ZhbHVlLCBHU1RfVFlQRV9MSVNUKTsKKyAgICBmb3IgKGF1dG8mIHN0
cmVhbSA6IGluaXQuc3RyZWFtcykgeworICAgICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lO
SVQ7CisgICAgICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdfVFlQRV9TVFJJTkcpOworICAgICAg
ICBnX3ZhbHVlX3NldF9zdHJpbmcoJnZhbHVlLCBzdHJlYW0tPmlkKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSgmc3RyZWFtSWRzVmFsdWUsICZ2
YWx1ZSk7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKKyAgICB9CisgICAgZ3N0X3N0
cnVjdHVyZV90YWtlX3ZhbHVlKGluaXREYXRhLmdldCgpLCAic3RyZWFtLWlkcyIsICZzdHJlYW1J
ZHNWYWx1ZSk7CisKKyAgICBHVmFsdWUgZW5jb2RpbmdzVmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Cisg
ICAgZ192YWx1ZV9pbml0KCZlbmNvZGluZ3NWYWx1ZSwgR1NUX1RZUEVfTElTVCk7CisgICAgaWYg
KGtpbmQgPT0gImF1ZGlvIikgeworICAgICAgICBpZiAoIWluaXQuc2VuZEVuY29kaW5ncy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RpbmdEYXRhID0gZnJvbVJUQ0VuY29kaW5n
UGFyYW1ldGVycyhpbml0LnNlbmRFbmNvZGluZ3NbMF0pOworICAgICAgICAgICAgR1ZhbHVlIHZh
bHVlID0gR19WQUxVRV9JTklUOworICAgICAgICAgICAgZ192YWx1ZV9pbml0KCZ2YWx1ZSwgR1NU
X1RZUEVfU1RSVUNUVVJFKTsKKyAgICAgICAgICAgIGdzdF92YWx1ZV9zZXRfc3RydWN0dXJlKCZ2
YWx1ZSwgZW5jb2RpbmdEYXRhLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF92YWx1ZV9saXN0X2Fw
cGVuZF92YWx1ZSgmZW5jb2RpbmdzVmFsdWUsICZ2YWx1ZSk7CisgICAgICAgICAgICBnX3ZhbHVl
X3Vuc2V0KCZ2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGF1
dG8mIGVuY29kaW5nIDogaW5pdC5zZW5kRW5jb2RpbmdzKSB7CisgICAgICAgICAgICBhdXRvIGVu
Y29kaW5nRGF0YSA9IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoZW5jb2RpbmcpOworICAgICAg
ICAgICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOworICAgICAgICAgICAgZ192YWx1ZV9p
bml0KCZ2YWx1ZSwgR1NUX1RZUEVfU1RSVUNUVVJFKTsKKyAgICAgICAgICAgIGdzdF92YWx1ZV9z
ZXRfc3RydWN0dXJlKCZ2YWx1ZSwgZW5jb2RpbmdEYXRhLmdldCgpKTsKKyAgICAgICAgICAgIGdz
dF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSgmZW5jb2RpbmdzVmFsdWUsICZ2YWx1ZSk7CisgICAg
ICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZ2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZ3N0
X3N0cnVjdHVyZV90YWtlX3ZhbHVlKGluaXREYXRhLmdldCgpLCAiZW5jb2RpbmdzIiwgJmVuY29k
aW5nc1ZhbHVlKTsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHJ0Y1Ry
YW5zY2VpdmVyOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwg
ImFkZC10cmFuc2NlaXZlciIsIGRpcmVjdGlvbiwgY2Fwcy5nZXQoKSwgJnJ0Y1RyYW5zY2VpdmVy
Lm91dFB0cigpKTsKKyAgICBpZiAoIXJ0Y1RyYW5zY2VpdmVyKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgYXV0byB0cmFuc2NlaXZlciA9IG1ha2VVbmlxdWU8R1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJ0Y1RyYW5zY2VpdmVyKSk7CisgICAgcmV0
dXJuIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkJhY2tlbmRzIHsgdHJhbnNjZWl2ZXItPmNyZWF0
ZVNlbmRlckJhY2tlbmQobV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQsIFdURk1vdmUoc291cmNlKSwg
V1RGTW92ZShpbml0RGF0YSkpLCB0cmFuc2NlaXZlci0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCks
IFdURk1vdmUodHJhbnNjZWl2ZXIpIH07Cit9CisKK3N0ZDo6b3B0aW9uYWw8R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYW5zY2Vp
dmVyKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQm
IGluaXQpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHModHJhY2tLaW5k
LCBpbml0LCBudWxscHRyKTsKK30KKworR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNl
IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNvdXJjZUZvclRyYWNrKE1lZGlhU3RyZWFt
VHJhY2smIHRyYWNrKQoreworICAgIGlmICh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNBdWRpbygp
KQorICAgICAgICByZXR1cm4gUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpj
cmVhdGUodHJhY2sucHJpdmF0ZVRyYWNrKCkpOworCisgICAgUkVMRUFTRV9BU1NFUlQodHJhY2su
cHJpdmF0ZVRyYWNrKCkuaGFzVmlkZW8oKSk7CisgICAgcmV0dXJuIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsKK30KKwor
c3RkOjpvcHRpb25hbDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6YWRkVHJhbnNjZWl2ZXIoTWVkaWFTdHJlYW1UcmFjayYgdHJhY2ssIGNv
bnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlVHJh
bnNjZWl2ZXJCYWNrZW5kcyh0cmFjay5raW5kKCksIGluaXQsIGNyZWF0ZVNvdXJjZUZvclRyYWNr
KHRyYWNrKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0U2VuZGVyU291
cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNr
JikKK3sKKyAgICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJzZXRTZW5kZXJT
b3VyY2VGcm9tVHJhY2siKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50Ojp0cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQmIGJhY2tlbmQpCit7CisgICAgR1JlZlB0cjxHQXJyYXk+IHRyYW5zY2VpdmVyczsKKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJnZXQtdHJhbnNjZWl2ZXJz
IiwgJnRyYW5zY2VpdmVycy5vdXRQdHIoKSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJMb29raW5nIGZvciBzZW5kZXIgJXAgaW4gJXUgZXhpc3RpbmcgdHJhbnNj
ZWl2ZXJzIiwgYmFja2VuZC5ydGNTZW5kZXIoKSwgdHJhbnNjZWl2ZXJzLT5sZW4pOworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCB0cmFuc2NlaXZlcnMtPmxlbjsgaSsrKSB7CisgICAgICAg
IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBjdXJyZW50ID0gZ19hcnJheV9pbmRleCh0cmFuc2Nl
aXZlcnMuZ2V0KCksIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiwgaSk7CisgICAgICAgIEdSZWZQ
dHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXI7CisgICAgICAgIGdfb2JqZWN0X2dldChjdXJy
ZW50LCAic2VuZGVyIiwgJnNlbmRlci5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICAgICAgaWYg
KCFzZW5kZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHNlbmRlci5nZXQo
KSA9PSBiYWNrZW5kLnJ0Y1NlbmRlcigpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bWFrZVVu
aXF1ZTxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KGN1cnJlbnQpOworICAgIH0KKwor
ICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFk
ZEljZUNhbmRpZGF0ZShHU3RyZWFtZXJJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAg
IEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyBJQ0UgY2FuZGlkYXRl
ICVzIiwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghY2Fu
ZGlkYXRlLmNhbmRpZGF0ZS5zdGFydHNXaXRoKCJjYW5kaWRhdGU6IikpIHsKKyAgICAgICAgY2Fs
bE9uTWFpblRocmVhZChbdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxiYWNrKSld
KCkgbXV0YWJsZSB7CisgICAgICAgICAgICB0YXNrLT5ydW4oRXhjZXB0aW9uIHsgT3BlcmF0aW9u
RXJyb3IsICJFeHBlY3QgbGluZTogY2FuZGlkYXRlOjxjYW5kaWRhdGUtc3RyPiIgfSk7CisgICAg
ICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBwYXJzZWRDYW5kaWRh
dGUgPSBwYXJzZUljZUNhbmRpZGF0ZVNEUChjYW5kaWRhdGUuY2FuZGlkYXRlKTsKKyAgICBpZiAo
IXBhcnNlZENhbmRpZGF0ZSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gY3Jl
YXRlU2hhcmVkVGFzazxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxi
YWNrRnVuY3Rpb24+KFdURk1vdmUoY2FsbGJhY2spKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAg
IHRhc2stPnJ1bihFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgIkVycm9yIHByb2Nlc3Npbmcg
SUNFIGNhbmRpZGF0ZSIgfSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgLy8gRklYTUU6IGludmFsaWQgc2RwTUxpbmVJbmRleCBleGNlcHRpb24gbm90IHJlbGF5
ZWQgZnJvbSB3ZWJydGNiaW4uCisgICAgLy8gRklYTUU6IElkZWFsbHkgdGhpcyBzaG91bGQgcGFz
cyB0aGUgcmVzdWx0L2Vycm9yIHRvIGEgR3N0UHJvbWlzZSBvYmplY3QuCisgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiYWRkLWljZS1jYW5kaWRhdGUiLCBjYW5k
aWRhdGUuc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0YSgpKTsK
KyAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gY3JlYXRlU2hhcmVkVGFzazxQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrRnVuY3Rpb24+KFdURk1vdmUoY2Fs
bGJhY2spKSwgZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0JpbihtX3dlYnJ0
Y0Jpbi5nZXQoKSldKCkgbXV0YWJsZSB7CisgICAgICAgIHRhc2stPnJ1bihXVEZNb3ZlKGRlc2Ny
aXB0aW9ucykpOworICAgIH0pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxI
YW5kbGVyPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbChjb25zdCBT
dHJpbmcmIGxhYmVsLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmIG9wdGlvbnMpCit7CisgICAg
aWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGlu
aXQgPSBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmZyb21SVENEYXRhQ2hhbm5lbEluaXQo
b3B0aW9ucyk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ3JlYXRp
bmcgZGF0YSBjaGFubmVsIGZvciBpbml0IG9wdGlvbnMgJSIgR1NUX1BUUl9GT1JNQVQsIGluaXQu
Z2V0KCkpOworICAgIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGNoYW5uZWw7CisgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiY3JlYXRlLWRhdGEtY2hh
bm5lbCIsIGxhYmVsLnV0ZjgoKS5kYXRhKCksIGluaXQuZ2V0KCksICZjaGFubmVsLm91dFB0cigp
KTsKKyAgICBpZiAoIWNoYW5uZWwpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0
dXJuIFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI+KFdURk1vdmUo
Y2hhbm5lbCkpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uRGF0YUNoYW5u
ZWwoR3N0V2ViUlRDRGF0YUNoYW5uZWwqIGRhdGFDaGFubmVsKQoreworICAgIEdTVF9ERUJVR19P
QkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkluY29taW5nIGRhdGEgY2hhbm5lbCIpOworICAgIEdS
ZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGNoYW5uZWwgPSBkYXRhQ2hhbm5lbDsKKyAgICBj
YWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgZGF0YUNoYW5uZWwg
PSBXVEZNb3ZlKGNoYW5uZWwpXSgpIG11dGFibGUgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNU
KHByb3RlY3RlZFRoaXMtPm1fcGlwZWxpbmUuZ2V0KCksICJJbmNvbWluZyBkYXRhIGNoYW5uZWwg
MSIpOworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QocHJvdGVjdGVkVGhpcy0+bV9waXBl
bGluZS5nZXQoKSwgIkluY29taW5nIGRhdGEgY2hhbm5lbCAyIik7CisgICAgICAgIGF1dG8mIGNv
bm5lY3Rpb24gPSBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jb25uZWN0
aW9uKCk7CisgICAgICAgIGNvbm5lY3Rpb24uZGlzcGF0Y2hFdmVudChHU3RyZWFtZXJEYXRhQ2hh
bm5lbEhhbmRsZXI6OmNyZWF0ZURhdGFDaGFubmVsRXZlbnQoKmNvbm5lY3Rpb24uZG9jdW1lbnQo
KSwgV1RGTW92ZShkYXRhQ2hhbm5lbCkpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpjbG9zZSgpCit7CisgICAgLy8gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0
b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvLS9pc3N1ZXMvMTE4MQorICAgIEdTVF9E
RUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNsb3NpbmciKTsKKyAgICBpZiAobV9waXBl
bGluZSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdT
VF9TVEFURV9SRUFEWSk7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzdG9wTG9n
Z2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpz
dG9wKCkKK3sKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzdG9wTG9nZ2luZ1N0YXRz
KCk7CisjZW5kaWYKKworICAgIGlmICghbV9waXBlbGluZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU3RvcHBpbmciKTsKKyAgICB0
ZWFyZG93blBpcGVsaW5lKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3Vz
cGVuZCgpCit7CisgICAgaWYgKCFtX3BpcGVsaW5lKQorICAgICAgICByZXR1cm47CisKKyAgICBH
U1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTdXNwZW5kaW5nIik7CisgICAgZ3N0
X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QQVVTRUQpOwor
fQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlc3VtZSgpCit7CisgICAgaWYgKCFt
X3BpcGVsaW5lKQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJSZXN1bWluZyIpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3Bp
cGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6b25OZWdvdGlhdGlvbk5lZWRlZCgpCit7CisgICAgbV9pc05lZ290aWF0aW9u
TmVlZGVkID0gdHJ1ZTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwg
IkNoZWNraW5nIG5lZ290aWF0aW9uIHN0YXR1cyIpOworCisgICAgY2FsbE9uTWFpblRocmVhZChb
cHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyldIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMt
PmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKHByb3RlY3RlZFRoaXMtPm1fcGlwZWxpbmUuZ2V0KCksICJOZWdvdGlhdGlvbiBuZWVkZWQh
Iik7CisgICAgICAgIHByb3RlY3RlZFRoaXMtPm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLm1hcmtB
c05lZWRpbmdOZWdvdGlhdGlvbigwKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpvbkljZUNvbm5lY3Rpb25DaGFuZ2UoKQoreworICAgIEdzdFdlYlJUQ0lDRUNv
bm5lY3Rpb25TdGF0ZSBzdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCks
ICJpY2UtY29ubmVjdGlvbi1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0cik7CisgICAgY2FsbE9uTWFp
blRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIGNvbm5lY3Rpb25TdGF0ZSA9IHRv
UlRDSWNlQ29ubmVjdGlvblN0YXRlKHN0YXRlKV0geworICAgICAgICBpZiAocHJvdGVjdGVkVGhp
cy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8mIGNvbm5l
Y3Rpb24gPSBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jb25uZWN0aW9u
KCk7CisgICAgICAgIGlmIChjb25uZWN0aW9uLmljZUNvbm5lY3Rpb25TdGF0ZSgpICE9IGNvbm5l
Y3Rpb25TdGF0ZSkKKyAgICAgICAgICAgIGNvbm5lY3Rpb24udXBkYXRlSWNlQ29ubmVjdGlvblN0
YXRlKGNvbm5lY3Rpb25TdGF0ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6b25JY2VHYXRoZXJpbmdDaGFuZ2UoKQoreworICAgIEdzdFdlYlJUQ0lDRUdhdGhl
cmluZ1N0YXRlIHN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImlj
ZS1nYXRoZXJpbmctc3RhdGUiLCAmc3RhdGUsIG51bGxwdHIpOworICAgIGNhbGxPbk1haW5UaHJl
YWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCBzdGF0ZV0geworICAgICAgICBpZiAocHJv
dGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1
dG8mIGNvbm5lY3Rpb24gPSBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5j
b25uZWN0aW9uKCk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJ
TkdfU1RBVEVfQ09NUExFVEUpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5kb25lR2F0aGVyaW5nQ2FuZGlkYXRlcygpOworICAgICAgICBlbHNlIGlm
IChzdGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfR0FUSEVSSU5HKQorICAg
ICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShSVENJY2VHYXRoZXJp
bmdTdGF0ZTo6R2F0aGVyaW5nKTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1dFQlJU
Q19JQ0VfR0FUSEVSSU5HX1NUQVRFX05FVykKKyAgICAgICAgICAgIGNvbm5lY3Rpb24udXBkYXRl
SWNlR2F0aGVyaW5nU3RhdGUoUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5ldyk7CisgICAgfSk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDYW5kaWRhdGUoZ3VpbnQgc2Rw
TUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5kaWRhdGUpCit7CisgICAgLy8gRklYTUU6IEdldCBt
aWQgZnJvbSBjYW5kaWRhdGU/CisgICAgR1VuaXF1ZU91dFB0cjxHc3RXZWJSVENTZXNzaW9uRGVz
Y3JpcHRpb24+IGRlc2NyaXB0aW9uOworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQo
KSwgImxvY2FsLWRlc2NyaXB0aW9uIiwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsK
KyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBHc3RT
RFBNZWRpYSogbWVkaWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0X21lZGlhKGRlc2NyaXB0aW9uLT5z
ZHAsIHNkcE1MaW5lSW5kZXgpOworICAgIFN0cmluZyBjYW5kaWRhdGVNaWQoZ3N0X3NkcF9tZWRp
YV9nZXRfYXR0cmlidXRlX3ZhbChtZWRpYSwgIm1pZCIpKTsKKyAgICBTdHJpbmcgY2FuZGlkYXRl
U0RQKGNhbmRpZGF0ZSk7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJl
ZigqdGhpcyksIG1pZCA9IFdURk1vdmUoY2FuZGlkYXRlTWlkKSwgc2RwID0gV1RGTW92ZShjYW5k
aWRhdGVTRFApLCBzZHBNTGluZUluZGV4LCBkZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnNGcm9t
V2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgpKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKHBy
b3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBw
cm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5uZXdJQ0VDYW5kaWRhdGUoV1RG
TW92ZShzZHApLCBXVEZNb3ZlKG1pZCksIHNkcE1MaW5lSW5kZXgsIHsgfSwgV1RGTW92ZShkZXNj
cmlwdGlvbnMpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpj
cmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNjZWVkZWQoR1VuaXF1ZVB0cjxHc3RXZWJSVENTZXNz
aW9uRGVzY3JpcHRpb24+JiYgZGVzY3JpcHRpb24pCit7CisgICAgY2FsbE9uTWFpblRocmVhZChb
cHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIGRlc2NyaXB0aW9uID0gV1RGTW92ZShkZXNjcmlw
dGlvbildIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gc2RwKGdzdF9zZHBfbWVz
c2FnZV9hc190ZXh0KGRlc2NyaXB0aW9uLT5zZHApKTsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRo
aXMtPm1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlclN1Y2NlZWRlZChzZHAuZ2V0KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5j
cmVhdGVBbnN3ZXJTdWNjZWVkZWQoc2RwLmdldCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1
ZVB0cjxHRXJyb3I+JiYgZXJyb3IpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVk
VGhpcyA9IFJlZigqdGhpcyksIGVycm9yID0gV1RGTW92ZShlcnJvcildIHsKKyAgICAgICAgaWYg
KHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAg
ICAgIGF1dG8gZXhjID0gRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsIGVycm9yID8gZXJyb3It
Pm1lc3NhZ2UgOiAiVW5rbm93biBFcnJvciIgfTsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMt
Pm1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0
aW9uQmFja2VuZC5jcmVhdGVPZmZlckZhaWxlZChXVEZNb3ZlKGV4YykpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5tX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVh
dGVBbnN3ZXJGYWlsZWQoV1RGTW92ZShleGMpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Ojpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAgICBHUmVmUHRyPEdB
cnJheT4gdHJhbnNjZWl2ZXJzOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jp
bi5nZXQoKSwgImdldC10cmFuc2NlaXZlcnMiLCAmdHJhbnNjZWl2ZXJzLm91dFB0cigpKTsKKyAg
ICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgdHJhbnNjZWl2ZXJzLT5sZW47IGkrKykgeworICAg
ICAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogY3VycmVudCA9IGdfYXJyYXlfaW5kZXgodHJh
bnNjZWl2ZXJzLmdldCgpLCBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciosIGkpOworCisgICAgICAg
IGF1dG8qIGV4aXN0aW5nVHJhbnNjZWl2ZXIgPSBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5leGlz
dGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0cmFuc2NlaXZlckJhY2tlbmQpIHsKKyAgICAgICAg
ICAgIHJldHVybiBjdXJyZW50ID09IHRyYW5zY2VpdmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigp
OworICAgICAgICB9KTsKKyAgICAgICAgaWYgKGV4aXN0aW5nVHJhbnNjZWl2ZXIpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiBy
ZWNlaXZlcjsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBtaWQ7CisgICAgICAgIGdfb2Jq
ZWN0X2dldChjdXJyZW50LCAicmVjZWl2ZXIiLCAmcmVjZWl2ZXIub3V0UHRyKCksICJtaWQiLCAm
bWlkLm91dFB0cigpLCBudWxscHRyKTsKKworICAgICAgICBpZiAoIXJlY2VpdmVyKQorICAgICAg
ICAgICAgY29udGludWU7CisKKyAgICAgICAgaWYgKCFtaWQpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5uZXdSZW1vdGVUcmFuc2NlaXZl
cihXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPihXVEZNb3Zl
KGN1cnJlbnQpKSwgbV9tZWRpYUZvck1pZC5nZXQobWlkLmdldCgpKSk7CisgICAgfQorfQorCisj
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Omdh
dGhlclN0YXRzRm9yTG9nZ2luZygpCit7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2Vi
cnRjQmluLmdldCgpLCAiZ2V0LXN0YXRzIiwgbnVsbHB0ciwgZ3N0X3Byb21pc2VfbmV3X3dpdGhf
Y2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEp
IHsKKyAgICAgICAgYXV0byBwcm9taXNlID0gYWRvcHRHUmVmKHJhd1Byb21pc2UpOworICAgICAg
ICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZS5nZXQoKSk7CisgICAgICAg
IGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY29uc3QgYXV0byogcmVwbHkgPSBnc3RfcHJvbWlzZV9nZXRfcmVw
bHkocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNTRVJUKHJlcGx5KTsKKyAgICAg
ICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlcGx5LCAiZXJyb3IiKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBhdXRvKiBlbmRQb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
R1N0cmVhbWVyTWVkaWFFbmRwb2ludCo+KHVzZXJEYXRhKTsKKyAgICAgICAgZW5kUG9pbnQtPm9u
U3RhdHNEZWxpdmVyZWQocmVwbHkpOworICAgIH0sIHRoaXMsIG51bGxwdHIpKTsKK30KKworY2xh
c3MgUlRDU3RhdHNMb2dnZXIgeworcHVibGljOgorICAgIGV4cGxpY2l0IFJUQ1N0YXRzTG9nZ2Vy
KGNvbnN0IEdzdFN0cnVjdHVyZSogc3RhdHMpCisgICAgICAgIDogbV9zdGF0cyhzdGF0cykKKyAg
ICB7IH0KKworICAgIFN0cmluZyB0b0pTT05TdHJpbmcoKSBjb25zdCB7IHJldHVybiBnc3RTdHJ1
Y3R1cmVUb0pTT05TdHJpbmcobV9zdGF0cyk7IH0KKworcHJpdmF0ZToKKyAgICBjb25zdCBHc3RT
dHJ1Y3R1cmUqIG1fc3RhdHM7Cit9OworCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnBy
b2Nlc3NTdGF0cyhjb25zdCBHVmFsdWUqIHZhbHVlKQoreworICAgIGlmICghR1NUX1ZBTFVFX0hP
TERTX1NUUlVDVFVSRSh2YWx1ZSkpCisgICAgICAgIHJldHVybjsKKworICAgIGNvbnN0IEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUodmFsdWUpOworICAg
IEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dl
dChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VCUlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5
cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1cm47CisKKyAgICAvLyBKdXN0IGNoZWNrIGEgc2lu
Z2xlIHRpbWVzdGFtcCwgaW5ib3VuZCBSVFAgZm9yIGluc3RhbmNlLgorICAgIGlmICghbV9zdGF0
c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wICYmIHN0YXRzVHlwZSA9PSBHU1RfV0VCUlRDX1NUQVRT
X0lOQk9VTkRfUlRQKSB7CisgICAgICAgIGRvdWJsZSB0aW1lc3RhbXA7CisgICAgICAgIGlmIChn
c3Rfc3RydWN0dXJlX2dldF9kb3VibGUoc3RydWN0dXJlLCAidGltZXN0YW1wIiwgJnRpbWVzdGFt
cCkpIHsKKyAgICAgICAgICAgIGF1dG8gdHMgPSBTZWNvbmRzOjpmcm9tTWlsbGlzZWNvbmRzKHRp
bWVzdGFtcCk7CisgICAgICAgICAgICBtX3N0YXRzRmlyc3REZWxpdmVyZWRUaW1lc3RhbXAgPSB0
czsKKworICAgICAgICAgICAgaWYgKCFpc1N0b3BwZWQoKSAmJiBtX3N0YXRzTG9nVGltZXIucmVw
ZWF0SW50ZXJ2YWwoKSAhPSBzdGF0c0xvZ0ludGVydmFsKHRzKSkgeworICAgICAgICAgICAgICAg
IG1fc3RhdHNMb2dUaW1lci5zdG9wKCk7CisgICAgICAgICAgICAgICAgbV9zdGF0c0xvZ1RpbWVy
LnN0YXJ0UmVwZWF0aW5nKHN0YXRzTG9nSW50ZXJ2YWwodHMpKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgIH0KKworICAgIGlmIChsb2dnZXIoKS53aWxsTG9nKGxvZ0NoYW5uZWwoKSwg
V1RGTG9nTGV2ZWw6OkRlYnVnKSkgeworICAgICAgICAvLyBTdGF0cyBhcmUgdmVyeSB2ZXJib3Nl
LCBsZXQncyBvbmx5IGRpc3BsYXkgdGhlbSBpbiBpbnNwZWN0b3IgY29uc29sZSBpbiB2ZXJib3Nl
IG1vZGUuCisgICAgICAgIGxvZ2dlcigpLmRlYnVnKExvZ1dlYlJUQywKKyAgICAgICAgICAgIExv
Z2dlcjo6TG9nU2l0ZUlkZW50aWZpZXIoIkdTdHJlYW1lck1lZGlhRW5kcG9pbnQiLCAib25TdGF0
c0RlbGl2ZXJlZCIsIGxvZ0lkZW50aWZpZXIoKSksCisgICAgICAgICAgICBSVENTdGF0c0xvZ2dl
ciB7IHN0cnVjdHVyZSB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBsb2dnZXIoKS5sb2dBbHdh
eXMoTG9nV2ViUlRDU3RhdHMsCisgICAgICAgICAgICBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVy
KCJHU3RyZWFtZXJNZWRpYUVuZHBvaW50IiwgIm9uU3RhdHNEZWxpdmVyZWQiLCBsb2dJZGVudGlm
aWVyKCkpLAorICAgICAgICAgICAgUlRDU3RhdHNMb2dnZXIgeyBzdHJ1Y3R1cmUgfSk7CisgICAg
fQorfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uU3RhdHNEZWxpdmVyZWQoY29u
c3QgR3N0U3RydWN0dXJlKiBzdGF0cykKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4g
c3RhdHNDb3B5KGdzdF9zdHJ1Y3R1cmVfY29weShzdGF0cykpOworICAgIGNhbGxPbk1haW5UaHJl
YWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCB0aGlzLCBzdGF0cyA9IFdURk1vdmUoc3Rh
dHNDb3B5KV0geworICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2goc3RhdHMuZ2V0KCksIHN0
YXRpY19jYXN0PEdzdFN0cnVjdHVyZUZvcmVhY2hGdW5jPihbXShHUXVhcmssIGNvbnN0IEdWYWx1
ZSogdmFsdWUsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgICAgICBh
dXRvKiBlbmRQb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVyTWVkaWFFbmRwb2ludCo+
KHVzZXJEYXRhKTsKKyAgICAgICAgICAgIGVuZFBvaW50LT5wcm9jZXNzU3RhdHModmFsdWUpOwor
ICAgICAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgICAgIH0pLCB0aGlzKTsKKyAgICB9KTsKK30K
KyNlbmRpZgorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OnN0YXJ0TG9nZ2luZ1N0YXRzKCkKK3sKKyAgICBpZiAobV9zdGF0c0xvZ1RpbWVy
LmlzQWN0aXZlKCkpCisgICAgICAgIG1fc3RhdHNMb2dUaW1lci5zdG9wKCk7CisgICAgbV9zdGF0
c0xvZ1RpbWVyLnN0YXJ0UmVwZWF0aW5nKHN0YXRzTG9nSW50ZXJ2YWwoU2Vjb25kczo6bmFuKCkp
KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wTG9nZ2luZ1N0YXRzKCkK
K3sKKyAgICBtX3N0YXRzTG9nVGltZXIuc3RvcCgpOworfQorCitXVEZMb2dDaGFubmVsJiBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50Ojpsb2dDaGFubmVsKCkgY29uc3QKK3sKKyAgICByZXR1cm4gTG9n
V2ViUlRDOworfQorCitTZWNvbmRzIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0YXRzTG9nSW50
ZXJ2YWwoU2Vjb25kcyByZXBvcnRUaW1lc3RhbXApIGNvbnN0Cit7CisgICAgaWYgKGxvZ2dlcigp
LndpbGxMb2cobG9nQ2hhbm5lbCgpLCBXVEZMb2dMZXZlbDo6SW5mbykpCisgICAgICAgIHJldHVy
biAyX3M7CisKKyAgICBpZiAocmVwb3J0VGltZXN0YW1wIC0gbV9zdGF0c0ZpcnN0RGVsaXZlcmVk
VGltZXN0YW1wID4gMTVfcykKKyAgICAgICAgcmV0dXJuIDEwX3M7CisKKyAgICByZXR1cm4gNF9z
OworfQorI2VuZGlmCisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyRGVjb2Rl
ckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJiBjYWxsYmFjaykK
K3sKKyAgICAvLyBUT0RPOiBjb2xsZWN0IHN0YXRzIGFuZCBsb29rdXAgSW5ib3VuZFJ0cCAiZGVj
b2Rlcl9pbXBsZW1lbnRhdGlvbiIgZmllbGQuCisgICAgY2FsbGJhY2soeyB9KTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECituYW1lc3Bh
Y2UgV1RGIHsKKwordGVtcGxhdGU8dHlwZW5hbWUgVHlwZT4KK3N0cnVjdCBMb2dBcmd1bWVudDsK
KwordGVtcGxhdGUgPD4KK3N0cnVjdCBMb2dBcmd1bWVudDxXZWJDb3JlOjpSVENTdGF0c0xvZ2dl
cj4geworICAgIHN0YXRpYyBTdHJpbmcgdG9TdHJpbmcoY29uc3QgV2ViQ29yZTo6UlRDU3RhdHNM
b2dnZXImIGxvZ2dlcikKKyAgICB7CisgICAgICAgIHJldHVybiBTdHJpbmcobG9nZ2VyLnRvSlNP
TlN0cmluZygpKTsKKyAgICB9Cit9OworCit9OyAvLyBuYW1lc3BhY2UgV1RGCisjZW5kaWYgLy8g
IVJFTEVBU0VfTE9HX0RJU0FCTEVECisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5lZDgz
YmIyYmIwOTdkYWNlNWVhZmU2NTEzYmZjYTNiYTg0YjQwNTA1Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVk
aWFFbmRwb2ludC5oCkBAIC0wLDAgKzEsMTkzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5j
bHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENSdHBSZWNlaXZlci5oIgorCisjaW5jbHVkZSA8d3Rm
L0xvZ2dlckhlbHBlci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ7CitjbGFzcyBHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQ7CitjbGFzcyBNZWRpYVN0cmVhbVRyYWNrOworY2xhc3MgUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uOworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyOworCitjbGFzcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50IDogcHVibGljIFRocmVhZFNhZmVS
ZWZDb3VudGVkPEdTdHJlYW1lck1lZGlhRW5kcG9pbnQsIFdURjo6RGVzdHJ1Y3Rpb25UaHJlYWQ6
Ok1haW4+CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBwcml2YXRlIExvZ2dlckhl
bHBlcgorI2VuZGlmCit7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50PiBjcmVhdGUoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBwZWVyQ29ubmVj
dGlvbikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50KHBlZXJD
b25uZWN0aW9uKSk7IH0KKyAgICB2aXJ0dWFsIH5HU3RyZWFtZXJNZWRpYUVuZHBvaW50KCk7CisK
KyAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mKTsK
KyAgICB2b2lkIHJlc3RhcnRJY2UoKTsKKworICAgIHZvaWQgZG9TZXRMb2NhbERlc2NyaXB0aW9u
KGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiopOworICAgIHZvaWQgZG9TZXRSZW1vdGVEZXNj
cmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24mKTsKKyAgICB2b2lkIGRvQ3JlYXRl
T2ZmZXIoY29uc3QgUlRDT2ZmZXJPcHRpb25zJik7CisgICAgdm9pZCBkb0NyZWF0ZUFuc3dlcigp
OworCisgICAgdm9pZCBnZXRTdGF0cyhHc3RQYWQqLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKTsK
KworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFD
aGFubmVsKGNvbnN0IFN0cmluZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpOworICAgIHZv
aWQgb25EYXRhQ2hhbm5lbChHc3RXZWJSVENEYXRhQ2hhbm5lbCopOworCisgICAgdm9pZCBhZGRJ
Y2VDYW5kaWRhdGUoR1N0cmVhbWVySWNlQ2FuZGlkYXRlJiwgUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmKTsKKworICAgIHZvaWQgY2xvc2UoKTsKKyAgICB2
b2lkIHN0b3AoKTsKKyAgICBib29sIGlzU3RvcHBlZCgpIGNvbnN0IHsgcmV0dXJuICFtX3BpcGVs
aW5lOyB9CisKKyAgICB2b2lkIHN1c3BlbmQoKTsKKyAgICB2b2lkIHJlc3VtZSgpOworCisgICAg
dm9pZCBnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0aW9uPHZvaWQoU3RyaW5n
JiYpPiYmKTsKKyAgICBib29sIGlzTmVnb3RpYXRpb25OZWVkZWQoKSBjb25zdCB7IHJldHVybiBt
X2lzTmVnb3RpYXRpb25OZWVkZWQ7IH0KKworICAgIHZvaWQgY29uZmlndXJlQW5kTGlua1NvdXJj
ZShSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXImKTsKKworICAgIGJvb2wgYWRk
VHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYsIE1lZGlhU3RyZWFtVHJhY2smLCBjb25z
dCBGaXhlZFZlY3RvcjxTdHJpbmc+Jik7CisgICAgdm9pZCByZW1vdmVUcmFjayhHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kJik7CisKKyAgICBzdHJ1Y3QgQmFja2VuZHMgeworICAgICAgICBzdGQ6
OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZD4gc2VuZGVyQmFja2VuZDsKKyAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4gcmVjZWl2
ZXJCYWNrZW5kOworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kPiB0cmFuc2NlaXZlckJhY2tlbmQ7CisgICAgfTsKKyAgICBzdGQ6Om9wdGlvbmFs
PEJhY2tlbmRzPiBhZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3Qg
UlRDUnRwVHJhbnNjZWl2ZXJJbml0Jik7CisgICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gYWRk
VHJhbnNjZWl2ZXIoTWVkaWFTdHJlYW1UcmFjayYsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5p
dCYpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+
IHRyYW5zY2VpdmVyQmFja2VuZEZyb21TZW5kZXIoR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYp
OworCisgICAgdm9pZCBzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVy
QmFja2VuZCYsIE1lZGlhU3RyZWFtVHJhY2smKTsKKworICAgIHZvaWQgY29sbGVjdFRyYW5zY2Vp
dmVycygpOworCisgICAgdm9pZCBjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNjZWVkZWQoR1Vu
aXF1ZVB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYpOworICAgIHZvaWQgY3JlYXRl
U2Vzc2lvbkRlc2NyaXB0aW9uRmFpbGVkKEdVbmlxdWVQdHI8R0Vycm9yPiYmKTsKKworICAgIEdz
dEVsZW1lbnQqIHBpcGVsaW5lKCkgY29uc3QgeyByZXR1cm4gbV9waXBlbGluZS5nZXQoKTsgfQor
ICAgIGJvb2wgaGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKik7CisKKyNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKyAgICB2b2lkIHByb2Nlc3NTdGF0cyhjb25zdCBHVmFsdWUqKTsKKyNlbmRpZgor
Citwcm90ZWN0ZWQ6CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9pZCBvblN0YXRz
RGVsaXZlcmVkKGNvbnN0IEdzdFN0cnVjdHVyZSopOworI2VuZGlmCisKK3ByaXZhdGU6CisgICAg
R1N0cmVhbWVyTWVkaWFFbmRwb2ludChHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmKTsK
KworICAgIGJvb2wgaW5pdGlhbGl6ZVBpcGVsaW5lKCk7CisgICAgdm9pZCB0ZWFyZG93blBpcGVs
aW5lKCk7CisgICAgdm9pZCBkaXNwb3NlRWxlbWVudENoYWluKEdzdEVsZW1lbnQqKTsKKworICAg
IHZvaWQgc2V0RGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKiwgYm9vbCBp
c0xvY2FsLCBGdW5jdGlvbjx2b2lkKCk+JiYgc3VjY2Vzc0NhbGxiYWNrLCBGdW5jdGlvbjx2b2lk
KGNvbnN0IEdFcnJvciopPiYmIGZhaWx1cmVDYWxsYmFjayk7CisgICAgdm9pZCBpbml0aWF0ZShi
b29sIGlzSW5pdGlhdG9yLCBHc3RTdHJ1Y3R1cmUqKTsKKworICAgIHZvaWQgb25OZWdvdGlhdGlv
bk5lZWRlZCgpOworICAgIHZvaWQgb25JY2VDb25uZWN0aW9uQ2hhbmdlKCk7CisgICAgdm9pZCBv
bkljZUdhdGhlcmluZ0NoYW5nZSgpOworICAgIHZvaWQgb25JY2VDYW5kaWRhdGUoZ3VpbnQgc2Rw
TUxpbmVJbmRleCwgZ2NoYXJhcnJheSBjYW5kaWRhdGUpOworCisgICAgTWVkaWFTdHJlYW0mIG1l
ZGlhU3RyZWFtRnJvbVJUQ1N0cmVhbShTdHJpbmcgbGFiZWwpOworCisgICAgdm9pZCBhZGRSZW1v
dGVTdHJlYW0oR3N0UGFkKik7CisgICAgdm9pZCByZW1vdmVSZW1vdGVTdHJlYW0oR3N0UGFkKik7
CisKKyAgICBzdGQ6Om9wdGlvbmFsPEJhY2tlbmRzPiBjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRz
KGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiwgR1N0cmVh
bWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiYpOworICAgIEdTdHJlYW1lclJ0cFNlbmRlckJh
Y2tlbmQ6OlNvdXJjZSBjcmVhdGVTb3VyY2VGb3JUcmFjayhNZWRpYVN0cmVhbVRyYWNrJik7CisK
KyAgICB2b2lkIHN0b3JlUmVtb3RlTUxpbmVJbmZvKEdzdFNEUE1lc3NhZ2UqKTsKKworICAgIEdS
ZWZQdHI8R3N0UGFkPiByZXF1ZXN0UGFkKHVuc2lnbmVkIG1saW5lSW5kZXgsIGNvbnN0IEdSZWZQ
dHI8R3N0Q2Fwcz4mKTsKKworICAgIHZvaWQgc2V0UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQo
KTsKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHZvaWQgZ2F0aGVyU3RhdHNGb3JM
b2dnaW5nKCk7CisgICAgdm9pZCBzdGFydExvZ2dpbmdTdGF0cygpOworICAgIHZvaWQgc3RvcExv
Z2dpbmdTdGF0cygpOworCisgICAgY29uc3QgTG9nZ2VyJiBsb2dnZXIoKSBjb25zdCBmaW5hbCB7
IHJldHVybiBtX2xvZ2dlci5nZXQoKTsgfQorICAgIGNvbnN0IHZvaWQqIGxvZ0lkZW50aWZpZXIo
KSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2xvZ0lkZW50aWZpZXI7IH0KKyAgICBjb25zdCBjaGFy
KiBsb2dDbGFzc05hbWUoKSBjb25zdCBmaW5hbCB7IHJldHVybiAiR1N0cmVhbWVyTWVkaWFFbmRw
b2ludCI7IH0KKyAgICBXVEZMb2dDaGFubmVsJiBsb2dDaGFubmVsKCkgY29uc3QgZmluYWw7CisK
KyAgICBTZWNvbmRzIHN0YXRzTG9nSW50ZXJ2YWwoU2Vjb25kcykgY29uc3Q7CisjZW5kaWYKKwor
ICAgIEhhc2hNYXA8U3RyaW5nLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlPiBtX21lZGlhRm9y
TWlkOworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGUgbWVkaWFUeXBlRm9yTWlkKGNvbnN0
IGNoYXIqIG1pZCk7CisKKyAgICBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmIG1fcGVl
ckNvbm5lY3Rpb25CYWNrZW5kOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV93ZWJydGNCaW47
CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3BpcGVsaW5lOworCisgICAgSGFzaE1hcDxTdHJp
bmcsIFJlZlB0cjxNZWRpYVN0cmVhbT4+IG1fcmVtb3RlU3RyZWFtc0J5SWQ7CisKKyAgICBzdHJ1
Y3QgUGVuZGluZ01MaW5lSW5mbyB7CisgICAgICAgIEdSZWZQdHI8R3N0Q2Fwcz4gY2FwczsKKyAg
ICAgICAgYm9vbCBpc1VzZWQ7CisgICAgICAgIFZlY3RvcjxpbnQ+IHBheWxvYWRUeXBlczsKKyAg
ICB9OworICAgIFZlY3RvcjxQZW5kaW5nTUxpbmVJbmZvPiBtX3JlbW90ZU1MaW5lSW5mb3M7CisK
KyAgICBSZWY8R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I+IG1fc3RhdHNDb2xsZWN0b3I7CisKKyAg
ICB1bnNpZ25lZCBtX3JlcXVlc3RQYWRDb3VudGVyIHsgMCB9OworICAgIGludCBtX3B0Q291bnRl
ciB7IDk2IH07CisKKyAgICB1bnNpZ25lZCBtX21saW5lSW5kZXggeyAwIH07CisKKyAgICBWZWN0
b3I8UmVmPFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcj4+IG1fc291cmNlczsK
KworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW0+PiBtX3BlbmRpbmdTdHJlYW1zOworICAg
IHVuc2lnbmVkIG1fcGVuZGluZ0luY29taW5nU3RyZWFtcyB7IDAgfTsKKworICAgIGJvb2wgbV9p
c0luaXRpYXRvciB7IGZhbHNlIH07CisgICAgYm9vbCBtX2lzTmVnb3RpYXRpb25OZWVkZWQgeyBm
YWxzZSB9OworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgVGltZXIgbV9zdGF0c0xv
Z1RpbWVyOworICAgIFNlY29uZHMgbV9zdGF0c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wOworICAg
IFJlZjxjb25zdCBMb2dnZXI+IG1fbG9nZ2VyOworICAgIGNvbnN0IHZvaWQqIG1fbG9nSWRlbnRp
ZmllcjsKKyNlbmRpZgorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hMzg0ZWNkZGFmNjYyZjQwNjE5
NmFjZWVmYjdhNGQ1MzRhNjcyYmE2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDM3MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZC5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJEb2N1
bWVudC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiSWNlQ2FuZGlkYXRlLmgi
CisjaW5jbHVkZSAiSlNSVENTdGF0c1JlcG9ydC5oIgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJS
VENJY2VDYW5kaWRhdGUuaCIKKyNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbi5oIgorI2luY2x1
ZGUgIlJUQ1J0cENhcGFiaWxpdGllcy5oIgorI2luY2x1ZGUgIlJUQ1J0cFJlY2VpdmVyLmgiCisj
aW5jbHVkZSAiUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291
cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0
cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIHN0ZDo6dW5pcXVlX3B0
cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNyZWF0ZUdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZChSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCit7CisgICAgZW5zdXJlR1N0
cmVhbWVySW5pdGlhbGl6ZWQoKTsKKyAgICBpZiAoIWlzR1N0cmVhbWVyUGx1Z2luQXZhaWxhYmxl
KCJ3ZWJydGMiKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIkdzdFdlYlJUQyBwbHVnaW4gbm90
IGZvdW5kLiBNYWtlIHN1cmUgdG8gaW5zdGFsbCBnc3QtcGx1Z2lucy1iYWQgPj0gMS4yMCB3aXRo
IHRoZSB3ZWJydGMgcGx1Z2luIGVuYWJsZWQuIik7CisgICAgICAgIHJldHVybiBudWxscHRyOwor
ICAgIH0KKyAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZD4ocGVlckNvbm5lY3Rpb24pOworfQorCitDcmVhdGVQZWVyQ29ubmVjdGlvbkJhY2tl
bmQgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGUgPSBjcmVhdGVHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ7CisKK3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OnJlY2VpdmVyQ2FwYWJpbGl0aWVzKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBjb25zdCBTdHJpbmcmIGtpbmQpCit7CisgICAgUlRDUnRwQ2FwYWJpbGl0aWVzIGNh
cGFiaWxpdGllczsKKyAgICBjYXBhYmlsaXRpZXMuaGVhZGVyRXh0ZW5zaW9ucy5hcHBlbmQoeyAi
aHR0cDovL3d3dy5pZXRmLm9yZy9pZC9kcmFmdC1ob2xtZXItcm1jYXQtdHJhbnNwb3J0LXdpZGUt
Y2MtZXh0ZW5zaW9ucy0wMSIgfSk7CisgICAgaWYgKGtpbmQgPT0gImF1ZGlvIl9zKSB7CisgICAg
ICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gImF1ZGlvL09QVVMi
LAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDQ4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxz
ID0gMiwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiCisgICAgICAgIH0pOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJ1
cm46M2dwcDp2aWRlby1vcmllbnRhdGlvbiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2Rl
Y3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL1ZQOCIsCisgICAgICAgICAgICAuY2xvY2tS
YXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAiIiB9KTsKKyAgICAgICAg
Y2FwYWJpbGl0aWVzLmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAg
ICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9
ICJwcm9maWxlLWlkPTAiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7
IC5taW1lVHlwZSA9ICJ2aWRlby9WUDkiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAw
LAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gInByb2ZpbGUtaWQ9MSIgfSk7CisgICAgICAg
IGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL0gyNjQiLAor
ICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5l
ID0gIiIgfSk7CisgICAgfQorICAgIHJldHVybiBjYXBhYmlsaXRpZXM7Cit9CisKK3N0ZDo6b3B0
aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRlckNh
cGFiaWxpdGllcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBraW5kKQor
eworICAgIFJUQ1J0cENhcGFiaWxpdGllcyBjYXBhYmlsaXRpZXM7CisgICAgY2FwYWJpbGl0aWVz
LmhlYWRlckV4dGVuc2lvbnMuYXBwZW5kKHsgImh0dHA6Ly93d3cuaWV0Zi5vcmcvaWQvZHJhZnQt
aG9sbWVyLXJtY2F0LXRyYW5zcG9ydC13aWRlLWNjLWV4dGVuc2lvbnMtMDEiIH0pOworICAgIGlm
IChraW5kID09ICJhdWRpbyJfcykgeworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVu
ZCh7IC5taW1lVHlwZSA9ICJhdWRpby9PUFVTIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA0
ODAwMCwKKyAgICAgICAgICAgIC5jaGFubmVscyA9IDIsCisgICAgICAgICAgICAuc2RwRm10cExp
bmUgPSAiIiB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBjYXBhYmlsaXRpZXMuaGVhZGVyRXh0
ZW5zaW9ucy5hcHBlbmQoeyAidXJuOjNncHA6dmlkZW8tb3JpZW50YXRpb24iIH0pOworICAgICAg
ICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDgiLAor
ICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5l
ID0gIiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MuYXBwZW5kKHsgLm1pbWVUeXBl
ID0gInZpZGVvL1ZQOSIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAg
ICAgICAuc2RwRm10cExpbmUgPSAicHJvZmlsZS1pZD0wIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0
aWVzLmNvZGVjcy5hcHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAg
IC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxl
LWlkPTEiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLmFwcGVuZCh7IC5taW1lVHlw
ZSA9ICJ2aWRlby9IMjY0IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAg
ICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgIH0KKyAgICByZXR1cm4gY2FwYWJpbGl0
aWVzOworfQorCitHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCisgICAg
OiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCisgICAgLCBtX2VuZHBvaW50
KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSgqdGhpcykpCit7CisgICAgZGlzYWJsZUlD
RUNhbmRpZGF0ZUZpbHRlcmluZygpOworfQorCitHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6On5HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQoKSA9IGRlZmF1bHQ7CisKK3ZvaWQg
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzdXNwZW5kKCkKK3sKKyAgICBtX2VuZHBv
aW50LT5zdXNwZW5kKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpyZXN1bWUoKQoreworICAgIG1fZW5kcG9pbnQtPnJlc3VtZSgpOworfQorCit2b2lkIEdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVzdGFydEljZSgpCit7CisgICAgbV9lbmRwb2lu
dC0+cmVzdGFydEljZSgpOworfQorCitib29sIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmIGNvbmZpZ3Vy
YXRpb24pCit7CisgICAgcmV0dXJuIG1fZW5kcG9pbnQtPnNldENvbmZpZ3VyYXRpb24oY29uZmln
dXJhdGlvbik7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRT
dGF0cyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7CisgICAgbV9lbmRwb2ludC0+
Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgYmFja2VuZEZyb21SVFBTZW5kZXIoUlRDUnRwU2Vu
ZGVyJiBzZW5kZXIpCit7CisgICAgQVNTRVJUKCFzZW5kZXIuaXNTdG9wcGVkKCkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJj4oKnNlbmRlci5iYWNr
ZW5kKCkpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3Rh
dHMoUlRDUnRwU2VuZGVyJiBzZW5kZXIsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkK
K3sKKyAgICBpZiAoIXNlbmRlci5iYWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0
U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhdXRvJiBiYWNrZW5kID0gYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKTsKKyAg
ICBHUmVmUHRyPEdzdFBhZD4gcGFkOworICAgIGlmIChSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQuYXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgcGFk
ID0gc291cmNlLT5wYWQoKTsKKyAgICBlbHNlIGlmIChSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQudmlkZW9Tb3VyY2UoKSkKKyAgICAgICAgcGFk
ID0gc291cmNlLT5wYWQoKTsKKyAgICBtX2VuZHBvaW50LT5nZXRTdGF0cyhwYWQuZ2V0KCksIFdU
Rk1vdmUocHJvbWlzZSkpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6Z2V0U3RhdHMoUlRDUnRwUmVjZWl2ZXImIHJlY2VpdmVyLCBSZWY8RGVmZXJyZWRQcm9taXNl
PiYmIHByb21pc2UpCit7CisgICAgaWYgKCFyZWNlaXZlci5iYWNrZW5kKCkpIHsKKyAgICAgICAg
bV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBHc3RFbGVtZW50KiBiaW4gPSBudWxscHRyOworICAgIGF1
dG8mIHNvdXJjZSA9IHJlY2VpdmVyLnRyYWNrKCkucHJpdmF0ZVRyYWNrKCkuc291cmNlKCk7Cisg
ICAgaWYgKHNvdXJjZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgYmluID0gc3Rh
dGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4oc291cmNlKS5i
aW4oKTsKKyAgICBlbHNlIGlmIChzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkpCisgICAg
ICAgIGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
ciY+KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKGJpbiwgInNpbmsiKSk7CisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYo
Z3N0X3BhZF9nZXRfcGVlcihzaW5rUGFkLmdldCgpKSk7CisgICAgbV9lbmRwb2ludC0+Z2V0U3Rh
dHMoc3JjUGFkLmdldCgpLCBXVEZNb3ZlKHByb21pc2UpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNz
aW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0TG9j
YWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7CisgICAgbV9pc0xvY2FsRGVzY3JpcHRpb25TZXQg
PSB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRS
ZW1vdGVEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24p
OworICAgIG1faXNSZW1vdGVEZXNjcmlwdGlvblNldCA9IHRydWU7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYm
IG9wdGlvbnMpCit7CisgICAgbV9lbmRwb2ludC0+ZG9DcmVhdGVPZmZlcihvcHRpb25zKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlQW5zd2VyKFJU
Q0Fuc3dlck9wdGlvbnMmJikKK3sKKyAgICBpZiAoIW1faXNSZW1vdGVEZXNjcmlwdGlvblNldCkg
eworICAgICAgICBjcmVhdGVBbnN3ZXJGYWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJy
b3IsICJObyByZW1vdGUgZGVzY3JpcHRpb24gc2V0IiB9KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtX2VuZHBvaW50LT5kb0NyZWF0ZUFuc3dlcigpOworfQorCit2b2lkIEdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y2xvc2UoKQoreworICAgIG1fZW5kcG9pbnQtPmNsb3Nl
KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb1N0b3AoKQor
eworICAgIG1fZW5kcG9pbnQtPnN0b3AoKTsKKyAgICBtX3BlbmRpbmdSZWNlaXZlcnMuY2xlYXIo
KTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2Fu
ZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBBZGRJY2VDYW5kaWRhdGVDYWxsYmFj
ayYmIGNhbGxiYWNrKQoreworICAgIHVuc2lnbmVkIHNkcE1MaW5lSW5kZXggPSBjYW5kaWRhdGUu
c2RwTUxpbmVJbmRleCgpID8gY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgoKS52YWx1ZSgpIDogMDsK
KyAgICBhdXRvIHJ0Y0NhbmRpZGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJJY2VDYW5k
aWRhdGU+KCpuZXcgR1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsgc2RwTUxpbmVJbmRleCwgY2FuZGlk
YXRlLmNhbmRpZGF0ZSgpIH0pOworICAgIG1fZW5kcG9pbnQtPmFkZEljZUNhbmRpZGF0ZSgqcnRj
Q2FuZGlkYXRlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKK1JlZjxSVENSdHBSZWNlaXZlcj4g
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1
ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiYmIGJhY2tlbmQsIGNvbnN0IFN0cmlu
ZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCit7CisgICAgYXV0byYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKKworICAgIGF1dG8gc291cmNlID0gYmFja2VuZC0+Y3JlYXRlU291cmNlKHRy
YWNrS2luZCwgdHJhY2tJZCk7CisgICAgLy8gUmVtb3RlIHNvdXJjZSBpcyBpbml0aWFsbHkgbXV0
ZWQgYW5kIHdpbGwgYmUgdW5tdXRlZCB3aGVuIHJlY2VpdmluZyB0aGUgZmlyc3QgcGFja2V0Lgor
ICAgIHNvdXJjZS0+c2V0TXV0ZWQodHJ1ZSk7CisgICAgYXV0byB0cmFja0lEID0gc291cmNlLT5w
ZXJzaXN0ZW50SUQoKTsKKyAgICBhdXRvIHJlbW90ZVRyYWNrUHJpdmF0ZSA9IE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpjcmVhdGUoZG9jdW1lbnQubG9nZ2VyKCksIFdURk1vdmUoc291cmNlKSwg
V1RGTW92ZSh0cmFja0lEKSk7CisgICAgYXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFtVHJh
Y2s6OmNyZWF0ZShkb2N1bWVudCwgV1RGTW92ZShyZW1vdGVUcmFja1ByaXZhdGUpKTsKKworICAg
IHJldHVybiBSVENSdHBSZWNlaXZlcjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHJlbW90ZVRyYWNr
KSwgV1RGTW92ZShiYWNrZW5kKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5l
bEhhbmRsZXI+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlRGF0YUNoYW5u
ZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYg
b3B0aW9ucykKK3sKKyAgICByZXR1cm4gbV9lbmRwb2ludC0+Y3JlYXRlRGF0YUNoYW5uZWwobGFi
ZWwsIG9wdGlvbnMpOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxSVENSdHBTZW5kZXI+IGZp
bmRFeGlzdGluZ1NlbmRlcihjb25zdCBWZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj4m
IHRyYW5zY2VpdmVycywgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgc2VuZGVyQmFja2VuZCkK
K3sKKyAgICBBU1NFUlQoc2VuZGVyQmFja2VuZC5ydGNTZW5kZXIoKSk7CisgICAgZm9yIChhdXRv
JiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgeworICAgICAgICBhdXRvJiBzZW5kZXIgPSB0
cmFuc2NlaXZlci0+c2VuZGVyKCk7CisgICAgICAgIGlmICghc2VuZGVyLmlzU3RvcHBlZCgpICYm
IHNlbmRlckJhY2tlbmQucnRjU2VuZGVyKCkgPT0gYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVy
KS5ydGNTZW5kZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBSZWYoc2VuZGVyKTsKKyAgICB9Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+PiBH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2sm
IHRyYWNrLCBGaXhlZFZlY3RvcjxTdHJpbmc+JiYgbWVkaWFTdHJlYW1JZHMpCit7CisgICAgYXV0
byBzZW5kZXJCYWNrZW5kID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQ+KCp0aGlzLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBpZiAoIW1fZW5kcG9pbnQtPmFkZFRy
YWNrKCpzZW5kZXJCYWNrZW5kLCB0cmFjaywgbWVkaWFTdHJlYW1JZHMpKQorICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAiVW5hYmxlIHRvIGFkZCB0cmFjayJfcyB9OworCisg
ICAgaWYgKGF1dG8gc2VuZGVyID0gZmluZEV4aXN0aW5nU2VuZGVyKG1fcGVlckNvbm5lY3Rpb24u
Y3VycmVudFRyYW5zY2VpdmVycygpLCAqc2VuZGVyQmFja2VuZCkpIHsKKyAgICAgICAgYmFja2Vu
ZEZyb21SVFBTZW5kZXIoKnNlbmRlcikudGFrZVNvdXJjZSgqc2VuZGVyQmFja2VuZCk7CisgICAg
ICAgIHNlbmRlci0+c2V0VHJhY2soUmVmKHRyYWNrKSk7CisgICAgICAgIHNlbmRlci0+c2V0TWVk
aWFTdHJlYW1JZHMoV1RGTW92ZShtZWRpYVN0cmVhbUlkcykpOworICAgICAgICByZXR1cm4gc2Vu
ZGVyLnJlbGVhc2VOb25OdWxsKCk7CisgICAgfQorCisgICAgYXV0byB0cmFuc2NlaXZlckJhY2tl
bmQgPSBtX2VuZHBvaW50LT50cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKCpzZW5kZXJCYWNr
ZW5kKTsKKworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29u
bmVjdGlvbiwgUmVmKHRyYWNrKSwgV1RGTW92ZShzZW5kZXJCYWNrZW5kKSk7CisgICAgc2VuZGVy
LT5zZXRNZWRpYVN0cmVhbUlkcyhXVEZNb3ZlKG1lZGlhU3RyZWFtSWRzKSk7CisgICAgYXV0byBy
ZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKHRyYW5zY2VpdmVyQmFja2VuZC0+Y3JlYXRlUmVjZWl2
ZXJCYWNrZW5kKCksIHRyYWNrLmtpbmQoKSwgdHJhY2suaWQoKSk7CisgICAgYXV0byB0cmFuc2Nl
aXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoc2VuZGVyLmNvcHlSZWYoKSwgV1RGTW92
ZShyZWNlaXZlciksIFdURk1vdmUodHJhbnNjZWl2ZXJCYWNrZW5kKSk7CisgICAgbV9wZWVyQ29u
bmVjdGlvbi5hZGRJbnRlcm5hbFRyYW5zY2VpdmVyKFdURk1vdmUodHJhbnNjZWl2ZXIpKTsKKyAg
ICByZXR1cm4gc2VuZGVyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorRXhjZXB0aW9uT3I8
UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjph
ZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChUJiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0
cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICBhdXRvIGJhY2tlbmRzID0gbV9lbmRwb2lu
dC0+YWRkVHJhbnNjZWl2ZXIodHJhY2tPcktpbmQsIGluaXQpOworICAgIGlmICghYmFja2VuZHMp
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsICJVbmFibGUg
dG8gYWRkIHRyYW5zY2VpdmVyIl9zIH07CisKKyAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRl
cjo6Y3JlYXRlKG1fcGVlckNvbm5lY3Rpb24sIFdURk1vdmUodHJhY2tPcktpbmQpLCBXVEZNb3Zl
KGJhY2tlbmRzLT5zZW5kZXJCYWNrZW5kKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJl
Y2VpdmVyKFdURk1vdmUoYmFja2VuZHMtPnJlY2VpdmVyQmFja2VuZCksIHNlbmRlci0+dHJhY2tL
aW5kKCksIHNlbmRlci0+dHJhY2tJZCgpKTsKKyAgICBhdXRvIHRyYW5zY2VpdmVyID0gUlRDUnRw
VHJhbnNjZWl2ZXI6OmNyZWF0ZShXVEZNb3ZlKHNlbmRlciksIFdURk1vdmUocmVjZWl2ZXIpLCBX
VEZNb3ZlKGJhY2tlbmRzLT50cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0
aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICBy
ZXR1cm4gdHJhbnNjZWl2ZXI7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZl
cj4+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhbnNjZWl2ZXIoY29uc3Qg
U3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sK
KyAgICByZXR1cm4gYWRkVHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQoU3RyaW5nIHsgdHJhY2tL
aW5kIH0sIGluaXQpOworfQorCitFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2VpdmVyKFJlZjxNZWRpYVN0
cmVhbVRyYWNrPiYmIHRyYWNrLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQpCit7
CisgICAgcmV0dXJuIGFkZFRyYW5zY2VpdmVyRnJvbVRyYWNrT3JLaW5kKFdURk1vdmUodHJhY2sp
LCBpbml0KTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFNl
bmRlclNvdXJjZUZyb21UcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIsIE1l
ZGlhU3RyZWFtVHJhY2smIHRyYWNrKQoreworICAgIG1fZW5kcG9pbnQtPnNldFNlbmRlclNvdXJj
ZUZyb21UcmFjayhzZW5kZXIsIHRyYWNrKTsKK30KKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQmIGJhY2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIoUlRDUnRwVHJh
bnNjZWl2ZXImIHRyYW5zY2VpdmVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFt
ZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmPigqdHJhbnNjZWl2ZXIuYmFja2VuZCgpKTsKK30KKwor
UlRDUnRwVHJhbnNjZWl2ZXIqIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZXhpc3Rp
bmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kJik+JiYgbWF0Y2hpbmdGdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHRyYW5zY2Vp
dmVyIDogbV9wZWVyQ29ubmVjdGlvbi5jdXJyZW50VHJhbnNjZWl2ZXJzKCkpIHsKKyAgICAgICAg
aWYgKG1hdGNoaW5nRnVuY3Rpb24oYmFja2VuZEZyb21SVFBUcmFuc2NlaXZlcigqdHJhbnNjZWl2
ZXIpKSkKKyAgICAgICAgICAgIHJldHVybiB0cmFuc2NlaXZlci5nZXQoKTsKKyAgICB9CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVyJiBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6Om5ld1JlbW90ZVRyYW5zY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+JiYgdHJhbnNjZWl2ZXJCYWNrZW5kLCBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlIHR5cGUpCit7CisgICAgYXV0byB0cmFja0tpbmQgPSB0eXBlID09
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1ZGlvIl9zIDogInZpZGVvIl9z
OworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlv
biwgdHJhY2tLaW5kLCB0cmFuc2NlaXZlckJhY2tlbmQtPmNyZWF0ZVNlbmRlckJhY2tlbmQoKnRo
aXMsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBhdXRvIHJlY2VpdmVyID0gY3JlYXRlUmVjZWl2
ZXIodHJhbnNjZWl2ZXJCYWNrZW5kLT5jcmVhdGVSZWNlaXZlckJhY2tlbmQoKSwgdHJhY2tLaW5k
LCBzZW5kZXItPnRyYWNrSWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5z
Y2VpdmVyOjpjcmVhdGUoV1RGTW92ZShzZW5kZXIpLCBXVEZNb3ZlKHJlY2VpdmVyKSwgV1RGTW92
ZSh0cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFs
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2
ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xs
ZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAgICBtX2VuZHBvaW50LT5jb2xsZWN0VHJhbnNjZWl2ZXJz
KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZW1vdmVUcmFj
ayhSVENSdHBTZW5kZXImIHNlbmRlcikKK3sKKyAgICBtX2VuZHBvaW50LT5yZW1vdmVUcmFjayhi
YWNrZW5kRnJvbVJUUFNlbmRlcihzZW5kZXIpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcygpCit7
CisgICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRy
YW5zY2VpdmVycygpKSB7CisgICAgICAgIGlmICghdHJhbnNjZWl2ZXItPnNlbmRlcigpLmlzU3Rv
cHBlZCgpKSB7CisgICAgICAgICAgICBpZiAoYXV0byogdmlkZW9Tb3VyY2UgPSBiYWNrZW5kRnJv
bVJUUFNlbmRlcih0cmFuc2NlaXZlci0+c2VuZGVyKCkpLnZpZGVvU291cmNlKCkpCisgICAgICAg
ICAgICAgICAgdmlkZW9Tb3VyY2UtPnNldEFwcGx5Um90YXRpb24odHJ1ZSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnYXRoZXJE
ZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKEZ1bmN0aW9uPHZvaWQoU3RyaW5nJiYpPiYmIGNhbGxi
YWNrKQoreworICAgIG1fZW5kcG9pbnQtPmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUo
V1RGTW92ZShjYWxsYmFjaykpOworfQorCitib29sIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6aXNOZWdvdGlhdGlvbk5lZWRlZCh1aW50MzJfdCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9lbmRwb2ludC0+aXNOZWdvdGlhdGlvbk5lZWRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGFl
YTFhMjYwMTZkNzVmMGJlM2ZkOTgwNjgyOTYwODhiOWUyYWU1OQotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZC5oCkBAIC0wLDAgKzEsMTIwIEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQorCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiUmVhbHRp
bWVNZWRpYVNvdXJjZS5oIgorI2luY2x1ZGUgPGdzdC9nc3QuaD4KKyNpbmNsdWRlIDx3dGYvSGFz
aE1hcC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ7CitjbGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ7CitjbGFzcyBHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kOworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
OworY2xhc3MgUlRDUnRwUmVjZWl2ZXI7CitjbGFzcyBSVENSdHBSZWNlaXZlckJhY2tlbmQ7Citj
bGFzcyBSVENTZXNzaW9uRGVzY3JpcHRpb247CitjbGFzcyBSVENTdGF0c1JlcG9ydDsKK2NsYXNz
IFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjsKK2NsYXNzIFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjsKK2NsYXNzIFJlYWx0aW1lTWVkaWFTb3VyY2VHU3Ry
ZWFtZXI7CitjbGFzcyBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFz
cyBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI7CisKK3N0cnVjdCBHU3RyZWFt
ZXJJY2VDYW5kaWRhdGUgeworICAgIFdURl9NQUtFX1NUUlVDVF9GQVNUX0FMTE9DQVRFRDsKKyAg
ICB1bnNpZ25lZCBzZHBNTGluZUluZGV4OworICAgIFN0cmluZyBjYW5kaWRhdGU7Cit9OworCitj
bGFzcyBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUGVlckNv
bm5lY3Rpb25CYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQoUlRDUGVlckNvbm5l
Y3Rpb24mKTsKKyAgICB+R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKCk7CisKK3ByaXZh
dGU6CisgICAgdm9pZCBjbG9zZSgpIGZpbmFsOworICAgIHZvaWQgZG9DcmVhdGVPZmZlcihSVENP
ZmZlck9wdGlvbnMmJikgZmluYWw7CisgICAgdm9pZCBkb0NyZWF0ZUFuc3dlcihSVENBbnN3ZXJP
cHRpb25zJiYpIGZpbmFsOworICAgIHZvaWQgZG9TZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFJU
Q1Nlc3Npb25EZXNjcmlwdGlvbiopIGZpbmFsOworICAgIHZvaWQgZG9TZXRSZW1vdGVEZXNjcmlw
dGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24mKSBmaW5hbDsKKyAgICB2b2lkIGRvQWRk
SWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSYsIEFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrJiYp
IGZpbmFsOworICAgIHZvaWQgZG9TdG9wKCkgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJU
Q0RhdGFDaGFubmVsSGFuZGxlcj4gY3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmlu
ZyYsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpIGZpbmFsOworICAgIHZvaWQgcmVzdGFydElj
ZSgpIGZpbmFsOworICAgIGJvb2wgc2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbiYmKSBmaW5hbDsKKyAgICB2b2lkIGdldFN0YXRzKFJlZjxEZWZlcnJlZFByb21pc2U+
JiYpIGZpbmFsOworICAgIHZvaWQgZ2V0U3RhdHMoUlRDUnRwU2VuZGVyJiwgUmVmPERlZmVycmVk
UHJvbWlzZT4mJikgZmluYWw7CisgICAgdm9pZCBnZXRTdGF0cyhSVENSdHBSZWNlaXZlciYsIFJl
ZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFsOworCisgICAgdm9pZCBlbXVsYXRlUGxhdGZvcm1F
dmVudChjb25zdCBTdHJpbmcmKSBmaW5hbCB7IH0KKyAgICB2b2lkIGFwcGx5Um90YXRpb25Gb3JP
dXRnb2luZ1ZpZGVvU291cmNlcygpIGZpbmFsOworCisgICAgdm9pZCBnYXRoZXJEZWNvZGVySW1w
bGVtZW50YXRpb25OYW1lKEZ1bmN0aW9uPHZvaWQoU3RyaW5nJiYpPiYmKSBmaW5hbDsKKworICAg
IGJvb2wgaXNOZWdvdGlhdGlvbk5lZWRlZCh1aW50MzJfdCkgY29uc3QgZmluYWw7CisKKyAgICBz
dGQ6Om9wdGlvbmFsPGJvb2w+IGNhblRyaWNrbGVJY2VDYW5kaWRhdGVzKCkgY29uc3QgeyByZXR1
cm4gdHJ1ZTsgfTsKKworICAgIGZyaWVuZCBjbGFzcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Owor
ICAgIGZyaWVuZCBjbGFzcyBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOworICAgIFJUQ1BlZXJD
b25uZWN0aW9uJiBjb25uZWN0aW9uKCkgeyByZXR1cm4gbV9wZWVyQ29ubmVjdGlvbjsgfQorCisg
ICAgdm9pZCBnZXRTdGF0c1N1Y2NlZWRlZChjb25zdCBEZWZlcnJlZFByb21pc2UmLCBSZWY8UlRD
U3RhdHNSZXBvcnQ+JiYpOworCisgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFNlbmRlcj4+IGFk
ZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2smLCBGaXhlZFZlY3RvcjxTdHJpbmc+JiYpIGZpbmFsOwor
ICAgIHZvaWQgcmVtb3ZlVHJhY2soUlRDUnRwU2VuZGVyJikgZmluYWw7CisKKyAgICBFeGNlcHRp
b25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlcihjb25zdCBTdHJpbmcm
LCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmKSBmaW5hbDsKKyAgICBFeGNlcHRpb25PcjxS
ZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlcihSZWY8TWVkaWFTdHJlYW1UcmFj
az4mJiwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JikgZmluYWw7CisgICAgdm9pZCBzZXRT
ZW5kZXJTb3VyY2VGcm9tVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYsIE1lZGlhU3Ry
ZWFtVHJhY2smKTsKKworICAgIFJUQ1J0cFRyYW5zY2VpdmVyKiBleGlzdGluZ1RyYW5zY2VpdmVy
KFdURjo6RnVuY3Rpb248Ym9vbChHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmKT4mJik7
CisgICAgUlRDUnRwVHJhbnNjZWl2ZXImIG5ld1JlbW90ZVRyYW5zY2VpdmVyKHN0ZDo6dW5pcXVl
X3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+JiYsIFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGUpOworCisgICAgdm9pZCBjb2xsZWN0VHJhbnNjZWl2ZXJzKCkgZmluYWw7CisKK3By
aXZhdGU6CisgICAgYm9vbCBpc0xvY2FsRGVzY3JpcHRpb25TZXQoKSBjb25zdCBmaW5hbCB7IHJl
dHVybiBtX2lzTG9jYWxEZXNjcmlwdGlvblNldDsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUg
VD4KKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZl
ckZyb21UcmFja09yS2luZChUJiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVy
SW5pdCYpOworCisgICAgUmVmPFJUQ1J0cFJlY2VpdmVyPiBjcmVhdGVSZWNlaXZlcihzdGQ6OnVu
aXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiYmLCBjb25zdCBTdHJpbmcmIHRy
YWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKTsKKworICAgIHZvaWQgc3VzcGVuZCgpIGZp
bmFsOworICAgIHZvaWQgcmVzdW1lKCkgZmluYWw7CisKKyAgICBSZWY8R1N0cmVhbWVyTWVkaWFF
bmRwb2ludD4gbV9lbmRwb2ludDsKKyAgICBib29sIG1faXNMb2NhbERlc2NyaXB0aW9uU2V0IHsg
ZmFsc2UgfTsKKyAgICBib29sIG1faXNSZW1vdGVEZXNjcmlwdGlvblNldCB7IGZhbHNlIH07CisK
KyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lckljZUNhbmRpZGF0ZT4+IG1fcGVu
ZGluZ0NhbmRpZGF0ZXM7CisgICAgVmVjdG9yPFJlZjxSVENSdHBSZWNlaXZlcj4+IG1fcGVuZGlu
Z1JlY2VpdmVyczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJl
Y2VpdmVyQmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWMxMzQzYjEzOWY1YmE5MmY0MTU1ZjNkMDUw
NTA1ZDJjZmFmY2Q3NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5jcHAKQEAg
LTAsMCArMSw3NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgorCisj
aWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBS
ZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGls
cy5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JUQ1J0cFBhcmFtZXRlcnMgR1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxSVENSdHBDb250cmlidXRpbmdTb3VyY2U+IEdT
dHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0Q29udHJpYnV0aW5nU291cmNlcygpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8
UlRDUnRwU3luY2hyb25pemF0aW9uU291cmNlPiBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6
OmdldFN5bmNocm9uaXphdGlvblNvdXJjZXMoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IEdTdHJl
YW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Y3JlYXRlU291cmNlKGNvbnN0IFN0cmluZyYgdHJhY2tL
aW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCit7CisgICAgaWYgKHRyYWNrS2luZCA9PSAidmlk
ZW8iX3MpCisgICAgICAgIHJldHVybiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXI6OmNyZWF0ZSh0cmFja0lkLmlzb2xhdGVkQ29weSgpKTsKKworICAgIFJFTEVBU0VfQVNTRVJU
KHRyYWNrS2luZCA9PSAiYXVkaW8iX3MpOworICAgIHJldHVybiBSZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFja0lkLmlzb2xhdGVkQ29weSgpKTsKK30KKwor
UmVmPFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6
cnRjUnRwVHJhbnNmb3JtQmFja2VuZCgpCit7CisgICAgcmV0dXJuIEdTdHJlYW1lclJ0cFJlY2Vp
dmVyVHJhbnNmb3JtQmFja2VuZDo6Y3JlYXRlKG1fcnRjUmVjZWl2ZXIpOworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFj
a2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRM
U1RyYW5zcG9ydD4gdHJhbnNwb3J0OworICAgIGdfb2JqZWN0X2dldChtX3J0Y1JlY2VpdmVyLmdl
dCgpLCAidHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0
dXJuIHRyYW5zcG9ydCA/IG1ha2VVbmlxdWU8R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ+
KHRyYW5zcG9ydCkgOiBudWxscHRyOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJSdHBSZWNlaXZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2
M2E3NTk3Yjk4Mjc2NzZkZTAzM2ExOWJjNDNmY2RhMmY4MTMzMDYKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBSZWNlaXZlckJhY2tlbmQuaApAQCAtMCwwICsxLDUzIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJSVENSdHBSZWNlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291
cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ1J0cFJlY2VpdmVyQmFja2VuZCB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUnRw
UmVjZWl2ZXJCYWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+JiYgcnRjUmVjZWl2
ZXIpCisgICAgICAgIDogbV9ydGNSZWNlaXZlcihXVEZNb3ZlKHJ0Y1JlY2VpdmVyKSkKKyAgICB7
CisgICAgfQorCisgICAgR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHJ0Y1JlY2VpdmVyKCkgeyByZXR1
cm4gbV9ydGNSZWNlaXZlci5nZXQoKTsgfQorICAgIFJlZjxSZWFsdGltZU1lZGlhU291cmNlPiBj
cmVhdGVTb3VyY2UoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJ
ZCk7CisKK3ByaXZhdGU6CisgICAgUlRDUnRwUGFyYW1ldGVycyBnZXRQYXJhbWV0ZXJzKCkgZmlu
YWw7CisgICAgVmVjdG9yPFJUQ1J0cENvbnRyaWJ1dGluZ1NvdXJjZT4gZ2V0Q29udHJpYnV0aW5n
U291cmNlcygpIGNvbnN0IGZpbmFsOworICAgIFZlY3RvcjxSVENSdHBTeW5jaHJvbml6YXRpb25T
b3VyY2U+IGdldFN5bmNocm9uaXphdGlvblNvdXJjZXMoKSBjb25zdCBmaW5hbDsKKyAgICBSZWY8
UlRDUnRwVHJhbnNmb3JtQmFja2VuZD4gcnRjUnRwVHJhbnNmb3JtQmFja2VuZCgpIGZpbmFsOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gZHRsc1RyYW5zcG9y
dEJhY2tlbmQoKSBmaW5hbDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IG1f
cnRjUmVjZWl2ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNl
aXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5lMjkwODJmZWNhNGQ0OGE4MzcwMzY5NzkxNzY3ZGJhZGFlMzNmOTBiCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApAQCAtMCwwICsxLDU5
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmgiCisKKyNp
ZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJO
b3RJbXBsZW1lbnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUg
R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGUgbWVkaWFUeXBl
RnJvbVJlY2VpdmVyKGNvbnN0IEdzdFdlYlJUQ1JUUFJlY2VpdmVyJikKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworICAgIHJldHVybiBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGU6
OlZpZGVvOworfQorCitHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJl
YW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JU
UFJlY2VpdmVyPiYgcnRjUmVjZWl2ZXIpCisgICAgOiBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNr
ZW5kKG1lZGlhVHlwZUZyb21SZWNlaXZlcigqcnRjUmVjZWl2ZXIpLCBTaWRlOjpSZWNlaXZlcikK
KyAgICAsIG1fcnRjUmVjZWl2ZXIocnRjUmVjZWl2ZXIpCit7Cit9CisKK0dTdHJlYW1lclJ0cFJl
Y2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFj
a2VuZCgpCit7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5k
OjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayhDYWxsYmFjayYmIGNhbGxiYWNrKQorewor
ICAgIHNldElucHV0Q2FsbGJhY2soV1RGTW92ZShjYWxsYmFjaykpOworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpy
ZXF1ZXN0S2V5RnJhbWUoKQoreworICAgIEFTU0VSVChtZWRpYVR5cGUoKSA9PSBNZWRpYVR5cGU6
OlZpZGVvKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNm
b3JtQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjg1ODY2NzZhMDZiN2FiOWViMGIzMmU3ZGY3YzYzNDgx
NWE4Yzk3OWYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaApA
QCAtMCwwICsxLDQ4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21h
IG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFu
c2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNs
dWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJl
YW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBHU3RyZWFtZXJS
dHBUcmFuc2Zvcm1CYWNrZW5kIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lclJ0
cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZD4gY3JlYXRlKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRD
UlRQUmVjZWl2ZXI+JiByZWNlaXZlcikgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBHU3RyZWFtZXJS
dHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQocmVjZWl2ZXIpKTsgfQorICAgIH5HU3RyZWFtZXJS
dHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICBleHBsaWNpdCBH
U3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJS
VENSVFBSZWNlaXZlcj4mKTsKKworICAgIC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2
b2lkIHNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxiYWNrJiYpIGZpbmFsOworICAg
IHZvaWQgcmVxdWVzdEtleUZyYW1lKCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JU
UFJlY2VpdmVyPiBtX3J0Y1JlY2VpdmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kOTZiY2JhOTI1ZmU5ZGZmN2Y2ZTU2YTU1MTY1MmQ4NWUyYjgzMGM3Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwU2VuZGVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSwxNDEgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2Vu
ZGVyVHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgi
CisjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVmZXJyZWQuaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDUnRw
U2VuZGVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisj
aW5jbHVkZSAiUnVudGltZUVuYWJsZWRGZWF0dXJlcy5oIgorI2luY2x1ZGUgIlNjcmlwdEV4ZWN1
dGlvbkNvbnRleHQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBTb3VyY2U+CitzdGF0aWMgaW5saW5lIGJvb2wgdXBkYXRlVHJhY2tTb3VyY2UoU291cmNlJiBz
b3VyY2UsIE1lZGlhU3RyZWFtVHJhY2sqIHRyYWNrKQoreworICAgIGlmICghdHJhY2spIHsKKyAg
ICAgICAgc291cmNlLnN0b3AoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorICAgIHJl
dHVybiBzb3VyY2Uuc2V0VHJhY2sodHJhY2stPnByaXZhdGVUcmFjaygpKTsKK30KKwordm9pZCBH
U3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzdGFydFNvdXJjZSgpCit7CisgICAgc3dpdGNoT24o
bV9zb3VyY2UsIFtdKFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+JiBz
b3VyY2UpIHsKKyAgICAgICAgc291cmNlLT5zdGFydCgpOworICAgIH0sIFtdKFJlZjxSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgc291cmNl
LT5zdGFydCgpOworICAgIH0sIFtdKHN0ZDo6bnVsbHB0cl90JikgeworICAgIH0pOworfQorCitX
QVJOX1VOVVNFRF9SRVRVUk4gR1JlZlB0cjxHc3RFbGVtZW50PiBHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kOjpzdG9wU291cmNlKCkKK3sKKyAgICBzd2l0Y2hPbihtX3NvdXJjZSwgW10oUmVmPFJl
YWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBz
b3VyY2UtPnN0b3AoKTsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8R3N0RWxlbWVudD4oc291cmNl
LT5iaW4oKSk7CisgICAgfSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0b3AoKTsKKyAgICAgICAgcmV0dXJu
IEdSZWZQdHI8R3N0RWxlbWVudD4oc291cmNlLT5iaW4oKSk7CisgICAgfSwgW10oc3RkOjpudWxs
cHRyX3QmKSB7CisgICAgICAgIHJldHVybiBHUmVmUHRyPEdzdEVsZW1lbnQ+KG51bGxwdHIpOwor
ICAgIH0pOworICAgIHJldHVybiBudWxscHRyOworfQorCitib29sIEdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ6OnJlcGxhY2VUcmFjayhSVENSdHBTZW5kZXImIHNlbmRlciwgTWVkaWFTdHJlYW1U
cmFjayogdHJhY2spCit7CisgICAgaWYgKCF0cmFjaykgeworICAgICAgICBhdXRvIHN0b3BwZWRT
b3VyY2UgPSBzdG9wU291cmNlKCk7CisgICAgICAgIHJldHVybiB0cnVlOworICAgIH0KKworICAg
IGlmIChzZW5kZXIudHJhY2soKSkgeworICAgICAgICBzd2l0Y2hPbihtX3NvdXJjZSwgWyZdKFJl
ZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAg
ICAgICAgIEFTU0VSVCh0cmFjay0+c291cmNlKCkudHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3Vy
Y2U6OlR5cGU6OkF1ZGlvKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAgICAg
ICAgc291cmNlLT5zZXRTb3VyY2UodHJhY2stPnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAgICAg
IHNvdXJjZS0+c3RhcnQoKTsKKyAgICAgICAgfSwgWyZdKFJlZjxSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsKKyAgICAgICAgICAgIEFTU0VSVCh0cmFjay0+
c291cmNlKCkudHlwZSgpID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKTsKKyAg
ICAgICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAgICAgICAgc291cmNlLT5zZXRTb3VyY2Uo
dHJhY2stPnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAgICAgIHNvdXJjZS0+c3RhcnQoKTsKKyAg
ICAgICAgfSwgW10oc3RkOjpudWxscHRyX3QmKSB7CisgICAgICAgIH0pOworICAgIH0KKworICAg
IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLT5zZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2soKnRoaXMs
ICp0cmFjayk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK1JUQ1J0cFNlbmRQYXJhbWV0ZXJzIEdT
dHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMoKSBjb25zdAoreworICAgIHJl
dHVybiB0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKG1faW5pdERhdGEuZ2V0KCkpOworfQorCit2b2lk
IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnNldFBhcmFtZXRlcnMoY29uc3QgUlRDUnRwU2Vu
ZFBhcmFtZXRlcnMmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJiBwcm9taXNlKQoreworICAg
IGlmICghbV9ydGNTZW5kZXIpIHsKKyAgICAgICAgcHJvbWlzZS5yZWplY3QoTm90U3VwcG9ydGVk
RXJyb3IpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICBwcm9taXNlLnJlc29sdmUoKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPFJUQ0RUTUZTZW5k
ZXJCYWNrZW5kPiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpjcmVhdGVEVE1GQmFja2VuZCgp
Cit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWU8R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ+KCk7
Cit9CisKK1JlZjxSVENSdHBUcmFuc2Zvcm1CYWNrZW5kPiBHU3RyZWFtZXJSdHBTZW5kZXJCYWNr
ZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyUnRw
U2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6Y3JlYXRlKG1fcnRjU2VuZGVyKTsKK30KKwordm9pZCBH
U3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzZXRNZWRpYVN0cmVhbUlkcyhjb25zdCBGaXhlZFZl
Y3RvcjxTdHJpbmc+JikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6
OmR0bHNUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFu
c3BvcnQ+IHRyYW5zcG9ydDsKKyAgICBnX29iamVjdF9nZXQobV9ydGNTZW5kZXIuZ2V0KCksICJ0
cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJh
bnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNw
b3J0KSA6IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNl
bmRlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45MzMxMDgxY2Y3YjIy
NGFiNTY1NWNjMzY4OTU4MTNhMGIzMjY2ZWZiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFj
a2VuZC5oCkBAIC0wLDAgKzEsMTIxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2lu
Y2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENSdHBTZW5kZXJCYWNr
ZW5kLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRlckJh
Y2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDUnRwU2VuZGVyQmFja2VuZCB7CisgICAgV1RGX01BS0Vf
RkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZChH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmIGJhY2tlbmQsIEdSZWZQdHI8R3N0V2ViUlRD
UlRQU2VuZGVyPiYmIHJ0Y1NlbmRlciwgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERh
dGEpCisgICAgICAgIDogbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQoV2Vha1B0ciB7ICZiYWNrZW5k
IH0pCisgICAgICAgICwgbV9ydGNTZW5kZXIoV1RGTW92ZShydGNTZW5kZXIpKQorICAgICAgICAs
IG1faW5pdERhdGEoV1RGTW92ZShpbml0RGF0YSkpCisgICAgeworICAgIH0KKworICAgIHVzaW5n
IFNvdXJjZSA9IHN0ZDo6dmFyaWFudDxzdGQ6Om51bGxwdHJfdCwgUmVmPFJlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4sIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXI+PjsKKyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZCYgYmFja2VuZCwgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYg
cnRjU2VuZGVyLCBTb3VyY2UmJiBzb3VyY2UsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmIGlu
aXREYXRhKQorICAgICAgICA6IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kKFdlYWtQdHIgeyAmYmFj
a2VuZCB9KQorICAgICAgICAsIG1fcnRjU2VuZGVyKFdURk1vdmUocnRjU2VuZGVyKSkKKyAgICAg
ICAgLCBtX3NvdXJjZShXVEZNb3ZlKHNvdXJjZSkpCisgICAgICAgICwgbV9pbml0RGF0YShXVEZN
b3ZlKGluaXREYXRhKSkKKyAgICB7CisgICAgfQorCisgICAgdm9pZCBzZXRSVENTZW5kZXIoR1Jl
ZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYgcnRjU2VuZGVyKSB7IG1fcnRjU2VuZGVyID0gV1RG
TW92ZShydGNTZW5kZXIpOyB9CisgICAgR3N0V2ViUlRDUlRQU2VuZGVyKiBydGNTZW5kZXIoKSB7
IHJldHVybiBtX3J0Y1NlbmRlci5nZXQoKTsgfQorCisgICAgUmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlR1N0cmVhbWVyKiBhdWRpb1NvdXJjZSgpCisgICAgeworICAgICAgICByZXR1cm4gV1RG
Ojpzd2l0Y2hPbihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChSZWY8UmVhbHRpbWVPdXRnb2lu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7IHJldHVybiBzb3VyY2UucHRyKCk7IH0s
CisgICAgICAgICAgICBbXSAoY29uc3QgYXV0byYpIC0+IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lciogeyByZXR1cm4gbnVsbHB0cjsgfQorICAgICAgICApOworICAgIH0KKwor
ICAgIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciogdmlkZW9Tb3VyY2UoKQor
ICAgIHsKKyAgICAgICAgcmV0dXJuIFdURjo6c3dpdGNoT24obV9zb3VyY2UsCisgICAgICAgICAg
ICBbXSAoUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkg
eyByZXR1cm4gc291cmNlLnB0cigpOyB9LAorICAgICAgICAgICAgW10gKGNvbnN0IGF1dG8mKSAt
PiBSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIqIHsgcmV0dXJuIG51bGxwdHI7
IH0KKyAgICAgICAgKTsKKyAgICB9CisKKyAgICBib29sIGhhc1NvdXJjZSgpIGNvbnN0CisgICAg
eworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtd
IChjb25zdCBzdGQ6Om51bGxwdHJfdCYpIHsgcmV0dXJuIGZhbHNlOyB9LAorICAgICAgICAgICAg
W10gKGNvbnN0IGF1dG8mKSB7IHJldHVybiB0cnVlOyB9CisgICAgICAgICk7CisgICAgfQorCisg
ICAgdm9pZCBjbGVhclNvdXJjZSgpCisgICAgeworICAgICAgICBBU1NFUlQoaGFzU291cmNlKCkp
OworICAgICAgICBtX3NvdXJjZSA9IG51bGxwdHI7CisgICAgfQorCisgICAgdm9pZCBzZXRTb3Vy
Y2UoU291cmNlJiYgc291cmNlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKCFoYXNTb3VyY2UoKSk7
CisgICAgICAgIG1fc291cmNlID0gV1RGTW92ZShzb3VyY2UpOworICAgICAgICBBU1NFUlQoaGFz
U291cmNlKCkpOworICAgIH0KKworICAgIHZvaWQgdGFrZVNvdXJjZShHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kJiBiYWNrZW5kKQorICAgIHsKKyAgICAgICAgQVNTRVJUKGJhY2tlbmQuaGFzU291
cmNlKCkpOworICAgICAgICBzZXRTb3VyY2UoV1RGTW92ZShiYWNrZW5kLm1fc291cmNlKSk7Cisg
ICAgfQorCisgICAgV0FSTl9VTlVTRURfUkVUVVJOIEdSZWZQdHI8R3N0RWxlbWVudD4gc3RvcFNv
dXJjZSgpOworCitwcml2YXRlOgorICAgIGJvb2wgcmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYs
IE1lZGlhU3RyZWFtVHJhY2sqKSBmaW5hbDsKKyAgICBSVENSdHBTZW5kUGFyYW1ldGVycyBnZXRQ
YXJhbWV0ZXJzKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXRQYXJhbWV0ZXJzKGNvbnN0IFJU
Q1J0cFNlbmRQYXJhbWV0ZXJzJiwgRE9NUHJvbWlzZURlZmVycmVkPHZvaWQ+JiYpIGZpbmFsOwor
ICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEVE1GU2VuZGVyQmFja2VuZD4gY3JlYXRlRFRNRkJhY2tl
bmQoKSBmaW5hbDsKKyAgICBSZWY8UlRDUnRwVHJhbnNmb3JtQmFja2VuZD4gcnRjUnRwVHJhbnNm
b3JtQmFja2VuZCgpIGZpbmFsOworICAgIHZvaWQgc2V0TWVkaWFTdHJlYW1JZHMoY29uc3QgRml4
ZWRWZWN0b3I8U3RyaW5nPiYpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJh
bnNwb3J0QmFja2VuZD4gZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBmaW5hbDsKKworICAgIHZvaWQg
c3RhcnRTb3VyY2UoKTsKKworICAgIFdlYWtQdHI8R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kPiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNl
bmRlcj4gbV9ydGNTZW5kZXI7CisgICAgU291cmNlIG1fc291cmNlOworICAgIEdVbmlxdWVQdHI8
R3N0U3RydWN0dXJlPiBtX2luaXREYXRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNr
ZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5mNjZjNGRlYzFiYjAzYTMyNzdkOTJiMDY1NDI5YzY0MDcyYmUx
NDNlCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHAKQEAgLTAs
MCArMSw1OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaCIK
KworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlu
bGluZSBHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpNZWRpYVR5cGUgbWVkaWFU
eXBlRnJvbVNlbmRlcihjb25zdCBHc3RXZWJSVENSVFBTZW5kZXImKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZTo6
VmlkZW87Cit9CisKK0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1l
clJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5k
ZXI+JiBydGNTZW5kZXIpCisgICAgOiBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKG1lZGlh
VHlwZUZyb21TZW5kZXIoKnJ0Y1NlbmRlciksIFNpZGU6OlNlbmRlcikKKyAgICAsIG1fcnRjU2Vu
ZGVyKHJ0Y1NlbmRlcikKK3sKK30KKworR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2Vu
ZDo6fkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoKQoreworfQorCit2b2lkIEdT
dHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNh
bGxiYWNrKENhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgc2V0SW5wdXRDYWxsYmFjayhXVEZN
b3ZlKGNhbGxiYWNrKSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHU3RyZWFt
ZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJhbWUoKQoreworICAgIEFT
U0VSVChtZWRpYVR5cGUoKSA9PSBNZWRpYVR5cGU6OlZpZGVvKTsKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zv
cm1CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmIwYTU3
NmRiMTI2ODNlNzU4OTc4NDJkMTRhNzk1OGE0OTBlOTI2ZgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNl
bmRlclRyYW5zZm9ybUJhY2tlbmQuaApAQCAtMCwwICsxLDUxIEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVh
bWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclNlbmRlclRyYW5zZm9ybWVyOworCitjbGFzcyBH
U3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kIGZpbmFsIDogcHVibGljIEdTdHJlYW1l
clJ0cFRyYW5zZm9ybUJhY2tlbmQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZD4g
Y3JlYXRlKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiYgc2VuZGVyKSB7IHJldHVy
biBhZG9wdFJlZigqbmV3IEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoc2VuZGVy
KSk7IH0KKyAgICB+R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCgpOworCitwcml2
YXRlOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQoY29u
c3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+Jik7CisKKyAgICAvLyBSVENSdHBUcmFuc2Zv
cm1CYWNrZW5kCisgICAgdm9pZCBzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayhDYWxsYmFj
ayYmKSBmaW5hbDsKKyAgICB2b2lkIHJlcXVlc3RLZXlGcmFtZSgpIGZpbmFsOworCisgICAgR1Jl
ZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IG1fcnRjU2VuZGVyOworfTsKKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDUzYWQwNDA0ZTZiODY4YWJkMmE2YTU0YzQ2MDYzMWMw
N2UxNjEzYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5jcHAKQEAgLTAs
MCArMSwxMjkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKwor
I2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUg
IkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNl
bmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1
ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUlRDUnRwQ29kZWNDYXBhYmlsaXR5Lmgi
CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCitHU1RfREVCVUdfQ0FURUdPUllf
RVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RF
RkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+JiYgcnRjVHJhbnNjZWl2
ZXIpCisgICAgOiBtX3J0Y1RyYW5zY2VpdmVyKFdURk1vdmUocnRjVHJhbnNjZWl2ZXIpKQorewor
ICAgIGdfb2JqZWN0X3NldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiZG8tbmFjayIsIHRydWUs
ICJmZWMtdHlwZSIsIEdTVF9XRUJSVENfRkVDX1RZUEVfVUxQX1JFRCwgbnVsbHB0cik7Cit9CisK
K3N0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+IEdTdHJlYW1lclJ0
cFRyYW5zY2VpdmVyQmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCkKK3sKKyAgICBHUmVm
UHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiByZWNlaXZlcjsKKyAgICBnX29iamVjdF9nZXQobV9y
dGNUcmFuc2NlaXZlci5nZXQoKSwgInJlY2VpdmVyIiwgJnJlY2VpdmVyLm91dFB0cigpLCBudWxs
cHRyKTsKKyAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFj
a2VuZD4oV1RGTW92ZShyZWNlaXZlcikpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZD4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVT
ZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgYmFja2VuZCwgR1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiYgc291cmNlLCBHVW5pcXVlUHRyPEdzdFN0
cnVjdHVyZT4mJiBpbml0RGF0YSkKK3sKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4g
c2VuZGVyOworICAgIGdfb2JqZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAic2VuZGVy
IiwgJnNlbmRlci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1
ZTxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPihiYWNrZW5kLCBXVEZNb3ZlKHNlbmRlciksIFdU
Rk1vdmUoc291cmNlKSwgV1RGTW92ZShpbml0RGF0YSkpOworfQorCitSVENSdHBUcmFuc2NlaXZl
ckRpcmVjdGlvbiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmRpcmVjdGlvbigpIGNv
bnN0Cit7CisgICAgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZ3N0RGlyZWN0aW9u
OworICAgIGdfb2JqZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAiZGlyZWN0aW9uIiwg
JmdzdERpcmVjdGlvbiwgbnVsbHB0cik7CisgICAgcmV0dXJuIHRvUlRDUnRwVHJhbnNjZWl2ZXJE
aXJlY3Rpb24oZ3N0RGlyZWN0aW9uKTsKK30KKworc3RkOjpvcHRpb25hbDxSVENSdHBUcmFuc2Nl
aXZlckRpcmVjdGlvbj4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjdXJyZW50RGly
ZWN0aW9uKCkgY29uc3QKK3sKKyAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlvbiBn
c3REaXJlY3Rpb247CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJj
dXJyZW50LWRpcmVjdGlvbiIsICZnc3REaXJlY3Rpb24sIG51bGxwdHIpOworICAgIGlmICghZ3N0
RGlyZWN0aW9uKQorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIHJldHVybiB0b1JU
Q1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKGdzdERpcmVjdGlvbik7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXREaXJlY3Rpb24oUlRDUnRwVHJhbnNjZWl2ZXJE
aXJlY3Rpb24gZGlyZWN0aW9uKQoreworICAgIGdfb2JqZWN0X3NldChtX3J0Y1RyYW5zY2VpdmVy
LmdldCgpLCAiZGlyZWN0aW9uIiwgZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKGRpcmVj
dGlvbiksIG51bGxwdHIpOworfQorCitTdHJpbmcgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kOjptaWQoKQoreworICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gbWlkOworICAgIGdfb2JqZWN0
X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAibWlkIiwgJm1pZC5vdXRQdHIoKSwgbnVsbHB0
cik7CisgICAgcmV0dXJuIG1pZC5nZXQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Nl
aXZlckJhY2tlbmQ6OnN0b3AoKQoreworICAgIC8vIEZJWE1FOiB3ZWJydGNiaW4gdHJhbnNjZWl2
ZXJzIGNhbid0IGJlIHN0b3BwZWQgeWV0LgorICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK2Jv
b2wgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzdG9wcGVkKCkgY29uc3QKK3sKKyAg
ICAvLyBGSVhNRTogd2VicnRjYmluIHRyYW5zY2VpdmVycyBjYW4ndCBiZSBzdG9wcGVkIHlldC4K
KyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3N0YXRpYyBpbmxpbmUgV0FSTl9VTlVTRURfUkVUVVJO
IEV4Y2VwdGlvbk9yPEdzdENhcHMqPiB0b1J0cENvZGVjQ2FwYWJpbGl0eShjb25zdCBSVENSdHBD
b2RlY0NhcGFiaWxpdHkmIGNvZGVjKQoreworICAgIGlmICghY29kZWMubWltZVR5cGUuc3RhcnRz
V2l0aCgidmlkZW8vIikgJiYgIWNvZGVjLm1pbWVUeXBlLnN0YXJ0c1dpdGgoImF1ZGlvLyIpKQor
ICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgSW52YWxpZE1vZGlmaWNhdGlvbkVycm9yLCAiUlRD
UnRwQ29kZWNDYXBhYmlsaXR5IGJhZCBtaW1lVHlwZSIgfTsKKworICAgIGF1dG8gY29tcG9uZW50
cyA9IGNvZGVjLm1pbWVUeXBlLnNwbGl0KCcvJyk7CisgICAgYXV0byogY2FwcyA9IGdzdF9jYXBz
X25ld19zaW1wbGUoImFwcGxpY2F0aW9uL3gtcnRwIiwgIm1lZGlhIiwgR19UWVBFX1NUUklORywg
Y29tcG9uZW50c1swXS5hc2NpaSgpLmRhdGEoKSwgImVuY29kaW5nLW5hbWUiLCBHX1RZUEVfU1RS
SU5HLCBjb21wb25lbnRzWzFdLmFzY2lpKCkuZGF0YSgpLCBudWxscHRyKTsKKyAgICBnc3RfY2Fw
c19zZXRfc2ltcGxlKGNhcHMsICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgY29kZWMuY2xvY2tS
YXRlLCBudWxscHRyKTsKKyAgICBpZiAoY29kZWMuY2hhbm5lbHMpCisgICAgICAgIGdzdF9jYXBz
X3NldF9zaW1wbGUoY2FwcywgImNoYW5uZWxzIiwgR19UWVBFX0lOVCwgKmNvZGVjLmNoYW5uZWxz
LCBudWxscHRyKTsKKworICAgIGlmICghY29kZWMuc2RwRm10cExpbmUuaXNFbXB0eSgpKQorICAg
ICAgICBHU1RfRklYTUUoIlVucHJvY2Vzc2VkIFNEUCBGbXRwTGluZTogJXMiLCBjb2RlYy5zZHBG
bXRwTGluZS51dGY4KCkuZGF0YSgpKTsKKyAgICBHU1RfREVCVUcoIkNvZGVjIGNhcGFiaWxpdHk6
ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzKTsKKyAgICByZXR1cm4gY2FwczsKK30KKworRXhjZXB0
aW9uT3I8dm9pZD4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXRDb2RlY1ByZWZl
cmVuY2VzKGNvbnN0IFZlY3RvcjxSVENSdHBDb2RlY0NhcGFiaWxpdHk+JiBjb2RlY3MpCit7Cisg
ICAgYXV0byBnc3RDb2RlY3MgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkpOworICAg
IGZvciAoYXV0byYgY29kZWMgOiBjb2RlY3MpIHsKKyAgICAgICAgYXV0byByZXN1bHQgPSB0b1J0
cENvZGVjQ2FwYWJpbGl0eShjb2RlYyk7CisgICAgICAgIGlmIChyZXN1bHQuaGFzRXhjZXB0aW9u
KCkpCisgICAgICAgICAgICByZXR1cm4gcmVzdWx0LnJlbGVhc2VFeGNlcHRpb24oKTsKKyAgICAg
ICAgZ3N0X2NhcHNfYXBwZW5kKGdzdENvZGVjcy5nZXQoKSwgcmVzdWx0LnJlbGVhc2VSZXR1cm5W
YWx1ZSgpKTsKKyAgICB9CisgICAgZ19vYmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCks
ICJjb2RlYy1wcmVmZXJlbmNlcyIsIGdzdENvZGVjcy5nZXQoKSwgbnVsbHB0cik7CisgICAgcmV0
dXJuIHsgfTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kZWE3NzMwNGIw
NmU0MTgwZmM3MDcxNDdmNTQ4ODY5ODU4ODE2YTY5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlICJSVENSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ7CisKK2NsYXNz
IEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENSdHBUcmFu
c2NlaXZlckJhY2tlbmQgeworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgor
ICAgIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZChHUmVmUHRyPEdzdFdlYlJUQ1JUUFRy
YW5zY2VpdmVyPiYmKTsKKworICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZl
ckJhY2tlbmQ+IGNyZWF0ZVJlY2VpdmVyQmFja2VuZCgpOworICAgIHN0ZDo6dW5pcXVlX3B0cjxH
U3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPiBjcmVhdGVTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZCYsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYm
LCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJik7CisKKyAgICBHc3RXZWJSVENSVFBUcmFuc2Nl
aXZlciogcnRjVHJhbnNjZWl2ZXIoKSB7IHJldHVybiBtX3J0Y1RyYW5zY2VpdmVyLmdldCgpOyB9
CisKK3ByaXZhdGU6CisgICAgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gZGlyZWN0aW9uKCkg
Y29uc3QgZmluYWw7CisgICAgc3RkOjpvcHRpb25hbDxSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlv
bj4gY3VycmVudERpcmVjdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHZvaWQgc2V0RGlyZWN0aW9u
KFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKSBmaW5hbDsKKyAgICBTdHJpbmcgbWlkKCkgZmlu
YWw7CisgICAgdm9pZCBzdG9wKCkgZmluYWw7CisgICAgYm9vbCBzdG9wcGVkKCkgY29uc3QgZmlu
YWw7CisgICAgRXhjZXB0aW9uT3I8dm9pZD4gc2V0Q29kZWNQcmVmZXJlbmNlcyhjb25zdCBWZWN0
b3I8UlRDUnRwQ29kZWNDYXBhYmlsaXR5PiYpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJS
VENSVFBUcmFuc2NlaXZlcj4gbV9ydGNUcmFuc2NlaXZlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOTliNGE2YTM3ZTVmYjAzY2U5ODM2MzA2Y2JlZmNkZmQ5YTVhMGY1
MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNDcg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1l
bnRlZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNm
b3JtQmFja2VuZDo6c2V0SW5wdXRDYWxsYmFjayhDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAg
IExvY2tlciBob2xkTG9jayB7IG1faW5wdXRDYWxsYmFja0xvY2sgfTsKKyAgICBtX2lucHV0Q2Fs
bGJhY2sgPSBXVEZNb3ZlKGNhbGxiYWNrKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Zv
cm1CYWNrZW5kOjpjbGVhclRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKCkKK3sKKyAgICBzZXRJ
bnB1dENhbGxiYWNrKHsgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2Vu
ZDo6cHJvY2Vzc1RyYW5zZm9ybWVkRnJhbWUoUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lJikKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
MTk1NDQ4ZmM3ZDMyNjE4Zjc4ZTdlODE1ZmMxNWUxNDk2MTFiMmIzYgotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFRyYW5zZm9ybUJhY2tlbmQuaApAQCAtMCwwICsxLDYwIEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQu
aCIKKyNpbmNsdWRlIDx3dGYvTG9jay5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNz
IEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQgOiBwdWJsaWMgUlRDUnRwVHJhbnNmb3JtQmFj
a2VuZCB7Citwcm90ZWN0ZWQ6CisgICAgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZChNZWRp
YVR5cGUsIFNpZGUpOworICAgIHZvaWQgc2V0SW5wdXRDYWxsYmFjayhDYWxsYmFjayYmKTsKKwor
cHJvdGVjdGVkOgorICAgIE1lZGlhVHlwZSBtZWRpYVR5cGUoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX21lZGlhVHlwZTsgfQorCitwcml2YXRlOgorICAgIC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tl
bmQKKyAgICB2b2lkIHByb2Nlc3NUcmFuc2Zvcm1lZEZyYW1lKFJUQ1J0cFRyYW5zZm9ybWFibGVG
cmFtZSYpIGZpbmFsOworICAgIHZvaWQgY2xlYXJUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjaygp
IGZpbmFsOworICAgIFNpZGUgc2lkZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fc2lkZTsgfQor
CisgICAgTWVkaWFUeXBlIG1fbWVkaWFUeXBlOworICAgIFNpZGUgbV9zaWRlOworCisgICAgTG9j
ayBtX2lucHV0Q2FsbGJhY2tMb2NrOworICAgIENhbGxiYWNrIG1faW5wdXRDYWxsYmFjazsKKwor
ICAgIExvY2sgbV9vdXRwdXRDYWxsYmFja0xvY2s7Cit9OworCitpbmxpbmUgR1N0cmVhbWVyUnRw
VHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZChNZWRpYVR5cGUg
bWVkaWFUeXBlLCBTaWRlIHNpZGUpCisgICAgOiBtX21lZGlhVHlwZShtZWRpYVR5cGUpCisgICAg
LCBtX3NpZGUoc2lkZSkKK3sKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk0Y2ZlZDczYjc2M2MyMGFmOTA3OTJmMjY0Yzk1ZDMyYjg0NjhlOWIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHAKQEAgLTAsMCArMSw5NyBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFj
a2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBSVENTY3RwVHJhbnNwb3J0U3RhdGUgdG9SVENTY3Rw
VHJhbnNwb3J0U3RhdGUoR3N0V2ViUlRDU0NUUFRyYW5zcG9ydFN0YXRlIHN0YXRlKQoreworICAg
IHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0NUUF9UUkFOU1BPUlRfU1RB
VEVfTkVXOgorICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9DT05ORUNU
SU5HOgorICAgICAgICByZXR1cm4gUlRDU2N0cFRyYW5zcG9ydFN0YXRlOjpDb25uZWN0aW5nOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9DT05ORUNURUQ6CisgICAg
ICAgIHJldHVybiBSVENTY3RwVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdT
VF9XRUJSVENfU0NUUF9UUkFOU1BPUlRfU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRD
U2N0cFRyYW5zcG9ydFN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OkdTdHJl
YW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4m
JiB0cmFuc3BvcnQpCisgICAgOiBtX2JhY2tlbmQoV1RGTW92ZSh0cmFuc3BvcnQpKQoreworICAg
IEFTU0VSVChtX2JhY2tlbmQpOworfQorCitHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6
fkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICB1bnJlZ2lzdGVyQ2xpZW50
KCk7Cit9CisKK1VuaXF1ZVJlZjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAgICBHUmVmUHRy
PEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICBnX29iamVjdF9nZXQobV9i
YWNrZW5kLmdldCgpLCAidHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7
CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ+
KHRyYW5zcG9ydCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnJl
Z2lzdGVyQ2xpZW50KENsaWVudCYgY2xpZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOwor
ICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2Jh
Y2tlbmQuZ2V0KCksICJub3RpZnk6OnN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFu
Z2VkKCk7CisgICAgfSksIHRoaXMpOworfQorCit2b2lkIEdTdHJlYW1lclNjdHBUcmFuc3BvcnRC
YWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNj
b25uZWN0X2J5X2RhdGEobV9iYWNrZW5kLmdldCgpLCB0aGlzKTsKKyAgICBtX2NsaWVudC5jbGVh
cigpOworfQorCit2b2lkIEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5n
ZWQoKQoreworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdFdl
YlJUQ1NDVFBUcmFuc3BvcnRTdGF0ZSB0cmFuc3BvcnRTdGF0ZTsKKyAgICBndWludDE2IG1heENo
YW5uZWxzOworICAgIHVpbnQ2NF90IG1heE1lc3NhZ2VTaXplOworICAgIGdfb2JqZWN0X2dldCht
X2JhY2tlbmQuZ2V0KCksICJzdGF0ZSIsICZ0cmFuc3BvcnRTdGF0ZSwgIm1heC1tZXNzYWdlLXNp
emUiLCAmbWF4TWVzc2FnZVNpemUsICJtYXgtY2hhbm5lbHMiLCAmbWF4Q2hhbm5lbHMsIG51bGxw
dHIpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3RoaXMsIHRyYW5zcG9ydFN0YXRlLCBtYXhDaGFu
bmVscywgbWF4TWVzc2FnZVNpemVdIHsKKyAgICAgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAg
ICAgIHJldHVybjsKKworICAgICAgICBtX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENTY3Rw
VHJhbnNwb3J0U3RhdGUodHJhbnNwb3J0U3RhdGUpLCBtYXhNZXNzYWdlU2l6ZSwgbWF4Q2hhbm5l
bHMpOworICAgIH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJh
bnNwb3J0QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40OTgwZmM4
NDk4YzA1YzM5N2RjYjA2YzcwYzQzMzA4YjAyOTBmMDI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRy
YW5zcG9ydEJhY2tlbmQuaApAQCAtMCwwICsxLDU0IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJSVENTY3RwVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisK
K3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENTQ1RQVHJhbnNwb3J0IEdzdFdlYlJUQ1NDVFBUcmFu
c3BvcnQ7CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyU2N0cFRyYW5z
cG9ydEJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDU2N0cFRyYW5zcG9ydEJhY2tlbmQsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZD4geworICAgIFdU
Rl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lclNj
dHBUcmFuc3BvcnRCYWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4mJik7Cisg
ICAgfkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKCk7CisKK3Byb3RlY3RlZDoKKyAgICB2
b2lkIHN0YXRlQ2hhbmdlZCgpOworCitwcml2YXRlIDoKKyAgICAvLyBSVENTY3RwVHJhbnNwb3J0
QmFja2VuZAorICAgIGNvbnN0IHZvaWQqIGJhY2tlbmQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2JhY2tlbmQuZ2V0KCk7IH0KKyAgICBVbmlxdWVSZWY8UlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQ+
IGR0bHNUcmFuc3BvcnRCYWNrZW5kKCkgZmluYWw7CisgICAgdm9pZCByZWdpc3RlckNsaWVudChD
bGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHVucmVnaXN0ZXJDbGllbnQoKSBmaW5hbDsKKworICAg
IEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4gbV9iYWNrZW5kOworICAgIFdlYWtQdHI8
Q2xpZW50PiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0
YXRzQ29sbGVjdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hM2M2NjYxNDE0
MDZlM2FjYmU0NzkxMjE1Nzk5YWY2OTNmZTAxMmY1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xs
ZWN0b3IuY3BwCkBAIC0wLDAgKzEsMjY5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU3RhdHNDb2xsZWN0
b3IuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJKU0RPTU1hcExpa2Uu
aCIKKyNpbmNsdWRlICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNU
QUJMRV9BUEkKKyNpbmNsdWRlIDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0Vf
VU5TVEFCTEVfQVBJCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCitHU1RfREVCVUdf
Q0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBH
U1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDU3RhdHMoUlRDU3RhdHNSZXBv
cnQ6OlN0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAg
ZG91YmxlIHRpbWVzdGFtcDsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHN0cnVj
dHVyZSwgInRpbWVzdGFtcCIsICZ0aW1lc3RhbXApKQorICAgICAgICBzdGF0cy50aW1lc3RhbXAg
PSB0aW1lc3RhbXA7CisgICAgc3RhdHMuaWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3Ry
dWN0dXJlLCAiaWQiKTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENSVFBTdHJlYW1T
dGF0cyhSVENTdGF0c1JlcG9ydDo6UnRwU3RyZWFtU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7
CisKKyAgICBzdGF0cy50cmFuc3BvcnRJZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1
Y3R1cmUsICJ0cmFuc3BvcnQtaWQiKTsKKyAgICBzdGF0cy5jb2RlY0lkID0gZ3N0X3N0cnVjdHVy
ZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImNvZGVjLWlkIik7CisKKyAgICB1bnNpZ25lZCB2YWx1
ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUsICJzc3JjIiwgJnZh
bHVlKSkKKyAgICAgICAgc3RhdHMuc3NyYyA9IHZhbHVlOworCisgICAgLy8gRklYTUU6CisgICAg
Ly8gc3RhdHMudHJhbnNwb3J0SWQKKyAgICAvLyBzdGF0cy5jb2RlY0lkCisgICAgLy8gc3RhdHMu
bWVkaWFUeXBlCisgICAgLy8gc3RhdHMua2luZAorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmls
bFJUQ0NvZGVjU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OkNvZGVjU3RhdHMmIHN0YXRzLCBjb25zdCBH
c3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVj
dHVyZSk7CisKKyAgICB1bnNpZ25lZCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRf
dWludChzdHJ1Y3R1cmUsICJwYXlsb2FkLXR5cGUiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5w
YXlsb2FkVHlwZSA9IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50KHN0cnVj
dHVyZSwgImNsb2NrLXJhdGUiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5jbG9ja1JhdGUgPSB2
YWx1ZTsKKworICAgIC8vIEZJWE1FOgorICAgIC8vIHN0YXRzLm1pbWVUeXBlID0KKyAgICAvLyBz
dGF0cy5jaGFubmVscyA9CisgICAgLy8gc3RhdHMuc2RwRm10cExpbmUgPQorICAgIC8vIHN0YXRz
LmltcGxlbWVudGF0aW9uID0KK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxJbmJvdW5kUlRQ
U3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OkluYm91bmRSdHBTdHJlYW1TdGF0cyYgc3RhdHMs
IGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZpbGxSVENSVFBTdHJlYW1T
dGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIHVpbnQ2NF90IHZhbHVlOworICAgIGlmIChn
c3Rfc3RydWN0dXJlX2dldF91aW50NjQoc3RydWN0dXJlLCAicGFja2V0cy1yZWNlaXZlZCIsICZ2
YWx1ZSkpCisgICAgICAgIHN0YXRzLnBhY2tldHNSZWNlaXZlZCA9IHZhbHVlOworICAgIGlmIChn
c3Rfc3RydWN0dXJlX2dldF91aW50NjQoc3RydWN0dXJlLCAiYnl0ZXMtcmVjZWl2ZWQiLCAmdmFs
dWUpKQorICAgICAgICBzdGF0cy5ieXRlc1JlY2VpdmVkID0gdmFsdWU7CisKKyAgICB1bnNpZ25l
ZCBwYWNrZXRzTG9zdDsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUs
ICJwYWNrZXRzLWxvc3QiLCAmcGFja2V0c0xvc3QpKQorICAgICAgICBzdGF0cy5wYWNrZXRzTG9z
dCA9IHBhY2tldHNMb3N0OworCisgICAgZG91YmxlIGppdHRlcjsKKyAgICBpZiAoZ3N0X3N0cnVj
dHVyZV9nZXRfZG91YmxlKHN0cnVjdHVyZSwgImppdHRlciIsICZqaXR0ZXIpKQorICAgICAgICBz
dGF0cy5qaXR0ZXIgPSBqaXR0ZXI7CisKKyAgICAvLyBGSVhNRToKKyAgICAvLyBzdGF0cy5mcmFj
dGlvbkxvc3QgPQorICAgIC8vIHN0YXRzLnBhY2tldHNEaXNjYXJkZWQgPQorICAgIC8vIHN0YXRz
LnBhY2tldHNSZXBhaXJlZCA9CisgICAgLy8gc3RhdHMuYnVyc3RQYWNrZXRzTG9zdCA9CisgICAg
Ly8gc3RhdHMuYnVyc3RQYWNrZXRzRGlzY2FyZGVkID0KKyAgICAvLyBzdGF0cy5idXJzdExvc3ND
b3VudCA9CisgICAgLy8gc3RhdHMuYnVyc3REaXNjYXJkQ291bnQgPQorICAgIC8vIHN0YXRzLmJ1
cnN0TG9zc1JhdGUgPQorICAgIC8vIHN0YXRzLmJ1cnN0RGlzY2FyZFJhdGUgPQorICAgIC8vIHN0
YXRzLmdhcExvc3NSYXRlID0KKyAgICAvLyBzdGF0cy5nYXBEaXNjYXJkUmF0ZSA9CisgICAgLy8g
c3RhdHMuZnJhbWVzRGVjb2RlZCA9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsT3V0Ym91
bmRSVFBTdHJlYW1TdGF0cyhSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cyYg
c3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZpbGxSVENSVFBT
dHJlYW1TdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIHVpbnQ2NF90IHZhbHVlOworICAg
IGlmIChnc3Rfc3RydWN0dXJlX2dldF91aW50NjQoc3RydWN0dXJlLCAicGFja2V0cy1zZW50Iiwg
JnZhbHVlKSkKKyAgICAgICAgc3RhdHMucGFja2V0c1NlbnQgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0
X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgImJ5dGVzLXNlbnQiLCAmdmFsdWUpKQor
ICAgICAgICBzdGF0cy5ieXRlc1NlbnQgPSB2YWx1ZTsKKworICAgIC8vIEZJWE1FCisgICAgLy8g
c3RhdHMudGFyZ2V0Qml0cmF0ZSA9CisgICAgLy8gc3RhdHMuZnJhbWVzRW5jb2RlZCA9Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDUGVlckNvbm5lY3Rpb25TdGF0cyhSVENTdGF0c1Jl
cG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3Ry
dWN0dXJlKQoreworICAgIGZpbGxSVENTdGF0cyhzdGF0cywgc3RydWN0dXJlKTsKKworICAgIGlu
dCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwgImRhdGEt
Y2hhbm5lbHMtb3BlbmVkIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuZGF0YUNoYW5uZWxzT3Bl
bmVkID0gdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJk
YXRhLWNoYW5uZWxzLWNsb3NlZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLmRhdGFDaGFubmVs
c0Nsb3NlZCA9IHZhbHVlOworfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1RyYW5zcG9y
dFN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGZpbGxSVENTdGF0cyhzdGF0cywgc3RydWN0dXJl
KTsKKworICAgIC8vIEZJWE1FCit9CisKK3N0YXRpYyBnYm9vbGVhbiBmaWxsUmVwb3J0Q2FsbGJh
Y2soR1F1YXJrLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAg
ICBpZiAoIUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUodmFsdWUpKQorICAgICAgICByZXR1cm4g
VFJVRTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dl
dF9zdHJ1Y3R1cmUodmFsdWUpOworICAgIEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7Cisg
ICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VC
UlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gVFJV
RTsKKworICAgIERPTU1hcEFkYXB0ZXImIHJlcG9ydCA9ICpyZWludGVycHJldF9jYXN0PERPTU1h
cEFkYXB0ZXIqPih1c2VyRGF0YSk7CisKKyAgICBzd2l0Y2ggKHN0YXRzVHlwZSkgeworICAgIGNh
c2UgR1NUX1dFQlJUQ19TVEFUU19DT0RFQzogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6Q29k
ZWNTdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJUQ0NvZGVjU3RhdHMoc3RhdHMsIHN0cnVjdHVy
ZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0
YXRzUmVwb3J0OjpDb2RlY1N0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUDog
eworICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzIHN0YXRzOwor
ICAgICAgICBmaWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAg
ICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9y
dDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19PVVRCT1VORF9S
VFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3Rh
dHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0
c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRz
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUkVN
T1RFX0lOQk9VTkRfUlRQOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3Ry
ZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMs
IHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9u
YXJ5PFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0cy5pZCwgV1RG
TW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRD
X1NUQVRTX1JFTU9URV9PVVRCT1VORF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91
dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVh
bVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmlu
ZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+
KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEdTVF9XRUJSVENfU1RBVFNfQ1NSQzoKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVk
IHN0YXRzOiBjc3JjIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFU
U19QRUVSX0NPTk5FQ1RJT046IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0
aW9uU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRz
LCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlv
bmFyeTxSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cz4+KHN0YXRzLmlkLCBXVEZN
b3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENf
U1RBVFNfVFJBTlNQT1JUOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0
cyBzdGF0czsKKyAgICAgICAgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0
c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1NUUkVBTToKKyAg
ICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0YXRzOiBzdHJlYW0iKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX0RBVEFfQ0hBTk5FTDoKKyAgICAgICAgR1NU
X0ZJWE1FKCJNaXNzaW5nIGRhdGEtY2hhbm5lbCBzdGF0cyBzdXBwb3J0Iik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DQU5ESURBVEVfUEFJUjoKKyAgICBjYXNl
IEdTVF9XRUJSVENfU1RBVFNfTE9DQUxfQ0FORElEQVRFOgorICAgIGNhc2UgR1NUX1dFQlJUQ19T
VEFUU19SRU1PVEVfQ0FORElEQVRFOgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2FuZGlk
YXRlIHN0YXRzIHN1cHBvcnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRD
X1NUQVRTX0NFUlRJRklDQVRFOgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2VydGlmaWNh
dGUgc3RhdHMgc3VwcG9ydCIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
VFJVRTsKK30KKworc3RydWN0IENhbGxiYWNrSG9sZGVyIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1Rf
RkFTVF9BTExPQ0FURUQ7CisgICAgQ2FsbGJhY2tIb2xkZXIoR1N0cmVhbWVyU3RhdHNDb2xsZWN0
b3I6OkNvbGxlY3RvckNhbGxiYWNrJiYgY29sbGVjdG9yQ2FsbGJhY2spCisgICAgICAgIDogY2Fs
bGJhY2soV1RGTW92ZShjb2xsZWN0b3JDYWxsYmFjaykpCisgICAgeworICAgIH0KKyAgICBHU3Ry
ZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Q29sbGVjdG9yQ2FsbGJhY2sgY2FsbGJhY2s7Cit9OworCit2
b2lkIEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpnZXRTdGF0cyhDb2xsZWN0b3JDYWxsYmFjayYm
IGNhbGxiYWNrLCBHc3RQYWQqIHBhZCkKK3sKKyAgICBpZiAoIW1fd2VicnRjQmluKSB7CisgICAg
ICAgIGNhbGxiYWNrKG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0
byBob2xkZXIgPSBXVEY6Om1ha2VVbmlxdWU8Q2FsbGJhY2tIb2xkZXI+KFdURk1vdmUoY2FsbGJh
Y2spKTsKKyAgICBhdXRvKiBwcm9taXNlID0gZ3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1
bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAg
ICAgYXV0byBwcm9taXNlID0gYWRvcHRHUmVmKHJhd1Byb21pc2UpOworICAgICAgICBzdGQ6OnVu
aXF1ZV9wdHI8Q2FsbGJhY2tIb2xkZXI+IGhvbGRlcihyZWludGVycHJldF9jYXN0PENhbGxiYWNr
SG9sZGVyKj4odXNlckRhdGEpKTsKKyAgICAgICAgaWYgKGdzdF9wcm9taXNlX3dhaXQocHJvbWlz
ZS5nZXQoKSkgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpIHsKKyAgICAgICAgICAgIGhv
bGRlci0+Y2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0K
KworICAgICAgICBjb25zdCBhdXRvKiBzdGF0cyA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9t
aXNlLmdldCgpKTsKKyAgICAgICAgaWYgKCFzdGF0cykgeworICAgICAgICAgICAgaG9sZGVyLT5j
YWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAg
ICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwg
aG9sZGVyID0gaG9sZGVyLmdldCgpXSB7CisgICAgICAgICAgICBob2xkZXItPmNhbGxiYWNrKFJU
Q1N0YXRzUmVwb3J0OjpjcmVhdGUoWyZdKGF1dG8mIG1hcEFkYXB0ZXIpIHsKKyAgICAgICAgICAg
ICAgICBjb25zdCBhdXRvKiBzdGF0cyA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdl
dCgpKTsKKyAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2goc3RhdHMsIGZpbGxS
ZXBvcnRDYWxsYmFjaywgJm1hcEFkYXB0ZXIpOworICAgICAgICAgICAgfSkpOworICAgICAgICB9
KTsKKyAgICB9LCBob2xkZXIucmVsZWFzZSgpLCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9lbWl0
X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJnZXQtc3RhdHMiLCBwYWQsIHByb21pc2UpOwor
fQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMp
ICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRz
Q29sbGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQyNzM1NTNmODI1MTM3MjYxZmE5NDc2YmZlMGFlMTcy
YmQwODFiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgKQEAgLTAsMCArMSw0OCBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVm
UHRyR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvQ29tcGxldGlvbkhhbmRsZXIuaD4KKyNp
bmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3RmL1RocmVhZFNhZmVSZWZDb3VudGVk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUlRDU3RhdHNSZXBvcnQ7CisKK2Ns
YXNzIEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yIDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVk
PEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yLCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPiB7
CitwdWJsaWM6CisgICAgdXNpbmcgQ29sbGVjdG9yQ2FsbGJhY2sgPSBDb21wbGV0aW9uSGFuZGxl
cjx2b2lkKFJlZlB0cjxSVENTdGF0c1JlcG9ydD4mJik+OworICAgIHN0YXRpYyBSZWY8R1N0cmVh
bWVyU3RhdHNDb2xsZWN0b3I+IGNyZWF0ZSgpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVh
bWVyU3RhdHNDb2xsZWN0b3IoKSk7IH0KKworICAgIHZvaWQgc2V0RWxlbWVudChHc3RFbGVtZW50
KiBlbGVtZW50KSB7IG1fd2VicnRjQmluID0gZWxlbWVudDsgfQorICAgIHZvaWQgZ2V0U3RhdHMo
Q29sbGVjdG9yQ2FsbGJhY2smJiwgR3N0UGFkKik7CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxH
c3RFbGVtZW50PiBtX3dlYnJ0Y0JpbjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lcldlYlJUQ1V0aWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hZmMxNDlhM2E4
Y2NhYWEzNzhjM2E1OTdhOTIyZGVjMDJlNmVhMGE5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRp
bHMuY3BwCkBAIC0wLDAgKzEsNDQ4IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKworI2luY2x1
ZGUgIlJUQ0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJUQ0ljZVByb3RvY29sLmgiCisKKyNp
bmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9yc2EuaD4KKyNpbmNsdWRl
IDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHd0Zi9DcnlwdG9ncmFwaGljYWxseVJhbmRvbU51
bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9XYWxsVGltZS5o
PgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z1RvSW50ZWdlckNvbnZlcnNpb24uaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJr
aXRfd2VicnRjX3V0aWxzX2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93
ZWJydGNfdXRpbHNfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5l
IFJUQ0ljZUNvbXBvbmVudCB0b1JUQ0ljZUNvbXBvbmVudChpbnQgY29tcG9uZW50KQoreworICAg
IHJldHVybiBjb21wb25lbnQgPT0gMSA/IFJUQ0ljZUNvbXBvbmVudDo6UnRwIDogUlRDSWNlQ29t
cG9uZW50OjpSdGNwOworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDSWNlUHJv
dG9jb2w+IHRvUlRDSWNlUHJvdG9jb2woY29uc3QgU3RyaW5nJiBwcm90b2NvbCkKK3sKKyAgICBp
ZiAocHJvdG9jb2wuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIGlmIChwcm90
b2NvbCA9PSAidWRwIikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVByb3RvY29sOjpVZHA7CisgICAg
QVNTRVJUKHByb3RvY29sID09ICJ0Y3AiKTsKKyAgICByZXR1cm4gUlRDSWNlUHJvdG9jb2w6OlRj
cDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0ljZVRjcENhbmRpZGF0ZVR5
cGU+IHRvUlRDSWNlVGNwQ2FuZGlkYXRlVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAg
aWYgKHR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIGlmICh0eXBlID09
ICJhY3RpdmUiKQorICAgICAgICByZXR1cm4gUlRDSWNlVGNwQ2FuZGlkYXRlVHlwZTo6QWN0aXZl
OworICAgIGlmICh0eXBlID09ICJwYXNzaXZlIikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRjcENh
bmRpZGF0ZVR5cGU6OlBhc3NpdmU7CisgICAgQVNTRVJUKHR5cGUgPT0gInNvIik7CisgICAgcmV0
dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU6OlNvOworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6
b3B0aW9uYWw8UlRDSWNlQ2FuZGlkYXRlVHlwZT4gdG9SVENJY2VDYW5kaWRhdGVUeXBlKGNvbnN0
IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVy
biB7IH07CisgICAgaWYgKHR5cGUgPT0gImhvc3QiKQorICAgICAgICByZXR1cm4gUlRDSWNlQ2Fu
ZGlkYXRlVHlwZTo6SG9zdDsKKyAgICBpZiAodHlwZSA9PSAic3JmbHgiKQorICAgICAgICByZXR1
cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6U3JmbHg7CisgICAgaWYgKHR5cGUgPT0gInByZmx4IikK
KyAgICAgICAgcmV0dXJuIFJUQ0ljZUNhbmRpZGF0ZVR5cGU6OlByZmx4OworICAgIEFTU0VSVCh0
eXBlID09ICJyZWxheSIpOworICAgIHJldHVybiBSVENJY2VDYW5kaWRhdGVUeXBlOjpSZWxheTsK
K30KKworUmVmUHRyPFJUQ0Vycm9yPiB0b1JUQ0Vycm9yKEdFcnJvciogcnRjRXJyb3IpCit7Cisg
ICAgYXV0byBkZXRhaWwgPSB0b1JUQ0Vycm9yRGV0YWlsVHlwZShzdGF0aWNfY2FzdDxHc3RXZWJS
VENFcnJvcj4ocnRjRXJyb3ItPmNvZGUpKTsKKyAgICBpZiAoIWRldGFpbCkKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFJUQ0Vycm9yOjpjcmVhdGUoKmRldGFpbCwgcnRjRXJy
b3ItPm1lc3NhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIGRvdWJsZSB0b1dlYlJUQ0JpdFJhdGVQ
cmlvcml0eShSVENQcmlvcml0eVR5cGUgcHJpb3JpdHkpCit7CisgICAgc3dpdGNoIChwcmlvcml0
eSkgeworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93OgorICAgICAgICByZXR1cm4g
MC41OworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpMb3c6CisgICAgICAgIHJldHVybiAxOwor
ICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpNZWRpdW06CisgICAgICAgIHJldHVybiAyOworICAg
IGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpIaWdoOgorICAgICAgICByZXR1cm4gNDsKKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitHVW5pcXVlUHRyPEdzdFN0
cnVjdHVyZT4gZnJvbVJUQ0VuY29kaW5nUGFyYW1ldGVycyhjb25zdCBSVENSdHBFbmNvZGluZ1Bh
cmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IHJ0
Y1BhcmFtZXRlcnMoZ3N0X3N0cnVjdHVyZV9uZXcoImVuY29kaW5nLXBhcmFtZXRlcnMiLCAiYWN0
aXZlIiwgR19UWVBFX0JPT0xFQU4sIHBhcmFtZXRlcnMuYWN0aXZlLAorICAgICAgICAicmlkIiwg
R19UWVBFX1NUUklORywgcGFyYW1ldGVycy5yaWQudXRmOCgpLmRhdGEoKSwgImJpdHJhdGUtcHJp
b3JpdHkiLCBHX1RZUEVfRE9VQkxFLCB0b1dlYlJUQ0JpdFJhdGVQcmlvcml0eShwYXJhbWV0ZXJz
LnByaW9yaXR5KSwgbnVsbHB0cikpOworCisgICAgaWYgKHBhcmFtZXRlcnMuc3NyYykKKyAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgInNzcmMiLCBHX1RZUEVf
VUxPTkcsIHBhcmFtZXRlcnMuc3NyYywgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5t
YXhCaXRyYXRlKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgp
LCAibWF4LWJpdHJhdGUiLCBHX1RZUEVfVUxPTkcsIHBhcmFtZXRlcnMubWF4Qml0cmF0ZSwgbnVs
bHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5tYXhGcmFtZXJhdGUpCisgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJtYXgtZnJhbWVyYXRlIiwgR19UWVBF
X1VMT05HLCBwYXJhbWV0ZXJzLm1heEZyYW1lcmF0ZSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFy
YW1ldGVycy5zY2FsZVJlc29sdXRpb25Eb3duQnkpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJzY2FsZS1yZXNvbHV0aW9uLWRvd24tYnkiLCBHX1RZUEVf
RE9VQkxFLCBwYXJhbWV0ZXJzLnNjYWxlUmVzb2x1dGlvbkRvd25CeSwgbnVsbHB0cik7CisKKyAg
ICBpZiAocGFyYW1ldGVycy5uZXR3b3JrUHJpb3JpdHkpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVf
c2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJuZXR3b3JrLXByaW9yaXR5IiwgR19UWVBFX0lOVCwg
KnBhcmFtZXRlcnMubmV0d29ya1ByaW9yaXR5LCBudWxscHRyKTsKKworICAgIHJldHVybiBydGNQ
YXJhbWV0ZXJzOworfQorCitzdGF0aWMgaW5saW5lIFJUQ1ByaW9yaXR5VHlwZSBmcm9tV2ViUlRD
Qml0UmF0ZVByaW9yaXR5KGRvdWJsZSBwcmlvcml0eSkKK3sKKyAgICBpZiAocHJpb3JpdHkgPCAw
LjcpCisgICAgICAgIHJldHVybiBSVENQcmlvcml0eVR5cGU6OlZlcnlMb3c7CisgICAgaWYgKHBy
aW9yaXR5IDwgMS41KQorICAgICAgICByZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpMb3c7CisgICAg
aWYgKHByaW9yaXR5IDwgMi41KQorICAgICAgICByZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpNZWRp
dW07CisgICAgcmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6SGlnaDsKK30KKworc3RhdGljIGlubGlu
ZSBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMgdG9SVENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3Qg
R3N0U3RydWN0dXJlKiBydGNQYXJhbWV0ZXJzKQoreworICAgIFJUQ1J0cEVuY29kaW5nUGFyYW1l
dGVycyBwYXJhbWV0ZXJzOworCisgICAgdW5zaWduZWQgc3NyYzsKKyAgICBpZiAoZ3N0X3N0cnVj
dHVyZV9nZXRfdWludChydGNQYXJhbWV0ZXJzLCAic3NyYyIsICZzc3JjKSkKKyAgICAgICAgcGFy
YW1ldGVycy5zc3JjID0gc3NyYzsKKworICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJ0Y1BhcmFtZXRl
cnMsICJhY3RpdmUiLCBHX1RZUEVfQk9PTEVBTiwgJihwYXJhbWV0ZXJzLmFjdGl2ZSksIG51bGxw
dHIpOworCisgICAgdWludDY0X3QgbWF4Qml0cmF0ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9n
ZXRfdWludDY0KHJ0Y1BhcmFtZXRlcnMsICJtYXgtYml0cmF0ZSIsICZtYXhCaXRyYXRlKSkKKyAg
ICAgICAgcGFyYW1ldGVycy5tYXhCaXRyYXRlID0gbWF4Qml0cmF0ZTsKKworICAgIHVpbnQ2NF90
IG1heEZyYW1lcmF0ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHJ0Y1BhcmFt
ZXRlcnMsICJtYXgtZnJhbWVyYXRlIiwgJm1heEZyYW1lcmF0ZSkpCisgICAgICAgIHBhcmFtZXRl
cnMubWF4RnJhbWVyYXRlID0gbWF4RnJhbWVyYXRlOworCisgICAgcGFyYW1ldGVycy5yaWQgPSBn
c3Rfc3RydWN0dXJlX2dldF9zdHJpbmcocnRjUGFyYW1ldGVycywgInJpZCIpOworCisgICAgZG91
YmxlIHNjYWxlUmVzb2x1dGlvbkRvd25CeTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91
YmxlKHJ0Y1BhcmFtZXRlcnMsICJzY2FsZS1yZXNvbHV0aW9uLWRvd24tYnkiLCAmc2NhbGVSZXNv
bHV0aW9uRG93bkJ5KSkKKyAgICAgICAgcGFyYW1ldGVycy5zY2FsZVJlc29sdXRpb25Eb3duQnkg
PSBzY2FsZVJlc29sdXRpb25Eb3duQnk7CisKKyAgICBkb3VibGUgYml0cmF0ZVByaW9yaXR5Owor
ICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUocnRjUGFyYW1ldGVycywgImJpdHJhdGUt
cHJpb3JpdHkiLCAmYml0cmF0ZVByaW9yaXR5KSkKKyAgICAgICAgcGFyYW1ldGVycy5wcmlvcml0
eSA9IGZyb21XZWJSVENCaXRSYXRlUHJpb3JpdHkoYml0cmF0ZVByaW9yaXR5KTsKKworICAgIGlu
dCBuZXR3b3JrUHJpb3JpdHk7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChydGNQYXJh
bWV0ZXJzLCAibmV0d29yay1wcmlvcml0eSIsICZuZXR3b3JrUHJpb3JpdHkpKQorICAgICAgICBw
YXJhbWV0ZXJzLm5ldHdvcmtQcmlvcml0eSA9IHN0YXRpY19jYXN0PFJUQ1ByaW9yaXR5VHlwZT4o
bmV0d29ya1ByaW9yaXR5KTsKKworICAgIHJldHVybiBwYXJhbWV0ZXJzOworfQorCitSVENSdHBT
ZW5kUGFyYW1ldGVycyB0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSog
cnRjUGFyYW1ldGVycykKK3sKKyAgICBpZiAoIXJ0Y1BhcmFtZXRlcnMpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBSVENSdHBTZW5kUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworICAgIGF1dG8q
IGVuY29kaW5ncyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVlKHJ0Y1BhcmFtZXRlcnMsICJlbmNv
ZGluZ3MiKTsKKyAgICB1bnNpZ25lZCBzaXplID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3NpemUoZW5j
b2RpbmdzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAg
ICAgIGNvbnN0IGF1dG8qIHZhbHVlID0gZ3N0X3ZhbHVlX2xpc3RfZ2V0X3ZhbHVlKGVuY29kaW5n
cywgaSk7CisgICAgICAgIHBhcmFtZXRlcnMuZW5jb2RpbmdzLmFwcGVuZCh0b1JUQ0VuY29kaW5n
UGFyYW1ldGVycyhHU1RfU1RSVUNUVVJFX0NBU1QodmFsdWUpKSk7CisgICAgfQorCisgICAgLy8g
RklYTUU6IEhhbmRsZSBydGNQYXJhbWV0ZXJzLmRlZ3JhZGF0aW9uX3ByZWZlcmVuY2UuCisgICAg
cmV0dXJuIHBhcmFtZXRlcnM7Cit9CisKKworc3RhdGljIHZvaWQgZW5zdXJlRGVidWdDYXRlZ29y
eUluaXRpYWxpemVkKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgb25jZUZsYWc7Cisg
ICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVH
T1JZX0lOSVQod2Via2l0X3dlYnJ0Y191dGlsc19kZWJ1ZywgIndlYmtpdHdlYnJ0Y3V0aWxzIiwg
MCwgIldlYktpdCBXZWJSVEMgdXRpbGl0aWVzIik7CisgICAgfSk7Cit9CisKK3N0ZDo6b3B0aW9u
YWw8UlRDSWNlQ2FuZGlkYXRlOjpGaWVsZHM+IHBhcnNlSWNlQ2FuZGlkYXRlU0RQKGNvbnN0IFN0
cmluZyYgc2RwKQoreworICAgIGVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpOworICAg
IEdTVF9ERUJVRygiUGFyc2luZyBJQ0UgQ2FuZGlkYXRlOiAlcyIsIHNkcC51dGY4KCkuZGF0YSgp
KTsKKyAgICBpZiAoIXNkcC5zdGFydHNXaXRoKCJjYW5kaWRhdGU6IikpCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBTdHJpbmcgZm91bmRhdGlvbjsKKyAgICB1bnNpZ25lZCBjb21wb25lbnRJ
ZCA9IDA7CisgICAgU3RyaW5nIHRyYW5zcG9ydDsKKyAgICB1bnNpZ25lZCBwcmlvcml0eSA9IDA7
CisgICAgU3RyaW5nIGFkZHJlc3M7CisgICAgdWludDMyX3QgcG9ydCA9IDA7CisgICAgU3RyaW5n
IHR5cGU7CisgICAgU3RyaW5nIHRjcHR5cGU7CisgICAgU3RyaW5nIHJlbGF0ZWRBZGRyZXNzOwor
ICAgIGd1aW50MTYgcmVsYXRlZFBvcnQgPSAwOworICAgIFN0cmluZyB1c2VybmFtZUZyYWdtZW50
OworICAgIGF1dG8gdG9rZW5zID0gc2RwLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuc3Vic3Ry
aW5nKDEwKS5zcGxpdCgnICcpOworCisgICAgZm9yIChhdXRvIGl0ID0gdG9rZW5zLmJlZ2luKCk7
IGl0ICE9IHRva2Vucy5lbmQoKTsgKytpdCkgeworICAgICAgICBhdXRvIGkgPSBzdGQ6OmRpc3Rh
bmNlKHRva2Vucy5iZWdpbigpLCBpdCk7CisgICAgICAgIGF1dG8gdG9rZW4gPSAqaXQ7CisgICAg
ICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIDA6CisgICAgICAgICAgICBmb3VuZGF0aW9u
ID0gdG9rZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSAxOgorICAgICAgICAg
ICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZUludGVnZXI8dW5zaWduZWQ+KHRva2VuKSkKKyAgICAg
ICAgICAgICAgICBjb21wb25lbnRJZCA9ICp2YWx1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2Ug
MjoKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHRva2VuOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2Vy
PHVuc2lnbmVkPih0b2tlbikpCisgICAgICAgICAgICAgICAgcHJpb3JpdHkgPSAqdmFsdWU7Cisg
ICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAg
IGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAgICBhZGRyZXNzID0gdG9rZW47Cisg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1OgorICAgICAgICAgICAgaWYgKGF1dG8g
dmFsdWUgPSBwYXJzZUludGVnZXI8dW5zaWduZWQ+KHRva2VuKSkKKyAgICAgICAgICAgICAgICBw
b3J0ID0gKnZhbHVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB7
IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgIGlm
IChpdCArIDEgPT0gdG9rZW5zLmVuZCgpKQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisK
KyAgICAgICAgICAgIGl0Kys7CisgICAgICAgICAgICBpZiAodG9rZW4gPT0gInR5cCIpCisgICAg
ICAgICAgICAgICAgdHlwZSA9ICppdDsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJy
YWRkciIpCisgICAgICAgICAgICAgICAgcmVsYXRlZEFkZHJlc3MgPSAqaXQ7CisgICAgICAgICAg
ICBlbHNlIGlmICh0b2tlbiA9PSAicnBvcnQiKQorICAgICAgICAgICAgICAgIHJlbGF0ZWRQb3J0
ID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVkPigqaXQpLnZhbHVlX29yKDApOworICAgICAgICAgICAg
ZWxzZSBpZiAodG9rZW4gPT0gInRjcHR5cGUiKQorICAgICAgICAgICAgICAgIHRjcHR5cGUgPSAq
aXQ7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAidWZyYWciKQorICAgICAgICAgICAg
ICAgIHVzZXJuYW1lRnJhZ21lbnQgPSAqaXQ7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgIH0KKworICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIFJUQ0ljZUNhbmRpZGF0ZTo6RmllbGRzIGZpZWxkczsKKyAgICBmaWVsZHMuZm91bmRh
dGlvbiA9IGZvdW5kYXRpb247CisgICAgZmllbGRzLmNvbXBvbmVudCA9IHRvUlRDSWNlQ29tcG9u
ZW50KGNvbXBvbmVudElkKTsKKyAgICBmaWVsZHMucHJpb3JpdHkgPSBwcmlvcml0eTsKKyAgICBm
aWVsZHMucHJvdG9jb2wgPSB0b1JUQ0ljZVByb3RvY29sKHRyYW5zcG9ydCk7CisgICAgaWYgKCFh
ZGRyZXNzLmlzRW1wdHkoKSkgeworICAgICAgICBmaWVsZHMuYWRkcmVzcyA9IGFkZHJlc3M7Cisg
ICAgICAgIGZpZWxkcy5wb3J0ID0gcG9ydDsKKyAgICB9CisgICAgZmllbGRzLnR5cGUgPSB0b1JU
Q0ljZUNhbmRpZGF0ZVR5cGUodHlwZSk7CisgICAgZmllbGRzLnRjcFR5cGUgPSB0b1JUQ0ljZVRj
cENhbmRpZGF0ZVR5cGUodGNwdHlwZSk7CisgICAgaWYgKCFyZWxhdGVkQWRkcmVzcy5pc0VtcHR5
KCkpIHsKKyAgICAgICAgZmllbGRzLnJlbGF0ZWRBZGRyZXNzID0gcmVsYXRlZEFkZHJlc3M7Cisg
ICAgICAgIGZpZWxkcy5yZWxhdGVkUG9ydCA9IHJlbGF0ZWRQb3J0OworICAgIH0KKyAgICBmaWVs
ZHMudXNlcm5hbWVGcmFnbWVudCA9IHVzZXJuYW1lRnJhZ21lbnQ7CisgICAgcmV0dXJuIGZpZWxk
czsKK30KKworc3RhdGljIFN0cmluZyB4NTA5U2VyaWFsaXplKFg1MDkqIHg1MDkpCit7CisgICAg
QklPKiBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAgICBpZiAoIWJpbykKKyAgICAgICAg
cmV0dXJuIHsgfTsKKworICAgIGF1dG8gc2NvcGVFeGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsm
XSB7CisgICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgfSk7CisKKyAgICBpZiAoIVBFTV93cml0
ZV9iaW9fWDUwOShiaW8sIHg1MDkpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9y
PGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzZXJ2ZUNhcGFjaXR5KDQwOTYpOworICAgIGlu
dCBsZW5ndGggPSBCSU9fcmVhZChiaW8sIGJ1ZmZlci5kYXRhKCksIDQwOTYpOworICAgIGlmICgh
bGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIFN0cmluZyhidWZmZXIu
ZGF0YSgpLCBsZW5ndGgpOworfQorCitzdGF0aWMgU3RyaW5nIHByaXZhdGVLZXlTZXJpYWxpemUo
RVZQX1BLRVkqIHByaXZhdGVLZXkpCit7CisgICAgQklPKiBiaW8gPSBCSU9fbmV3KEJJT19zX21l
bSgpKTsKKyAgICBpZiAoIWJpbykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gc2Nv
cGVFeGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIEJJT19mcmVlKGJpbyk7
CisgICAgfSk7CisKKyAgICBpZiAoIVBFTV93cml0ZV9iaW9fUHJpdmF0ZUtleShiaW8sIHByaXZh
dGVLZXksIG51bGxwdHIsIG51bGxwdHIsIDAsIG51bGxwdHIsIG51bGxwdHIpKQorICAgICAgICBy
ZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzZXJ2
ZUNhcGFjaXR5KDQwOTYpOworICAgIGludCBsZW5ndGggPSBCSU9fcmVhZChiaW8sIGJ1ZmZlci5k
YXRhKCksIDQwOTYpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9OworCisg
ICAgcmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpOworfQorCitzdGQ6Om9wdGlv
bmFsPFJlZjxSVENDZXJ0aWZpY2F0ZT4+IGdlbmVyYXRlQ2VydGlmaWNhdGUoUmVmPFNlY3VyaXR5
T3JpZ2luPiYmIG9yaWdpbiwgY29uc3QgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0
ZUluZm9ybWF0aW9uJiBpbmZvKQoreworICAgIGVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXpl
ZCgpOworICAgIEVWUF9QS0VZKiBwcml2YXRlS2V5ID0gRVZQX1BLRVlfbmV3KCk7CisgICAgaWYg
KCFwcml2YXRlS2V5KSB7CisgICAgICAgIEdTVF9XQVJOSU5HKCJGYWlsZWQgdG8gY3JlYXRlIHBy
aXZhdGUga2V5Iik7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAgYXV0byBzY29w
ZUV4aXQgPSBXVEY6Om1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgRVZQX1BLRVlfZnJlZShw
cml2YXRlS2V5KTsKKyAgICB9KTsKKworICAgIHN3aXRjaCAoaW5mby50eXBlKSB7CisgICAgY2Fz
ZSBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb246OlR5cGU6OkVD
RFNBUDI1NjogeworICAgICAgICBFQ19LRVkqIGVjS2V5ID0gRUNfS0VZX25ld19ieV9jdXJ2ZV9u
YW1lKE5JRF9YOV82Ml9wcmltZTI1NnYxKTsKKyAgICAgICAgLy8gRW5zdXJlIGN1cnZlIG5hbWUg
aXMgaW5jbHVkZWQgd2hlbiBFQyBrZXkgaXMgc2VyaWFsaXplZC4KKyAgICAgICAgLy8gV2l0aG91
dCB0aGlzIGNhbGwsIE9wZW5TU0wgdmVyc2lvbnMgYmVmb3JlIDEuMS4wIHdpbGwgY3JlYXRlCisg
ICAgICAgIC8vIGNlcnRpZmljYXRlcyB0aGF0IGRvbid0IHdvcmsgZm9yIFRMUy4KKyAgICAgICAg
Ly8gVGhpcyBpcyBhIG5vLW9wIGZvciBCb3JpbmdTU0wgYW5kIE9wZW5TU0wgMS4xLjArCisgICAg
ICAgIEVDX0tFWV9zZXRfYXNuMV9mbGFnKGVjS2V5LCBPUEVOU1NMX0VDX05BTUVEX0NVUlZFKTsK
KyAgICAgICAgaWYgKCFwcml2YXRlS2V5IHx8ICFlY0tleSB8fCAhRUNfS0VZX2dlbmVyYXRlX2tl
eShlY0tleSkgfHwgIUVWUF9QS0VZX2Fzc2lnbl9FQ19LRVkocHJpdmF0ZUtleSwgZWNLZXkpKSB7
CisgICAgICAgICAgICBFQ19LRVlfZnJlZShlY0tleSk7CisgICAgICAgICAgICByZXR1cm4geyB9
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIFBlZXJDb25uZWN0
aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJbmZvcm1hdGlvbjo6VHlwZTo6UlNBU1NBUEtDUzF2MTU6
IHsKKyAgICAgICAgUlNBKiByc2EgPSBSU0FfbmV3KCk7CisgICAgICAgIGlmICghcnNhKQorICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBCSUdOVU0qIGV4cG9uZW50ID0gQk5fbmV3
KCk7CisgICAgICAgIGludCBwdWJsaWNFeHBvbmVudCA9IGluZm8ucnNhUGFyYW1ldGVycyA/IGlu
Zm8ucnNhUGFyYW1ldGVycy0+cHVibGljRXhwb25lbnQgOiA2NTUzNzsKKyAgICAgICAgYXV0byBt
b2R1bHVzTGVuZ3RoID0gaW5mby5yc2FQYXJhbWV0ZXJzID8gaW5mby5yc2FQYXJhbWV0ZXJzLT5t
b2R1bHVzTGVuZ3RoIDogMjA0ODsKKyAgICAgICAgaWYgKCFCTl9zZXRfd29yZChleHBvbmVudCwg
cHVibGljRXhwb25lbnQpIHx8ICFSU0FfZ2VuZXJhdGVfa2V5X2V4KHJzYSwgbW9kdWx1c0xlbmd0
aCwgZXhwb25lbnQsIG51bGxwdHIpCisgICAgICAgICAgICB8fCAhRVZQX1BLRVlfYXNzaWduX1JT
QShwcml2YXRlS2V5LCByc2EpKSB7CisgICAgICAgICAgICBSU0FfZnJlZShyc2EpOworICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICBCTl9mcmVlKGV4cG9uZW50KTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAgIFg1MDkqIHg1MDkgPSBYNTA5X25l
dygpOworICAgIGlmICgheDUwOSkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNy
ZWF0ZSBjZXJ0aWZpY2F0ZSIpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGF1
dG8gY2VydFNjb3BlRXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBYNTA5
X2ZyZWUoeDUwOSk7CisgICAgfSk7CisKKyAgICBYNTA5X3NldF92ZXJzaW9uKHg1MDksIDIpOwor
CisgICAgLy8gU2V0IGEgcmFuZG9tIDY0IGJpdCBpbnRlZ2VyIGFzIHNlcmlhbCBudW1iZXIuCisg
ICAgQklHTlVNKiBzZXJpYWxOdW1iZXIgPSBCTl9uZXcoKTsKKyAgICBCTl9wc2V1ZG9fcmFuZChz
ZXJpYWxOdW1iZXIsIDY0LCAwLCAwKTsKKyAgICBBU04xX0lOVEVHRVIqIGFzbjFTZXJpYWxOdW1i
ZXIgPSBYNTA5X2dldF9zZXJpYWxOdW1iZXIoeDUwOSk7CisgICAgQk5fdG9fQVNOMV9JTlRFR0VS
KHNlcmlhbE51bWJlciwgYXNuMVNlcmlhbE51bWJlcik7CisgICAgQk5fZnJlZShzZXJpYWxOdW1i
ZXIpOworCisgICAgLy8gU2V0IGEgcmFuZG9tIDggYnl0ZSBiYXNlNjQgc3RyaW5nIGFzIGlzc3Vl
ci9zdWJqZWN0LgorICAgIFg1MDlfTkFNRSogbmFtZSA9IFg1MDlfTkFNRV9uZXcoKTsKKyAgICBW
ZWN0b3I8dWludDhfdD4gYnVmZmVyOworICAgIGJ1ZmZlci5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDgpOworICAgIFdURjo6Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoYnVmZmVyLmRhdGEo
KSwgOCk7CisgICAgYXV0byBjb21tb25OYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVy
KTsKKyAgICBYNTA5X05BTUVfYWRkX2VudHJ5X2J5X05JRChuYW1lLCBOSURfY29tbW9uTmFtZSwg
TUJTVFJJTkdfQVNDLCAoY29uc3QgZ3VjaGFyKiljb21tb25OYW1lLmFzY2lpKCkuZGF0YSgpLCAt
MSwgLTEsIDApOworICAgIFg1MDlfc2V0X3N1YmplY3RfbmFtZSh4NTA5LCBuYW1lKTsKKyAgICBY
NTA5X3NldF9pc3N1ZXJfbmFtZSh4NTA5LCBuYW1lKTsKKyAgICBYNTA5X05BTUVfZnJlZShuYW1l
KTsKKworICAgIC8vIEZhbGxiYWNrIHRvIDMwIGRheXMsIG1heCBvdXQgYXQgb25lIHllYXIuCisg
ICAgdWludDY0X3QgZXhwaXJlcyA9IGluZm8uZXhwaXJlcy52YWx1ZV9vcigyNTkyMDAwKTsKKyAg
ICBleHBpcmVzID0gc3RkOjptaW48dWludDY0X3Q+KGV4cGlyZXMsIDMxNTM2MDAwMDAwKTsKKyAg
ICBYNTA5X2dtdGltZV9hZGooWDUwOV9nZXRtX25vdEJlZm9yZSh4NTA5KSwgMCk7CisgICAgWDUw
OV9nbXRpbWVfYWRqKFg1MDlfZ2V0bV9ub3RBZnRlcih4NTA5KSwgZXhwaXJlcyk7CisgICAgWDUw
OV9zZXRfcHVia2V5KHg1MDksIHByaXZhdGVLZXkpOworCisgICAgaWYgKCFYNTA5X3NpZ24oeDUw
OSwgcHJpdmF0ZUtleSwgRVZQX3NoYTI1NigpKSkgeworICAgICAgICBHU1RfV0FSTklORygiRmFp
bGVkIHRvIHNpZ24gY2VydGlmaWNhdGUiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisK
KyAgICBhdXRvIHBlbSA9IHg1MDlTZXJpYWxpemUoeDUwOSk7CisgICAgR1NUX0RFQlVHKCJHZW5l
cmF0ZWQgY2VydGlmaWNhdGUgUEVNOiAlcyIsIHBlbS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0
byBzZXJpYWxpemVkUHJpdmF0ZUtleSA9IHByaXZhdGVLZXlTZXJpYWxpemUocHJpdmF0ZUtleSk7
CisgICAgVmVjdG9yPFJUQ0NlcnRpZmljYXRlOjpEdGxzRmluZ2VycHJpbnQ+IGZpbmdlcnByaW50
czsKKyAgICAvLyBGSVhNRTogRmlsbCBmaW5nZXJwcmludHMuCisgICAgYXV0byBleHBpcmF0aW9u
VGltZSA9IFdURjo6V2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkgKyBXVEY6OlNl
Y29uZHMoZXhwaXJlcyk7CisgICAgcmV0dXJuIFJUQ0NlcnRpZmljYXRlOjpjcmVhdGUoV1RGTW92
ZShvcmlnaW4pLCBleHBpcmF0aW9uVGltZS5taWxsaXNlY29uZHMoKSwgV1RGTW92ZShmaW5nZXJw
cmludHMpLCBXVEZNb3ZlKHBlbSksIFdURk1vdmUoc2VyaWFsaXplZFByaXZhdGVLZXkpKTsKK30K
KworYm9vbCBzZHBNZWRpYUhhc0F0dHJpYnV0ZUtleShjb25zdCBHc3RTRFBNZWRpYSogbWVkaWEs
IGNvbnN0IGNoYXIqIGtleSkKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSBnc3Rfc2RwX21lZGlhX2F0
dHJpYnV0ZXNfbGVuKG1lZGlhKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBp
KyspIHsKKyAgICAgICAgY29uc3QgYXV0byogYXR0cmlidXRlID0gZ3N0X3NkcF9tZWRpYV9nZXRf
YXR0cmlidXRlKG1lZGlhLCBpKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXR0cmlidXRlLT5r
ZXksIGtleSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZmFsc2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJX
ZWJSVENVdGlscy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjg4ZmE0ZGIwNDdhZmY4YWRh
YjhkOTI5OWM1N2I5ZWNjNWRhMThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaApAQCAt
MCwwICsxLDI2NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNp
bmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENv
bmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNs
dWRlICJSVENCdW5kbGVQb2xpY3kuaCIKKyNpbmNsdWRlICJSVENDZXJ0aWZpY2F0ZS5oIgorI2lu
Y2x1ZGUgIlJUQ0R0bHNUcmFuc3BvcnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgorI2luY2x1
ZGUgIlJUQ0ljZUNvbm5lY3Rpb25TdGF0ZS5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFBv
bGljeS5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFN0YXRlLmgiCisjaW5jbHVkZSAiUlRD
UnRwU2VuZFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlv
bi5oIgorI2luY2x1ZGUgIlJUQ1NkcFR5cGUuaCIKKyNpbmNsdWRlICJSVENTaWduYWxpbmdTdGF0
ZS5oIgorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0
Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK2lubGluZSBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB0b1JUQ1J0cFRyYW5z
Y2VpdmVyRGlyZWN0aW9uKEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlv
bikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgR1NUX1dFQlJUQ19SVFBf
VFJBTlNDRUlWRVJfRElSRUNUSU9OX05PTkU6CisgICAgICAgIC8vIMKvXF8o44OEKV8vwq8KKyAg
ICAgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBj
YXNlIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9JTkFDVElWRToKKyAgICAg
ICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBjYXNl
IEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5ET05MWToKKyAgICAgICAg
cmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kb25seTsKKyAgICBjYXNlIEdT
VF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9SRUNWT05MWToKKyAgICAgICAgcmV0
dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpSZWN2b25seTsKKyAgICBjYXNlIEdTVF9X
RUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5EUkVDVjoKKyAgICAgICAgcmV0dXJu
IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kcmVjdjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJEaXJl
Y3Rpb246OkluYWN0aXZlOworfQorCitpbmxpbmUgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXJEaXJl
Y3Rpb24gZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKFJUQ1J0cFRyYW5zY2VpdmVyRGly
ZWN0aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2Ug
UlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OkluYWN0aXZlOgorICAgICAgICByZXR1cm4gR1NU
X1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX0lOQUNUSVZFOworICAgIGNhc2UgUlRD
UnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OlNlbmRvbmx5OgorICAgICAgICByZXR1cm4gR1NUX1dF
QlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1NFTkRPTkxZOworICAgIGNhc2UgUlRDUnRw
VHJhbnNjZWl2ZXJEaXJlY3Rpb246OlJlY3Zvbmx5OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJU
Q19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1JFQ1ZPTkxZOworICAgIGNhc2UgUlRDUnRwVHJh
bnNjZWl2ZXJEaXJlY3Rpb246OlNlbmRyZWN2OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19S
VFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1NFTkRSRUNWOworICAgIH0KKyAgICBSRUxFQVNFX0FT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZF
Ul9ESVJFQ1RJT05fTk9ORTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENTRFBUeXBlIHRv
U2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShSVENTZHBUeXBlIHNkcFR5cGUpCit7CisgICAgc3dpdGNo
IChzZHBUeXBlKSB7CisgICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoKKyAgICAgICAgcmV0dXJu
IEdTVF9XRUJSVENfU0RQX1RZUEVfT0ZGRVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpQcmFuc3dl
cjoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfU0RQX1RZUEVfUFJBTlNXRVI7CisgICAgY2Fz
ZSBSVENTZHBUeXBlOjpBbnN3ZXI6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBF
X0FOU1dFUjsKKyAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgorICAgICAgICByZXR1cm4g
R1NUX1dFQlJUQ19TRFBfVFlQRV9ST0xMQkFDSzsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX09GRkVSOwor
fQorCitzdGF0aWMgaW5saW5lIFJUQ1NkcFR5cGUgZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5cGUo
Y29uc3QgR3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBh
dXRvIHR5cGUgPSBkZXNjcmlwdGlvbi50eXBlOworICAgIGlmICh0eXBlID09IEdTVF9XRUJSVENf
U0RQX1RZUEVfT0ZGRVIpCisgICAgICAgIHJldHVybiBSVENTZHBUeXBlOjpPZmZlcjsKKyAgICBp
ZiAodHlwZSA9PSBHU1RfV0VCUlRDX1NEUF9UWVBFX0FOU1dFUikKKyAgICAgICAgcmV0dXJuIFJU
Q1NkcFR5cGU6OkFuc3dlcjsKKyAgICBBU1NFUlQodHlwZSA9PSBHU1RfV0VCUlRDX1NEUF9UWVBF
X1BSQU5TV0VSKTsKKyAgICByZXR1cm4gUlRDU2RwVHlwZTo6UHJhbnN3ZXI7Cit9CisKK3N0YXRp
YyBpbmxpbmUgUlRDU2lnbmFsaW5nU3RhdGUgdG9TaWduYWxpbmdTdGF0ZShHc3RXZWJSVENTaWdu
YWxpbmdTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX1NJR05BTElOR19TVEFURV9TVEFCTEU6CisgICAgICAgIHJldHVybiBSVENTaWduYWxp
bmdTdGF0ZTo6U3RhYmxlOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFW
RV9MT0NBTF9PRkZFUjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlTG9j
YWxPZmZlcjsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NUQVRFX0hBVkVfTE9DQUxf
UFJBTlNXRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsUHJh
bnN3ZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX1JFTU9URV9P
RkZFUjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlUmVtb3RlT2ZmZXI7
CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX1JFTU9URV9QUkFOU1dF
UjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlUmVtb3RlUHJhbnN3ZXI7
CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9DTE9TRUQ6CisgICAgICAgIHJl
dHVybiBSVENTaWduYWxpbmdTdGF0ZTo6Q2xvc2VkOworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpTdGFibGU7
Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlQ29ubmVjdGlvblN0YXRlIHRvUlRDSWNlQ29ubmVj
dGlvblN0YXRlKEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0
Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX05F
VzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6TmV3OworICAgIGNhc2Ug
R1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DSEVDS0lORzoKKyAgICAgICAgcmV0dXJu
IFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q2hlY2tpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lD
RV9DT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5l
Y3Rpb25TdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElP
Tl9TVEFURV9DT01QTEVURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6
OkNvbXBsZXRlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfRkFJ
TEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpGYWlsZWQ7CisgICAg
Y2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRDoKKyAgICAg
ICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6RGlzY29ubmVjdGVkOworICAgIGNhc2Ug
R1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBS
VENJY2VDb25uZWN0aW9uU3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsK
K30KKworc3RhdGljIGlubGluZSBSVENEdGxzVHJhbnNwb3J0U3RhdGUgdG9SVENEdGxzVHJhbnNw
b3J0U3RhdGUoR3N0V2ViUlRDRFRMU1RyYW5zcG9ydFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRj
aCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVfTkVX
OgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpOZXc7CisgICAgY2FzZSBH
U1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgIHJldHVy
biBSVENEdGxzVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRD
X0RUTFNfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0R0bHNU
cmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19EVExTX1RSQU5T
UE9SVF9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJhbnNwb3J0U3RhdGU6
OkNsb3NlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVfRkFJTEVE
OgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpGYWlsZWQ7CisgICAgfQor
CisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlubGluZSBS
VENJY2VUcmFuc3BvcnRTdGF0ZSB0b1JUQ0ljZVRyYW5zcG9ydFN0YXRlKEdzdFdlYlJUQ0lDRUNv
bm5lY3Rpb25TdGF0ZSBzdGF0ZSkKK3sKKyAgICAvLyBGSVhNRTogTm8gR3N0V2ViUlRDSUNFVHJh
bnNwb3J0U3RhdGUgPworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENf
SUNFX0NPTk5FQ1RJT05fU1RBVEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0
U3RhdGU6Ok5ldzsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hF
Q0tJTkc6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmc7Cisg
ICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAg
ICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb25uZWN0ZWQ7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NPTVBMRVRFRDoKKyAgICAgICAgcmV0dXJuIFJU
Q0ljZVRyYW5zcG9ydFN0YXRlOjpDb21wbGV0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9D
T05ORUNUSU9OX1NUQVRFX0ZBSUxFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0
YXRlOjpGYWlsZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0RJ
U0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpEaXNjb25u
ZWN0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NMT1NFRDoK
KyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDSWNlVHJhbnNw
b3J0U3RhdGU6Ok5ldzsKK30KKworc3RhdGljIGlubGluZSBSVENJY2VHYXRoZXJpbmdTdGF0ZSB0
b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKEdzdFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIHN0YXRlKQor
eworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0dBVEhFUklO
R19TVEFURV9ORVc6CisgICAgICAgIHJldHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6TmV3Owor
ICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX0dBVEhFUklORzoKKyAgICAg
ICAgcmV0dXJuIFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpHYXRoZXJpbmc7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfQ09NUExFVEU6CisgICAgICAgIHJldHVybiBSVENJ
Y2VHYXRoZXJpbmdTdGF0ZTo6Q29tcGxldGU7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENCdW5kbGVQb2xpY3kg
YnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oY29uc3QgTWVkaWFFbmRwb2ludENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uLmJ1bmRs
ZVBvbGljeSkgeworICAgIGNhc2UgUlRDQnVuZGxlUG9saWN5OjpCYWxhbmNlZDoKKyAgICAgICAg
cmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElDWV9CQUxBTkNFRDsKKyAgICBjYXNlIFJUQ0J1
bmRsZVBvbGljeTo6TWF4Q29tcGF0OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19CVU5ETEVf
UE9MSUNZX01BWF9DT01QQVQ7CisgICAgY2FzZSBSVENCdW5kbGVQb2xpY3k6Ok1heEJ1bmRsZToK
KyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElDWV9NQVhfQlVORExFOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9X
RUJSVENfQlVORExFX1BPTElDWV9OT05FOworfQorCitzdGF0aWMgaW5saW5lIEdzdFdlYlJUQ0lD
RVRyYW5zcG9ydFBvbGljeSBpY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29uZmlndXJhdGlvbihjb25z
dCBNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKK3sKKyAgICBzd2l0
Y2ggKGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7CisgICAgY2FzZSBSVENJY2VU
cmFuc3BvcnRQb2xpY3k6OkFsbDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5T
UE9SVF9QT0xJQ1lfQUxMOworICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0UG9saWN5OjpSZWxheToK
KyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lfUkVMQVk7Cisg
ICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NU
X1dFQlJUQ19JQ0VfVFJBTlNQT1JUX1BPTElDWV9BTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3Rk
OjpvcHRpb25hbDxSVENFcnJvckRldGFpbFR5cGU+IHRvUlRDRXJyb3JEZXRhaWxUeXBlKEdzdFdl
YlJUQ0Vycm9yIGNvZGUpCit7CisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0VSUk9SX0RBVEFfQ0hBTk5FTF9GQUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JE
ZXRhaWxUeXBlOjpEYXRhQ2hhbm5lbEZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9S
X0RUTFNfRkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6RHRsc0Zh
aWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0ZJTkdFUlBSSU5UX0ZBSUxVUkU6Cisg
ICAgICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OkZpbmdlcnByaW50RmFpbHVyZTsKKyAg
ICBjYXNlIEdTVF9XRUJSVENfRVJST1JfU0NUUF9GQUlMVVJFOgorICAgICAgICByZXR1cm4gUlRD
RXJyb3JEZXRhaWxUeXBlOjpTY3RwRmFpbHVyZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1Jf
U0RQX1NZTlRBWF9FUlJPUjoKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6U2Rw
U3ludGF4RXJyb3I7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0hBUkRXQVJFX0VOQ09ERVJf
Tk9UX0FWQUlMQUJMRToKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfRU5DT0RFUl9FUlJPUjoK
KyAgICAgICAgLy8gRklYTUUKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4geyB9OworICAg
IH07Cit9CisKK1JlZlB0cjxSVENFcnJvcj4gdG9SVENFcnJvcihHRXJyb3IqKTsKKworR1VuaXF1
ZVB0cjxHc3RTdHJ1Y3R1cmU+IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3QgUlRDUnRw
RW5jb2RpbmdQYXJhbWV0ZXJzJik7CitSVENSdHBTZW5kUGFyYW1ldGVycyB0b1JUQ1J0cFNlbmRQ
YXJhbWV0ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSopOworCitzdGQ6Om9wdGlvbmFsPFJlZjxSVEND
ZXJ0aWZpY2F0ZT4+IGdlbmVyYXRlQ2VydGlmaWNhdGUoUmVmPFNlY3VyaXR5T3JpZ2luPiYmLCBj
b25zdCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb24mKTsKKwor
Ym9vbCBzZHBNZWRpYUhhc0F0dHJpYnV0ZUtleShjb25zdCBHc3RTRFBNZWRpYSosIGNvbnN0IGNo
YXIqIGtleSk7CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vR1N0cmVhbWVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNt
YWtlCmluZGV4IDI0MTMwNjFkOGYzNTJjNzhhMzYzM2Y3OTAxN2IzYTFlNzQ4N2UwYjMuLmM4NWNl
NmQzN2M0Y2ZlMjNlZGViODYyZjQxZTYxMTcyYmQ2Zjc3ZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9HU3RyZWFtZXIuY21ha2UKQEAgLTEsNSArMSw2IEBACiBpZiAoRU5BQkxFX1ZJREVPIE9S
IEVOQUJMRV9XRUJfQVVESU8pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xV
REVfRElSRUNUT1JJRVMKKyAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyIgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyIgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL21zZSIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9lbWUiCkBAIC03LDcgKzgsMjMgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVf
V0VCX0FVRElPKQogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAg
ICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXIuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcAorICAgICAg
ICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFJlY2VpdmVyQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcAorICAgICAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNw
cAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5k
ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuY3BwCisg
ICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3Bv
cnRCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJTdGF0c0NvbGxlY3Rvci5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwCisKICAgICAgICAgTW9kdWxlcy93ZWJhdWRp
by9NZWRpYVN0cmVhbUF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorCiAgICAgICAgIHBsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKICAgICAg
ICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0RNQUJ1ZlZpZGVvU2lua0dTdHJlYW1lci5j
cHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVh
bWVyLmNwcApAQCAtNjQsNiArODEsNyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJf
QVVESU8pCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJB
dWRpb0NhcHR1cmVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKKyAgICAgICAgcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGlzcGxheUNhcHR1
cmVEZXZpY2VNYW5hZ2VyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC03MSw3
ICs4OSwxMyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrUmVhbHRpbWVBdWRp
b1NvdXJjZUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL01vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVh
bWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKICAgICAg
ICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50
ZXJHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCiAgICAgKQogCiAgICAgbGlzdChBUFBFTkQg
V2ViQ29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCkBAIC0xNjEsNyArMTg1LDcgQEAgaWYg
KEVOQUJMRV9WSURFTykKICAgICAgICAgKQogICAgIGVuZGlmICgpCiAKLSAgICBpZiAoRU5BQkxF
X01FRElBX1NUUkVBTSBPUiBFTkFCTEVfV0VCX1JUQykKKyAgICBpZiAoVVNFX0xJQldFQlJUQykK
ICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwog
ICAgICAgICAgICAgJHtHU1RSRUFNRVJfQ09ERUNQQVJTRVJTX0lOQ0xVREVfRElSU30KICAgICAg
ICAgKQpAQCAtMTcwLDYgKzE5NCwyMSBAQCBpZiAoRU5BQkxFX1ZJREVPKQogICAgICAgICAgICAg
ICAgICR7R1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVN9CiAgICAgICAgICAgICApCiAg
ICAgICAgIGVuZGlmICgpCisgICAgZWxzZWlmIChVU0VfR1NUUkVBTUVSX1dFQlJUQykKKyAgICAg
ICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAg
ICAgICAgJHtHU1RSRUFNRVJfUlRQX0lOQ0xVREVfRElSU30KKyAgICAgICAgICAgICR7R1NUUkVB
TUVSX1NEUF9JTkNMVURFX0RJUlN9CisgICAgICAgICAgICAke0dTVFJFQU1FUl9XRUJSVENfSU5D
TFVERV9ESVJTfQorICAgICAgICApCisgICAgICAgIGlmIChOT1QgVVNFX0dTVFJFQU1FUl9GVUxM
KQorICAgICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAgICAg
ICAgICAke0dTVFJFQU1FUl9SVFBfTElCUkFSSUVTfQorICAgICAgICAgICAgICAgICR7R1NUUkVB
TUVSX1NEUF9MSUJSQVJJRVN9CisgICAgICAgICAgICAgICAgJHtHU1RSRUFNRVJfV0VCUlRDX0xJ
QlJBUklFU30KKyAgICAgICAgICAgICkKKyAgICAgICAgZW5kaWYgKCkKKworICAgICAgICBsaXN0
KEFQUEVORCBXZWJDb3JlX0xJQlJBUklFUyBPcGVuU1NMOjpDcnlwdG8pCiAgICAgZW5kaWYgKCkK
IGVuZGlmICgpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNw
cAppbmRleCBiNGQ1ZjY3MDNlOTI5ZWRmMTdmMTA5ZWY2NDgxMzBhY2UwMzhjYWM0Li5hMWFjZTk3
NjFkYTJjZTJhYWQ0NjQyMWI5YmU2ZGY4ZDNhOWU1NDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1l
ci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlv
U291cmNlUHJvdmlkZXJHU3RyZWFtZXIuY3BwCkBAIC0xMDAsMTAgKzEwMCw1OCBAQCBBdWRpb1Nv
dXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKE1lZGlh
U3RyZWFtVHJhY2tQcml2YQogCiAgICAgbV9hdWRpb1NpbmtCaW4gPSBnc3RfcGFyc2VfYmluX2Zy
b21fZGVzY3JpcHRpb24oInRlZSBuYW1lPWF1ZGlvVGVlIiwgdHJ1ZSwgbnVsbHB0cik7CiAKLSAg
ICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgc3JjLCBt
X2F1ZGlvU2lua0Jpbi5nZXQoKSwgbnVsbHB0cik7Ci0gICAgZ3N0X2VsZW1lbnRfbGluayhzcmMs
IG1fYXVkaW9TaW5rQmluLmdldCgpKTsKKyAgICBhdXRvKiBkZWNvZGViaW4gPSBtYWtlR1N0cmVh
bWVyRWxlbWVudCgiZGVjb2RlYmluMyIsIG51bGxwdHIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZChkZWNvZGViaW4sICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLKCtbXShBdWRpb1NvdXJj
ZVByb3ZpZGVyR1N0cmVhbWVyKiBwcm92aWRlciwgR3N0UGFkKiBwYWQpIHsKKyAgICAgICAgYXV0
byBwYWRDYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfcXVlcnlfY2FwcyhwYWQsIG51bGxwdHIpKTsK
KyAgICAgICAgYm9vbCBpc0F1ZGlvID0gZG9DYXBzSGF2ZVR5cGUocGFkQ2Fwcy5nZXQoKSwgImF1
ZGlvIik7CisgICAgICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTgsIDApKQorICAg
ICAgICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBdWRpbyk7CisgICAgICAgIGVsc2UgaWYgKCFpc0F1
ZGlvKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChwcm92aWRlci0+bV9hdWRpb1NpbmtCaW4u
Z2V0KCksICJzaW5rIikpOworICAgICAgICBnc3RfcGFkX2xpbmsocGFkLCBzaW5rUGFkLmdldCgp
KTsKKyAgICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChwcm92aWRlci0+
bV9hdWRpb1NpbmtCaW4uZ2V0KCkpOworICAgIH0pLCB0aGlzKTsKKworICAgIGdzdF9iaW5fYWRk
X21hbnkoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBzcmMsIGRlY29kZWJpbiwgbV9h
dWRpb1NpbmtCaW4uZ2V0KCksIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmsoc3JjLCBk
ZWNvZGViaW4pOworCisgICAgYXV0byBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9i
dXMoR1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgQVNTRVJUKGJ1cyk7CisK
KyAgICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBbXShHc3RCdXMqLCBHc3RN
ZXNzYWdlKiBtZXNzYWdlLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gR3N0QnVzU3luY1JlcGx5IHsK
KyAgICAgICAgYXV0byogZGVjb2RlYmluID0gR1NUX0VMRU1FTlRfQ0FTVCh1c2VyRGF0YSk7Cisg
ICAgICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpICE9IEdTVF9NRVNTQUdFX1NUUkVB
TV9DT0xMRUNUSU9OIHx8IEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSAhPSBHU1RfT0JKRUNUX0NB
U1QoZGVjb2RlYmluKSkgeworICAgICAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7
CisgICAgICAgICAgICByZXR1cm4gR1NUX0JVU19EUk9QOworICAgICAgICB9CisKKyAgICAgICAg
R1JlZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOworICAgICAgICBnc3RfbWVz
c2FnZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbihtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIo
KSk7CisgICAgICAgIGlmICghY29sbGVjdGlvbikgeworICAgICAgICAgICAgZ3N0X21lc3NhZ2Vf
dW5yZWYobWVzc2FnZSk7CisgICAgICAgICAgICByZXR1cm4gR1NUX0JVU19EUk9QOworICAgICAg
ICB9CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRf
c2l6ZShjb2xsZWN0aW9uLmdldCgpKTsKKyAgICAgICAgR0xpc3QqIHN0cmVhbXMgPSBudWxscHRy
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAg
ICAgICBhdXRvKiBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbShjb2xs
ZWN0aW9uLmdldCgpLCBpKTsKKyAgICAgICAgICAgIGF1dG8gc3RyZWFtVHlwZSA9IGdzdF9zdHJl
YW1fZ2V0X3N0cmVhbV90eXBlKHN0cmVhbSk7CisgICAgICAgICAgICBpZiAoc3RyZWFtVHlwZSA9
PSBHU1RfU1RSRUFNX1RZUEVfQVVESU8pIHsKKyAgICAgICAgICAgICAgICBzdHJlYW1zID0gZ19s
aXN0X2FwcGVuZChzdHJlYW1zLCBjb25zdF9jYXN0PGNoYXIqPihnc3Rfc3RyZWFtX2dldF9zdHJl
YW1faWQoc3RyZWFtKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmIChzdHJlYW1zKSB7CisgICAgICAgICAgICBnc3RfZWxlbWVu
dF9zZW5kX2V2ZW50KGRlY29kZWJpbiwgZ3N0X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtcyhzdHJl
YW1zKSk7CisgICAgICAgICAgICBnX2xpc3RfZnJlZShzdHJlYW1zKTsKKyAgICAgICAgfQogCi0g
ICAgY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdldCgpKTsKKyAg
ICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgICAgIHJldHVybiBHU1RfQlVT
X0RST1A7CisgICAgfSwgZ3N0X29iamVjdF9yZWYoZGVjb2RlYmluKSwgZ3N0X29iamVjdF91bnJl
Zik7CiB9CiAjZW5kaWYKIApAQCAtMTIwLDEwICsxNjgsOCBAQCBBdWRpb1NvdXJjZVByb3ZpZGVy
R1N0cmVhbWVyOjp+QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcigpCiAKICAgICBzZXRDbGll
bnQobnVsbHB0cik7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBpZiAobV9waXBlbGlu
ZSkgewotICAgICAgICBkaXNjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxp
bmUuZ2V0KCkpOworICAgIGlmIChtX3BpcGVsaW5lKQogICAgICAgICBnc3RfZWxlbWVudF9zZXRf
c3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOwotICAgIH0KICNlbmRpZgog
fQogCkBAIC0zNDUsNyArMzkxLDYgQEAgdm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVy
OjpoYW5kbGVOZXdEZWludGVybGVhdmVQYWQoR3N0UGFkKiBwYWQpCiAKICAgICBHUXVhcmsgcXVh
cmsgPSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZygicGVlciIpOwogICAgIGdfb2JqZWN0X3Nl
dF9xZGF0YShHX09CSkVDVChwYWQpLCBxdWFyaywgc2lua1BhZC5nZXQoKSk7Ci0KICAgICBtX2Rl
aW50ZXJsZWF2ZVNvdXJjZVBhZHMrKzsKICAgICBHUXVhcmsgY2hhbm5lbElkUXVhcmsgPSBnX3F1
YXJrX2Zyb21fc3RhdGljX3N0cmluZygiY2hhbm5lbC1pZCIpOwogICAgIGdfb2JqZWN0X3NldF9x
ZGF0YShHX09CSkVDVChzaW5rKSwgY2hhbm5lbElkUXVhcmssIEdJTlRfVE9fUE9JTlRFUihtX2Rl
aW50ZXJsZWF2ZVNvdXJjZVBhZHMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oCmluZGV4IDZmMjg4NzJhZmIxMTc2ZTUxM2QyYmRmNTVhNjIyMWQ0ZjZm
YjBhZTcuLmRkMzEzYjMxNDI0MDZjYWY1Nzk0ZWFjN2NjMmFmOGQ2NGU1NDVhYTIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRp
b1N0cmVhbURlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8v
Z3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaApAQCAtMzIsMTkgKzMy
LDE2IEBAIGNsYXNzIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gZmluYWw6IHB1Ymxp
YyBBdWRpb1N0cmVhbURlc2NyaXB0aW9uIHsKIHB1YmxpYzoKICAgICBHU3RyZWFtZXJBdWRpb1N0
cmVhbURlc2NyaXB0aW9uKEdzdEF1ZGlvSW5mbyYmIGluZm8pCiAgICAgICAgIDogbV9pbmZvKFdU
Rk1vdmUoaW5mbykpCi0gICAgICAgICwgbV9jYXBzKGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190
b19jYXBzKCZtX2luZm8pKSkKICAgICB7CiAgICAgfQogCiAgICAgR1N0cmVhbWVyQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbihjb25zdCBHc3RBdWRpb0luZm8mIGluZm8pCiAgICAgICAgIDogbV9pbmZv
KGluZm8pCi0gICAgICAgICwgbV9jYXBzKGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBz
KCZtX2luZm8pKSkKICAgICB7CiAgICAgfQogCiAgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbihHc3RBdWRpb0luZm8qIGluZm8pCiAgICAgICAgIDogbV9pbmZvKCppbmZvKQotICAg
ICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcygmbV9pbmZvKSkp
CiAgICAgewogICAgIH0KIApAQCAtOTksNyArOTYsMTIgQEAgcHVibGljOgogICAgIGJvb2wgb3Bl
cmF0b3I9PShjb25zdCBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgeyBy
ZXR1cm4gZ3N0X2F1ZGlvX2luZm9faXNfZXF1YWwoJm1faW5mbywgJm90aGVyLm1faW5mbyk7IH0K
ICAgICBib29sIG9wZXJhdG9yIT0oY29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlv
biYgb3RoZXIpIHsgcmV0dXJuICFvcGVyYXRvciA9PSAob3RoZXIpOyB9CiAKLSAgICBjb25zdCBH
UmVmUHRyPEdzdENhcHM+JiBjYXBzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBzOyB9CisgICAgY29u
c3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcygpCisgICAgeworICAgICAgICBpZiAoIW1fY2FwcykK
KyAgICAgICAgICAgIG1fY2FwcyA9IGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZt
X2luZm8pKTsKKyAgICAgICAgcmV0dXJuIG1fY2FwczsKKyAgICB9CiAgICAgY29uc3QgR3N0QXVk
aW9JbmZvJiBnZXRJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CiAKIHByaXZhdGU6CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1Jl
ZlB0ckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKaW5kZXggMzEwYmVhZDcyYTQ4Y2JkYjMzMGI0NTM3
ZWUwMTA2MmFhN2IyZDAwOC4uZDE2YjdjMGIwNTk1NGFlNmYwN2U3MzkzYzYxZWRmYzFlYTUzODMy
ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dSZWZQdHJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcApAQCAtMjcsNiArMjcsMTIgQEAKICNp
bmNsdWRlIDxnc3QvZ2wvZWdsL2dzdGVnbGltYWdlLmg+CiAjZW5kaWYKIAorI2lmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdz
dC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNlbmRpZgor
CiBuYW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBHUmVmUHRyPEdzdE1pbmlPYmplY3Q+IGFk
b3B0R1JlZihHc3RNaW5pT2JqZWN0KiBwdHIpCkBAIC01ODQsMTMgKzU5MCwxNTAgQEAgR3N0RW5j
b2RpbmdQcm9maWxlKiByZWZHUHRyPEdzdEVuY29kaW5nUHJvZmlsZT4oR3N0RW5jb2RpbmdQcm9m
aWxlKiBwdHIpCiAgICAgcmV0dXJuIHB0cjsKIH0KIAotdGVtcGxhdGUgPD4KK3RlbXBsYXRlPD4K
IHZvaWQgZGVyZWZHUHRyPEdzdEVuY29kaW5nUHJvZmlsZT4oR3N0RW5jb2RpbmdQcm9maWxlKiBw
dHIpCiB7CiAgICAgaWYgKHB0cikKICAgICAgICAgZ3N0X2VuY29kaW5nX3Byb2ZpbGVfdW5yZWYo
cHRyKTsKIH0KIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCit0ZW1wbGF0ZSA8PiBHUmVm
UHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQUmVjZWl2ZXIq
IHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4ocHRyLCBH
UmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBSZWNlaXZlciogcmVm
R1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4oR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOwor
CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2Vi
UlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVm
UHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFNlbmRlciogcHRy
KQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4ocHRyLCBHUmVmUHRy
QWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBTZW5kZXIqIHJlZkdQdHI8R3N0
V2ViUlRDUlRQU2VuZGVyPihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sKKyAgICBpZiAocHRy
KQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJu
IHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVy
PihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rf
b2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQ
VHJhbnNjZWl2ZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcHRyKQorewor
ICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihwdHIsIEdSZWZQdHJB
ZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiByZWZHUHRy
PEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcHRyKQor
eworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpFQ1QocHRyKSk7
CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RX
ZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sKKyAg
ICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRl
IDw+IEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGFkb3B0R1JlZihHc3RXZWJSVENEYXRh
Q2hhbm5lbCogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVs
PihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RhdGFDaGFu
bmVsKiByZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCog
cHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChwdHIp
KTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdz
dFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCogcHRyKQoreworICAgIGlm
IChwdHIpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdS
ZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RUTFNUcmFu
c3BvcnQqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0
PihwdHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RUTFNUcmFu
c3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5z
cG9ydCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9P
QkpFQ1QocHRyKSk7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0KiBw
dHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQor
Cit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gYWRvcHRHUmVmKEdz
dFdlYlJUQ0lDRVRyYW5zcG9ydCogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJU
Q0lDRVRyYW5zcG9ydD4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RX
ZWJSVENJQ0VUcmFuc3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJS
VENJQ0VUcmFuc3BvcnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0
X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUg
PD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJQ0VUcmFu
c3BvcnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0
cik7Cit9CisKK3RlbXBsYXRlPD4gR1JlZlB0cjxHc3RQcm9taXNlPiBhZG9wdEdSZWYoR3N0UHJv
bWlzZSogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFByb21pc2U+KHB0ciwgR1JlZlB0
ckFkb3B0KTsKK30KKwordGVtcGxhdGU8PiBHc3RQcm9taXNlKiByZWZHUHRyPEdzdFByb21pc2U+
KEdzdFByb21pc2UqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3RfcHJvbWlzZV9y
ZWYocHRyKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZkdQ
dHI8R3N0UHJvbWlzZT4oR3N0UHJvbWlzZSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAg
IGdzdF9wcm9taXNlX3VucmVmKHB0cik7Cit9CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dS
ZWZQdHJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKaW5kZXggN2EwYjVhMTFkZGZhODE2NzA5Njg4ZTgxMzY2
ZGI3YjViMzVkM2E0MS4uZjlkZWFlZGY1MGZlYjk1Mzg4ZDI1ZjczMGRiZGM2ODJmYzRlYWExZCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dS
ZWZQdHJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCkBAIC0zNCw2ICszNCwxNiBAQCB0eXBlZGVmIHN0
cnVjdCBfR3N0R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKIHR5cGVkZWYgc3RydWN0IF9Hc3RFR0xJ
bWFnZSBHc3RFR0xJbWFnZTsKICNlbmRpZgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCit0
eXBlZGVmIHN0cnVjdCBfR3N0UHJvbWlzZSBHc3RQcm9taXNlOwordHlwZWRlZiBzdHJ1Y3QgX0dz
dFdlYlJUQ0RUTFNUcmFuc3BvcnQgR3N0V2ViUlRDRFRMU1RyYW5zcG9ydDsKK3R5cGVkZWYgc3Ry
dWN0IF9Hc3RXZWJSVENEYXRhQ2hhbm5lbCBHc3RXZWJSVENEYXRhQ2hhbm5lbDsKK3R5cGVkZWYg
c3RydWN0IF9Hc3RXZWJSVENJQ0VUcmFuc3BvcnQgR3N0V2ViUlRDSUNFVHJhbnNwb3J0OwordHlw
ZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFJlY2VpdmVyIEdzdFdlYlJUQ1JUUFJlY2VpdmVyOwor
dHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFNlbmRlciBHc3RXZWJSVENSVFBTZW5kZXI7Cit0
eXBlZGVmIHN0cnVjdCBfR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIgR3N0V2ViUlRDUlRQVHJhbnNj
ZWl2ZXI7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gR1JlZlB0cjxH
c3RQbHVnaW4+IGFkb3B0R1JlZihHc3RQbHVnaW4qIHB0cik7CkBAIC0xNTEsNiArMTYxLDM2IEBA
IHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+IGFkb3B0R1JlZihHc3RFbmNv
ZGluZ1Byb2ZpbGUqKTsKIHRlbXBsYXRlPD4gR3N0RW5jb2RpbmdQcm9maWxlKiByZWZHUHRyPEdz
dEVuY29kaW5nUHJvZmlsZT4oR3N0RW5jb2RpbmdQcm9maWxlKik7CiB0ZW1wbGF0ZTw+IHZvaWQg
ZGVyZWZHUHRyPEdzdEVuY29kaW5nUHJvZmlsZT4oR3N0RW5jb2RpbmdQcm9maWxlKik7CiAKKyNp
ZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQ
UmVjZWl2ZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBSZWNlaXZlciopOwordGVtcGxhdGUgPD4g
R3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdl
YlJUQ1JUUFJlY2VpdmVyKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENS
VFBSZWNlaXZlcj4oR3N0V2ViUlRDUlRQUmVjZWl2ZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0
cjxHc3RXZWJSVENSVFBTZW5kZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBTZW5kZXIqKTsKK3Rl
bXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFNlbmRlciogcmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+
KEdzdFdlYlJUQ1JUUFNlbmRlciopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2Vi
UlRDUlRQU2VuZGVyPihHc3RXZWJSVENSVFBTZW5kZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0
cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFRyYW5zY2Vp
dmVyKik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcmVmR1B0cjxHc3RX
ZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqKTsKK3RlbXBsYXRl
IDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBU
cmFuc2NlaXZlciopOworCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVs
PiBhZG9wdEdSZWYoR3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJU
Q0RhdGFDaGFubmVsKiByZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRh
Q2hhbm5lbCopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5u
ZWw+KEdzdFdlYlJUQ0RhdGFDaGFubmVsKik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2Vi
UlRDRFRMU1RyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqKTsKK3Rl
bXBsYXRlIDw+IEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDRFRMU1Ry
YW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCopOwor
Cit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gYWRvcHRHUmVmKEdz
dFdlYlJUQ0lDRVRyYW5zcG9ydCopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDSUNFVHJhbnNwb3J0
KiByZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7
Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KEdzdFdl
YlJUQ0lDRVRyYW5zcG9ydCopOworCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFByb21pc2U+IGFk
b3B0R1JlZihHc3RQcm9taXNlKik7Cit0ZW1wbGF0ZSA8PiBHc3RQcm9taXNlKiByZWZHUHRyPEdz
dFByb21pc2U+KEdzdFByb21pc2UqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFBy
b21pc2U+KEdzdFByb21pc2UqKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2Vu
ZGlmIC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IGUw
YTZmOTBkN2M3ZjMzMDkyMmNiM2ZkYTVmYjVhNzc4ZTI1OGJmOTguLjljYTFjNTgyYjk5ZjA0Y2Y3
ZjhkYzY2NDk0Y2JiNmM3ODQxMDBlYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBA
IC0xODgsNiArMTg4LDkgQEAgY29uc3QgY2hhciogY2Fwc01lZGlhVHlwZShjb25zdCBHc3RDYXBz
KiBjYXBzKQogICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxp
Y2F0aW9uL3gtY2VuYyIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiYXBw
bGljYXRpb24veC1jYmNzIikgfHwgZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJh
cHBsaWNhdGlvbi94LXdlYm0tZW5jIikpCiAgICAgICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dl
dF9zdHJpbmcoc3RydWN0dXJlLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIpOwogI2VuZGlmCisgICAg
aWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1ydHAi
KSkKKyAgICAgICAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJt
ZWRpYSIpOworCiAgICAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsK
IH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmgKaW5kZXggYmY3NGVjZjAyY2MyMmY2
MDZlYmNiOWZlODVjMDM0YjI2YzQwNjQ0MS4uZTUyNDcxY2E3ZWE2MmEzMTU4YzUyMzMzNjA2MzUy
ZWM2MzE1MmEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oCkBAIC0zMCw2ICsz
MCwxMiBAQAogI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogI2luY2x1ZGUgPHd0Zi9nbGli
L0dVbmlxdWVQdHIuaD4KIAorI2lmIGRlZmluZWQoQlVJTERJTkdfV2ViQ29yZSkgJiYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8
Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2VuZGlm
CisKICNpZiBVU0UoV1BFX1ZJREVPX1BMQU5FX0RJU1BMQVlfRE1BQlVGKQogI2luY2x1ZGUgPHdw
ZS9leHRlbnNpb25zL3ZpZGVvLXBsYW5lLWRpc3BsYXktZG1hYnVmLmg+CiAjZW5kaWYKQEAgLTQ5
LDYgKzU1LDEwIEBAIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdEJ5dGVSZWFkZXIsIGdzdF9i
eXRlX3JlYWRlcl9mcmVlKQogV1RGX0RFRklORV9HUFRSX0RFTEVURVIoR3N0VmlkZW9Db252ZXJ0
ZXIsIGdzdF92aWRlb19jb252ZXJ0ZXJfZnJlZSkKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdz
dEF1ZGlvQ29udmVydGVyLCBnc3RfYXVkaW9fY29udmVydGVyX2ZyZWUpCiAKKyNpZiBkZWZpbmVk
KEJVSUxESU5HX1dlYkNvcmUpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorV1RGX0RFRklORV9H
UFRSX0RFTEVURVIoR3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLCBnc3Rfd2VicnRjX3Nlc3Np
b25fZGVzY3JpcHRpb25fZnJlZSkKKyNlbmRpZgorCiAjaWYgVVNFKFdQRV9WSURFT19QTEFORV9E
SVNQTEFZX0RNQUJVRikKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKHN0cnVjdCB3cGVfdmlkZW9f
cGxhbmVfZGlzcGxheV9kbWFidWZfc291cmNlLCB3cGVfdmlkZW9fcGxhbmVfZGlzcGxheV9kbWFi
dWZfc291cmNlX2Rlc3Ryb3kpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcApp
bmRleCBlYzMyYmE4NWNjZjg0NzI1MzgzNTI2ODE4NTljNDA3N2ViZDQ5OTJkLi4xODI2NmYxMjJj
NGIxODY3NGExZjc5YmFiOTFmMDU0OTY3ZmNiNzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUuY3BwCkBAIC0zOCw3ICszOCw3IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRl
ICJNZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VQcm92aWRlckNvY29hLmgiCi0jZWxpZiBFTkFC
TEUoV0VCX0FVRElPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAm
JiBVU0UoR1NUUkVBTUVSKQorI2VsaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKE1FRElB
X1NUUkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKICNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVy
R1N0cmVhbWVyLmgiCiAjZWxzZQogI2luY2x1ZGUgIldlYkF1ZGlvU291cmNlUHJvdmlkZXIuaCIK
QEAgLTE5OSw3ICsxOTksNyBAQCBSZWZQdHI8V2ViQXVkaW9Tb3VyY2VQcm92aWRlcj4gTWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU6OmNyZWF0ZUF1ZGlvU291cmNlUHJvdmlkZQogCiAjaWYgUExBVEZP
Uk0oQ09DT0EpCiAgICAgcmV0dXJuIE1lZGlhU3RyZWFtVHJhY2tBdWRpb1NvdXJjZVByb3ZpZGVy
Q29jb2E6OmNyZWF0ZSgqdGhpcyk7Ci0jZWxpZiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVB
TUVSKQorI2VsaWYgVVNFKEdTVFJFQU1FUikKICAgICByZXR1cm4gQXVkaW9Tb3VyY2VQcm92aWRl
ckdTdHJlYW1lcjo6Y3JlYXRlKCp0aGlzKTsKICNlbHNlCiAgICAgcmV0dXJuIG51bGxwdHI7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKaW5kZXggMjZlZTQy
NjNiOWRiODc4MWRiYWU2MWUxYTMwMTJlZjdkYzcwOTcyNS4uMzVlNjVjMGViMGJkNDgxZDNmODVh
OWRkMDViNjZiZjk1NjkwZTdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRp
b0NhcHR1cmVyLmNwcApAQCAtMjksMjkgKzI5LDQ2IEBACiAjaW5jbHVkZSAiTGliV2ViUlRDQXVk
aW9Gb3JtYXQuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+Ci0K
IG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShMSUJXRUJSVEMpCi1zdGF0aWMgY29uc3Rl
eHByIHNpemVfdCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gTGliV2ViUlRDQXVkaW9Gb3JtYXQ6
OnNhbXBsZVJhdGU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBzX2F1ZGlvQ2FwdHVyZVNhbXBs
ZVJhdGUgPSBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlUmF0ZTsKICNlbHNlCi1zdGF0aWMg
Y29uc3RleHByIHNpemVfdCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gNDgwMDA7CitzdGF0aWMg
Y29uc3RleHByIHNpemVfdCBzX2F1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUgPSA0ODAwMDsKICNlbmRp
ZgogCiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKEdTdHJl
YW1lckNhcHR1cmVEZXZpY2UgZGV2aWNlKQotICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoZGV2aWNl
LCBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLCAicmF0ZSIsIEdf
VFlQRV9JTlQsIEF1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51bGxwdHIpKSkKKyAgICA6IEdTdHJl
YW1lckNhcHR1cmVyKGRldmljZSwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlv
L3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBzX2F1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51
bGxwdHIpKSkKIHsKIH0KIAogR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9D
YXB0dXJlcigpCi0gICAgOiBHU3RyZWFtZXJDYXB0dXJlcigiYXBwc3JjIiwgYWRvcHRHUmVmKGdz
dF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBBdWRp
b0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6
Ok1pY3JvcGhvbmUpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcigiYXBwc3JjIiwgYWRvcHRHUmVm
KGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBz
X2F1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51bGxwdHIpKSwgQ2FwdHVyZURldmljZTo6RGV2aWNl
VHlwZTo6TWljcm9waG9uZSkKIHsKIH0KIAogR3N0RWxlbWVudCogR1N0cmVhbWVyQXVkaW9DYXB0
dXJlcjo6Y3JlYXRlQ29udmVydGVyKCkKIHsKLSAgICByZXR1cm4gbWFrZUdTdHJlYW1lckJpbigi
YXVkaW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSIsIHRydWUpOworICAgIGF1dG8qIGJpbiA9IGdz
dF9iaW5fbmV3KG51bGxwdHIpOworICAgIGF1dG8qIGF1ZGlvY29udmVydCA9IGdzdF9lbGVtZW50
X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgbnVsbHB0cik7CisgICAgYXV0byogYXVkaW9y
ZXNhbXBsZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9yZXNhbXBsZSIsIG51bGxw
dHIpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKGJpbiksIGF1ZGlvY29udmVy
dCwgYXVkaW9yZXNhbXBsZSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfbGluayhhdWRpb2Nv
bnZlcnQsIGF1ZGlvcmVzYW1wbGUpOworCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisgICAg
aWYgKGF1dG8qIHdlYnJ0Y2RzcCA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJ3ZWJydGNkc3AiLCBu
dWxscHRyKSkgeworICAgICAgICBnX29iamVjdF9zZXQod2VicnRjZHNwLCAiZWNoby1jYW5jZWwi
LCBmYWxzZSwgInZvaWNlLWRldGVjdGlvbiIsIHRydWUsIG51bGxwdHIpOworICAgICAgICBnc3Rf
YmluX2FkZChHU1RfQklOX0NBU1QoYmluKSwgd2VicnRjZHNwKTsKKyAgICAgICAgZ3N0X2VsZW1l
bnRfbGluayh3ZWJydGNkc3AsIGF1ZGlvY29udmVydCk7CisgICAgfQorI2VuZGlmCisKKyAgICBp
ZiAoYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZChHU1RfQklO
X0NBU1QoYmluKSwgR1NUX1BBRF9TUkMpKSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChH
U1RfRUxFTUVOVF9DQVNUKGJpbiksIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQuZ2V0KCkp
KTsKKyAgICBpZiAoYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2Jpbl9maW5kX3VubGlua2VkX3Bh
ZChHU1RfQklOX0NBU1QoYmluKSwgR1NUX1BBRF9TSU5LKSkpCisgICAgICAgIGdzdF9lbGVtZW50
X2FkZF9wYWQoR1NUX0VMRU1FTlRfQ0FTVChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldygic2luayIs
IHBhZC5nZXQoKSkpOworCisgICAgcmV0dXJuIGJpbjsKIH0KIAogYm9vbCBHU3RyZWFtZXJBdWRp
b0NhcHR1cmVyOjpzZXRTYW1wbGVSYXRlKGludCBzYW1wbGVSYXRlKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1
cmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJDYXB0dXJlci5jcHAKaW5kZXggYzllMGQ1ZWI2MGUyYmMzOGVmM2E5YTVkNTMyYzQz
ODgwMTA5NmY0ZS4uMTk2MTY2NzE4ZDgyNTZmMzQwMmU5YmUyZjYxMTg0MTQyNGRhYTFjZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckNhcHR1cmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAg
R3N0RWxlbWVudCogR1N0cmVhbWVyQ2FwdHVyZXI6OmNyZWF0ZVNvdXJjZSgpCiAgICAgICAgIG1f
c3JjID0gbWFrZUVsZW1lbnQobV9zb3VyY2VGYWN0b3J5KTsKICAgICAgICAgQVNTRVJUKG1fc3Jj
KTsKICAgICAgICAgaWYgKEdTVF9JU19BUFBfU1JDKG1fc3JjLmdldCgpKSkKLSAgICAgICAgICAg
IGdfb2JqZWN0X3NldChtX3NyYy5nZXQoKSwgImlzLWxpdmUiLCB0cnVlLCAiZm9ybWF0IiwgR1NU
X0ZPUk1BVF9USU1FLCBudWxscHRyKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3NyYy5n
ZXQoKSwgImlzLWxpdmUiLCB0cnVlLCAiZm9ybWF0IiwgR1NUX0ZPUk1BVF9USU1FLCAiZG8tdGlt
ZXN0YW1wIiwgdHJ1ZSwgbnVsbHB0cik7CiAKICAgICAgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9zcmMuZ2V0KCksICJzcmMiKSk7CiAgICAg
ICAgIGlmIChtX2RldmljZVR5cGUgPT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJh
KSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mYTFkZTUyYmQ1ODE5NGM3Mzc2YTZhMWE0ZjNmZmU0ZGVkYzFhNzJhCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc2IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRD
KSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitH
U3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5k
Ojp+R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK2Jvb2wgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmNhbkluc2VydERUTUYoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdT
dHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpwbGF5VG9uZShjb25zdCBTdHJpbmcmLCBzaXplX3Qs
IHNpemVfdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgR1N0cmVhbWVy
RFRNRlNlbmRlckJhY2tlbmQ6OnRvbmVzKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiB7IH07Cit9CisKK3NpemVfdCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2Vu
ZDo6ZHVyYXRpb24oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IDA7Cit9CisKK3NpemVfdCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6aW50ZXJUb25lR2Fw
KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2
b2lkIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpvblRvbmVQbGF5ZWQoRnVuY3Rpb248dm9p
ZChjb25zdCBTdHJpbmcmKT4mJiBvblRvbmVQbGF5ZWQpCit7CisgICAgbV9vblRvbmVQbGF5ZWQg
PSBXVEZNb3ZlKG9uVG9uZVBsYXllZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
YzU3OTcwNTBjZWM5YjRiMGFhNmQ5ZWZlOTgwOGFlNWM5MDg4ZmIzMwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJEVE1GU2VuZGVyQmFja2VuZC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUlRDRFRNRlNlbmRlckJhY2tlbmQuaCIK
KyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVz
ZSBlYWdlciBpbml0aWFsaXphdGlvbiBmb3IgdGhlIFdlYWtQdHJGYWN0b3J5IHNpbmNlIHdlIGNh
bGwgbWFrZVdlYWtQdHIoKSBmcm9tIGFub3RoZXIgdGhyZWFkLgorY2xhc3MgR1N0cmVhbWVyRFRN
RlNlbmRlckJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDRFRNRlNlbmRlckJhY2tlbmQsIHB1Ymxp
YyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCwgV2Vha1B0ckZhY3Rv
cnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsK
K3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCgpOworICAg
IH5HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0RU
TUZTZW5kZXJCYWNrZW5kCisgICAgYm9vbCBjYW5JbnNlcnREVE1GKCkgZmluYWw7CisgICAgdm9p
ZCBwbGF5VG9uZShjb25zdCBTdHJpbmcmIHRvbmUsIHNpemVfdCBkdXJhdGlvbiwgc2l6ZV90IGlu
dGVyVG9uZUdhcCkgZmluYWw7CisgICAgdm9pZCBvblRvbmVQbGF5ZWQoRnVuY3Rpb248dm9pZChj
b25zdCBTdHJpbmcmKT4mJikgZmluYWw7CisgICAgU3RyaW5nIHRvbmVzKCkgY29uc3QgZmluYWw7
CisgICAgc2l6ZV90IGR1cmF0aW9uKCkgY29uc3QgZmluYWw7CisgICAgc2l6ZV90IGludGVyVG9u
ZUdhcCgpIGNvbnN0IGZpbmFsOworCisgICAgRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4g
bV9vblRvbmVQbGF5ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVk
aWFTdHJlYW1Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAppbmRleCA0YTg3ZDJhODIz
MGFlMWExZDQxY2RjMDZhMTg2NDVlMTVjYjc2N2MxLi45NWU3YzBkNGQ1ZjQ2NTRkNzQyY2NmZDU0
YzQ3YTY2MzUwMmQzMmViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRp
YVN0cmVhbVNvdXJjZS5jcHAKQEAgLTM0LDE3ICszNCwyMyBAQAogI2luY2x1ZGUgIlZpZGVvRnJh
bWVNZXRhZGF0YUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlTWVkaWFT
dHJlYW0uaCIKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1l
SW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorI2VuZGlmCisKICNpbmNsdWRlIDxnc3QvYXBwL2dz
dGFwcHNyYy5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGZsb3djb21iaW5lci5oPgogI2luY2x1
ZGUgPHd0Zi9VVUlELmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KIAogdXNpbmcg
bmFtZXNwYWNlIFdlYkNvcmU7CiAKIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB2aWRlb1Ny
Y1RlbXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInZpZGVvX3NyYyV1IiwgR1NUX1BB
RF9TUkMsIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQUygidmlkZW8veC1y
YXc7dmlkZW8veC1oMjY0O3ZpZGVvL3gtdnA4IikpOworICAgIEdTVF9TVEFUSUNfQ0FQUygidmlk
ZW8veC1yYXc7dmlkZW8veC1oMjY0O3ZpZGVvL3gtdnA4O3ZpZGVvL3gtdnA5O2FwcGxpY2F0aW9u
L3gtcnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvIikpOwogCiBzdGF0aWMgR3N0U3RhdGljUGFkVGVt
cGxhdGUgYXVkaW9TcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJhdWRpb19z
cmMldSIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NB
UFMoImF1ZGlvL3gtcmF3KEFOWSk7IikpOworICAgIEdTVF9TVEFUSUNfQ0FQUygiYXVkaW8veC1y
YXcoQU5ZKTthcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbyIpKTsKIAogR1NU
X0RFQlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnKTsKICNkZWZp
bmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdE1lZGlhU3RyZWFtU3JjRGVidWcKQEAgLTIzNiw3ICsy
NDIsNyBAQCBwdWJsaWM6CiAKICAgICAgICAgaWYgKGRyb3ApIHsKICAgICAgICAgICAgIG1fbmVl
ZHNEaXNjb250ID0gdHJ1ZTsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChtX3NyYy5nZXQo
KSwgIiVzIHF1ZXVlIGZ1bGwgYWxyZWFkeS4uLiBub3QgcHVzaGluZyIsIG1fdHJhY2suaGFzVmlk
ZW8oKSA/ICJWaWRlbyIgOiAiQXVkaW8iKTsKKyAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1Qo
bV9zcmMuZ2V0KCksICIlcyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4gbm90IHB1c2hpbmciLCBtX3Ry
YWNrLmhhc1ZpZGVvKCkgPyAiVmlkZW8iIDogIkF1ZGlvIik7CiAgICAgICAgICAgICByZXR1cm47
CiAgICAgICAgIH0KIApAQCAtNjg4LDYgKzY5NCw3IEBAIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1T
cmNBZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1UcmFja1By
CiAgICAgY29uc3QgY2hhciogc291cmNlVHlwZTsKICAgICB1bnNpZ25lZCBjb3VudGVyOwogICAg
IEdzdFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZTsKKwogICAgIGlmICh0cmFjay0+aGFz
QXVkaW8oKSkgewogICAgICAgICBwYWRUZW1wbGF0ZSA9ICZhdWRpb1NyY1RlbXBsYXRlOwogICAg
ICAgICBzb3VyY2VUeXBlID0gImF1ZGlvIjsKQEAgLTY5OSw5ICs3MDYsMTkgQEAgdm9pZCB3ZWJr
aXRNZWRpYVN0cmVhbVNyY0FkZFRyYWNrKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRp
YVN0cmVhbVRyYWNrUHIKICAgICAgICAgY291bnRlciA9IHNlbGYtPnByaXYtPnZpZGVvUGFkQ291
bnRlci5leGNoYW5nZUFkZCgxKTsKICAgICB9CiAKLSAgICBhdXRvIHBhZE5hbWUgPSBtYWtlU3Ry
aW5nKHNvdXJjZVR5cGUsICJfc3JjIiwgY291bnRlcik7CisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisgICAgaWYgKHRyYWNrLT5zb3VyY2UoKS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkgewor
ICAgICAgICBhdXRvJiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXImPih0cmFjay0+c291cmNlKCkpOworICAgICAgICBzb3VyY2UucmVnaXN0
ZXJDbGllbnQoKTsKKyAgICB9IGVsc2UgaWYgKHRyYWNrLT5zb3VyY2UoKS5pc0luY29taW5nVmlk
ZW9Tb3VyY2UoKSkgeworICAgICAgICBhdXRvJiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXImPih0cmFjay0+c291cmNlKCkpOworICAgICAg
ICBzb3VyY2UucmVnaXN0ZXJDbGllbnQoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIEdTVF9ERUJV
R19PQkpFQ1Qoc2VsZiwgIlNldHVwICVzIHNvdXJjZSBmb3IgdHJhY2sgJXMsIG9ubHkgdHJhY2s6
ICVzIiwgc291cmNlVHlwZSwgdHJhY2stPmlkKCkudXRmOCgpLmRhdGEoKSwgYm9vbEZvclByaW50
aW5nKG9ubHlUcmFjaykpOwogCisgICAgYXV0byBwYWROYW1lID0gbWFrZVN0cmluZyhzb3VyY2VU
eXBlLCAiX3NyYyIsIGNvdW50ZXIpOwogICAgIGF1dG8gc291cmNlID0gbWFrZVVuaXF1ZTxJbnRl
cm5hbFNvdXJjZT4oR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgKnRyYWNrLCBwYWROYW1lKTsKICAg
ICBhdXRvKiBlbGVtZW50ID0gc291cmNlLT5nZXQoKTsKICAgICBnc3RfYmluX2FkZChHU1RfQklO
X0NBU1Qoc2VsZiksIGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9F
bmNvZGVyLmNwcAppbmRleCBmYWM0NzA1ZmI4YTdjZjJkYzIzZWE1MTFiMTVmY2Y0ODU1MmNmMzNh
Li5hNzZlZjFlZmZkMTZmYTI2YjZkZTM1NzRmNDY0ZjVkMjMzYzk1ZWZlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlk
ZW9FbmNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcApAQCAtMjk3LDkgKzI5NywxMSBAQCBz
dGF0aWMgdm9pZCB3ZWJraXRfd2VicnRjX3ZpZGVvX2VuY29kZXJfY2xhc3NfaW5pdChXZWJLaXRX
ZWJydGNWaWRlb0VuY29kZXJDbGFzcwogICAgICAgICAgICAgZ19vYmplY3Rfc2V0KHNlbGYtPnBy
aXYtPnBhcnNlci5nZXQoKSwgImNvbmZpZy1pbnRlcnZhbCIsIDEsIG51bGxwdHIpOwogICAgICAg
ICB9LCAidGFyZ2V0LWJpdHJhdGUiLCBzZXRCaXRyYXRlQml0UGVyU2VjLCAiaW50ZXJ2YWwtaW50
cmFmcmFtZXMiKTsKICAgICBFbmNvZGVyczo6cmVnaXN0ZXJFbmNvZGVyKFgyNjQsICJ4MjY0ZW5j
IiwgImgyNjRwYXJzZSIsICJ2aWRlby94LWgyNjQiLAotICAgICAgICAidmlkZW8veC1oMjY0LGFs
aWdubWVudD1hdSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFtLHByb2ZpbGU9YmFzZWxpbmUiLAor
ICAgICAgICAidmlkZW8veC1oMjY0LGFsaWdubWVudD1hdSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3Ry
ZWFtLHByb2ZpbGU9Y29uc3RyYWluZWQtYmFzZWxpbmUiLAogICAgICAgICBbXShXZWJLaXRXZWJy
dGNWaWRlb0VuY29kZXIqIHNlbGYpIHsKICAgICAgICAgICAgIGdzdF91dGlsX3NldF9vYmplY3Rf
YXJnKEdfT0JKRUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAidHVuZSIsICJ6ZXJvbGF0
ZW5jeSIpOworICAgICAgICAgICAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1Qoc2Vs
Zi0+cHJpdi0+ZW5jb2Rlci5nZXQoKSksICJzcGVlZC1wcmVzZXQiLCAidWx0cmFmYXN0Iik7Cisg
ICAgICAgICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2VsZi0+cHJpdi0+ZW5jb2Rlci5nZXQo
KSksICJrZXktaW50LW1heCIsIDE1LCBOVUxMKTsKICAgICAgICAgICAgIGdfb2JqZWN0X3NldChz
ZWxmLT5wcml2LT5wYXJzZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRyKTsK
ICAgICAgICAgfSwgImJpdHJhdGUiLCBzZXRCaXRyYXRlS2JpdFBlclNlYywgImtleS1pbnQtbWF4
Iik7CiAgICAgRW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihPcGVuSDI2NCwgIm9wZW5oMjY0ZW5j
IiwgImgyNjRwYXJzZSIsICJ2aWRlby94LWgyNjQiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi41NmY1NWEyZDVmYTNiMDU3OGY1NDE4MDI2ZmY5ODU5OGJlZGJhNTYzCi0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSw3MyBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisj
aWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0RhdGEuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpSZWFsdGlt
ZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoU3RyaW5nJiYgYXVkaW9UcmFja0lkKQorICAg
IDogUmVhbHRpbWVNZWRpYVNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbywg
V1RGTW92ZShhdWRpb1RyYWNrSWQpKQorICAgICwgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJl
YW1lcigpCit7CisgICAgc3RhcnQoKTsKK30KKworUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
R1N0cmVhbWVyOjp+UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKCkKK3sKKyAg
ICBzdG9wKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
OjpzdGFydFByb2R1Y2luZ0RhdGEoKQoreworICAgIG9wZW5WYWx2ZSgpOworfQorCit2b2lkIFJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c3RvcFByb2R1Y2luZ0RhdGEoKQor
eworICAgIGNsb3NlVmFsdmUoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFi
aWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpjYXBhYmlsaXRp
ZXMoKQoreworICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjplbXB0
eUNhcGFiaWxpdGllcygpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mm
IFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MoKQoreworICAg
IHJldHVybiBtX2N1cnJlbnRTZXR0aW5nczsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmIGdz
dFNhbXBsZSkKK3sKKyAgICBhdXRvKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoZ3N0
U2FtcGxlLmdldCgpKTsKKyAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGRlc2Ny
aXB0aW9uOworICAgIEdTdHJlYW1lckF1ZGlvRGF0YSBmcmFtZXMoV1RGTW92ZShnc3RTYW1wbGUp
LCBkZXNjcmlwdGlvbi5nZXRJbmZvKCkpOworCisgICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1l
ZGlhVGltZShHU1RfVElNRV9BU19VU0VDT05EUyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSwgR19V
U0VDX1BFUl9TRUMpLCBmcmFtZXMsIGRlc2NyaXB0aW9uLCAwKTsKK30KKworfQorCisjZW5kaWYg
Ly8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjY2OGRi
NTNiY2Y5YzE2ZDMwMWI4MTcyZTY4YjE5MTg5MDdmZGFlYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oIgorI2lu
Y2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVhbHRp
bWVNZWRpYVNvdXJjZSwgcHVibGljIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVh
bWVyPiBjcmVhdGUoU3RyaW5nJiYgYXVkaW9UcmFja0lkKSB7IHJldHVybiBhZG9wdFJlZigqbmV3
IFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKGF1ZGlvVHJhY2tJ
ZCkpKTsgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0
cmVhbWVyKFN0cmluZyYmKTsKKyAgICB+UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVh
bWVyKCk7CisKK3ByaXZhdGU6CisgICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZSBBUEkKKyAgICB2
b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0Rh
dGEoKSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBj
YXBhYmlsaXRpZXMoKSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MmIHNldHRpbmdzKCkgZmluYWw7CisgICAgYm9vbCBpc0luY29taW5nQXVkaW9Tb3VyY2UoKSBj
b25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBSZWFsdGltZUluY29taW5nU291
cmNlR1N0cmVhbWVyIEFQSQorICAgIHZvaWQgZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1w
bGU+JiYpIGZpbmFsOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fY3VycmVu
dFNldHRpbmdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZ
UEVfVFJBSVRTX0JFR0lOKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcikKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRp
YVNvdXJjZSYgc291cmNlKSB7IHJldHVybiBzb3VyY2UuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCk7
IH0KK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdT
b3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0YjE2NTQyYjc3NTEwMmQyNmYxNWQyMGU2
ZmVmNWUzM2M5ZWRkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5j
cHAKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2Fs
aWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAi
UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiTWVkaWFTYW1w
bGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KKyNpbmNsdWRl
IDx3dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJr
aXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtp
dF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGlt
ZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
KCkKK3sKKyAgICBtX2JpbiA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOworICAgIG1fdmFsdmUgPSBn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInZhbHZlIiwgbnVsbHB0cik7CisgICAgbV90ZWUgPSBn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInRlZSIsIG51bGxwdHIpOworICAgIGdfb2JqZWN0X3Nl
dChtX3RlZS5nZXQoKSwgImFsbG93LW5vdC1saW5rZWQiLCB0cnVlLCBudWxscHRyKTsKKworICAg
IGF1dG8qIHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIp
OworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV92YWx2
ZS5nZXQoKSwgcXVldWUsIG1fdGVlLmdldCgpLCBudWxscHRyKTsKKworICAgIGdzdF9lbGVtZW50
X2xpbmtfbWFueShtX3ZhbHZlLmdldCgpLCBxdWV1ZSwgbV90ZWUuZ2V0KCksIG51bGxwdHIpOwor
ICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV92YWx2ZS5nZXQoKSk7Cisg
ICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChxdWV1ZSk7CisgICAgZ3N0X2Vs
ZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChtX3RlZS5nZXQoKSk7CisKKyAgICBhdXRvIHNp
bmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV92YWx2ZS5nZXQo
KSwgInNpbmsiKSk7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChtX2Jpbi5nZXQoKSwgZ3N0X2do
b3N0X3BhZF9uZXcoInNpbmsiLCBzaW5rUGFkLmdldCgpKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6Y2xvc2VWYWx2ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1f
dmFsdmUpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3ZhbHZlLmdldCgpLCAiZHJvcCIsIHRydWUs
IG51bGxwdHIpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6Om9w
ZW5WYWx2ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fdmFsdmUpCisgICAgICAgIGdfb2JqZWN0X3Nl
dChtX3ZhbHZlLmdldCgpLCAiZHJvcCIsIGZhbHNlLCBudWxscHRyKTsKK30KKwordm9pZCBSZWFs
dGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpyZWdpc3RlckNsaWVudCgpCit7CisgICAgR1NU
X0RFQlVHKCJSZWdpc3RlcmluZyBuZXcgY2xpZW50Iik7CisgICAgYXV0byogcXVldWUgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoInF1ZXVlIiwgbnVsbHB0cik7CisgICAgYXV0byogc2luayA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc2luayIsIG51bGxwdHIpOworICAgIGdfb2Jq
ZWN0X3NldChzaW5rLCAiZW5hYmxlLWxhc3Qtc2FtcGxlIiwgRkFMU0UsICJlbWl0LXNpZ25hbHMi
LCBUUlVFLCAibWF4LWJ1ZmZlcnMiLCAxLCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0
X3N3YXBwZWQoc2luaywgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKCtbXShSZWFsdGltZUluY29t
aW5nU291cmNlR1N0cmVhbWVyKiBzZWxmLCBHc3RFbGVtZW50KiBzaW5rKSAtPiBHc3RGbG93UmV0
dXJuIHsKKyAgICAgICAgYXV0byBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxf
c2FtcGxlKEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgICAgICBzZWxmLT5kaXNwYXRjaFNhbXBs
ZShXVEZNb3ZlKHNhbXBsZSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfSks
IHRoaXMpOworCisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKHNpbmssICJuZXctcHJlcm9s
bCIsIEdfQ0FMTEJBQ0soK1tdKFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIqIHNlbGYs
IEdzdEVsZW1lbnQqIHNpbmspIC0+IEdzdEZsb3dSZXR1cm4geworICAgICAgICBhdXRvIHNhbXBs
ZSA9IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfcHVsbF9wcmVyb2xsKEdTVF9BUFBfU0lOSyhzaW5r
KSkpOworICAgICAgICBzZWxmLT5kaXNwYXRjaFNhbXBsZShXVEZNb3ZlKHNhbXBsZSkpOworICAg
ICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfSksIHRoaXMpOworCisgICAgZ3N0X2Jpbl9h
ZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBxdWV1ZSwgc2luaywgbnVsbHB0cik7
CisgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KG1fdGVlLmdldCgpLCBxdWV1ZSwgc2luaywgbnVs
bHB0cik7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChxdWV1ZSk7Cisg
ICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChzaW5rKTsKKworICAgIGF1dG8g
ZG90RmlsZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX2Jpbi5nZXQoKSksICIu
aW5jb21pbmciKTsKKyAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJ
Tl9DQVNUKG1fYmluLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkb3RGaWxlTmFt
ZS51dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDY0YzQ5NzBjY2I4ZDEx
Yjc5YTVjMjBkN2YxMzUyZTZmNGFmYmIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVk
ZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJl
YWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgeworcHVibGljOgorICAgIEdzdEVsZW1lbnQq
IGJpbigpIHsgcmV0dXJuIG1fYmluLmdldCgpOyB9CisgICAgdm9pZCByZWdpc3RlckNsaWVudCgp
OworCitwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcigpOwor
CisgICAgdm9pZCBjbG9zZVZhbHZlKCkgY29uc3Q7CisgICAgdm9pZCBvcGVuVmFsdmUoKSBjb25z
dDsKKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92YWx2ZTsKKworcHJpdmF0ZToKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYpIHsgfQorCisg
ICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2JpbjsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1f
dGVlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNkNjhlZTViOTEyNmJl
NmU3ZTgwMmZiMmJkMWM2YTg5NWM0ZDUzN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDEwNyBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgi
CisKKyNpbmNsdWRlICJNZWRpYVNhbXBsZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlZpZGVvRnJh
bWVNZXRhZGF0YUdTdHJlYW1lci5oIgorI2luY2x1ZGUgPGdzdC9ydHAvcnRwLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoU3RyaW5nJiYgdmlkZW9UcmFja0lk
KQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpW
aWRlbywgV1RGTW92ZSh2aWRlb1RyYWNrSWQpKQorICAgICwgUmVhbHRpbWVJbmNvbWluZ1NvdXJj
ZUdTdHJlYW1lcigpCit7CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFp
bnRzIGNvbnN0cmFpbnRzOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzV2lkdGgodHJ1ZSk7
CisgICAgY29uc3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7CisgICAgbV9jdXJyZW50
U2V0dGluZ3MgPSBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgeyB9OworICAgIG1fY3VycmVu
dFNldHRpbmdzLT5zZXRTdXBwb3J0ZWRDb25zdHJhaW50cyhXVEZNb3ZlKGNvbnN0cmFpbnRzKSk7
CisKKyAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19w
YWQobV92YWx2ZS5nZXQoKSwgInNpbmsiKSk7CisgICAgZ3N0X3BhZF9hZGRfcHJvYmUoc2lua1Bh
ZC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0UGFkUHJvYmVUeXBlPihHU1RfUEFEX1BST0JFX1RZUEVf
QlVGRkVSKSwgW10oR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZvLCBncG9pbnRlcikgLT4g
R3N0UGFkUHJvYmVSZXR1cm4geworICAgICAgICBhdXRvIHZpZGVvU2FtcGxlTWV0YWRhdGEgPSBz
dGQ6Om1ha2Vfb3B0aW9uYWw8VmlkZW9TYW1wbGVNZXRhZGF0YT4oeyB9KTsKKyAgICAgICAgdmlk
ZW9TYW1wbGVNZXRhZGF0YS0+cmVjZWl2ZVRpbWUgPSBNb25vdG9uaWNUaW1lOjpub3coKS5zZWNv
bmRzU2luY2VFcG9jaCgpOworCisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IEdTVF9CVUZGRVJfQ0FT
VChHU1RfUEFEX1BST0JFX0lORk9fREFUQShpbmZvKSk7CisgICAgICAgIEdzdFJUUEJ1ZmZlciBy
dHBCdWZmZXIgR1NUX1JUUF9CVUZGRVJfSU5JVDsKKyAgICAgICAgaWYgKGdzdF9ydHBfYnVmZmVy
X21hcChidWZmZXIsIEdTVF9NQVBfUkVBRCwgJnJ0cEJ1ZmZlcikpIHsKKyAgICAgICAgICAgIHZp
ZGVvU2FtcGxlTWV0YWRhdGEtPnJ0cFRpbWVzdGFtcCA9IGdzdF9ydHBfYnVmZmVyX2dldF90aW1l
c3RhbXAoJnJ0cEJ1ZmZlcik7CisgICAgICAgICAgICBnc3RfcnRwX2J1ZmZlcl91bm1hcCgmcnRw
QnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIgPSB3ZWJraXRHc3RCdWZmZXJTZXRW
aWRlb1NhbXBsZU1ldGFkYXRhKGJ1ZmZlciwgV1RGTW92ZSh2aWRlb1NhbXBsZU1ldGFkYXRhKSk7
CisgICAgICAgIEdTVF9QQURfUFJPQkVfSU5GT19EQVRBKGluZm8pID0gYnVmZmVyOworICAgICAg
ICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAgICB9LCBudWxscHRyLCBudWxscHRyKTsKKwor
ICAgIHN0YXJ0KCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyOjpzdGFydFByb2R1Y2luZ0RhdGEoKQoreworICAgIG9wZW5WYWx2ZSgpOworfQorCit2b2lk
IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c3RvcFByb2R1Y2luZ0RhdGEo
KQoreworICAgIGNsb3NlVmFsdmUoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNh
cGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjYXBhYmls
aXRpZXMoKQoreworICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjpl
bXB0eUNhcGFiaWxpdGllcygpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGlu
Z3MmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MoKQorewor
ICAgIGlmIChtX2N1cnJlbnRTZXR0aW5ncykKKyAgICAgICAgcmV0dXJuIG1fY3VycmVudFNldHRp
bmdzLnZhbHVlKCk7CisKKyAgICBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWlu
dHMgY29uc3RyYWludHM7CisgICAgY29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsK
KyAgICBjb25zdHJhaW50cy5zZXRTdXBwb3J0c0hlaWdodCh0cnVlKTsKKworICAgIFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBhdXRvJiBzaXplID0gdGhpcy0+c2l6
ZSgpOworICAgIHNldHRpbmdzLnNldFdpZHRoKHNpemUud2lkdGgoKSk7CisgICAgc2V0dGluZ3Mu
c2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOworICAgIHNldHRpbmdzLnNldFN1cHBvcnRlZENvbnN0
cmFpbnRzKGNvbnN0cmFpbnRzKTsKKworICAgIG1fY3VycmVudFNldHRpbmdzID0gV1RGTW92ZShz
ZXR0aW5ncyk7CisgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVlKCk7Cit9CisKK3Zv
aWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXR0aW5nc0RpZENoYW5n
ZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPiBzZXR0aW5ncykK
K3sKKyAgICBpZiAoc2V0dGluZ3MuY29udGFpbnNBbnkoeyBSZWFsdGltZU1lZGlhU291cmNlU2V0
dGluZ3M6OkZsYWc6OldpZHRoLCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6Okhl
aWdodCB9KSkKKyAgICAgICAgbV9jdXJyZW50U2V0dGluZ3MgPSBzdGQ6Om51bGxvcHQ7Cit9CisK
K3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBs
ZShHUmVmUHRyPEdzdFNhbXBsZT4mJiBnc3RTYW1wbGUpCit7CisgICAgdmlkZW9TYW1wbGVBdmFp
bGFibGUoTWVkaWFTYW1wbGVHU3RyZWFtZXI6OmNyZWF0ZVdyYXBwZWRTYW1wbGUoZ3N0U2FtcGxl
KSwgeyB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTliYzMwMDY5Y2QzMzIw
OTIzMThiYmY3NzhhYjkzZDkxODQ4MzFmYgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU4IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisj
aW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lTWVkaWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVhbHRpbWVNZWRpYVNv
dXJjZSwgcHVibGljIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgeworcHVibGljOgor
ICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiBjcmVh
dGUoU3RyaW5nJiYgdmlkZW9UcmFja0lkKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKHZpZGVvVHJhY2tJZCkpKTsgfQor
ICAgIH5SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoKSA9IGRlZmF1bHQ7CisK
K3Byb3RlY3RlZDoKKyAgICBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoU3Ry
aW5nJiYpOworCitwcml2YXRlOgorICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2UgQVBJCisgICAg
dm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQcm9kdWNpbmdE
YXRhKCkgIGZpbmFsOworICAgIHZvaWQgc2V0dGluZ3NEaWRDaGFuZ2UoT3B0aW9uU2V0PFJlYWx0
aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4pIGZpbmFsOworICAgIGNvbnN0IFJlYWx0aW1l
TWVkaWFTb3VyY2VDYXBhYmlsaXRpZXMmIGNhcGFiaWxpdGllcygpIGZpbmFsOworICAgIGNvbnN0
IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyYgc2V0dGluZ3MoKSBmaW5hbDsKKyAgICBib29s
IGlzSW5jb21pbmdWaWRlb1NvdXJjZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIHRydWU7IH0KKwor
ICAgIC8vIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgQVBJCisgICAgdm9pZCBkaXNw
YXRjaFNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJikgZmluYWw7CisKKyAgICBzdGQ6Om9wdGlv
bmFsPFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncz4gbV9jdXJyZW50U2V0dGluZ3M7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKK1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfQkVHSU4o
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKQorICAgIHN0YXRp
YyBib29sIGlzVHlwZShjb25zdCBXZWJDb3JlOjpSZWFsdGltZU1lZGlhU291cmNlJiBzb3VyY2Up
IHsgcmV0dXJuIHNvdXJjZS5pc0luY29taW5nVmlkZW9Tb3VyY2UoKTsgfQorU1BFQ0lBTElaRV9U
WVBFX1RSQUlUU19FTkQoKQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJlY2RjNWFiZGUyZjE0YzgzNzMzNWRmNmJkYWY1MjY2
OTcyODhiZmQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNw
cApAQCAtMCwwICsxLDk2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxp
YSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJl
YW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50
ZWdlckNvbnZlcnNpb24uaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2Vi
cnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJy
dGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNlKQorICAgIDogUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBtX2FsbG93ZWRDYXBzID0g
YWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImFwcGxpY2F0aW9uL3gtcnRwIiwgIm1lZGlh
IiwgR19UWVBFX1NUUklORywgImF1ZGlvIiwKKyAgICAgICAgImVuY29kaW5nLW5hbWUiLCBHX1RZ
UEVfU1RSSU5HLCAiT1BVUyIsICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgNDgwMDAsIG51bGxw
dHIpKTsKKworICAgIG1fYXVkaW9jb252ZXJ0ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJh
dWRpb2NvbnZlcnQiLCBudWxscHRyKTsKKyAgICBtX2F1ZGlvcmVzYW1wbGUgPSBnc3RfZWxlbWVu
dF9mYWN0b3J5X21ha2UoImF1ZGlvcmVzYW1wbGUiLCBudWxscHRyKTsKKworICAgIG1fZW5jb2Rl
ciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJvcHVzZW5jIiwgbnVsbHB0cik7CisgICAgaWYgKCFt
X2VuY29kZXIpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBFbmFibGUgZHR4IHRv
bz8KKyAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVChtX2VuY29kZXIuZ2V0KCkp
LCAiYXVkaW8tdHlwZSIsICJ2b2ljZSIpOworCisgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVh
bWVyRWxlbWVudCgicnRwb3B1c3BheSIsIG51bGxwdHIpOworICAgIGlmICghbV9wYXlsb2FkZXIp
CisgICAgICAgIHJldHVybjsKKworICAgIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwg
ImF1dG8taGVhZGVyLWV4dGVuc2lvbiIsIEZBTFNFLCBudWxscHRyKTsKKworICAgIGdzdF9iaW5f
YWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV9hdWRpb2NvbnZlcnQuZ2V0KCks
IG1fYXVkaW9yZXNhbXBsZS5nZXQoKSwgbV9lbmNvZGVyLmdldCgpLCBtX3BheWxvYWRlci5nZXQo
KSwgbnVsbHB0cik7CisgICAgc2V0U291cmNlKFdURk1vdmUoc291cmNlKSk7Cit9CisKK2Jvb2wg
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzZXRQYXlsb2FkVHlwZShjb25z
dCBHUmVmUHRyPEdzdENhcHM+JiBjYXBzKQoreworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9iaW4u
Z2V0KCksICJPdXRnb2luZyBhdWRpbyBzb3VyY2UgcGF5bG9hZCBjYXBzOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgY2Fwcy5nZXQoKSk7CisgICAgYXV0byogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0
cnVjdHVyZShjYXBzLmdldCgpLCAwKTsKKyAgICBpZiAoY29uc3QgY2hhciogZW5jb2RpbmdOYW1l
ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImVuY29kaW5nLW5hbWUiKSkg
eworICAgICAgICBpZiAoIWVxdWFsKGVuY29kaW5nTmFtZSwgIk9QVVMiKSkgeworICAgICAgICAg
ICAgR1NUX0VSUk9SX09CSkVDVChtX2Jpbi5nZXQoKSwgIlVuc3VwcG9ydGVkIG91dGdvaW5nIGF1
ZGlvIGVuY29kaW5nOiAlcyIsIGVuY29kaW5nTmFtZSk7CisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1f
YmluLmdldCgpLCAiZW5jb2RpbmctbmFtZSBub3QgZm91bmQiKTsKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgIH0KKworICAgIGlmIChjb25zdCBjaGFyKiB1c2VJbmJhbmRGZWMgPSBnc3Rfc3Ry
dWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAidXNlaW5iYW5kZmVjIikpIHsKKyAgICAgICAg
aWYgKCFzdHJjbXAodXNlSW5iYW5kRmVjLCAiMSIpKQorICAgICAgICAgICAgZ19vYmplY3Rfc2V0
KG1fZW5jb2Rlci5nZXQoKSwgImluYmFuZC1mZWMiLCB0cnVlLCBudWxscHRyKTsKKyAgICB9CisK
KyAgICBpZiAoY29uc3QgY2hhciogbWluUFRpbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmco
c3RydWN0dXJlLCAibWlucHRpbWUiKSkgeworICAgICAgICBTdHJpbmcgdGltZShtaW5QVGltZSk7
CisgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyQWxsb3dpbmdUcmFpbGluZ0p1
bms8aW50NjRfdD4odGltZSkpCisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIu
Z2V0KCksICJtaW4tcHRpbWUiLCAqdmFsdWUgKiBHU1RfTVNFQ09ORCwgbnVsbHB0cik7CisgICAg
fQorCisgICAgaW50IHBheWxvYWRUeXBlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQo
c3RydWN0dXJlLCAicGF5bG9hZCIsICZwYXlsb2FkVHlwZSkpCisgICAgICAgIGdfb2JqZWN0X3Nl
dChtX3BheWxvYWRlci5nZXQoKSwgInB0IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIpOworCisgICAg
Z19vYmplY3Rfc2V0KG1fY2Fwc0ZpbHRlci5nZXQoKSwgImNhcHMiLCBjYXBzLmdldCgpLCBudWxs
cHRyKTsKKworICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX291dGdvaW5nU291cmNlLmdldCgp
LCBtX3ZhbHZlLmdldCgpLCBtX2F1ZGlvY29udmVydC5nZXQoKSwgbV9hdWRpb3Jlc2FtcGxlLmdl
dCgpLCBtX3ByZUVuY29kZXJRdWV1ZS5nZXQoKSwgbV9lbmNvZGVyLmdldCgpLCBtX3BheWxvYWRl
ci5nZXQoKSwgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmggYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRn
b2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzE5MDJiNWY2OTE0MjU0OGJh
MTdjNzA2MzQ3NjhlZTVhYzliNWJhMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuaApAQCAtMCwwICsxLDQ0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5j
bHVkZSAiUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVy
IGZpbmFsIDogcHVibGljIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXI+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgYXVkaW9Tb3VyY2UpIHsg
cmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVy
KFdURk1vdmUoYXVkaW9Tb3VyY2UpKSk7IH0KKworICAgIGJvb2wgc2V0UGF5bG9hZFR5cGUoY29u
c3QgR1JlZlB0cjxHc3RDYXBzPiYpIGZpbmFsOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQg
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFJlZjxNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZT4mJik7CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2F1ZGlv
Y29udmVydDsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYXVkaW9yZXNhbXBsZTsKK307CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlh
U291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YmJkNWYyZDhiNTdhYmUzNmU1NDE4YmNm
YTA3ZWNmZmI5MDdmNWFmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJl
YW1lci5jcHAKQEAgLTAsMCArMSwxNDkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXIuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVk
ZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3Vy
Y2UuaCIKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJy
dGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworR1NUX0RFQlVHX0NB
VEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NU
X0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpCit7CisgICAgbV9iaW4gPSBnc3RfYmluX25l
dyhudWxscHRyKTsKKworICAgIG1fdmFsdmUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInZh
bHZlIiwgbnVsbHB0cik7CisgICAgbV9wcmVFbmNvZGVyUXVldWUgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoInF1ZXVlIiwgbnVsbHB0cik7CisgICAgbV9wb3N0RW5jb2RlclF1ZXVlID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIG1fY2Fwc0ZpbHRl
ciA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIG51bGxwdHIpOworCisg
ICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3ZhbHZlLmdl
dCgpLCBtX3ByZUVuY29kZXJRdWV1ZS5nZXQoKSwKKyAgICAgICAgbV9wb3N0RW5jb2RlclF1ZXVl
LmdldCgpLCBtX2NhcHNGaWx0ZXIuZ2V0KCksIG51bGxwdHIpOworCisgICAgYXV0byBzcmNQYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9jYXBzRmlsdGVyLmdldCgp
LCAic3JjIikpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4uZ2V0KCksIGdzdF9naG9z
dF9wYWRfbmV3KCJzcmMiLCBzcmNQYWQuZ2V0KCkpKTsKK30KKworUmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyOjp+UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
KCkKK3sKKyAgICBzdG9wKCk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9iaW4uZ2V0
KCksIEdTVF9TVEFURV9OVUxMKTsKKyAgICBpZiAoYXV0byBwaXBlbGluZSA9IGFkb3B0R1JlZihn
c3RfZWxlbWVudF9nZXRfcGFyZW50KG1fYmluLmdldCgpKSkpCisgICAgICAgIGdzdF9iaW5fcmVt
b3ZlKEdTVF9CSU5fQ0FTVChwaXBlbGluZS5nZXQoKSksIG1fYmluLmdldCgpKTsKK30KKwordm9p
ZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFNvdXJjZShSZWY8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgbmV3U291cmNlKQoreworICAgIGlmIChtX3NvdXJjZSAm
JiAhbV9pbml0aWFsU2V0dGluZ3MpCisgICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV9zb3Vy
Y2UudmFsdWUoKS0+c2V0dGluZ3MoKTsKKworICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAgbV9z
b3VyY2UudmFsdWUoKS0+cmVtb3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fc291cmNlID0gV1RG
TW92ZShuZXdTb3VyY2UpOworICAgIGluaXRpYWxpemVGcm9tVHJhY2soKTsKK30KKwordm9pZCBS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0YXJ0KCkKK3sKKyAgICBtX3Nv
dXJjZS52YWx1ZSgpLT5hZGRPYnNlcnZlcigqdGhpcyk7CisgICAgbV9pc1N0b3BwZWQgPSBmYWxz
ZTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0b3Ao
KQoreworICAgIGlmIChtX3NvdXJjZSkgeworICAgICAgICBtX3NvdXJjZS52YWx1ZSgpLT5yZW1v
dmVPYnNlcnZlcigqdGhpcyk7CisgICAgICAgIGdzdF9lbGVtZW50X3NlbmRfZXZlbnQobV9vdXRn
b2luZ1NvdXJjZS5nZXQoKSwgZ3N0X2V2ZW50X25ld19lb3MoKSk7CisKKyAgICAgICAgZ3N0X2Vs
ZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZShtX2Jpbi5nZXQoKSwgVFJVRSk7CisgICAgICAgIGdzdF9l
bGVtZW50X3NldF9zdGF0ZShtX291dGdvaW5nU291cmNlLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7
CisKKyAgICAgICAgaWYgKG1fd2VicnRjU2lua1BhZCkgeworICAgICAgICAgICAgYXV0byBzcmNQ
YWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9iaW4uZ2V0KCksICJz
cmMiKSk7CisgICAgICAgICAgICBnc3RfcGFkX3VubGluayhzcmNQYWQuZ2V0KCksIG1fd2VicnRj
U2lua1BhZC5nZXQoKSk7CisKKyAgICAgICAgICAgIGF1dG8gcGFyZW50ID0gYWRvcHRHUmVmKGdz
dF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KG1fd2VicnRjU2lua1BhZC5nZXQoKSkpOworICAgICAg
ICAgICAgR1NUX0RFQlVHX09CSkVDVChwYXJlbnQuZ2V0KCksICJSZW1vdmluZyBwYWQgJSIgR1NU
X1BUUl9GT1JNQVQsIG1fd2VicnRjU2lua1BhZC5nZXQoKSk7CisgICAgICAgICAgICBnc3RfZWxl
bWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKHBhcmVudC5nZXQoKSwgbV93ZWJydGNTaW5rUGFkLmdl
dCgpKTsKKyAgICAgICAgfQorCisgICAgICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUo
bV9iaW4uZ2V0KCksIEZBTFNFKTsKKyAgICAgICAgbV9zb3VyY2UucmVzZXQoKTsKKyAgICB9Cisg
ICAgbV9pc1N0b3BwZWQgPSB0cnVlOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6c291cmNlTXV0ZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fc291cmNl
KQorICAgICAgICByZXR1cm47CisgICAgQVNTRVJUKG1fbXV0ZWQgIT0gbV9zb3VyY2UudmFsdWUo
KS0+bXV0ZWQoKSk7CisgICAgbV9tdXRlZCA9IG1fc291cmNlLnZhbHVlKCktPm11dGVkKCk7Cit9
CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2VFbmFi
bGVkQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisg
ICAgbV9lbmFibGVkID0gbV9zb3VyY2UudmFsdWUoKS0+ZW5hYmxlZCgpOworICAgIGlmIChtX3Zh
bHZlKQorICAgICAgICBnX29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3AiLCAhbV9lbmFi
bGVkLCBudWxscHRyKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXI6OmluaXRpYWxpemVGcm9tVHJhY2soKQoreworICAgIG1fbXV0ZWQgPSBtX3NvdXJjZS52
YWx1ZSgpLT5tdXRlZCgpOworICAgIG1fZW5hYmxlZCA9IG1fc291cmNlLnZhbHVlKCktPmVuYWJs
ZWQoKTsKKyAgICBtX291dGdvaW5nU291cmNlID0gd2Via2l0TWVkaWFTdHJlYW1TcmNOZXcoKTsK
KyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX291dGdvaW5nU291
cmNlLmdldCgpKTsKKyAgICB3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFRyYWNrKFdFQktJVF9NRURJ
QV9TVFJFQU1fU1JDKG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCkpLCBtX3NvdXJjZS0+cHRyKCksIHRy
dWUpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bGlu
aygpCit7CisgICAgZ3N0X2VsZW1lbnRfbGluayhtX3Bvc3RFbmNvZGVyUXVldWUuZ2V0KCksIG1f
Y2Fwc0ZpbHRlci5nZXQoKSk7CisKKyAgICBhdXRvIHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxl
bWVudF9nZXRfc3RhdGljX3BhZChtX2Jpbi5nZXQoKSwgInNyYyIpKTsKKyAgICBnc3RfcGFkX2xp
bmsoc3JjUGFkLmdldCgpLCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50
X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV9iaW4uZ2V0KCkpOworfQorCit2b2lkIFJlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2V0U2lua1BhZChjb25zdCBHUmVmUHRyPEdz
dFBhZD4mIHBhZCkKK3sKKyAgICBtX3dlYnJ0Y1NpbmtQYWQgPSBwYWQ7CisgICAgR1JlZlB0cjxH
c3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gdHJhbnNjZWl2ZXI7CisgICAgZ19vYmplY3RfZ2V0KG1f
d2VicnRjU2lua1BhZC5nZXQoKSwgInRyYW5zY2VpdmVyIiwgJnRyYW5zY2VpdmVyLm91dFB0cigp
LCBudWxscHRyKTsKKyAgICBnX29iamVjdF9nZXQodHJhbnNjZWl2ZXIuZ2V0KCksICJzZW5kZXIi
LCAmbV9zZW5kZXIub3V0UHRyKCksIG51bGxwdHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5iM2VhYmE5OTQ5NmI0MTZiY2EyYzdiNTVjMWY4NmY4OGIwZDM5MTMzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsODUgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyPiwgcHVibGljIE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgflJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lcigpOworCisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgc3Rv
cCgpOworICAgIHZvaWQgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7
CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlLT5nZXQoKTsgfQorCisgICAgY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgYWxsb3dlZENh
cHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93ZWRDYXBzOyB9CisKKyAgICB2b2lkIGxpbmsoKTsK
KyAgICBjb25zdCBHUmVmUHRyPEdzdFBhZD4mIHBhZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2VicnRj
U2lua1BhZDsgfQorICAgIHZvaWQgc2V0U2lua1BhZChjb25zdCBHUmVmUHRyPEdzdFBhZD4mKTsK
KworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXIoKSBjb25zdCB7IHJldHVy
biBtX3NlbmRlcjsgfQorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gYmluKCkgY29uc3QgeyByZXR1
cm4gbV9iaW47IH0KKworICAgIHZpcnR1YWwgYm9vbCBzZXRQYXlsb2FkVHlwZShjb25zdCBHUmVm
UHRyPEdzdENhcHM+JikgeyByZXR1cm4gZmFsc2U7IH0KKworcHJvdGVjdGVkOgorICAgIGV4cGxp
Y2l0IFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpOworCisgICAgdm9pZCBp
bml0aWFsaXplRnJvbVRyYWNrKCk7CisKKyAgICBib29sIG1fZW5hYmxlZCB7IHRydWUgfTsKKyAg
ICBib29sIG1fbXV0ZWQgeyBmYWxzZSB9OworICAgIGJvb2wgbV9pc1N0b3BwZWQgeyBmYWxzZSB9
OworICAgIHN0ZDo6b3B0aW9uYWw8UmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPj4gbV9zb3Vy
Y2U7CisgICAgc3RkOjpvcHRpb25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1faW5p
dGlhbFNldHRpbmdzOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9iaW47CisgICAgR1JlZlB0
cjxHc3RFbGVtZW50PiBtX291dGdvaW5nU291cmNlOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4g
bV92YWx2ZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcHJlRW5jb2RlclF1ZXVlOworICAg
IEdSZWZQdHI8R3N0RWxlbWVudD4gbV9lbmNvZGVyOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4g
bV9wYXlsb2FkZXI7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3Bvc3RFbmNvZGVyUXVldWU7
CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2NhcHNGaWx0ZXI7CisgICAgR1JlZlB0cjxHc3RD
YXBzPiBtX2FsbG93ZWRDYXBzOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBtX3Nl
bmRlcjsKKyAgICBHUmVmUHRyPEdzdFBhZD4gbV93ZWJydGNTaW5rUGFkOworCitwcml2YXRlOgor
ICAgIHZvaWQgc291cmNlTXV0ZWRDaGFuZ2VkKCk7CisgICAgdm9pZCBzb3VyY2VFbmFibGVkQ2hh
bmdlZCgpOworCisgICAgLy8gTWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6Ok9ic2VydmVyIEFQSQor
ICAgIHZvaWQgdHJhY2tNdXRlZENoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBvdmVy
cmlkZSB7IHNvdXJjZU11dGVkQ2hhbmdlZCgpOyB9CisgICAgdm9pZCB0cmFja0VuYWJsZWRDaGFu
Z2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgb3ZlcnJpZGUgeyBzb3VyY2VFbmFibGVkQ2hh
bmdlZCgpOyB9CisgICAgdm9pZCB0cmFja1NldHRpbmdzQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZSYpIG92ZXJyaWRlIHsgaW5pdGlhbGl6ZUZyb21UcmFjaygpOyB9CisgICAgdm9pZCB0
cmFja0VuZGVkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgb3ZlcnJpZGUgeyB9Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGI4ZjYzNGIyMzQwMDdiMWU5NjBiYmExZTU2
NzM5M2Y2MTJjZjJjZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXIuY3BwCkBAIC0wLDAgKzEsMTExIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUg
IkdTdHJlYW1lclZpZGVvQ2FwdHVyZVNvdXJjZS5oIgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhU
RVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFV
TFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBzb3VyY2Up
CisgICAgOiBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIHJl
Z2lzdGVyV2ViS2l0R1N0cmVhbWVyRWxlbWVudHMoKTsKKworICAgIG1fdmlkZW9Db252ZXJ0ID0g
Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2aWRlb2NvbnZlcnQiLCBudWxscHRyKTsKKyAgICBt
X2VuY29kZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoIndlYnJ0Y3ZpZGVvZW5jb2RlciIs
IG51bGxwdHIpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgp
KSwgbV92aWRlb0NvbnZlcnQuZ2V0KCksIG1fZW5jb2Rlci5nZXQoKSwgbnVsbHB0cik7CisKKyAg
ICBhdXRvKiBwYWRUZW1wbGF0ZSA9IGdzdF9lbGVtZW50X2dldF9wYWRfdGVtcGxhdGUobV9lbmNv
ZGVyLmdldCgpLCAic3JjIik7CisgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfdGVt
cGxhdGVfZ2V0X2NhcHMocGFkVGVtcGxhdGUpKTsKKyAgICBtX2FsbG93ZWRDYXBzID0gYWRvcHRH
UmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICBnc3RfY2Fwc19mb3JlYWNoKGNhcHMuZ2V0
KCksIHJlaW50ZXJwcmV0X2Nhc3Q8R3N0Q2Fwc0ZvcmVhY2hGdW5jPigrW10oR3N0Q2Fwc0ZlYXR1
cmVzKiwgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAg
ICAgIGF1dG8qIHNvdXJjZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8UmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlR1N0cmVhbWVyKj4odXNlckRhdGEpOworICAgICAgICBjb25zdCBjaGFyKiBuYW1lID0g
Z3N0X3N0cnVjdHVyZV9nZXRfbmFtZShzdHJ1Y3R1cmUpOworICAgICAgICBjb25zdCBjaGFyKiBl
bmNvZGluZ05hbWUgPSBudWxscHRyOworICAgICAgICBpZiAoZXF1YWwobmFtZSwgInZpZGVvL3gt
dnA4IikpCisgICAgICAgICAgICBlbmNvZGluZ05hbWUgPSAiVlA4IjsKKyAgICAgICAgZWxzZSBp
ZiAoZXF1YWwobmFtZSwgInZpZGVvL3gtdnA5IikpCisgICAgICAgICAgICBlbmNvZGluZ05hbWUg
PSAiVlA5IjsKKyAgICAgICAgZWxzZSBpZiAoZXF1YWwobmFtZSwgInZpZGVvL3gtaDI2NCIpKQor
ICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIkgyNjQiOworICAgICAgICBpZiAoZW5jb2RpbmdO
YW1lKQorICAgICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZShzb3VyY2UtPm1fYWxs
b3dlZENhcHMuZ2V0KCksIGdzdF9zdHJ1Y3R1cmVfbmV3KCJhcHBsaWNhdGlvbi94LXJ0cCIsICJt
ZWRpYSIsIEdfVFlQRV9TVFJJTkcsICJ2aWRlbyIsICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NU
UklORywgZW5jb2RpbmdOYW1lLCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIDkwMDAwLCBudWxs
cHRyKSk7CisgICAgfSksIHRoaXMpOworCisgICAgc2V0U291cmNlKFdURk1vdmUoc291cmNlKSk7
Cit9CisKK2Jvb2wgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXRQYXls
b2FkVHlwZShjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBjYXBzKQoreworICAgIEdTVF9ERUJVR19P
QkpFQ1QobV9iaW4uZ2V0KCksICJPdXRnb2luZyB2aWRlbyBzb3VyY2UgcGF5bG9hZCBjYXBzOiAl
IiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSk7CisgICAgYXV0byogc3RydWN0dXJlID0gZ3N0
X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLmdldCgpLCAwKTsKKyAgICBHUmVmUHRyPEdzdENhcHM+
IGVuY29kZXJDYXBzOworICAgIGlmIChjb25zdCBjaGFyKiBlbmNvZGluZ05hbWUgPSBnc3Rfc3Ry
dWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiZW5jb2RpbmctbmFtZSIpKSB7CisgICAgICAg
IGlmIChlcXVhbChlbmNvZGluZ05hbWUsICJWUDgiKSkgeworICAgICAgICAgICAgZW5jb2RlckNh
cHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5X3NpbXBsZSgidmlkZW8veC12cDgiKSk7
CisgICAgICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJydHB2cDhw
YXkiLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlIGlmIChlcXVhbChlbmNvZGluZ05hbWUsICJW
UDkiKSkgeworICAgICAgICAgICAgZW5jb2RlckNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3
X2VtcHR5X3NpbXBsZSgidmlkZW8veC12cDkiKSk7CisgICAgICAgICAgICBtX3BheWxvYWRlciA9
IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJydHB2cDlwYXkiLCBudWxscHRyKTsKKyAgICAgICAgfSBl
bHNlIGlmIChlcXVhbChlbmNvZGluZ05hbWUsICJIMjY0IikpIHsKKyAgICAgICAgICAgIGVuY29k
ZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtaDI2
NCIpKTsKKyAgICAgICAgICAgIG1fcGF5bG9hZGVyID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoInJ0
cGgyNjRwYXkiLCBudWxscHRyKTsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBodHRwczovL2dpdGxh
Yi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWdvb2QvLS9pc3N1ZXMvODkz
CisgICAgICAgICAgICAvLyBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVChtX3BheWxv
YWRlci5nZXQoKSksICJhZ2dyZWdhdGUtbW9kZSIsICJ6ZXJvLWxhdGVuY3kiKTsKKyAgICAgICAg
ICAgIC8vIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwgImNvbmZpZy1pbnRlcnZhbCIs
IC0xLCBudWxscHRyKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1QobV9iaW4uZ2V0KCksICJVbnN1cHBvcnRlZCBvdXRnb2luZyB2aWRlbyBlbmNvZGluZzog
JXMiLCBlbmNvZGluZ05hbWUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9
CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX2Jpbi5nZXQoKSwgImVu
Y29kaW5nLW5hbWUgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisK
KyAgICBpZiAoIW1fcGF5bG9hZGVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAvLyBG
SVhNRTogUmUtZW5hYmxlIHRoaXMuIEN1cnJlbnRseSB0cmlnZ2VycyBjYXBzIG5lZ290aWF0aW9u
IGVycm9yLgorICAgIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwgImF1dG8taGVhZGVy
LWV4dGVuc2lvbiIsIEZBTFNFLCBudWxscHRyKTsKKworICAgIGdfb2JqZWN0X3NldChtX2VuY29k
ZXIuZ2V0KCksICJmb3JtYXQiLCBlbmNvZGVyQ2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBp
bnQgcGF5bG9hZFR5cGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUs
ICJwYXlsb2FkIiwgJnBheWxvYWRUeXBlKSkKKyAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGF5bG9h
ZGVyLmdldCgpLCAicHQiLCBwYXlsb2FkVHlwZSwgbnVsbHB0cik7CisKKyAgICBhdXRvIGZpbHRl
cmVkQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZnVsbChnc3Rfc3RydWN0dXJlX2NvcHko
c3RydWN0dXJlKSwgbnVsbHB0cikpOworICAgIGdfb2JqZWN0X3NldChtX2NhcHNGaWx0ZXIuZ2V0
KCksICJjYXBzIiwgZmlsdGVyZWRDYXBzLmdldCgpLCBudWxscHRyKTsKKworICAgIGdzdF9iaW5f
YWRkKEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fcGF5bG9hZGVyLmdldCgpKTsKKyAgICBn
c3RfZWxlbWVudF9saW5rX21hbnkobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSwgbV92YWx2ZS5nZXQo
KSwgbV92aWRlb0NvbnZlcnQuZ2V0KCksIG1fcHJlRW5jb2RlclF1ZXVlLmdldCgpLAorICAgICAg
ICBtX2VuY29kZXIuZ2V0KCksIG1fcGF5bG9hZGVyLmdldCgpLCBtX3Bvc3RFbmNvZGVyUXVldWUu
Z2V0KCksIG51bGxwdHIpOworICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi44MTUxZmRjYTAyMzMyMjQ1YWNjOWFmZjIxNWQyOTUwZDFlZjUzNDdmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNDcg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIgZmluYWwgOiBwdWJsaWMgUmVhbHRpbWVPdXRn
b2luZ01lZGlhU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4mJiBzb3VyY2UpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFdURk1vdmUoc291cmNlKSkpOyB9CisKKyAgICB2b2lk
IHNldEFwcGx5Um90YXRpb24oYm9vbCBzaG91bGRBcHBseVJvdGF0aW9uKSB7IG1fc2hvdWxkQXBw
bHlSb3RhdGlvbiA9IHNob3VsZEFwcGx5Um90YXRpb247IH0KKworICAgIGJvb2wgc2V0UGF5bG9h
ZFR5cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYpIGZpbmFsOworCitwcm90ZWN0ZWQ6CisgICAg
ZXhwbGljaXQgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisKKyAgICBib29sIG1fc2hvdWxkQXBwbHlSb3RhdGlvbiB7
IGZhbHNlIH07CisKK3ByaXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ZpZGVvQ29u
dmVydDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5h
bHMuY3BwIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCmluZGV4IDk0NmVm
Zjk3NDRlNGM3YzhmNjVlOTkzZGMzYTU5ZjliMjdkZTkxM2QuLjQwMDMzYjc5ZDY2ZDFhMzA5Nzg5
ZDVkOTJkOTcwYmI4NzI1NWJlZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rpbmcv
SW50ZXJuYWxzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAK
QEAgLTU5OSw2ICs1OTksOSBAQCB2b2lkIEludGVybmFsczo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0
ZShQYWdlJiBwYWdlKQogICAgIHJ0Y1Byb3ZpZGVyLnNldEgyNjVTdXBwb3J0KHRydWUpOwogICAg
IHJ0Y1Byb3ZpZGVyLnNldFZQOVN1cHBvcnQodHJ1ZSwgdHJ1ZSk7CiAgICAgcnRjUHJvdmlkZXIu
Y2xlYXJGYWN0b3J5KCk7CisjZWxpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyAgICBwYWdlLnNl
dHRpbmdzKCkuc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQodHJ1ZSk7CisgICAgcGFnZS5zZXR0
aW5ncygpLnNldFBlZXJDb25uZWN0aW9uRW5hYmxlZCh0cnVlKTsKICNlbmRpZgogCiAgICAgcGFn
ZS5zZXRGdWxsc2NyZWVuQXV0b0hpZGVEdXJhdGlvbigwX3MpOwpAQCAtMTYxNSw2ICsxNjE4LDcg
QEAgdm9pZCBJbnRlcm5hbHM6OmFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcyhS
VENQZWVyQ29ubmVjdGlvbiYgY29ubmVjdGkKIHsKICAgICBjb25uZWN0aW9uLmFwcGx5Um90YXRp
b25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcygpOwogfQorCiB2b2lkIEludGVybmFsczo6c2V0V2Vi
UlRDSDI2NVN1cHBvcnQoYm9vbCB2YWx1ZSkKIHsKICNpZiBVU0UoTElCV0VCUlRDKQpAQCAtMTYy
Miw2ICsxNjI2LDggQEAgdm9pZCBJbnRlcm5hbHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KGJvb2wg
dmFsdWUpCiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0SDI2NVN1cHBvcnQo
dmFsdWUpOwogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLmNsZWFyRmFjdG9yeSgp
OwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHZhbHVlKTsKICNlbmRpZgogfQogCkBA
IC0xNjMyLDYgKzE2MzgsOSBAQCB2b2lkIEludGVybmFsczo6c2V0V2ViUlRDVlA5U3VwcG9ydChi
b29sIHN1cHBvcnRWUDlQcm9maWxlMCwgYm9vbCBzdXBwb3J0VlA5UHJvZgogICAgICAgICBwYWdl
LT5saWJXZWJSVENQcm92aWRlcigpLnNldFZQOVN1cHBvcnQoc3VwcG9ydFZQOVByb2ZpbGUwLCBz
dXBwb3J0VlA5UHJvZmlsZTIpOwogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLmNs
ZWFyRmFjdG9yeSgpOwogICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHN1cHBvcnRWUDlQ
cm9maWxlMCk7CisgICAgVU5VU0VEX1BBUkFNKHN1cHBvcnRWUDlQcm9maWxlMik7CiAjZW5kaWYK
IH0KIApAQCAtMTY0Miw2ICsxNjUxLDggQEAgdm9pZCBJbnRlcm5hbHM6OnNldFdlYlJUQ1ZQOVZU
QlN1cHBvcnQoYm9vbCB2YWx1ZSkKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5z
ZXRWUDlWVEJTdXBwb3J0KHZhbHVlKTsKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIo
KS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
CiAjZW5kaWYKIH0KIApAQCAtMTY4Miw2ICsxNjkzLDggQEAgdm9pZCBJbnRlcm5hbHM6OnNldEVu
YWJsZVdlYlJUQ0VuY3J5cHRpb24oYm9vbCB2YWx1ZSkKICNpZiBVU0UoTElCV0VCUlRDKQogICAg
IGlmIChhdXRvKiBwYWdlID0gY29udGV4dERvY3VtZW50KCktPnBhZ2UoKSkKICAgICAgICAgcGFn
ZS0+c2V0dGluZ3MoKS5zZXRXZWJSVENFbmNyeXB0aW9uRW5hYmxlZCh2YWx1ZSk7CisjZWxzZQor
ICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KIApAQCAtMTY5Miw2ICsxNzA1LDgg
QEAgdm9pZCBJbnRlcm5hbHM6OnNldFVzZURUTFMxMChib29sIHVzZURUTFMxMCkKICAgICBpZiAo
IWRvY3VtZW50IHx8ICFkb2N1bWVudC0+cGFnZSgpKQogICAgICAgICByZXR1cm47CiAgICAgZG9j
dW1lbnQtPnBhZ2UoKS0+bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRVc2VEVExTMTAodXNlRFRMUzEw
KTsKKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHVzZURUTFMxMCk7CiAjZW5kaWYKIH0KIApkaWZm
IC0tZ2l0IGEvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UgYi9Tb3VyY2UvY21ha2Uv
RmluZEdTdHJlYW1lci5jbWFrZQppbmRleCAwNjYzM2VkNGQ4OTlmMjgzY2VkNDU4Y2RiODM5MTgy
OGI4YmM1ZDNlLi4zMjE2ZjY5NzRiNTNjMGM3Mzg3NGY5ZmVkY2FmZjI5YzhiYzBhMjJhIDEwMDY0
NAotLS0gYS9Tb3VyY2UvY21ha2UvRmluZEdTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvY21h
a2UvRmluZEdTdHJlYW1lci5jbWFrZQpAQCAtMjgsNiArMjgsOSBAQAogIyAgZ3N0cmVhbWVyLWNv
ZGVjcGFyc2VyOkdTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfSU5DTFVERV9ESVJTIGFuZCBHU1RSRUFN
RVJfQ09ERUNQQVJTRVJTX0xJQlJBUklFUwogIyAgZ3N0cmVhbWVyLWZ1bGw6ICAgICAgIEdTVFJF
QU1FUl9GVUxMX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX0ZVTExfTElCUkFSSUVTCiAjICBn
c3RyZWFtZXItdHJhbnNjb2RlcjogR1NUUkVBTUVSX1RSQU5TQ09ERVJfSU5DTFVERV9ESVJTIGFu
ZCBHU1RSRUFNRVJfVFJBTlNDT0RFUl9MSUJSQVJJRVMKKyMgIGdzdHJlYW1lci1ydHA6ICAgICAg
ICBHU1RSRUFNRVJfUlRQX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1JUUF9MSUJSQVJJRVMK
KyMgIGdzdHJlYW1lci1zZHA6ICAgICAgICBHU1RSRUFNRVJfU0RQX0lOQ0xVREVfRElSUyBhbmQg
R1NUUkVBTUVSX1NEUF9MSUJSQVJJRVMKKyMgIGdzdHJlYW1lci13ZWJydGM6ICAgICBHU1RSRUFN
RVJfV0VCUlRDX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1dFQlJUQ19MSUJSQVJJRVMKICMK
ICMgQ29weXJpZ2h0IChDKSAyMDEyIFJhcGhhZWwgS3VibyBkYSBDb3N0YSA8cmFrdWNvQHdlYmtp
dC5vcmc+CiAjCkBAIC0xMTAsNiArMTEzLDkgQEAgRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdT
VFJFQU1FUl9UQUcgZ3N0cmVhbWVyLXRhZy0xLjAgZ3N0dGFnLTEuMCkKIEZJTkRfR1NUUkVBTUVS
X0NPTVBPTkVOVChHU1RSRUFNRVJfVklERU8gZ3N0cmVhbWVyLXZpZGVvLTEuMCBnc3R2aWRlby0x
LjApCiBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX0NPREVDUEFSU0VSUyBnc3Ry
ZWFtZXItY29kZWNwYXJzZXJzLTEuMCBnc3Rjb2RlY3BhcnNlcnMtMS4wKQogRklORF9HU1RSRUFN
RVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9UUkFOU0NPREVSIGdzdHJlYW1lci10cmFuc2NvZGVyLTEu
MCBnc3R0cmFuc2NvZGVyLTEuMCkKK0ZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJf
UlRQIGdzdHJlYW1lci1ydHAtMS4wIGdzdHJ0cC0xLjApCitGSU5EX0dTVFJFQU1FUl9DT01QT05F
TlQoR1NUUkVBTUVSX1NEUCBnc3RyZWFtZXItc2RwLTEuMCBnc3RzZHAtMS4wKQorRklORF9HU1RS
RUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9XRUJSVEMgZ3N0cmVhbWVyLXdlYnJ0Yy0xLjAgZ3N0
d2VicnRjLTEuMCkKIAogIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KICMgMy4gUHJvY2VzcyB0aGUgQ09NUE9ORU5UUyBwYXNzZWQgdG8gRklORF9QQUNL
QUdFCkBAIC0xNTQsNCArMTYwLDYgQEAgbWFya19hc19hZHZhbmNlZCgKICAgICBHU1RSRUFNRVJf
Q09ERUNQQVJTRVJTX0xJQlJBUklFUwogICAgIEdTVFJFQU1FUl9GVUxMX0lOQ0xVREVfRElSUwog
ICAgIEdTVFJFQU1FUl9GVUxMX0xJQlJBUklFUworICAgIEdTVFJFQU1FUl9XRUJSVENfSU5DTFVE
RV9ESVJTCisgICAgR1NUUkVBTUVSX1dFQlJUQ19MSUJSQVJJRVMKICkKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVy
Q2hlY2tzLmNtYWtlCmluZGV4IDkxMWY2ZTZjOTVhYjgzMGI2ZmMwMmUwMWVkYjc3NTRmYTkxMmYz
NGEuLjllNTQ0ZTU3ZjhhM2QyOTc5N2VjNjA3YTZjZjFiMDQ3ODczZWRmNGMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0dT
dHJlYW1lckNoZWNrcy5jbWFrZQpAQCAtMzIsNiArMzIsMTAgQEAgaWYgKEVOQUJMRV9WSURFTyBP
UiBFTkFCTEVfV0VCX0FVRElPKQogICAgICAgICAgICAgICBsaXN0KEFQUEVORCBHU1RSRUFNRVJf
Q09NUE9ORU5UUyB0cmFuc2NvZGVyKQogICAgICAgICAgIGVuZGlmICgpCiAKKyAgICAgICAgICBp
ZiAoVVNFX0dTVFJFQU1FUl9XRUJfUlRDKQorICAgICAgICAgICAgICBsaXN0KEFQUEVORCBHU1RS
RUFNRVJfQ09NUE9ORU5UUyB3ZWJydGMpCisgICAgICAgICAgZW5kaWYgKCkKKwogICAgICAgICAg
IGZpbmRfcGFja2FnZShHU3RyZWFtZXIgMS4xNC4wIFJFUVVJUkVEIENPTVBPTkVOVFMgJHtHU1RS
RUFNRVJfQ09NUE9ORU5UU30pCiAKICAgICAgICAgICBpZiAoRU5BQkxFX1dFQl9BVURJTykKQEAg
LTU4LDExICs2MiwyMCBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAg
ICAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkdTdHJlYW1lclRyYW5zY29kZXIgPj0g
MS4yMCBpcyBuZWVkZWQgZm9yIFVTRV9HU1RSRUFNRVJfVFJBTlNDT0RFUi4iKQogICAgICAgICAg
IGVuZGlmICgpCiAKKyAgICAgICAgICBpZiAoVVNFX0dTVFJFQU1FUl9XRUJSVEMgQU5EIChQQ19H
U1RSRUFNRVJfVkVSU0lPTiBWRVJTSU9OX0xFU1MgIjEuMjAiIE9SIE5PVCBQQ19HU1RSRUFNRVJf
V0VCUlRDX0ZPVU5EKSkKKyAgICAgICAgICAgICAgbWVzc2FnZShGQVRBTF9FUlJPUiAiR1N0cmVh
bWVyV2ViUlRDID49IDEuMjAgaXMgbmVlZGVkIGZvciBVU0VfR1NUUkVBTUVSX1dFQlJUQy4iKQor
ICAgICAgICAgIGVuZGlmICgpCiAgICAgICBlbmRpZiAoKQogZW5kaWYgKCkKIAogaWYgKEVOQUJM
RV9NRURJQV9TVFJFQU0gQU5EIEVOQUJMRV9XRUJfUlRDKQotICAgIFNFVF9BTkRfRVhQT1NFX1RP
X0JVSUxEKFVTRV9MSUJXRUJSVEMgVFJVRSkKKyAgICBpZiAoVVNFX0dTVFJFQU1FUl9XRUJSVEMp
CisgICAgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJSVEMgRkFMU0UpCisK
KyAgICAgICAgZmluZF9wYWNrYWdlKE9wZW5TU0wgUkVRVUlSRUQpCisgICAgZWxzZSAoKQorICAg
ICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIFRSVUUpCisgICAgZW5k
aWYgKCkKIGVsc2UgKCkKICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRD
IEZBTFNFKQogZW5kaWYgKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZp
bml0aW9ucy5jbWFrZSBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQpp
bmRleCAzOTRmODBjYTI0N2U1OWNhMzg5OTVlMDkxNmExMDA4NDhmM2I2NzNjLi5kNWFmMGUyMmIw
NDE4YWM0MDgwODI1OTIxY2RlYzVkNGI0ODNkMWI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2Uv
R1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRl
ZmluaXRpb25zLmNtYWtlCkBAIC0xMSwzICsxMSw0IEBAIFdFQktJVF9PUFRJT05fREVGSU5FKFVT
RV9HU1RSRUFNRVJfTkFUSVZFX1ZJREVPICJUb2dnbGUgbmF0aXZlIHZpZGVvIHN1cHBvcnQgaW4K
IFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJfTkFUSVZFX0FVRElPICJUb2dnbGUg
bmF0aXZlIGF1ZGlvIHN1cHBvcnQgaW4gR1N0cmVhbWVyIG1lZGlhIHBsYXllciIgUFJJVkFURSBP
RkYpCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX1RFWFRfU0lOSyAiVG9nZ2xl
IHRleHQgc2luayBzdXBwb3J0IGluIEdTdHJlYW1lciBtZWRpYSBwbGF5ZXIiIFBSSVZBVEUgT04p
CiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX1RSQU5TQ09ERVIgIldoZXRoZXIg
dG8gZW5hYmxlIHN1cHBvcnQgZm9yIEdTdHJlYW1lciBNZWRpYVJlY29yZGVyIGJhY2tlbmQiIFBS
SVZBVEUgT04pCitXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX1dFQlJUQyAiV2hl
dGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgV2ViUlRDIiBQUklWQVRFIE9OKQpkaWZmIC0tZ2l0
IGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVuZGVuY2llcy5jbWFrZSBiL1NvdXJjZS9jbWFr
ZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2UKaW5kZXggMjNkMjFmNTJkMDU1MDUzMjU2OTVk
M2ExYWZhMWY4NzE2NzFjMGExYy4uNzNmOTNjODE1NzI2YTcxNzdlMmY5NTRjYjE2YzY0YjgzZGQy
MmIyMSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVuZGVuY2llcy5jbWFr
ZQorKysgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlCkBAIC0yLDMg
KzIsNCBAQCBXRUJLSVRfT1BUSU9OX0RFUEVORChVU0VfR1NUUkVBTUVSX0dMIEVOQUJMRV9WSURF
TykKIFdFQktJVF9PUFRJT05fREVQRU5EKFVTRV9HU1RSRUFNRVJfTVBFR1RTIEVOQUJMRV9WSURF
TykKIFdFQktJVF9PUFRJT05fREVQRU5EKFVTRV9XUEVfVklERU9fUExBTkVfRElTUExBWV9ETUFC
VUYgVVNFX0dTVFJFQU1FUl9HTCkKIFdFQktJVF9PUFRJT05fREVQRU5EKFVTRV9HU1RSRUFNRVJf
VFJBTlNDT0RFUiBFTkFCTEVfTUVESUFfUkVDT1JERVIpCitXRUJLSVRfT1BUSU9OX0RFUEVORChV
U0VfR1NUUkVBTUVSX1dFQlJUQyBFTkFCTEVfV0VCX1JUQykKZGlmZiAtLWdpdCBhL1Rvb2xzL0No
YW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCAxY2JmNTg4YzhmODM1ZmUxNjQ4ODE1YjI0
YzUwMzk5MmYwZTdkMWQwLi5iNzg2YTI2YWIxOWNjZWUyMWUzMmZjN2RiMmY4MDIzMjY5YjI4ZDY4
IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMTMgQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0IG9mIHRoZSBHc3RX
ZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBmbGF0cGFrL2ZsYXRwYWt1dGlscy5weToKKyAgICAgICAgKFdlYmtpdEZsYXRwYWsu
cnVuX2luX3NhbmRib3gpOiBBbGxvdyBsaWJuaWNlIGRlYnVnIGxvZyBlbnZpcm9ubWVudCB2YXJp
YWJsZSBpbiBydW50aW1lIHNhbmRib3guCisKIDIwMjItMDItMjUgIEtpbW1vIEtpbm51bmVuICA8
a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKHIyODk1ODApOiBbIGlP
UyBtYWNPUyBdIFRlc3RXZWJLaXRBUEkuSVBDVGVzdGluZ0FQSS5DYW5SZWNlaXZlU2hhcmVkTWVt
b3J5IGlzIGEgY29uc3RhbnQgdGltZW91dApkaWZmIC0tZ2l0IGEvVG9vbHMvZmxhdHBhay9mbGF0
cGFrdXRpbHMucHkgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQppbmRleCBjMGIyM2Uw
OTRkZWZkOWQ4YmI5ZDBjZTRhNTljOGI2ZjczOWM2OWQ5Li5kYWZmZWFjNWUzYTFmOGVmZmU0YzU2
MGJmZDJhNWZkMzA1NzY5ZjQzIDEwMDY0NAotLS0gYS9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGls
cy5weQorKysgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQpAQCAtODM4LDYgKzgzOCw3
IEBAIGNsYXNzIFdlYmtpdEZsYXRwYWs6CiAgICAgICAgICAgICAiTUVTQSIsCiAgICAgICAgICAg
ICAiTElCR0wiLAogICAgICAgICAgICAgIlBJUEVXSVJFIiwKKyAgICAgICAgICAgICJOSUNFIiwK
ICAgICAgICAgICAgICJSVVNUIiwKICAgICAgICAgICAgICJTQ0NBQ0hFIiwKICAgICAgICAgICAg
ICJTUEEiLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMv
Q2hhbmdlTG9nCmluZGV4IDRjNjQzMWM0YjQ2NDQxNTNlNjY4YmYxYmNkY2ZhYzIwOTI1M2M4MWIu
LjE2MWFiOWRmNjFiNTkxYzc1NjEzZjNmM2M0MzQ3NzUwM2I2YzgwNDEgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyAr
MSwxOCBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5j
b20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJU
QyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yMzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczogRmxhZyBtb3N0IFdlYlJUQyBhcyBm
YWlsaW5nLiBEdXJpbmcgdGhpcyBmaXJzdCBkZXZlbG9wbWVudAorICAgICAgICBjeWNsZSBJIGZv
Y3VzZWQgbW9zdGx5IG9uIGZpeGluZyBjcmFzaGVzIGFuZCBvbmx5IGZpeGVkIGEgZmV3IGZhaWx1
cmVzLiBUaGUgcmVtYWluaW5nIG9uZXMKKyAgICAgICAgd2lsbCBiZSBhZHJlc3NlZCBpbiBmb2xs
b3ctdXAgcGF0Y2hlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0v
UlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNj
cmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2ds
aWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0
OiBBZGRlZC4KKwogMjAyMi0wMi0yNSAgS2ltbW8gS2lubnVuZW4gIDxra2lubnVuZW5AYXBwbGUu
Y29tPgogCiAgICAgICAgIFJFR1JFU1NJT04ocjI4OTU4MCk6IFsgaU9TIG1hY09TIF0gVGVzdFdl
YktpdEFQSS5JUENUZXN0aW5nQVBJLkNhblJlY2VpdmVTaGFyZWRNZW1vcnkgaXMgYSBjb25zdGFu
dCB0aW1lb3V0CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBl
Y3RhdGlvbnMgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5k
ZXggMTFlNDg5MWU3ZmU0MjI1YTNiZDViYzJiYzg2NmVmMzUzOGI0OGFkNC4uYWFmMWQ1ZDA0M2U2
YzYwOTY5ODc5M2I5M2RjMzZmNTk2MDljNTE5ZSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2ds
aWIvVGVzdEV4cGVjdGF0aW9ucwpAQCAtODcwLDcgKzg3MCw3IEBAIHdlYmtpdC5vcmcvYi8yMzE4
MTEgbWVkaWEvdmlkZW8tY29uY3VycmVudC1wbGF5YmFjay5odG1sIFsgRmFpbHVyZSBdCiB3ZWJr
aXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLWludGVycnVwdGlvbi13aXRoLXJlc3VtZS1ub3Qt
YWxsb3dpbmctcGxheS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlh
L3ZpZGVvLW11bHRpcGxlLWNvbmN1cnJlbnQtcGxheWJhY2suaHRtbCBbIEZhaWx1cmUgXQogd2Vi
a2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS93ZWJhdWRpby1iYWNrZ3JvdW5kLXBsYXliYWNrLmh0bWwg
WyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMzE4MTEgd2VicnRjL2NvbmN1cnJlbnRWaWRlb1Bs
YXliYWNrMi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjMxODExIHdlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL2NvbmN1cnJlbnRWaWRlb1BsYXliYWNrMi5odG1sIFsgRmFpbHVyZSBU
aW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvbWVkaWEtc2Vzc2lvbi9jYWxsQWN0
aW9uSGFuZGxlci5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL21l
ZGlhLXNlc3Npb24vcGxheS1hZnRlci1zZWVrLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcv
Yi8yMzE4MTEgbWVkaWEvcmVtb3RlLWNvbnRyb2wtY29tbWFuZC1pcy11c2VyLWdlc3R1cmUuaHRt
bCBbIFRpbWVvdXQgXQpAQCAtODgzLDEwICs4ODMsMTAgQEAgd2Via2l0Lm9yZy9iLzIzMTgxMSBt
ZWRpYS92aWRlby1zeXN0ZW0tc2xlZXAuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzIz
MTgxMSB3ZWJhdWRpby9hdWRpb2NvbnRleHQtc3RhdGUtaW50ZXJydXB0ZWQuaHRtbCBbIFRpbWVv
dXQgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSB3ZWJhdWRpby9zdXNwZW5kLWNvbnRleHQtd2hpbGUt
aW50ZXJydXB0ZWQuaHRtbCBbIFRpbWVvdXQgXQogCisjIHJ2ZmMgcmVsYXRlZCBmYWlsdXJlcwog
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1ydmZjIFsgUGFzcyBdCiBmYXN0
L21lZGlhc3RyZWFtL2dldFVzZXJNZWRpYS1ydmZjLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogd2Vi
cnRjL3BlZXJDb25uZWN0aW9uLXJ2ZmMuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL2NhbnZhcy10
by1wZWVyLWNvbm5lY3Rpb24uaHRtbCBbIEZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy92aWRlby1ydmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2std2VicnRj
Lmh0dHBzLmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdmlk
ZW8tcnZmYy9yZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWJlZm9yZS14ci1zZXNzaW9uLmh0
dHBzLmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdmlkZW8t
cnZmYy9yZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWR1cmluZy14ci1zZXNzaW9uLmh0dHBz
Lmh0bWwgWyBTa2lwIF0KQEAgLTkwNCw2ICs5MDQsOTUgQEAgd2Via2l0Lm9yZy9iLzIzNDA4NCBt
ZWRpYS90cmFjay9hdWRpby10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KICMg
Yml0cmF0ZSBlc3RpbWF0aW9uLgogd2Via2l0Lm9yZy9iLzIzNDA4NCBtZWRpYS90cmFjay92aWRl
by10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIAorIyBEYXRhQ2hhbm5lbCBH
c3RXZWJSVEMgaW1wbGVtZW50YXRpb24gaW5jb21wbGV0ZQord2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvZGF0YWNoYW5uZWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0cC93cHQv
d2VicnRjL3RyYW5zZmVyLWRhdGFjaGFubmVsLXNlcnZpY2Utd29ya2VyLmh0dHBzLmh0bWwgWyBT
a2lwIF0KKworIyBUaGUgR3N0V2ViUlRDIGJhY2tlbmQgZG9lc24ndCBzdXBwb3J0IHRyYW5zZm9y
bXMgeWV0Lgord2Via2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93ZWJydGMvYXVkaW92aWRlby1z
Y3JpcHQtdHJhbnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0cC93
cHQvd2VicnRjL3ZpZGVvLXNjcmlwdC10cmFuc2Zvcm0ta2V5ZnJhbWUtb25seS5odG1sIFsgU2tp
cCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy92aWRlby1zY3JpcHQtdHJh
bnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2NyaXB0LWF1ZGlvLXRy
YW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVk
L3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3JtL3NjcmlwdC1j
aGFuZ2UtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0v
c2NyaXB0LW1ldGFkYXRhLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQt
dHJhbnNmb3JtL3NjcmlwdC10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1lbmNvZGVk
LXRyYW5zZm9ybS9zY3JpcHQtd3JpdGUtdHdpY2UtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lw
IF0KKword2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLWFkZEljZUNhbmRpZGF0ZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tYWRkVHJhY2stcmV1c2Utc2VuZGVy
Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi1oYXZlLWxvY2FsLW9mZmVyLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taGF2ZS1sb2Nh
bC1wcmFuc3dlci5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhhdmUtcmVtb3RlLW9mZmVyLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1oYXZlLXJlbW90ZS1wcmFuc3dlci5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4
NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWljZWNhbmRpZGF0ZS1ldmVudC5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24taW5zcGVjdC1hbnN3ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2Zm
ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLWNhbGxiYWNrcy1zaW5nbGUtZGlhbG9nLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9nLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1t
ZWRpYS1zZXR1cC10d28tZGlhbG9ncy5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4
NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXBhZ2UtY2FjaGUuaHRtbCBbIENy
YXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi1yZW1vdGVseS1hc3NpZ25lZC10cmFuc2NlaXZlci1taWQuaHRtbCBbIFRpbWVvdXQgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNl
dExvY2FsRGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRzU2VsZWN0b3IuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL2NoYW5n
ZS10cmFja3MtbWVkaWEtc3RyZWFtLWJlaW5nLXBsYXllZC5odG1sIFsgVGltZW91dCBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy90aGlyZC1wYXJ0eS1mcmFtZS1pY2UtY2Fu
ZGlkYXRlLWZpbHRlcmluZy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGlt
cG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWV4dGVuc2lvbnMvUlRDUnRwUGFy
YW1ldGVycy1tYXhGcmFtZXJhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1leHRlbnNpb25zL1JUQ1J0
cFN5bmNocm9uaXphdGlvblNvdXJjZS1jYXB0dXJlVGltZXN0YW1wLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJy
dGMtcHJpb3JpdHkvUlRDUnRwUGFyYW1ldGVycy1lbmNvZGluZ3MuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSBpbnNwZWN0b3IvcGFnZS9vdmVycmlkZVNldHRpbmctSUNFQ2Fu
ZGlkYXRlRmlsdGVyaW5nRW5hYmxlZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtY2FwYWJpbGl0aWVzL2Rl
Y29kaW5nSW5mby53ZWJydGMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLWNhcGFiaWxpdGllcy9lbmNvZGlu
Z0luZm8ud2VicnRjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L2FkZFRyYW5zY2VpdmVyLXRoZW4tYWRkVHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tbXV0ZWQtc3RhdHMuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0aW9uLWc3MjIuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0
aW9uLXdlYmF1ZGlvLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L2F1ZGlvLXJlcGxhY2UtdHJhY2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSB3ZWJydGMvYXVkaW8tc2FtcGxlcmF0ZS1jaGFuZ2UuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL2F1ZGlvLXZpZGVvLWVsZW1lbnQtcGxheWluZy5odG1sIFsgVGlt
ZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jYW5kaWRhdGUtc3RhdHMuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FudmFzLXRvLXBlZXItY29u
bmVjdGlvbi5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jYXB0
dXJlQ2FudmFzLXdlYnJ0Yy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy9jbG9uZS1hdWRpby10cmFjay5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy9jbG9zaW5nLXBlZXJjb25uZWN0aW9uLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgd2VicnRjL2RpcmVjdGlvbi1jaGFuZ2UuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGlzYWJsZS1lbmNyeXB0aW9uLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2VwaGVtZXJhbC1jZXJ0aWZpY2F0ZXMt
YW5kLWNuYW1lcy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9m
aWx0ZXJpbmctaWNlLWNhbmRpZGF0ZS1hZnRlci1yZWxvYWQuaHRtbCBbIFRpbWVvdXQgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvaDI2NC1wYWNrZXRpemF0aW9uLW1vZGUuaHRtbCBbIFRp
bWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvbGlid2VicnRjL3NldExvY2FsRGVz
Y3JpcHRpb25DcmFzaC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy9tdWx0aS12aWRlby5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy9uby1wb3J0LXplcm8taW4tdXBkLWNhbmRpZGF0ZXMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLWF1ZGlvLW11dGUuaHRtbCBbIFRp
bWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLWF1ZGlv
LW11dGUyLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXIt
Y29ubmVjdGlvbi1hdWRpby11bm11dGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLWNyZWF0ZU1lZGlhU3RyZWFtRGVzdGluYXRpb24u
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0
aW9uLXJlbW90ZS1hdWRpby1tdXRlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0ZTIuaHRtbCBbIFRpbWVv
dXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLXRyYWNrLWVu
ZC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVyY29ubmVj
dGlvbi1wYWdlLWNhY2hlLWxvbmcuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSB3ZWJydGMvcGVlcmNvbm5lY3Rpb24tcGFnZS1jYWNoZS5odG1sIFsgVGltZW91dCBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZWNlaXZlci10cmFjay1zaG91bGQtc3RheS1saXZlLWV2
ZW4taWYtcmVjZWl2ZXItaXMtaW5hY3RpdmUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvcmVsZWFzZS1hZnRlci1nZXR0aW5nLXRyYWNrLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3JlbW90ZUF1ZGlvLW5ldmVyLXBsYXllZC5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZW1vdmUtdHJhY2su
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdXRmOC1zZHAuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tYWRkVHJhbnNj
ZWl2ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8t
YXV0b3BsYXkuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlk
ZW8tZ2V0UGFyYW1ldGVycy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy92aWRlby1tZWRpYXN0cmVhbXRyYWNrLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW11dGUtdnA4Lmh0bWwgWyBUaW1lb3V0IF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW11dGUuaHRtbCBbIFRpbWVvdXQgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVjZWl2ZXJzLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlcGxhY2UtdHJhY2stdG8tbnVsbC5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1yZXBsYWNl
LXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVv
LXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVv
LXVubXV0ZS5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8t
dnA4LXZpZGVvcmFuZ2UuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJy
dGMvdmlkZW8uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdnA4
LXRoZW4taDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92
cDktc3ZjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZwOS5o
dG1sIFsgRmFpbHVyZSBdCisKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIEVu
ZCBvZiBHU3RyZWFtZXItcmVsYXRlZCBidWdzCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLwpAQCAtMTQzOSwxNiArMTUyOCwxNCBAQCB3ZWJraXQub3JnL2IvNzkyMDMgd2Via2l0Lm9y
Zy9iLzE4NjY3OCBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1lbgogCiBm
YXN0L21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy1hZGRFdmVudExpc3RlbmVyLmh0bWwgWyBEdW1w
SlNDb25zb2xlTG9nSW5TdGRFcnIgXQogCi13ZWJraXQub3JnL2IvMTkxMDA2IHdlYnJ0Yy9zaW11
bGNhc3QtaDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTkxMDA2IHdlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL3NpbXVsY2FzdC1oMjY0Lmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQg
XQogCiB3ZWJraXQub3JnL2IvMTkzNjQxIHdlYnJ0Yy92aWRlby1zZXREaXJlY3Rpb24uaHRtbCBb
IEZhaWx1cmUgUGFzcyBdCiAKIHdlYmtpdC5vcmcvYi8xOTQ2MTEgaHR0cC93cHQvd2VicnRjL2dl
dFVzZXJNZWRpYS1wcm9jZXNzU3dhcHBpbmcuaHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJraXQub3Jn
L2IvMjAxMjY3IFsgUmVsZWFzZSBdIHdlYnJ0Yy92aWRlby1oMjY0Lmh0bWwgWyBUaW1lb3V0IEZh
aWx1cmUgXQotd2Via2l0Lm9yZy9iLzIyMjU4NSBbIERlYnVnIF0gd2VicnRjL3ZpZGVvLWgyNjQu
aHRtbCBbIENyYXNoIF0KLQotd2Via2l0Lm9yZy9iLzIxMDI3MiB3ZWJydGMvZGF0YWNoYW5uZWwv
bXVsdGlwbGUtY29ubmVjdGlvbnMuaHRtbCBbIFRpbWVvdXQgUGFzcyBdCit3ZWJraXQub3JnL2Iv
MjIyNTg1IHdlYmtpdC5vcmcvYi8yMzU4ODUgWyBEZWJ1ZyBdIHdlYnJ0Yy92aWRlby1oMjY0Lmh0
bWwgWyBDcmFzaCBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIxNTAwNSB3ZWJraXQub3JnL2Iv
MjE4Nzg3IHdlYnJ0Yy9oMjY0LWJhc2VsaW5lLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KICMgaDI2
NC1oaWdoLmh0bWwgaXMgbWFya2VkIGFzIHNsb3cgaW4gdGhlIHJvb3QgZXhwZWN0YXRpb24KQEAg
LTE0NTcsNyArMTU0NCw3IEBAIHdlYmtpdC5vcmcvYi8yMTUwMDcgWyBEZWJ1ZyBdIHdlYnJ0Yy9o
MjY0LWhpZ2guaHRtbCBbIFNsb3cgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMTY1Mzggd2Vi
cnRjL2NhcHR1cmVDYW52YXMtd2VicnRjLXNvZnR3YXJlLWgyNjQtYmFzZWxpbmUuaHRtbCBbIFNs
b3cgRmFpbHVyZSBdCiAKLXdlYmtpdC5vcmcvYi8yMTY3NjMgd2VicnRjL2NhcHR1cmVDYW52YXMt
d2VicnRjLXNvZnR3YXJlLWgyNjQtaGlnaC5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMjE2NzYzIHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2NhcHR1cmVDYW52YXMtd2Vi
cnRjLXNvZnR3YXJlLWgyNjQtaGlnaC5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBUaW1lb3V0IF0KIAog
d2Via2l0Lm9yZy9iLzIxODIyMSB3ZWJydGMvdnA5LXByb2ZpbGUyLmh0bWwgWyBUaW1lb3V0IEZh
aWx1cmUgXQogCkBAIC0yMjQ2LDEzICsyMzMzLDEyIEBAIHdlYmtpdC5vcmcvYi8xODYxMDAgY3Nz
My9jb2xvci1maWx0ZXJzL2NvbG9yLWZpbHRlci1jb2xvci1wcm9wZXJ0eS1saXN0LWl0ZW0uaHRt
CiB3ZWJraXQub3JnL2IvMTg2MTAwIGZhc3QvaGlkcGkvZmlsdGVycy10dXJidWxlbmNlLmh0bWwg
WyBJbWFnZU9ubHlGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xODcwNDQgd2ViYW5pbWF0aW9ucy9v
cGFjaXR5LWFuaW1hdGlvbi15aWVsZHMtY29tcG9zaXRpbmctc3Bhbi5odG1sIFsgRmFpbHVyZSBd
CiAKLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL2RhdGFjaGFubmVsL21kbnMtaWNlLWNhbmRp
ZGF0ZXMuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8t
YWRkVHJhY2suaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlk
ZW8tZGlzYWJsZWQtYmxhY2suaHRtbCBbIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2Vi
cnRjL3ZpZGVvLXJlbW90ZS1tdXRlLmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvMTg3MDY0
IHdlYnJ0Yy92aWRlby1yZXBsYWNlLW11dGVkLXRyYWNrLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtp
dC5vcmcvYi8xODcwNjQgd2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVwbGFjZS1t
dXRlZC10cmFjay5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xODcwNjQg
d2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tZGlzYWJsZWQtYmxhY2suaHRtbCBbIENy
YXNoIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy92aWRlby1yZW1vdGUtbXV0ZS5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1yb3RhdGlvbi5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQu
b3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1yb3RhdGlvbi1uby1jdm8uaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1y
b3RhdGlvbi1uby1jdm8uaHRtbCBbIEZhaWx1cmUgQ3Jhc2ggXQogd2Via2l0Lm9yZy9iLzE4NzA2
NCB3ZWJydGMvdmlkZW8td2l0aC1kYXRhLWNoYW5uZWwuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0
Lm9yZy9iLzE4NzA2NCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy9SVENQ
ZWVyQ29ubmVjdGlvbi1nZXRTdGF0cy5odHRwcy5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIApAQCAt
MjU0Niw3ICsyNjMyLDcgQEAgbWVkaWEvdmlkZW8tcmVtb3RlLWNvbnRyb2wtcGxheXBhdXNlLmh0
bWwgWyBTa2lwIF0KIAogd2Via2l0Lm9yZy9iLzIwNzA2MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1yZXBsYXkuaHRtbCBbIEZhaWx1cmUg
UGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8yMjkzNDYgd2VicnRjL211bHRpLWF1ZGlvLmh0bWwgWyBU
aW1lb3V0IFBhc3MgXQord2Via2l0Lm9yZy9iLzIyOTM0NiB3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy9tdWx0aS1hdWRpby5odG1sIFsgVGltZW91dCBQYXNzIEZhaWx1cmUgXQogCiB3ZWJraXQu
b3JnL2IvMjI5NzE1IFsgRGVidWcgXSBmYXN0L21lZGlhc3RyZWFtL2dldERpc3BsYXlNZWRpYS1t
YXgtY29uc3RyYWludHMzLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMjk3MTUgWyBE
ZWJ1ZyBdIGZhc3QvbWVkaWFzdHJlYW0vc2NyZWVuY2FwdHVyZS11c2VyLWdlc3R1cmUuaHRtbCBb
IFRpbWVvdXQgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWxvY2FsRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLWxvY2FsRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5NWE5YjYx
OTAwOWE3NDMyYTEyOTM2YTdjNmE4MTg5MDg0ZDJjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
bG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGVzdHMgUlRD
UGVlckNvbm5lY3Rpb24gbG9jYWxEZXNjcmlwdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwg
c2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExF
VEUiLgorCisKK1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24p
LnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDEsIHJlcXVlc3RGYWlsZWQxKTsgZGlkIG5vdCB0aHJvdyBl
eGNlcHRpb24uCitQQVNTIHJlcXVlc3RTdWNjZWVkZWQgd2FzIGNhbGxlZC4KK1BBU1MgcGMuc2V0
TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRl
ZDIsIHJlcXVlc3RGYWlsZWQyKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHJlcXVl
c3RGYWlsZWQgd2FzIGNhbGxlZC4KK1BBU1MgcGMubG9jYWxEZXNjcmlwdGlvbi50eXBlIGlzICJv
ZmZlciIKK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIGxvY2FsLiBXYXMg
dD0wIDAKKy4KK1BBU1MgcGMubG9jYWxEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwg
cGMubG9jYWxEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIGxvY2FsLiBXYXMgdD0wIDAKKy4KK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tcmVtb3RlRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxh
dGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2Ny
aXB0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDUzZWM1YzIxNjBkMDMyNzNjMTk4MWY4
ZWQ5ZmExODM4NGZkMDc1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9u
LWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE5IEBACitUZXN0cyBSVENQZWVyQ29ubmVjdGlvbiBy
ZW1vdGVEZXNjcmlwdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1Mg
cGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKHJlcXVlc3RT
dWNjZWVkZWQxLCByZXF1ZXN0RmFpbGVkMSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFT
UyByZXF1ZXN0U3VjY2VlZGVkIHdhcyBjYWxsZWQuCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0
aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgcmVxdWVzdEZh
aWxlZDIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdEZhaWxlZCB3YXMg
Y2FsbGVkLgorUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwg
cGMucmVtb3RlRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSByZW1vdGUuIFdhcyB0PTAgMAorLgor
UEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMucmVtb3Rl
RGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSByZW1vdGUuIFdhcyB0PTAgMAorLgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9w
bGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3Rl
RGVzY3JpcHRpb24tb2ZmZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZjYzQxODEwYjhkZTE5
MWRkZWU1OWEwZWM1OWMzNTE5OTFiZTdmYmIKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVt
b3RlRGVzY3JpcHRpb24tb2ZmZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzkgQEAKK1Rlc3Qg
UlRDUGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24gY2FsbGVkIHdpdGggYW4gUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uIG9mIHR5cGUgJ29mZmVyJworCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworKioqIENyZWF0ZSAocmVtb3RlKSBvZmZlciB3aXRoIGF1ZGlvIChyZW1vdGVP
ZmZlcjEpCisqKiogRG9uZSwgc3RhcnQgdGVzdGluZyB3aXRoIHJlbW90ZU9mZmVyMQorUEFTUyBw
Yy5zaWduYWxpbmdTdGF0ZSBpcyAnc3RhYmxlJworUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbiBp
cyBudWxsCitQQVNTIHBjLnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBj
LmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK1BBU1MgcmVtb3RlT2ZmZXIxIHNl
dCBhcyByZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUt
cmVtb3RlLW9mZmVyJworRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUgW29iamVj
dCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgorRkFJTCBwYy5w
ZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtv
YmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uXS4KK1BBU1MgcGMuY3VycmVudFJlbW90ZURlc2Ny
aXB0aW9uIGlzIG51bGwKKworUEFTUyByZW1vdGVPZmZlcjEgc2V0IGFzIHJlbW90ZSBkZXNjcmlw
dGlvbiAoYWdhaW4pCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZl
cicKKworKioqIFRyeSBzZXR0aW5nIGxvY2FsIGRlc2NyaXB0aW9ucyB3aXRoIGJhZCB0eXBlcyBm
b3IgdGhlIGN1cnJlbnQgc3RhdGUKK1BBU1MgcHJvbWlzZSBwYy5zZXRSZW1vdGVEZXNjcmlwdGlv
bih7dHlwZTonYW5zd2VyJywgc2RwOnJlbW90ZU9mZmVyMS5zZHB9KTsgcmVqZWN0ZWQgd2l0aCBP
cGVyYXRpb25FcnJvcjogVW5hYmxlIHRvIGFwcGx5IHNlc3Npb24gcmVtb3RlIGRlc2NyaXB0aW9u
CitQQVNTIHByb21pc2UgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oe3R5cGU6J3ByYW5zd2VyJywg
c2RwOnJlbW90ZU9mZmVyMS5zZHB9KTsgcmVqZWN0ZWQgd2l0aCBPcGVyYXRpb25FcnJvcjogVW5h
YmxlIHRvIGFwcGx5IHNlc3Npb24gcmVtb3RlIGRlc2NyaXB0aW9uCisKKyoqKiBDcmVhdGUgKHJl
bW90ZSkgb2ZmZXIgd2l0aCB2aWRlbyAocmVtb3RlT2ZmZXIyKQorKioqIERvbmUsIHN0YXJ0IHRl
c3Rpbmcgd2l0aCByZW1vdGVPZmZlcjIKK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUt
cmVtb3RlLW9mZmVyJworCitQQVNTIHJlbW90ZU9mZmVyMiBzZXQgYXMgcmVtb3RlIGRlc2NyaXB0
aW9uCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKK0ZBSUwg
cGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmpl
Y3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uXS4KK0ZBSUwgcGMucGVuZGluZ1JlbW90ZURlc2NyaXB0
aW9uIHNob3VsZCBiZSBbb2JqZWN0IE9iamVjdF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbl0uCitQQVNTIHBjLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tc3RhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIv
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0Cm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjcwMTY2ZGNhNTYzZWNlNDdmNDhjMDcyMmNjMDg3YTNlMmY5NjZjNGUKLS0tIC9k
ZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0v
UlRDUGVlckNvbm5lY3Rpb24tc3RhYmxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUxIEBACitU
ZXN0cyBSVENQZWVyQ29ubmVjdGlvbiBpbiBzdGFibGUgc3RhdGUuCisKK09uIHN1Y2Nlc3MsIHlv
dSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNU
IENPTVBMRVRFIi4KKworCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUiCitQQVNT
IHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZpbmlzaElm
U3VjY2VlZGVkLCByZXF1ZXN0RmFpbGVkMSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFT
UyBzZXRMb2NhbERlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwgZXJyb3JSZWFzb24ubmFtZSBzaG91
bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9yLiBXYXMgT3BlcmF0aW9uRXJyb3Iu
CitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2Fz
IG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRp
b24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3RhYmxlIgorUEFTUyBw
Yy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihmaW5pc2hJZlN1
Y2NlZWRlZCwgcmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mg
c2V0TG9jYWxEZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVhc29uLm5hbWUgc2hvdWxk
IGJlIEludmFsaWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIE9wZXJhdGlvbkVycm9yLgor
RkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBu
dWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9u
LiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMu
c2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZpbmlzaElmU3Vj
Y2VlZGVkLCByZXF1ZXN0RmFpbGVkMyk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBz
ZXRSZW1vdGVEZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVhc29uLm5hbWUgc2hvdWxk
IGJlIEludmFsaWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIE9wZXJhdGlvbkVycm9yLgor
RkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBu
dWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9u
LiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMu
c2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZpbmlzaElmU3Vj
Y2VlZGVkLCByZXF1ZXN0RmFpbGVkNCk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBz
ZXRSZW1vdGVEZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVhc29uLm5hbWUgc2hvdWxk
IGJlIEludmFsaWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIE9wZXJhdGlvbkVycm9yLgor
RkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBu
dWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9u
LiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMu
c2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2Nl
ZWRlZDEsIGZpbmlzaElmRmFpbGVkKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNl
dExvY2FsRGVzY3JpcHRpb24gc3VjY2VlZGVkLgorUEFTUyBwYy5sb2NhbERlc2NyaXB0aW9uLnR5
cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgbG9j
YWwuIFdhcyB0PTAgMAorLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cg
YW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgImhhdmUt
bG9jYWwtb2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4
Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJv
dyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3Rh
YmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRo
ZW4ocmVxdWVzdFN1Y2NlZWRlZDIsIGZpbmlzaElmRmFpbGVkKTsgZGlkIG5vdCB0aHJvdyBleGNl
cHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIHN1Y2NlZWRlZC4KK0ZBSUwgcGMubG9j
YWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1Mg
cGMucmVtb3RlRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLnJlbW90ZURlc2Ny
aXB0aW9uLnNkcCBzaG91bGQgYmUgcmVtb3RlLiBXYXMgdD0wIDAKKy4KK1BBU1MgcGMuc2lnbmFs
aW5nU3RhdGUgaXMgImhhdmUtcmVtb3RlLW9mZmVyIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5n
ZUxvZwppbmRleCA0NmI0MmMzYWMwZGMyODg5YzNiYjU2OGJiMjEzMWRlZDBkMjA5YzllLi5kYTk1
ZjgxNzE4MTI3OGFmNDU3ZDdkMzA5Yzk5ODM0YzNlODNmYzZiIDEwMDY0NAotLS0gYS9DaGFuZ2VM
b2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjItMDItMTIgIFBoaWxpcHBl
IE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIElu
aXRpYWwgaW1wb3J0IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIEdzdFdlYlJUQyBieSBkZWZhdWx0
IGlmIGEgcmVjZW50LWVub3VnaCAoPj0gMS4yMCkgdmVyc2lvbiBpcyBhdmFpbGFibGUuCisKKyAg
ICAgICAgKiBTb3VyY2UvY21ha2UvRmluZEdTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBTb3Vy
Y2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9H
U3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvR1N0cmVh
bWVyRGVwZW5kZW5jaWVzLmNtYWtlOgorCiAyMDIyLTAyLTI1ICBaYW4gRG9iZXJzZWsgIDx6ZG9i
ZXJzZWtAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RLXVtXUEVdIFVuY291cGxlIGxpYmdibSwg
bGliZHJtIGRlcGVuZGVuY2llcyBmcm9tIEFOR0xFIGZ1bmN0aW9uYWxpdHkK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>453930</attachid>
            <date>2022-03-06 08:03:55 -0800</date>
            <delta_ts>2022-03-12 04:38:52 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220306080353.patch</filename>
            <type>text/plain</type>
            <size>338400</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkwODczCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGYyZGM0ODMzNTA2MzNiNWEyYzJhNjFk
ZWVkZDY3ODE5NWIxMjlhYzEuLjY5NGQ2NDZmM2JkZDg1OTJiOTEzM2I4MzJiNmJlOGExNDQwM2Nm
NDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAzLTA0ICBTaWh1aSBMaXUgIDxzaWh1aV9s
aXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBudWxsIGNoZWNrIGZvciBwYXRoIGluIG1ha2VB
bGxEaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291
cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IDFlYWJkN2Q2YmVmMWY4M2FmOTI4ZmViNDFkNGZm
NGRhNzc1ZTNlNDEuLmY0NDgzYWZmNjFmNTIwOWNlNWE5NjE2ODVlMzA0YzU5NmYxNmYxMmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKQEAgLTEsMyArMSwzNzQgQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQg
IDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1w
b3J0IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0
Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZ
IChPT1BTISkuCisKKyAgICAgICAgSW5pdGlhbCBHc3RXZWJSVEMgYmFja2VuZC4gQSBsb3Qgb2Yg
ZmVhdHVyZXMgdW5pbXBsZW1lbnRlZCBzdGlsbCwgYnV0IHdlIHdpbGwgaW5jcmVtZW50YWxseQor
ICAgICAgICBpbXByb3ZlIHRoZSBsYXlvdXQgdGVzdCBjb3ZlcmFnZSBpbiBmb2xsb3ctdXAgcGF0
Y2hlcy4gTW9zdCBub3RhYmxlIHNob3J0LWNvbWluZ3MgY3VycmVudGx5OgorCisgICAgICAgIC0g
RGF0YUNoYW5uZWwgc3VwcG9ydCBpcyBpbmNvbXBsZXRlIChidWcgMjM1ODc5KQorICAgICAgICAt
IE5ldHdvcmsgdHJhZmZpYyBub3Qgcm91dGVkIHRocm91Z2ggTmV0d29yayBwcm9jZXNzIHlldAor
ICAgICAgICAtIFN0YXRzIHN1cHBvcnQgaW5jb21wbGV0ZQorICAgICAgICAtIERUTUYgc3VwcG9y
dCB1bmltcGxlbWVudGVkCisgICAgICAgIC0gSUNFIHJlc3RhcnRzIG5vdCBzdXBwb3J0ZWQgeWV0
CisgICAgICAgIC0gUmUtbmVnb3RpYXRpb24gdW5saWtlbHkgdG8gd29yaworICAgICAgICAtIFNp
bXVsY2FzdCBub3QgaGFuZGxlZCB5ZXQKKyAgICAgICAgLSBCYWxhbmNlZCBidW5kbGUgbm90IHN1
cHBvcnRlZAorICAgICAgICAtIFJUWCBhbmQgRkVDIHVuLXRlc3RlZCwgYnV0IHNob3VsZG4ndCBi
ZSBoYXJkIHRvIGZpeAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmlj
ZXMuY3BwOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2VuZXJh
dGVDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRl
KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRh
Q2hhbm5lbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRh
dGFDaGFubmVsSGFuZGxlcjo6ZnJvbVJUQ0RhdGFDaGFubmVsSW5pdCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNoYW5uZWxFdmVudCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OkdTdHJlYW1lckRhdGFDaGFu
bmVsSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6On5HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kU3RyaW5nRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnNlbmRSYXdEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2xvc2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGVja1N0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6cmVhZHlTdGF0ZUNo
YW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpv
bk1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcjo6b25NZXNzYWdlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6b25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRh
Q2hhbm5lbEhhbmRsZXI6Om9uQnVmZmVyZWRBbW91bnRMb3cpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpwb3N0VGFzayk6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmg6IEFk
ZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0
bHNUcmFuc3BvcnRCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFt
ZXJEdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEdGxz
VHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnN0
YXRlQ2hhbmdlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6R1N0
cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjppY2VUcmFuc3BvcnRD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6
OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9y
dEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
SWNlVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OmdhdGhlcmluZ1N0YXRlQ2hhbmdlZCk6CisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0
QmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50KToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYWxpemVQaXBlbGluZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp+R1N0cmVhbWVyTWVkaWFF
bmRwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp0ZWFy
ZG93blBpcGVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6ZGlzcG9zZUVsZW1lbnRDaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpzZXRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OnJlc3RhcnRJY2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmV0Y2hEZXNj
cmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmZXRjaFNpZ25hbGluZ1N0YXRlKToKKyAgICAg
ICAgKFdlYkNvcmU6OmRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4pOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9TZXRMb2NhbERlc2NyaXB0aW9uKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldFJlbW90ZURlc2NyaXB0aW9u
U3VjY2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRv
U2V0UmVtb3RlRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2V0RGVzY3JpcHRpb25D
YWxsRGF0YTo6U2V0RGVzY3JpcHRpb25DYWxsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpzZXREZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9yZVJlbW90ZU1MaW5lSW5mbyk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb25maWd1cmVBbmRMaW5rU291cmNlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlcXVlc3RQYWQpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkVHJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVtb3ZlVHJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVPZmZlcik6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0ZUFuc3dlcik6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnZXRTdGF0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjptZWRpYVN0cmVhbUZyb21SVENT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkUmVt
b3RlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJl
bW92ZVJlbW90ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYW5zY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNvdXJjZUZvclRyYWNrKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp0cmFuc2NlaXZlckJh
Y2tlbmRGcm9tU2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmFkZEljZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpvbkRhdGFDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpy
ZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25OZWdv
dGlhdGlvbk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpvbkljZUNvbm5lY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6b25JY2VHYXRoZXJpbmdDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNlc3Np
b25EZXNjcmlwdGlvbkZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50Ojpjb2xsZWN0VHJhbnNjZWl2ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZyk6CisgICAgICAgIChXZWJDb3Jl
OjpSVENTdGF0c0xvZ2dlcjo6UlRDU3RhdHNMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UlRD
U3RhdHNMb2dnZXI6OnRvSlNPTlN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50Ojpwcm9jZXNzU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6b25TdGF0c0RlbGl2ZXJlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdGFydExvZ2dpbmdTdGF0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wTG9nZ2luZ1N0YXRzKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmxvZ0NoYW5uZWwgY29uc3QpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RhdHNMb2dJbnRlcnZh
bCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnYXRo
ZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKToKKyAgICAgICAgKFdURjo6TG9nQXJndW1lbnQ8
V2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI+Ojp0b1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppc1N0b3BwZWQgY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aXNOZWdvdGlhdGlvbk5lZWRl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpwaXBl
bGluZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpjcmVhdGVHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZWNlaXZlckNhcGFiaWxpdGllcyk6CisgICAgICAg
IChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRlckNhcGFiaWxpdGllcyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN0YXJ0SWNlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0Q29uZmlndXJhdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdldFN0YXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OmJhY2tlbmRGcm9tUlRQU2VuZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRMb2NhbERlc2NyaXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9T
ZXRSZW1vdGVEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlT2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0ZUFuc3dlcik6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNsb3NlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TdG9wKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9BZGRJY2VDYW5kaWRh
dGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpj
cmVhdGVSZWNlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpm
aW5kRXhpc3RpbmdTZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjphZGRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2VpdmVyRnJvbVRyYWNrT3JLaW5kKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhbnNjZWl2
ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpz
ZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6YmFja2VuZEZyb21S
VFBUcmFuc2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmV4aXN0aW5nVHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpuZXdSZW1vdGVUcmFuc2NlaXZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNvbGxlY3RUcmFuc2Nl
aXZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpyZW1vdmVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcyk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdhdGhlckRlY29kZXJJ
bXBsZW1lbnRhdGlvbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjppc05lZ290aWF0aW9uTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQu
aDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRDb250cmlidXRpbmdTb3VyY2VzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0
U3luY2hyb25pemF0aW9uU291cmNlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmNyZWF0ZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpkdGxzVHJhbnNwb3J0
QmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFUeXBlRnJvbVJlY2VpdmVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVh
bWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJh
bnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRy
YW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6cmVxdWVzdEtl
eUZyYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlVHJhY2tTb3VyY2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c3RhcnRTb3VyY2UpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c3RvcFNvdXJjZSk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpyZXBsYWNlVHJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6Z2V0UGFyYW1ldGVycyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzZXRQ
YXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6
OmNyZWF0ZURUTUZCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c2V0TWVkaWFTdHJlYW1JZHMpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQpOgor
ICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6bWVkaWFUeXBlRnJvbVNlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zv
cm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9y
bUJhY2tlbmQ6On5HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9y
bWFibGVGcmFtZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRl
clRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSk6CisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6
Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZDo6Y3JlYXRlU2VuZGVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmRpcmVjdGlvbiBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmN1cnJlbnREaXJl
Y3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kOjpzZXREaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJh
bnNjZWl2ZXJCYWNrZW5kOjptaWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJh
bnNjZWl2ZXJCYWNrZW5kOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZDo6c3RvcHBlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNldENvZGVjUHJlZmVyZW5jZXMpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpzZXRJbnB1dENhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OmNsZWFyVHJhbnNm
b3JtYWJsZUZyYW1lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJh
bnNmb3JtQmFja2VuZDo6cHJvY2Vzc1RyYW5zZm9ybWVkRnJhbWUpOgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpH
U3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6dG9SVENTY3RwVHJhbnNwb3J0U3RhdGUpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lclNjdHBUcmFuc3Bv
cnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNr
ZW5kOjp+R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNs
aWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6
dW5yZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rv
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJUQ1N0YXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OmZpbGxSVENSVFBTdHJlYW1TdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxs
UlRDQ29kZWNTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsSW5ib3VuZFJUUFN0cmVhbVN0
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKToKKyAgICAgICAgKFdl
YkNvcmU6OmZpbGxSVENUcmFuc3BvcnRTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVw
b3J0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbGJhY2tIb2xkZXI6OkNhbGxiYWNr
SG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpnZXRT
dGF0cyk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
U3RhdHNDb2xsZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTdGF0
c0NvbGxlY3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclN0YXRzQ29s
bGVjdG9yOjpzZXRFbGVtZW50KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
dG9SVENJY2VDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VQcm90b2NvbCk6
CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZVRjcENhbmRpZGF0ZVR5cGUpOgorICAgICAgICAo
V2ViQ29yZTo6dG9SVENJY2VDYW5kaWRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRD
RXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJSVENCaXRSYXRlUHJpb3JpdHkpOgorICAg
ICAgICAoV2ViQ29yZTo6ZnJvbVJUQ0VuY29kaW5nUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJD
b3JlOjpmcm9tV2ViUlRDQml0UmF0ZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRD
RW5jb2RpbmdQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDUnRwU2VuZFBhcmFt
ZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlRGVidWdDYXRlZ29yeUluaXRpYWxpemVk
KToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSWNlQ2FuZGlkYXRlU0RQKToKKyAgICAgICAgKFdl
YkNvcmU6Ong1MDlTZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6cHJpdmF0ZUtleVNlcmlh
bGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZUNlcnRpZmljYXRlKToKKyAgICAgICAg
KFdlYkNvcmU6OnNkcE1lZGlhSGFzQXR0cmlidXRlS2V5KToKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OnRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6ZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OnRvU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpmcm9tU2Vzc2lv
bkRlc2NyaXB0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1NpZ25hbGluZ1N0YXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlQ29ubmVjdGlvblN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OnRvUlRDRHRsc1RyYW5zcG9ydFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRD
SWNlVHJhbnNwb3J0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VHYXRoZXJpbmdT
dGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpidW5kbGVQb2xpY3lGcm9tQ29uZmlndXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjppY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29uZmlndXJhdGlvbik6
CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0Vycm9yRGV0YWlsVHlwZSk6CisgICAgICAgICogcGxh
dGZvcm0vR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1l
ci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1
ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6fkF1ZGlv
U291cmNlUHJvdmlkZXJHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lcjo6aGFuZGxlTmV3RGVpbnRlcmxlYXZlUGFkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5o
OgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVy
LmNwcDoKKyAgICAgICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxH
c3RXZWJSVENSVFBSZWNlaXZlcj4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0V2ViUlRD
UlRQUmVjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+
KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4pOgorICAgICAg
ICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPik6CisgICAgICAgIChXVEY6
OmRlcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4pOgorICAgICAgICAoV1RGOjpyZWZH
UHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RX
ZWJSVENEYXRhQ2hhbm5lbD4pOgorICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJUQ0RUTFNU
cmFuc3BvcnQ+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQ+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KToKKyAg
ICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmg6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpjYXBzTWVkaWFUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGVBdWRpb1NvdXJjZVByb3ZpZGVyKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0
dXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpHU3Ry
ZWFtZXJBdWRpb0NhcHR1cmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXI6OmNyZWF0ZUNvbnZlcnRlcik6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OkdTdHJlYW1lckRUTUZT
ZW5kZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNr
ZW5kOjp+R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmNhbkluc2VydERUTUYpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OnBsYXlUb25lKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjp0b25lcyBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6ZHVyYXRpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmludGVyVG9uZUdhcCBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6b25U
b25lUGxheWVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcDoKKyAgICAg
ICAgKHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkVHJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwOgorICAgICAgICAo
d2Via2l0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2NsYXNzX2luaXQpOgorICAgICAgICAqIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6
flJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0
YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXI6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpkaXNwYXRj
aFNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKToKKyAgICAg
ICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdTb3Vy
Y2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdT
dHJlYW1lcjo6bG9ja1ZhbHZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdTb3VyY2VHU3RyZWFtZXI6OnJlbGVhc2VWYWx2ZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpyZWdpc3RlckNsaWVudCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdT
b3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29t
aW5nU291cmNlR1N0cmVhbWVyOjpiaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNv
bWluZ1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c3Rh
cnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lcjo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjYXBhYmlsaXRpZXMpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXR0
aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXI6OnNldHRpbmdzRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVh
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcjo6c2V0UGF5bG9hZFR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3Vy
Y2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291
cmNlR1N0cmVhbWVyOjp+UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2V0
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdT
dHJlYW1lcjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlh
U291cmNlR1N0cmVhbWVyOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29p
bmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c291cmNlTXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c291cmNlRW5hYmxl
ZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyOjppbml0aWFsaXplRnJvbVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bGluayk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFNpbmtQYWQpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZSBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmFsbG93ZWRDYXBzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6cGFkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6c2VuZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6YmluIGNvbnN0KToKKyAgICAgICAgKFdl
YkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5
cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXIuaDogQWRkZWQuCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6SW50ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6c2V0V2ViUlRDSDI2NVN1cHBvcnQpOgorICAgICAgICAoV2ViQ29y
ZTo6SW50ZXJuYWxzOjpzZXRXZWJSVENWUDlTdXBwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6c2V0V2ViUlRDVlA5VlRCU3VwcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRl
cm5hbHM6OnNldEVuYWJsZVdlYlJUQ0VuY3J5cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpzZXRVc2VEVExTMTApOgorCiAyMDIyLTAzLTA1ICBTaW1vbiBGcmFzZXIgIDxzaW1v
bi5mcmFzZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJlcGxhY2UgSW50UmVjdEV4dGVudCB3aXRo
IFJlY3RFZGdlczxpbnQ+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5j
ZXMvV2ViUHJlZmVyZW5jZXMueWFtbCBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9X
ZWJQcmVmZXJlbmNlcy55YW1sCmluZGV4IDRhYTY3YTMxMjk4MDRkYTlmZjhlNmE0NDk0NTk2YzQ2
NjFmZjllMTYuLmI2NmM3NDBlODA3MmNjNTljNWJhMjdjNWVlNDMzNjQxNmY5ZjFjZmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlcy55YW1s
CisrKyBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlcy55YW1s
CkBAIC0xNzIyLDcgKzE3MjIsOSBAQCBQZWVyQ29ubmVjdGlvbkVuYWJsZWQ6CiAgICAgV2ViS2l0
TGVnYWN5OgogICAgICAgZGVmYXVsdDogdHJ1ZQogICAgIFdlYktpdDoKLSAgICAgIGRlZmF1bHQ6
IFdlYkNvcmU6OkxpYldlYlJUQ1Byb3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUoKQorICAgICAgIlVT
RShMSUJXRUJSVEMpIjogV2ViQ29yZTo6TGliV2ViUlRDUHJvdmlkZXI6OndlYlJUQ0F2YWlsYWJs
ZSgpCisgICAgICAiVVNFKEdTVFJFQU1FUl9XRUJSVEMpIjogdHJ1ZQorICAgICAgZGVmYXVsdDog
ZmFsc2UKICAgICBXZWJDb3JlOgogICAgICAgZGVmYXVsdDogdHJ1ZQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwu
eWFtbCBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVy
aW1lbnRhbC55YW1sCmluZGV4IDkzZGFmODRjYTdkMTllNTI4YThhYzYwMGM5Mjk0MGY5NGRhMTcw
OGMuLjE3ZmEwMTQ0M2U2OWVkZjFjYjFiYTU2ODFhYTE2OTgyODk2NzVjYTYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRh
bC55YW1sCisrKyBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNl
c0V4cGVyaW1lbnRhbC55YW1sCkBAIC0xNzIyLDkgKzE3MjIsMTEgQEAgV2ViUlRDRW5jb2RlZFRy
YW5zZm9ybUVuYWJsZWQ6CiAgICAgV2ViS2l0TGVnYWN5OgogICAgICAgZGVmYXVsdDogZmFsc2UK
ICAgICBXZWJLaXQ6Ci0gICAgICBkZWZhdWx0OiB0cnVlCisgICAgICAiVVNFKExJQldFQlJUQyki
OiB0cnVlCisgICAgICBkZWZhdWx0OiBmYWxzZQogICAgIFdlYkNvcmU6Ci0gICAgICBkZWZhdWx0
OiB0cnVlCisgICAgICAiVVNFKExJQldFQlJUQykiOiB0cnVlCisgICAgICBkZWZhdWx0OiBmYWxz
ZQogCiAjIEZJWE1FOiBJcyB0aGlzIGltcGxlbWVudGVkIGZvciBXZWJLaXRMZWdhY3k/IElmIG5v
dCwgdGhpcyBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBXZWJLaXRMZWdhY3kgZW50aXJlbHkuCiBX
ZWJSVENIMjY0TG93TGF0ZW5jeUVuY29kZXJFbmFibGVkOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvZ2xpYi9HUmVmUHRyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAK
aW5kZXggMWI5YWRlM2Y5MzZlZTU2NGQzODJjMDdlZjk2NjU3NmFiNjYxOWI0MS4uOTMxMmEzZTg5
NGJkOGEwZDdhMTFhNmE0NWNjYmQzNjg3M2Y4YzUwZiAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93
dGYvZ2xpYi9HUmVmUHRyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuY3Bw
CkBAIC0yMjMsNiArMjIzLDIyIEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyKEdVcmkqIHB0
cikKIH0KICNlbmRpZgogCit0ZW1wbGF0ZSA8PgorR0FycmF5KiByZWZHUHRyKEdBcnJheSogcHRy
KQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdfYXJyYXlfcmVmKHB0cik7CisKKyAgICByZXR1
cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBkZXJlZkdQdHIoR0FycmF5KiBwdHIpCit7
CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19hcnJheV91bnJlZihwdHIpOworfQorCiB9IC8vIG5h
bWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShHTElCKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dU
Ri93dGYvZ2xpYi9HUmVmUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuaAppbmRl
eCBlNzIxZmQ1NWY0MmFjM2Q3NmI0MDE3NjBlMGExOWI5OWZlM2UwZjhiLi42NjczNjA3ODdhYzVm
NjQ5NjBiZTFkNTQ2MmRkZTU5ZDczNTVmNmEzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9n
bGliL0dSZWZQdHIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuaApAQCAtMjUw
LDYgKzI1MCw4IEBAIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHRGF0ZVRpbWUqIHJl
ZkdQdHIoR0RhdGVUaW1lKiBwdHIpOwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIHZv
aWQgZGVyZWZHUHRyKEdEYXRlVGltZSogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJ
VkFURSBHREJ1c05vZGVJbmZvKiByZWZHUHRyKEdEQnVzTm9kZUluZm8qIHB0cik7CiB0ZW1wbGF0
ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIoR0RCdXNOb2RlSW5mbyogcHRy
KTsKK3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHQXJyYXkqIHJlZkdQdHIoR0FycmF5
Kik7Cit0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIoR0FycmF5
Kik7CiAKICNpZiBIQVZFKEdVUkkpCiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgR1Vy
aSogcmVmR1B0cihHVXJpKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCmluZGV4IGRmYjli
ZGFjNTY2Yjc5NjViYWFjZmUwY2ZlZTcwNjE0MzhiMTk1YjIuLjhjNzQ0ZmNkMTM3NzAwNmZiYjkw
NzY2ZWJiM2JjNGM4NGU4ZGNjYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCkBAIC0x
ODAsNyArMTgwLDcgQEAgc3RhdGljIHZvaWQgZ2F0aGVyRGVjb2RpbmdJbmZvKERvY3VtZW50JiBk
b2N1bWVudCwgTWVkaWFEZWNvZGluZ0NvbmZpZ3VyYXRpb24mJgogICAgIGNvbmZpZ3VyYXRpb24u
Y2FuRXhwb3NlVlA5ID0gZG9jdW1lbnQuc2V0dGluZ3MoKS52cDlEZWNvZGVyRW5hYmxlZCgpOwog
I2VuZGlmCiAKLSNpZiBFTkFCTEUoV0VCX1JUQykKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KExJQldFQlJUQykKICAgICBpZiAoY29uZmlndXJhdGlvbi50eXBlID09IE1lZGlhRGVjb2RpbmdU
eXBlOjpXZWJSVEMpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCkp
CiAgICAgICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLmNyZWF0ZURlY29kaW5nQ29u
ZmlndXJhdGlvbihXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBXVEZNb3ZlKGRlY29kaW5nQ2FsbGJh
Y2spKTsKQEAgLTIwMCw3ICsyMDAsNyBAQCBzdGF0aWMgdm9pZCBnYXRoZXJFbmNvZGluZ0luZm8o
RG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYUVuY29kaW5nQ29uZmlndXJhdGlvbiYmCiAgICAgICAg
IGNhbGxiYWNrKFdURk1vdmUocmVzdWx0KSk7CiAgICAgfTsKIAotI2lmIEVOQUJMRShXRUJfUlRD
KQorI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoTElCV0VCUlRDKQogICAgIGlmIChjb25maWd1
cmF0aW9uLnR5cGUgPT0gTWVkaWFFbmNvZGluZ1R5cGU6OldlYlJUQykgewogICAgICAgICBpZiAo
YXV0byogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIHBhZ2UtPmxpYldlYlJU
Q1Byb3ZpZGVyKCkuY3JlYXRlRW5jb2RpbmdDb25maWd1cmF0aW9uKFdURk1vdmUoY29uZmlndXJh
dGlvbiksIFdURk1vdmUoZW5jb2RpbmdDYWxsYmFjaykpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwCmluZGV4IDUwNmYzMzc0Yjdl
NmQ3NmQ1OThmNDk1M2Q4NDljMzhlYWFjNzI3ZTkuLjdiOWI1YjY2ZGE1MTUzMjRlNjY2Y2Y0YjFi
YTNmNWNkMmZhZTBiZDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFEZXZpY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNpbmNsdWRlICJGcmFt
ZS5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCiAjaW5jbHVkZSAiSlNNZWRp
YURldmljZUluZm8uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVkZSAiTWVkaWFUcmFj
a1N1cHBvcnRlZENvbnN0cmFpbnRzLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApp
bmRleCA4NmQ3NTczOTkyZjRkNWJkNGMzNTNkY2I2MDk3MjY0ZTk4NWQ1N2U4Li4yZjMzZjJiMDcy
ZmEzZmVmNWQzYWI3ZGQzYWY5YTI4YTY0YWIxMGNlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3Bw
CkBAIC01Myw5ICs1MywxNCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0J1aWxkZXIuaD4K
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMuaD4KIAorI2lmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisj
ZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgIVVTRShMSUJXRUJSVEMpCisjaWYg
IVVTRShMSUJXRUJSVEMpICYmICFVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwogc3RhdGljIHN0ZDo6
dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNyZWF0ZU5vUGVlckNvbm5lY3Rpb25C
YWNrZW5kKFJUQ1BlZXJDb25uZWN0aW9uJikKIHsKICAgICByZXR1cm4gbnVsbHB0cjsKQEAgLTIx
NywxOCArMjIyLDggQEAgdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFJlbW90ZURlc2Ny
aXB0aW9uU3VjY2VlZGVkKHN0ZDo6b3B0aW9uYWw8RGVzY3JpcHQKICAgICAgICAgaWYgKGRlc2Ny
aXB0aW9uU3RhdGVzKQogICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbi51cGRhdGVEZXNjcmlw
dGlvbnMoV1RGTW92ZSgqZGVzY3JpcHRpb25TdGF0ZXMpKTsKIAotICAgICAgICBmb3IgKGF1dG8m
IGV2ZW50IDogZXZlbnRzKSB7Ci0gICAgICAgICAgICBhdXRvJiB0cmFjayA9IGV2ZW50LnRyYWNr
LmdldCgpOwotCi0gICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uLmRpc3BhdGNoRXZlbnQoUlRD
VHJhY2tFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS50cmFja0V2ZW50LCBFdmVudDo6Q2FuQnVi
YmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8sIFdURk1vdmUoZXZlbnQucmVjZWl2ZXIp
LCBXVEZNb3ZlKGV2ZW50LnRyYWNrKSwgV1RGTW92ZShldmVudC5zdHJlYW1zKSwgV1RGTW92ZShl
dmVudC50cmFuc2NlaXZlcikpKTsKLSAgICAgICAgICAgIEFMV0FZU19MT0coTE9HSURFTlRJRklF
UiwgIkRpc3BhdGNoZWQgaWYgZmVhc2libGUgdHJhY2sgb2YgdHlwZSAiLCB0cmFjay5zb3VyY2Uo
KS50eXBlKCkpOwotCi0gICAgICAgICAgICBpZiAobV9wZWVyQ29ubmVjdGlvbi5pc0Nsb3NlZCgp
KQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgLy8gRklYTUU6IEFzIHBl
ciBzcGVjLCB3ZSBzaG91bGQgc2V0IG11dGVkIHRvICdmYWxzZScgd2hlbiBzdGFydGluZyB0byBy
ZWNlaXZlIHRoZSBjb250ZW50IGZyb20gbmV0d29yay4KLSAgICAgICAgICAgIHRyYWNrLnNvdXJj
ZSgpLnNldE11dGVkKGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICBmb3IgKGF1dG8mIGV2ZW50
IDogZXZlbnRzKQorICAgICAgICAgICAgZGlzcGF0Y2hUcmFja0V2ZW50KGV2ZW50KTsKIAogICAg
ICAgICBpZiAobV9wZWVyQ29ubmVjdGlvbi5pc0Nsb3NlZCgpKQogICAgICAgICAgICAgcmV0dXJu
OwpAQCAtMjQwLDYgKzIzNSwyMCBAQCB2b2lkIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0UmVt
b3RlRGVzY3JpcHRpb25TdWNjZWVkZWQoc3RkOjpvcHRpb25hbDxEZXNjcmlwdAogICAgIH0pOwog
fQogCit2b2lkIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZGlzcGF0Y2hUcmFja0V2ZW50KFBlbmRp
bmdUcmFja0V2ZW50JiBldmVudCkKK3sKKyAgICBhdXRvJiB0cmFjayA9IGV2ZW50LnRyYWNrLmdl
dCgpOworCisgICAgbV9wZWVyQ29ubmVjdGlvbi5kaXNwYXRjaEV2ZW50KFJUQ1RyYWNrRXZlbnQ6
OmNyZWF0ZShldmVudE5hbWVzKCkudHJhY2tFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2
ZW50OjpJc0NhbmNlbGFibGU6Ok5vLCBXVEZNb3ZlKGV2ZW50LnJlY2VpdmVyKSwgV1RGTW92ZShl
dmVudC50cmFjayksIFdURk1vdmUoZXZlbnQuc3RyZWFtcyksIFdURk1vdmUoZXZlbnQudHJhbnNj
ZWl2ZXIpKSk7CisgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiRGlzcGF0Y2hlZCBpZiBm
ZWFzaWJsZSB0cmFjayBvZiB0eXBlICIsIHRyYWNrLnNvdXJjZSgpLnR5cGUoKSk7CisKKyAgICBp
ZiAobV9wZWVyQ29ubmVjdGlvbi5pc0Nsb3NlZCgpKQorICAgICAgICByZXR1cm47CisKKyAgICAv
LyBGSVhNRTogQXMgcGVyIHNwZWMsIHdlIHNob3VsZCBzZXQgbXV0ZWQgdG8gJ2ZhbHNlJyB3aGVu
IHN0YXJ0aW5nIHRvIHJlY2VpdmUgdGhlIGNvbnRlbnQgZnJvbSBuZXR3b3JrLgorICAgIHRyYWNr
LnNvdXJjZSgpLnNldE11dGVkKGZhbHNlKTsKK30KKwogdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OnNldFJlbW90ZURlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiYmIGV4Y2VwdGlvbikKIHsK
ICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtNDM3LDEzICs0NDYsMTkgQEAgdm9pZCBQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdlbmVyYXRlQ2VydGlmaWNhdGUoRG9jdW1lbnQmIGRvY3Vt
ZW50LCBjb25zdCBDZXJ0aWYKICAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52YWxpZFN0YXRlRXJy
b3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCiAgICAgTGliV2ViUlRDQ2VydGlmaWNhdGVH
ZW5lcmF0b3I6OmdlbmVyYXRlQ2VydGlmaWNhdGUoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwg
cGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKSwgaW5mbywgW3Byb21pc2UgPSBXVEZNb3ZlKHByb21p
c2UpXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgcHJvbWlzZS5zZXR0bGUoV1RG
TW92ZShyZXN1bHQpKTsKICAgICB9KTsKKyNlbGlmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorICAg
IGF1dG8gY2VydGlmaWNhdGUgPSA6OldlYkNvcmU6OmdlbmVyYXRlQ2VydGlmaWNhdGUoZG9jdW1l
bnQuc2VjdXJpdHlPcmlnaW4oKSwgaW5mbyk7CisgICAgaWYgKGNlcnRpZmljYXRlLmhhc192YWx1
ZSgpKQorICAgICAgICBwcm9taXNlLnJlc29sdmUoKmNlcnRpZmljYXRlKTsKKyAgICBlbHNlCisg
ICAgICAgIHByb21pc2UucmVqZWN0KE5vdFN1cHBvcnRlZEVycm9yKTsKICNlbHNlCiAgICAgVU5V
U0VEX1BBUkFNKGRvY3VtZW50KTsKLSAgICBVTlVTRURfUEFSQU0oZXhwaXJlcyk7Ci0gICAgVU5V
U0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKICAgICBwcm9taXNlLnJl
amVjdChOb3RTdXBwb3J0ZWRFcnJvcik7CiAjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5oCmlu
ZGV4IDFlMjNiNGIyYzM2YTM5YTM4NDkzNjJiNGFmMGJhMjQ4YTAxOGI2YmUuLjdkZjc3MjA3ODlm
MjZlMDhkOTI1NGIxOWM3MjUwNzE0ZWNlNDU5ZTAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuaApAQCAt
MjI3LDYgKzIyNyw4IEBAIHByb3RlY3RlZDoKICAgICB9OwogICAgIHZvaWQgYWRkUGVuZGluZ1Ry
YWNrRXZlbnQoUGVuZGluZ1RyYWNrRXZlbnQmJik7CiAKKyAgICB2b2lkIGRpc3BhdGNoVHJhY2tF
dmVudChQZW5kaW5nVHJhY2tFdmVudCYpOworCiBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBk
b0NyZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYmKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIGRv
Q3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlvbnMmJikgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAppbmRl
eCA1YmRkZmVjN2U0ZGZjOWQ5YzAyOTljOWUyN2NhOWRjMjJkZjY0MTA0Li45MGRlNjM5OTM0ZWQ2
MWM1YzBiMTAxMmMwYWE1Mzk3ZGQwZDhiMzJhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcApAQCAtOTUsNyAr
OTUsNyBAQCBFeGNlcHRpb25PcjxSZWY8UlRDUGVlckNvbm5lY3Rpb24+PiBSVENQZWVyQ29ubmVj
dGlvbjo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudAogICAgIGlmICghcGVlckNvbm5lY3Rpb24t
PmlzQ2xvc2VkKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC5wYWdlKCkp
IHsKICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLT5yZWdpc3RlclRvQ29udHJvbGxlcihwYWdl
LT5ydGNDb250cm9sbGVyKCkpOwotI2lmICFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0VfTE9HX0RJ
U0FCTEVECisjaWYgVVNFKExJQldFQlJUQykgJiYgKCFMT0dfRElTQUJMRUQgfHwgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVEKQogICAgICAgICAgICAgaWYgKCFwYWdlLT5zZXNzaW9uSUQoKS5pc0VwaGVt
ZXJhbCgpKQogICAgICAgICAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0TG9n
Z2luZ0xldmVsKExvZ1dlYlJUQy5sZXZlbCk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmJhN2JhOWEwMDU5
NmQ2NTBlNGM3YjNmNzgzYzcyN2IyMWE1NWRkNjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAx
OS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkV2
ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUg
IlJUQ0RhdGFDaGFubmVsLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxFdmVudC5oIgorI2lu
Y2x1ZGUgIlJUQ0Vycm9yLmgiCisjaW5jbHVkZSAiUlRDUHJpb3JpdHlUeXBlLmgiCisKKyNpbmNs
dWRlIDx3dGYvTWFpblRocmVhZC5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtp
dF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0
X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dVbmlxdWVQ
dHI8R3N0U3RydWN0dXJlPiBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmZyb21SVENEYXRh
Q2hhbm5lbEluaXQoY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JiBvcHRpb25zKQoreworICAgIEdV
bmlxdWVQdHI8R3N0U3RydWN0dXJlPiBpbml0KGdzdF9zdHJ1Y3R1cmVfbmV3KCJvcHRpb25zIiwg
InByb3RvY29sIiwgR19UWVBFX1NUUklORywgb3B0aW9ucy5wcm90b2NvbC51dGY4KCkuZGF0YSgp
LCBudWxscHRyKSk7CisKKyAgICBpZiAob3B0aW9ucy5vcmRlcmVkKQorICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChpbml0LmdldCgpLCAib3JkZXJlZCIsIEdfVFlQRV9CT09MRUFOLCAqb3B0aW9u
cy5vcmRlcmVkLCBudWxscHRyKTsKKyAgICBpZiAob3B0aW9ucy5tYXhQYWNrZXRMaWZlVGltZSkK
KyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgIm1heC1wYWNrZXQtbGlmZXRp
bWUiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5tYXhQYWNrZXRMaWZlVGltZSwgbnVsbHB0cik7Cisg
ICAgaWYgKG9wdGlvbnMubWF4UmV0cmFuc21pdHMpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
KGluaXQuZ2V0KCksICJtYXgtcmV0cmFuc21pdHMiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5tYXhS
ZXRyYW5zbWl0cywgbnVsbHB0cik7CisgICAgaWYgKG9wdGlvbnMubmVnb3RpYXRlZCkKKyAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgIm5lZ290aWF0ZWQiLCBHX1RZUEVfQk9P
TEVBTiwgKm9wdGlvbnMubmVnb3RpYXRlZCwgbnVsbHB0cik7CisgICAgaWYgKG9wdGlvbnMuaWQp
CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJpZCIsIEdfVFlQRV9JTlQs
ICpvcHRpb25zLmlkLCBudWxscHRyKTsKKworICAgIEdzdFdlYlJUQ1ByaW9yaXR5VHlwZSBwcmlv
cml0eVR5cGU7CisgICAgc3dpdGNoIChvcHRpb25zLnByaW9yaXR5KSB7CisgICAgY2FzZSBSVENQ
cmlvcml0eVR5cGU6OlZlcnlMb3c6CisgICAgICAgIHByaW9yaXR5VHlwZSA9IEdTVF9XRUJSVENf
UFJJT1JJVFlfVFlQRV9WRVJZX0xPVzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSVENQcmlv
cml0eVR5cGU6OkxvdzoKKyAgICAgICAgcHJpb3JpdHlUeXBlID0gR1NUX1dFQlJUQ19QUklPUklU
WV9UWVBFX0xPVzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6Ok1l
ZGl1bToKKyAgICAgICAgcHJpb3JpdHlUeXBlID0gR1NUX1dFQlJUQ19QUklPUklUWV9UWVBFX01F
RElVTTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OkhpZ2g6Cisg
ICAgICAgIHByaW9yaXR5VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9ISUdIOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgInBy
aW9yaXR5IiwgR1NUX1RZUEVfV0VCUlRDX1BSSU9SSVRZX1RZUEUsIHByaW9yaXR5VHlwZSwgbnVs
bHB0cik7CisKKyAgICByZXR1cm4gaW5pdDsKK30KKworUmVmPFJUQ0RhdGFDaGFubmVsRXZlbnQ+
IEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y3JlYXRlRGF0YUNoYW5uZWxFdmVudChEb2N1
bWVudCYgZG9jdW1lbnQsIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+JiYgZGF0YUNoYW5u
ZWwpCit7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBsYWJlbDsKKyAgICBHVW5pcXVlT3V0UHRy
PGNoYXI+IHByb3RvY29sOworICAgIGdib29sZWFuIG9yZGVyZWQsIG5lZ290aWF0ZWQ7CisgICAg
Z2ludCBtYXhQYWNrZXRMaWZlVGltZSwgbWF4UmV0cmFuc21pdHMsIGlkOworICAgIGdfb2JqZWN0
X2dldChkYXRhQ2hhbm5lbC5nZXQoKSwgIm9yZGVyZWQiLCAmb3JkZXJlZCwgImxhYmVsIiwgJmxh
YmVsLm91dFB0cigpLAorICAgICAgICAibWF4LXBhY2tldC1saWZldGltZSIsICZtYXhQYWNrZXRM
aWZlVGltZSwgIm1heC1yZXRyYW5zbWl0cyIsICZtYXhSZXRyYW5zbWl0cywKKyAgICAgICAgInBy
b3RvY29sIiwgJnByb3RvY29sLm91dFB0cigpLCAibmVnb3RpYXRlZCIsICZuZWdvdGlhdGVkLCAi
aWQiLCAmaWQsIG51bGxwdHIpOworCisgICAgUlRDRGF0YUNoYW5uZWxJbml0IGluaXQ7CisgICAg
aW5pdC5vcmRlcmVkID0gb3JkZXJlZDsKKyAgICBpbml0Lm1heFBhY2tldExpZmVUaW1lID0gbWF4
UGFja2V0TGlmZVRpbWU7CisgICAgaW5pdC5tYXhSZXRyYW5zbWl0cyA9IG1heFJldHJhbnNtaXRz
OworICAgIGluaXQucHJvdG9jb2wgPSBTdHJpbmcocHJvdG9jb2wuZ2V0KCkpOworICAgIGluaXQu
bmVnb3RpYXRlZCA9IG5lZ290aWF0ZWQ7CisgICAgaW5pdC5pZCA9IGlkOworCisgICAgYXV0byBo
YW5kbGVyID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcj4oV1RG
TW92ZShkYXRhQ2hhbm5lbCkpOworICAgIGF1dG8gY2hhbm5lbCA9IFJUQ0RhdGFDaGFubmVsOjpj
cmVhdGUoZG9jdW1lbnQsIFdURk1vdmUoaGFuZGxlciksIFN0cmluZzo6ZnJvbVVURjgobGFiZWwu
Z2V0KCkpLCBXVEZNb3ZlKGluaXQpKTsKKyAgICByZXR1cm4gUlRDRGF0YUNoYW5uZWxFdmVudDo6
Y3JlYXRlKGV2ZW50TmFtZXMoKS5kYXRhY2hhbm5lbEV2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpO
bywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8sIFdURk1vdmUoY2hhbm5lbCkpOworfQorCitHU3Ry
ZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcihHUmVm
UHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmIGNoYW5uZWwpCisgICAgOiBtX2NoYW5uZWwoV1RG
TW92ZShjaGFubmVsKSkKK3sKKyAgICBBU1NFUlQobV9jaGFubmVsKTsKKworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX2NoYW5uZWwuZ2V0KCksICJub3RpZnk6OnJlYWR5LXN0YXRlIiwg
R19DQUxMQkFDSygrW10oR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyKSB7Cisg
ICAgICAgIGhhbmRsZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NoYW5uZWwuZ2V0KCksICJvbi1tZXNzYWdlLWRh
dGEiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIs
IEdCeXRlcyogYnl0ZXMpIHsKKyAgICAgICAgaGFuZGxlci0+b25NZXNzYWdlRGF0YShieXRlcyk7
CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NoYW5uZWwu
Z2V0KCksICJvbi1tZXNzYWdlLXN0cmluZyIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlciogaGFuZGxlciwgY29uc3QgY2hhciogbWVzc2FnZSkgeworICAgICAgICBo
YW5kbGVyLT5vbk1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CisgICAgfSksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NoYW5uZWwuZ2V0KCksICJvbi1lcnJvciIsIEdfQ0FM
TEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlciwgR0Vycm9yKiBl
cnJvcikgeworICAgICAgICBoYW5kbGVyLT5vbkVycm9yKGVycm9yKTsKKyAgICB9KSwgdGhpcyk7
CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLWJ1ZmZl
cmVkLWFtb3VudC1sb3ciLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXIqIGhhbmRsZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBwYXNzIHRoZSBhbW91
bnQgZGVsdGEgZnJvbSB3ZWJydGNiaW4gdG8gdGhlIFdlYkNvcmUgaGFuZGxlci4KKyAgICAgICAg
aGFuZGxlci0+b25CdWZmZXJlZEFtb3VudExvdygpOworICAgIH0pLCB0aGlzKTsKK30KKworR1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjp+R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKCkK
K3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9jaGFubmVsLmdl
dCgpLCB0aGlzKTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnNldENs
aWVudChSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQmIGNsaWVudCwgU2NyaXB0RXhlY3V0aW9u
Q29udGV4dElkZW50aWZpZXIgY29udGV4dElkZW50aWZpZXIpCit7CisgICAgTG9ja2VyIGxvY2tl
ciB7IG1fY2xpZW50TG9jayB9OworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50
ID0gY2xpZW50OworICAgIG1fY29udGV4dElkZW50aWZpZXIgPSBjb250ZXh0SWRlbnRpZmllcjsK
KworICAgIGZvciAoYXV0byYgbWVzc2FnZSA6IG1fcGVuZGluZ01lc3NhZ2VzKSB7CisgICAgICAg
IHN3aXRjaE9uKG1lc3NhZ2UsIFsmXShSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4mIGRhdGEp
IHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiTm90aWZ5aW5nIHF1ZXVlZCByYXcgZGF0YSAoc2l6
ZTogJXp1KSIsIGRhdGEtPnNpemUoKSk7CisgICAgICAgICAgICBjbGllbnQuZGlkUmVjZWl2ZVJh
d0RhdGEoZGF0YS0+bWFrZUNvbnRpZ3VvdXMoKS0+ZGF0YSgpLCBkYXRhLT5zaXplKCkpOworICAg
ICAgICB9LCBbJl0oU3RyaW5nJiB0ZXh0KSB7CisgICAgICAgICAgICBHU1RfREVCVUcoIk5vdGlm
eWluZyBxdWV1ZWQgc3RyaW5nICVzIiwgdGV4dC5hc2NpaSgpLmRhdGEoKSk7CisgICAgICAgICAg
ICBjbGllbnQuZGlkUmVjZWl2ZVN0cmluZ0RhdGEodGV4dCk7CisgICAgICAgIH0sIFsmXShTdGF0
ZUNoYW5nZSBzdGF0ZUNoYW5nZSkgeworICAgICAgICAgICAgaWYgKHN0YXRlQ2hhbmdlLmVycm9y
KSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcnRjRXJyb3IgPSB0b1JUQ0Vycm9yKCpzdGF0
ZUNoYW5nZS5lcnJvcikpCisgICAgICAgICAgICAgICAgICAgIGNsaWVudC5kaWREZXRlY3RFcnJv
cihydGNFcnJvci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IEdTVF9ERUJVRygiRGlzcGF0Y2hpbmcgc3RhdGUgY2hhbmdlIHRvICVkIiwgc3RhdGljX2Nhc3Q8
aW50PihzdGF0ZUNoYW5nZS5zdGF0ZSkpOworICAgICAgICAgICAgY2xpZW50LmRpZENoYW5nZVJl
YWR5U3RhdGUoc3RhdGVDaGFuZ2Uuc3RhdGUpOworICAgICAgICB9KTsKKyAgICB9CisgICAgbV9w
ZW5kaW5nTWVzc2FnZXMuY2xlYXIoKTsKK30KKworYm9vbCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6OnNlbmRTdHJpbmdEYXRhKGNvbnN0IENTdHJpbmcmIHRleHQpCit7CisgICAgR1NUX0RF
QlVHKCJTZW5kaW5nIHN0cmluZyAlcyIsIHRleHQuZGF0YSgpKTsKKyAgICBnX3NpZ25hbF9lbWl0
X2J5X25hbWUobV9jaGFubmVsLmdldCgpLCAic2VuZC1zdHJpbmciLCB0ZXh0LmRhdGEoKSk7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpz
ZW5kUmF3RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3RoKQoreworICAgIGF1
dG8gYnl0ZXMgPSBhZG9wdEdSZWYoZ19ieXRlc19uZXcoZGF0YSwgbGVuZ3RoKSk7CisgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5lbC5nZXQoKSwgInNlbmQtZGF0YSIsIGJ5dGVzLmdl
dCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6OmNsb3NlKCkKK3sKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV9jaGFubmVsLmdl
dCgpLCAiY2xvc2UiKTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNo
ZWNrU3RhdGUoKQoreworICAgIEFTU0VSVChtX2NsaWVudExvY2suaXNIZWxkKCkpOworCisgICAg
R3N0V2ViUlRDRGF0YUNoYW5uZWxTdGF0ZSBjaGFubmVsU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0
KG1fY2hhbm5lbC5nZXQoKSwgInJlYWR5LXN0YXRlIiwgJmNoYW5uZWxTdGF0ZSwgbnVsbHB0cik7
CisKKyAgICBSVENEYXRhQ2hhbm5lbFN0YXRlIHN0YXRlOworICAgIHN3aXRjaCAoY2hhbm5lbFN0
YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9ORVc6CisgICAg
Y2FzZSBHU1RfV0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9DT05ORUNUSU5HOgorICAgICAgICBz
dGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRBX0NIQU5ORUxfU1RBVEVfT1BFTjoKKyAgICAgICAgc3Rh
dGUgPSBSVENEYXRhQ2hhbm5lbFN0YXRlOjpPcGVuOworICAgICAgICBicmVhazsKKyAgICBjYXNl
IEdTVF9XRUJSVENfREFUQV9DSEFOTkVMX1NUQVRFX0NMT1NJTkc6CisgICAgICAgIHN0YXRlID0g
UlRDRGF0YUNoYW5uZWxTdGF0ZTo6Q2xvc2luZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBH
U1RfV0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9DTE9TRUQ6CisgICAgICAgIHN0YXRlID0gUlRD
RGF0YUNoYW5uZWxTdGF0ZTo6Q2xvc2VkOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBp
ZiAoIW1fY2xpZW50KSB7CisgICAgICAgIEdTVF9ERUJVRygiTm8gY2xpZW50IHlldCwgcXVldWVp
bmcgc3RhdGUiKTsKKyAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5kKFN0YXRlQ2hhbmdl
IHsgc3RhdGUsIHsgfSB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghKm1f
Y2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoIkRpc3BhdGNoaW5nIHN0
YXRlIGNoYW5nZSB0byAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdGUpKTsKKyAgICBwb3N0VGFz
ayhbY2xpZW50ID0gbV9jbGllbnQsIHN0YXRlXSB7CisgICAgICAgIGlmICghKmNsaWVudCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2xpZW50LnZhbHVlKCktPmRpZENoYW5nZVJlYWR5
U3RhdGUoc3RhdGUpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcjo6cmVhZHlTdGF0ZUNoYW5nZWQoKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVu
dExvY2sgfTsKKyAgICBjaGVja1N0YXRlKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyOjpvbk1lc3NhZ2VEYXRhKEdCeXRlcyogYnl0ZXMpCit7CisgICAgTG9ja2VyIGxv
Y2tlciB7IG1fY2xpZW50TG9jayB9OworCisgICAgaWYgKCFtX2NsaWVudCkgeworICAgICAgICBt
X3BlbmRpbmdNZXNzYWdlcy5hcHBlbmQoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcjo6Y3JlYXRlKGJ5
dGVzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoISptX2NsaWVudCkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50LCBieXRlcyA9
IEdSZWZQdHI8R0J5dGVzPihieXRlcyldIHsKKyAgICAgICAgaWYgKCEqY2xpZW50KQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBnc2l6ZSBzaXplID0gMDsKKyAgICAgICAgY29uc3QgYXV0
byogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGdfYnl0ZXNfZ2V0X2Rh
dGEoYnl0ZXMuZ2V0KCksICZzaXplKSk7CisgICAgICAgIGNsaWVudC52YWx1ZSgpLT5kaWRSZWNl
aXZlUmF3RGF0YShkYXRhLCBzaXplKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRh
Q2hhbm5lbEhhbmRsZXI6Om9uTWVzc2FnZVN0cmluZyhjb25zdCBjaGFyKiBtZXNzYWdlKQorewor
ICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKworICAgIEdTVF9ERUJVRygiSW5j
b21pbmcgc3RyaW5nOiAlcyIsIG1lc3NhZ2UpOworICAgIGlmICghbV9jbGllbnQpIHsKKyAgICAg
ICAgR1NUX0RFQlVHKCJObyBjbGllbnQgeWV0LCBrZWVwaW5nIGFzIGJ1ZmZlcmVkIG1lc3NhZ2Ui
KTsKKyAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5kKFN0cmluZzo6ZnJvbVVURjgobWVz
c2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCEqbV9jbGllbnQpCisg
ICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVRygiRGlzcGF0Y2hpbmcgcGF5bG9hZCIpOwor
ICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudCwgc3RyaW5nID0gU3RyaW5nOjpmcm9tVVRG
OChtZXNzYWdlKV0geworICAgICAgICBpZiAoISpjbGllbnQpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgY2xpZW50LnZhbHVlKCktPmRpZFJlY2VpdmVTdHJpbmdEYXRhKHN0cmluZyk7
CisgICAgICAgIEdTVF9ERUJVRygiRG9uZSIpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1l
ckRhdGFDaGFubmVsSGFuZGxlcjo6b25FcnJvcihHRXJyb3IqIGVycm9yKQoreworICAgIExvY2tl
ciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICBy
ZXR1cm47CisKKyAgICBHU1RfV0FSTklORygiR290IGRhdGEtY2hhbm5lbCBlcnJvciAlcyIsIGVy
cm9yLT5tZXNzYWdlKTsKKyAgICBHVW5pcXVlUHRyPEdFcnJvcj4gZXJyb3JDb3B5KGdfZXJyb3Jf
Y29weShlcnJvcikpOworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudCwgZXJyb3IgPSBX
VEZNb3ZlKGVycm9yQ29weSldIHsKKyAgICAgICAgaWYgKCFjbGllbnQgfHwgIWVycm9yKQorICAg
ICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcnRjRXJyb3IgPSB0b1JUQ0Vycm9yKGVy
cm9yLmdldCgpKTsKKyAgICAgICAgaWYgKCFydGNFcnJvcikKKyAgICAgICAgICAgIHJ0Y0Vycm9y
ID0gUlRDRXJyb3I6OmNyZWF0ZShSVENFcnJvcjo6SW5pdCB7IFJUQ0Vycm9yRGV0YWlsVHlwZTo6
RGF0YUNoYW5uZWxGYWlsdXJlLCB7IH0sIHsgfSwgeyB9LCB7IH0gfSwgeyB9KTsKKyAgICAgICAg
Y2xpZW50LnZhbHVlKCktPmRpZERldGVjdEVycm9yKHJ0Y0Vycm9yLnJlbGVhc2VOb25OdWxsKCkp
OworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25CdWZm
ZXJlZEFtb3VudExvdygpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9Owor
ICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHBvc3RUYXNrKFtjbGll
bnQgPSBtX2NsaWVudF0geworICAgICAgICBpZiAoIWNsaWVudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAvLyBGSVhNRTogUGFzcyBhbW91bnQgdG8gaGFuZGxlciBpbnN0ZWFkIG9m
IDAuCisgICAgICAgIGNsaWVudC52YWx1ZSgpLT5idWZmZXJlZEFtb3VudElzRGVjcmVhc2luZygw
KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnBvc3RU
YXNrKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBBU1NFUlQobV9jbGllbnRM
b2NrLmlzSGVsZCgpKTsKKworICAgIGlmICghbV9jb250ZXh0SWRlbnRpZmllcikgeworICAgICAg
ICBjYWxsT25NYWluVGhyZWFkKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpwb3N0VGFza1RvKG1fY29udGV4dElk
ZW50aWZpZXIsIFdURk1vdmUoZnVuY3Rpb24pKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhmMzMyYmRlMjRjZWVj
OTIxZmQ0NjE2MmM1MDYwZWEwMjU5M2NlMWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXIuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5l
bFN0YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpbmNsdWRlIDx3dGYvQ29u
ZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50OworY2xhc3MgUlRDRGF0
YUNoYW5uZWxFdmVudDsKK2NsYXNzIFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudDsKK3N0cnVj
dCBSVENEYXRhQ2hhbm5lbEluaXQ7CisKK2NsYXNzIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxl
ciBmaW5hbCA6IHB1YmxpYyBSVENEYXRhQ2hhbm5lbEhhbmRsZXIgeworICAgIFdURl9NQUtFX0ZB
U1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlcihHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmKTsKKyAgICB+R1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyKCk7CisKKyAgICBzdGF0aWMgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1
cmU+IGZyb21SVENEYXRhQ2hhbm5lbEluaXQoY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0Jik7Cisg
ICAgc3RhdGljIFJlZjxSVENEYXRhQ2hhbm5lbEV2ZW50PiBjcmVhdGVEYXRhQ2hhbm5lbEV2ZW50
KERvY3VtZW50JiwgR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4mJik7CisKK3ByaXZhdGU6
CisgICAgLy8gUlRDRGF0YUNoYW5uZWxIYW5kbGVyIEFQSQorICAgIHZvaWQgc2V0Q2xpZW50KFJU
Q0RhdGFDaGFubmVsSGFuZGxlckNsaWVudCYsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlm
aWVyKSBmaW5hbDsKKyAgICBib29sIHNlbmRTdHJpbmdEYXRhKGNvbnN0IENTdHJpbmcmKSBmaW5h
bDsKKyAgICBib29sIHNlbmRSYXdEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXplX3QpIGZpbmFsOwor
ICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKworICAgIHZvaWQgb25NZXNzYWdlRGF0YShHQnl0ZXMq
KTsKKyAgICB2b2lkIG9uTWVzc2FnZVN0cmluZyhjb25zdCBjaGFyKik7CisgICAgdm9pZCBvbkVy
cm9yKEdFcnJvciopOworICAgIHZvaWQgb25CdWZmZXJlZEFtb3VudExvdygpOworICAgIHZvaWQg
cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworICAgIHZvaWQgY2hlY2tTdGF0ZSgpOworICAgIHZvaWQg
cG9zdFRhc2soRnVuY3Rpb248dm9pZCgpPiYmKTsKKworICAgIHN0cnVjdCBTdGF0ZUNoYW5nZSB7
CisgICAgICAgIFJUQ0RhdGFDaGFubmVsU3RhdGUgc3RhdGU7CisgICAgICAgIHN0ZDo6b3B0aW9u
YWw8R0Vycm9yKj4gZXJyb3I7CisgICAgfTsKKyAgICB1c2luZyBNZXNzYWdlID0gc3RkOjp2YXJp
YW50PFN0YXRlQ2hhbmdlLCBTdHJpbmcsIFJlZjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPj47Cisg
ICAgdXNpbmcgUGVuZGluZ01lc3NhZ2VzID0gVmVjdG9yPE1lc3NhZ2U+OworCisgICAgTG9jayBt
X2NsaWVudExvY2s7CisgICAgR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4gbV9jaGFubmVs
OworICAgIHN0ZDo6b3B0aW9uYWw8V2Vha1B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQ+
PiBtX2NsaWVudCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fY2xpZW50TG9jayk7CisgICAgU2NyaXB0
RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIgbV9jb250ZXh0SWRlbnRpZmllcjsKKyAgICBzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBtX3ByZXZpb3VzQnVmZmVyZWRBbW91bnQ7CisgICAgUGVuZGlu
Z01lc3NhZ2VzIG1fcGVuZGluZ01lc3NhZ2VzIFdURl9HVUFSREVEX0JZX0xPQ0sobV9jbGllbnRM
b2NrKTsKKworICAgIExvY2sgbV9vcGVuTG9jazsKKyAgICBDb25kaXRpb24gbV9vcGVuQ29uZGl0
aW9uIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vcGVuTG9jayk7Cit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0
bHNUcmFuc3BvcnRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kZDE0NDkyMGZjZDQwMDFkNWY1ZmVhYzMyZWIzNmUyMGFiMzVmYzYxCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSA8SmF2
YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRy
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQ6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRD
RFRMU1RyYW5zcG9ydD4mIHRyYW5zcG9ydCkKKyAgICA6IG1fYmFja2VuZCh0cmFuc3BvcnQpCit7
CisgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgQVNTRVJUKGlzTWFpblRocmVhZCgpKTsKK30K
KworR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFtZXJEdGxzVHJhbnNwb3J0
QmFja2VuZCgpCit7CisgICAgdW5yZWdpc3RlckNsaWVudCgpOworfQorCitVbmlxdWVSZWY8UlRD
SWNlVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OmljZVRy
YW5zcG9ydEJhY2tlbmQoKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlUmVmPEdTdHJlYW1lcklj
ZVRyYW5zcG9ydEJhY2tlbmQ+KG1fYmFja2VuZCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1Ry
YW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KENsaWVudCYgY2xpZW50KQoreworICAgIEFT
U0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIGdfc2lnbmFsX2Nv
bm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCksICJub3RpZnk6OnN0YXRlIiwgR19DQUxMQkFD
SygrW10oR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAg
YmFja2VuZC0+c3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworfQorCit2b2lkIEdTdHJl
YW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KCkKK3sKKyAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9iYWNrZW5kLmdldCgpLCB0aGlzKTsK
KyAgICBtX2NsaWVudC5jbGVhcigpOworfQorCit2b2lkIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRC
YWNrZW5kOjpzdGF0ZUNoYW5nZWQoKSBjb25zdAoreworICAgIGNhbGxPbk1haW5UaHJlYWRBbmRX
YWl0KFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyB0aGlzIH1dIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhp
cykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcy0+bV9jbGllbnQp
CisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiByZW1v
dGVDZXJ0aWZpY2F0ZTsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBjZXJ0aWZpY2F0ZTsK
KyAgICAgICAgR3N0V2ViUlRDRFRMU1RyYW5zcG9ydFN0YXRlIHN0YXRlOworICAgICAgICBnX29i
amVjdF9nZXQod2Vha1RoaXMtPm1fYmFja2VuZC5nZXQoKSwgInN0YXRlIiwgJnN0YXRlLCAicmVt
b3RlLWNlcnRpZmljYXRlIiwgJnJlbW90ZUNlcnRpZmljYXRlLm91dFB0cigpLCAiY2VydGlmaWNh
dGUiLCAmY2VydGlmaWNhdGUub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgICAgIFZlY3RvcjxS
ZWY8SlNDOjpBcnJheUJ1ZmZlcj4+IGNlcnRpZmljYXRlczsKKyAgICAgICAgY2VydGlmaWNhdGVz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisgICAgICAgIGlmIChyZW1vdGVDZXJ0aWZpY2F0
ZSkgeworICAgICAgICAgICAgYXV0byByZW1vdGVDZXJ0aWZpY2F0ZVN0cmluZyA9IG1ha2VTdHJp
bmcocmVtb3RlQ2VydGlmaWNhdGUuZ2V0KCkpOworICAgICAgICAgICAgYXV0byBqc1JlbW90ZUNl
cnRpZmljYXRlID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKHJlbW90ZUNlcnRpZmljYXRlU3Ry
aW5nLmNoYXJhY3RlcnM4KCksIHJlbW90ZUNlcnRpZmljYXRlU3RyaW5nLnNpemVJbkJ5dGVzKCkp
OworICAgICAgICAgICAgY2VydGlmaWNhdGVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGpzUmVt
b3RlQ2VydGlmaWNhdGUpKTsKKworICAgICAgICAgICAgYXV0byBjZXJ0aWZpY2F0ZVN0cmluZyA9
IG1ha2VTdHJpbmcoY2VydGlmaWNhdGUuZ2V0KCkpOworICAgICAgICAgICAgYXV0byBqc0NlcnRp
ZmljYXRlID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNlcnRpZmljYXRlU3RyaW5nLmNoYXJh
Y3RlcnM4KCksIGNlcnRpZmljYXRlU3RyaW5nLnNpemVJbkJ5dGVzKCkpOworICAgICAgICAgICAg
Y2VydGlmaWNhdGVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGpzQ2VydGlmaWNhdGUpKTsKKyAg
ICAgICAgfQorICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRD
RHRsc1RyYW5zcG9ydFN0YXRlKHN0YXRlKSwgV1RGTW92ZShjZXJ0aWZpY2F0ZXMpKTsKKyAgICB9
KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmMxZGM4ODQwODI3NzZiMzBi
MDBhMjkyYTE5NjA3NTA4ZTA0NDFkYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNr
ZW5kLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJ
Z2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiUlRDRHRsc1RyYW5zcG9ydEJhY2tl
bmQuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0R0
bHNUcmFuc3BvcnRCYWNrZW5kLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1N0cmVhbWVyRHRsc1Ry
YW5zcG9ydEJhY2tlbmQsIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7Cisg
ICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFu
c3BvcnQ+Jik7CisgICAgfkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKCk7CisKK3ByaXZh
dGU6CisgICAgLy8gUlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQKKyAgICBjb25zdCB2b2lkKiBiYWNr
ZW5kKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9CisgICAgVW5pcXVl
UmVmPFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQ+IGljZVRyYW5zcG9ydEJhY2tlbmQoKSBmaW5hbDsK
KyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAgIHZvaWQgdW5yZWdp
c3RlckNsaWVudCgpIGZpbmFsOworCisgICAgdm9pZCBzdGF0ZUNoYW5nZWQoKSBjb25zdDsKKwor
ICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gbV9iYWNrZW5kOworICAgIFdlYWtQ
dHI8Q2xpZW50PiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uMjYwYmNmZWUwZjgzODVjMzNlNzU5NWU1YmNiZTU4MTcyY2IxOWI3ZAotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTIyIEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIK
KyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BcnJheUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9n
bGliL0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFtZXJJY2VU
cmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKGNvbnN0IEdSZWZQ
dHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mIHRyYW5zcG9ydCkKKyAgICA6IG1fYmFja2VuZCh0
cmFuc3BvcnQpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7CisKKyAgICBpY2VUcmFuc3BvcnRD
aGFuZ2VkKCk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fYmFja2VuZC5nZXQoKSwg
Im5vdGlmeTo6dHJhbnNwb3J0IiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVySWNlVHJhbnNwb3J0
QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5kLT5pY2VUcmFuc3BvcnRDaGFuZ2Vk
KCk7CisgICAgfSksIHRoaXMpOworfQorCitHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp+
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgaWYgKEdfSVNfT0JKRUNUKG1f
aWNlVHJhbnNwb3J0LmdldCgpKSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9kYXRhKG1faWNlVHJhbnNwb3J0LmdldCgpLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9oYW5k
bGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9iYWNrZW5kLmdldCgpLCB0aGlzKTsKK30KKwordm9p
ZCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjppY2VUcmFuc3BvcnRDaGFuZ2VkKCkKK3sK
KyAgICBpZiAoR19JU19PQkpFQ1QobV9pY2VUcmFuc3BvcnQuZ2V0KCkpKQorICAgICAgICBnX3Np
Z25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9pY2VUcmFuc3BvcnQuZ2V0KCksIHRo
aXMpOworCisgICAgZ19vYmplY3RfZ2V0KG1fYmFja2VuZC5nZXQoKSwgInRyYW5zcG9ydCIsICZt
X2ljZVRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0
X3N3YXBwZWQobV9pY2VUcmFuc3BvcnQuZ2V0KCksICJub3RpZnk6OnN0YXRlIiwgR19DQUxMQkFD
SygrW10oR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBi
YWNrZW5kLT5zdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKG1faWNlVHJhbnNwb3J0LmdldCgpLCAibm90aWZ5OjpnYXRoZXJpbmctc3Rh
dGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKiBiYWNrZW5k
KSB7CisgICAgICAgIGJhY2tlbmQtPmdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpOworICAgIH0pLCB0
aGlzKTsKK30KKwordm9pZCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNs
aWVudChDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICBtX2Ns
aWVudCA9IGNsaWVudDsKKworICAgIEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSB0cmFuc3Bv
cnRTdGF0ZTsKKyAgICBHc3RXZWJSVENJQ0VHYXRoZXJpbmdTdGF0ZSBnYXRoZXJpbmdTdGF0ZTsK
KyAgICBnX29iamVjdF9nZXQobV9pY2VUcmFuc3BvcnQuZ2V0KCksICJzdGF0ZSIsICZ0cmFuc3Bv
cnRTdGF0ZSwgImdhdGhlcmluZy1zdGF0ZSIsICZnYXRoZXJpbmdTdGF0ZSwgbnVsbHB0cik7CisK
KyAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCB0cmFu
c3BvcnRTdGF0ZSwgZ2F0aGVyaW5nU3RhdGVdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcyB8fCAh
d2Vha1RoaXMtPm1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8vIFdl
IHN0YXJ0IG9ic2VydmluZyBhIGJpdCBsYXRlIGFuZCBtaWdodCBtaXNzIHRoZSBjaGVja2luZyBz
dGF0ZS4gU3ludGhlc2l6ZSBpdCBhcyBuZWVkZWQuCisgICAgICAgIGlmICh0cmFuc3BvcnRTdGF0
ZSA+IEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkcgJiYgdHJhbnNwb3J0
U3RhdGUgIT0gR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DTE9TRUQpCisgICAgICAg
ICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKFJUQ0ljZVRyYW5zcG9ydFN0
YXRlOjpDaGVja2luZyk7CisKKyAgICAgICAgd2Vha1RoaXMtPm1fY2xpZW50LT5vblN0YXRlQ2hh
bmdlZCh0b1JUQ0ljZVRyYW5zcG9ydFN0YXRlKHRyYW5zcG9ydFN0YXRlKSk7CisgICAgICAgIHdl
YWtUaGlzLT5tX2NsaWVudC0+b25HYXRoZXJpbmdTdGF0ZUNoYW5nZWQodG9SVENJY2VHYXRoZXJp
bmdTdGF0ZShnYXRoZXJpbmdTdGF0ZSkpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lcklj
ZVRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQoKQoreworICAgIEFTU0VSVChtX2Ns
aWVudCk7CisgICAgbV9jbGllbnQuY2xlYXIoKTsKK30KKwordm9pZCBHU3RyZWFtZXJJY2VUcmFu
c3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQoKSBjb25zdAoreworICAgIGlmICghbV9jbGllbnQp
CisgICAgICAgIHJldHVybjsKKworICAgIEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSB0cmFu
c3BvcnRTdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV9pY2VUcmFuc3BvcnQuZ2V0KCksICJzdGF0
ZSIsICZ0cmFuc3BvcnRTdGF0ZSwgbnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vh
a1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfSwgdHJhbnNwb3J0U3RhdGVdIHsKKyAgICAgICAgaWYg
KCF3ZWFrVGhpcyB8fCAhd2Vha1RoaXMtPm1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDSWNlVHJhbnNw
b3J0U3RhdGUodHJhbnNwb3J0U3RhdGUpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kOjpnYXRoZXJpbmdTdGF0ZUNoYW5nZWQoKSBjb25zdAoreworICAg
IGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdFdlYlJUQ0lDRUdhdGhl
cmluZ1N0YXRlIGdhdGhlcmluZ1N0YXRlOworICAgIGdfb2JqZWN0X2dldChtX2ljZVRyYW5zcG9y
dC5nZXQoKSwgImdhdGhlcmluZy1zdGF0ZSIsICZnYXRoZXJpbmdTdGF0ZSwgbnVsbHB0cik7Cisg
ICAgY2FsbE9uTWFpblRocmVhZChbd2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfSwgZ2F0aGVy
aW5nU3RhdGVdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcyB8fCAhd2Vha1RoaXMtPm1fY2xpZW50
KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uR2F0
aGVyaW5nU3RhdGVDaGFuZ2VkKHRvUlRDSWNlR2F0aGVyaW5nU3RhdGUoZ2F0aGVyaW5nU3RhdGUp
KTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNw
b3J0QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5N2EzOTU3ZTMy
ZTFhMWExYTMxNTU0ZjA5ZDBmNjY2ZTkxNTJiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3Bv
cnRCYWNrZW5kLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEt
MjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRD
SWNlVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCBmaW5h
bCA6IHB1YmxpYyBSVENJY2VUcmFuc3BvcnRCYWNrZW5kLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZD4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworCitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+Jik7CisgICAgfkdTdHJlYW1l
ckljZVRyYW5zcG9ydEJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENJY2VUcmFuc3Bv
cnRCYWNrZW5kCisgICAgY29uc3Qgdm9pZCogYmFja2VuZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgdm9pZCByZWdpc3RlckNsaWVudChDbGllbnQmKSBm
aW5hbDsKKyAgICB2b2lkIHVucmVnaXN0ZXJDbGllbnQoKSBmaW5hbDsKKworICAgIHZvaWQgc3Rh
dGVDaGFuZ2VkKCkgY29uc3Q7CisgICAgdm9pZCBnYXRoZXJpbmdTdGF0ZUNoYW5nZWQoKSBjb25z
dDsKKyAgICB2b2lkIGljZVRyYW5zcG9ydENoYW5nZWQoKTsKKworICAgIEdSZWZQdHI8R3N0V2Vi
UlRDRFRMU1RyYW5zcG9ydD4gbV9iYWNrZW5kOworICAgIEdSZWZQdHI8R3N0V2ViUlRDSUNFVHJh
bnNwb3J0PiBtX2ljZVRyYW5zcG9ydDsKKyAgICBXZWFrUHRyPENsaWVudD4gbV9jbGllbnQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlh
RW5kcG9pbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU4NDNlZTFmMTQ2NGEyODM0MWMwYjUyMDM1YjlkZTYy
OWFmYmM4YmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcApAQCAtMCwwICsxLDEy
NjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYUVuZHBvaW50LmgiCisKKyNpZiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
Q29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU2N0cFRyYW5zcG9y
dEJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUg
IkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCisjaW5jbHVkZSAiSlNSVENTdGF0c1JlcG9ydC5oIgor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlv
bi5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5u
ZWwuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEV2ZW50LmgiCisjaW5jbHVkZSAiUlRDSWNl
Q2FuZGlkYXRlLmgiCisjaW5jbHVkZSAiUlRDT2ZmZXJPcHRpb25zLmgiCisjaW5jbHVkZSAiUlRD
UGVlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSVENTY3RwVHJhbnNwb3J0QmFja2VuZC5oIgor
I2luY2x1ZGUgIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIlJUQ1N0YXRzUmVw
b3J0LmgiCisjaW5jbHVkZSAiUlRDVHJhY2tFdmVudC5oIgorI2luY2x1ZGUgIlJlYWx0aW1lSW5j
b21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lci5oIgorCisjaW5jbHVkZSA8Z3N0L3NkcC9zZHAuaD4KKyNpbmNsdWRlIDx3dGYvTWFp
blRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1J1
bkxvb3BTb3VyY2VQcmlvcml0eS5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+Cisj
aW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgorCitHU1RfREVC
VUdfQ0FURUdPUlkod2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9D
QVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludChH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmIHBlZXJDb25uZWN0aW9uKQorICAgIDogbV9w
ZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCisgICAgLCBtX3N0YXRzQ29sbGVj
dG9yKEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpjcmVhdGUoKSkKKyNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKyAgICAsIG1fc3RhdHNMb2dUaW1lcigqdGhpcywgJkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZykKKyAgICAsIG1fbG9nZ2VyKHBlZXJDb25uZWN0
aW9uLmxvZ2dlcigpKQorICAgICwgbV9sb2dJZGVudGlmaWVyKHBlZXJDb25uZWN0aW9uLmxvZ0lk
ZW50aWZpZXIoKSkKKyNlbmRpZgoreworICAgIGVuc3VyZUdTdHJlYW1lckluaXRpYWxpemVkKCk7
CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdSZWdpc3RlcmVkRmxhZzsKKyAgICBz
dGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBbXSB7CisgICAgICAgIEdTVF9ERUJV
R19DQVRFR09SWV9JTklUKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcsICJ3ZWJraXR3ZWJy
dGNlbmRwb2ludCIsIDAsICJXZWJLaXQgV2ViUlRDIGVuZC1wb2ludCIpOworICAgIH0pOworfQor
Citib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYWxpemVQaXBlbGluZSgpCit7Cisg
ICAgc3RhdGljIHVpbnQzMl90IG5QaXBlbGluZSA9IDA7CisgICAgYXV0byBwaXBlbGluZU5hbWUg
PSBtYWtlU3RyaW5nKCJ3ZWJraXQtd2VicnQtcGlwZWxpbmUtIiwgblBpcGVsaW5lKTsKKyAgICBt
X3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyhwaXBlbGluZU5hbWUuYXNjaWkoKS5kYXRhKCkp
OworCisgICAgY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdldCgp
LCBbdGhpc10oR3N0TWVzc2FnZSogbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVNZXNzYWdlKG1l
c3NhZ2UpOworICAgIH0pOworCisgICAgYXV0byBiaW5OYW1lID0gbWFrZVN0cmluZygid2Via2l0
LXdlYnJ0Y2Jpbi0iLCBuUGlwZWxpbmUrKyk7CisgICAgbV93ZWJydGNCaW4gPSBtYWtlR1N0cmVh
bWVyRWxlbWVudCgid2VicnRjYmluIiwgYmluTmFtZS5hc2NpaSgpLmRhdGEoKSk7CisgICAgaWYg
KCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9zdGF0c0NvbGxl
Y3Rvci0+c2V0RWxlbWVudChtX3dlYnJ0Y0Jpbi5nZXQoKSk7CisgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAibm90aWZ5OjppY2UtY29ubmVjdGlvbi1zdGF0
ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50KSB7Cisg
ICAgICAgIGVuZFBvaW50LT5vbkljZUNvbm5lY3Rpb25DaGFuZ2UoKTsKKyAgICB9KSwgdGhpcyk7
CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAibm90aWZ5
OjppY2UtZ2F0aGVyaW5nLXN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRw
b2ludCogZW5kUG9pbnQpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uSWNlR2F0aGVyaW5nQ2hhbmdl
KCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0
Y0Jpbi5nZXQoKSwgIm9uLW5lZ290aWF0aW9uLW5lZWRlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50KSB7CisgICAgICAgIGVuZFBvaW50LT5vbk5lZ290
aWF0aW9uTmVlZGVkKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLWljZS1jYW5kaWRhdGUiLCBHX0NBTExCQUNLKCtb
XShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCwgZ3VpbnQgc2RwTUxpbmVJbmRleCwg
Z2NoYXJhcnJheSBjYW5kaWRhdGUpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uSWNlQ2FuZGlkYXRl
KHNkcE1MaW5lSW5kZXgsIGNhbmRpZGF0ZSk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInBhZC1hZGRlZCIsIEdfQ0FMTEJB
Q0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RQYWQqIHBhZCkgewor
ICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5vdGlmaWNhdGlvbnMuCisgICAgICAgIGlm
IChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9QQURfU1JDKQorICAgICAgICAgICAgcmV0
dXJuOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFtwcm90ZWN0ZWRUaGlzID0g
UmVmKCplbmRQb2ludCksIHBhZF0geworICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlz
U3RvcHBlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAgcHJvdGVj
dGVkVGhpcy0+YWRkUmVtb3RlU3RyZWFtKHBhZCk7CisgICAgICAgIH0pOworICAgIH0pLCB0aGlz
KTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJwYWQt
cmVtb3ZlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50
LCBHc3RQYWQqIHBhZCkgeworICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5vdGlmaWNh
dGlvbnMuCisgICAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9QQURfU1JD
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0
KFtwcm90ZWN0ZWRUaGlzID0gUmVmKCplbmRQb2ludCksIHBhZF0geworICAgICAgICAgICAgaWYg
KHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+cmVtb3ZlUmVtb3RlU3RyZWFtKHBhZCk7CisgICAg
ICAgIH0pOworICAgIH0pLCB0aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLWRhdGEtY2hhbm5lbCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RXZWJSVENEYXRhQ2hhbm5lbCogY2hhbm5l
bCkgeworICAgICAgICBlbmRQb2ludC0+b25EYXRhQ2hhbm5lbChjaGFubmVsKTsKKyAgICB9KSwg
dGhpcyk7CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSks
IG1fd2VicnRjQmluLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6fkdTdHJlYW1lck1lZGlhRW5kcG9pbnQoKQoreworICAgIGlmIChtX3BpcGVs
aW5lKQorICAgICAgICB0ZWFyZG93blBpcGVsaW5lKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6dGVhcmRvd25QaXBlbGluZSgpCit7CisgICAgUkVMRUFTRV9BU1NFUlQobV9w
aXBlbGluZSk7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3RvcExvZ2dpbmdTdGF0
cygpOworI2VuZGlmCisgICAgbV9zdGF0c0NvbGxlY3Rvci0+c2V0RWxlbWVudChudWxscHRyKTsK
KworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX3dlYnJ0Y0Jpbi5n
ZXQoKSwgdGhpcyk7CisgICAgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3Bp
cGVsaW5lLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQo
KSwgR1NUX1NUQVRFX05VTEwpOworCisgICAgbV9zb3VyY2VzLmNsZWFyKCk7CisgICAgbV9yZW1v
dGVNTGluZUluZm9zLmNsZWFyKCk7CisgICAgbV9yZW1vdGVTdHJlYW1zQnlJZC5jbGVhcigpOwor
ICAgIG1fd2VicnRjQmluID0gbnVsbHB0cjsKKyAgICBtX3BpcGVsaW5lID0gbnVsbHB0cjsKK30K
KworYm9vbCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2Uq
IG1lc3NhZ2UpCit7CisgICAgc3dpdGNoIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7Cisg
ICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6CisgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJ
TEVfV0lUSF9UUyhHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQ
SF9TSE9XX0FMTCwgImVvcyIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9NRVNTQUdF
X0VMRU1FTlQ6IHsKKyAgICAgICAgY29uc3QgYXV0byogZGF0YSA9IGdzdF9tZXNzYWdlX2dldF9z
dHJ1Y3R1cmUobWVzc2FnZSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKGdzdF9zdHJ1Y3R1cmVf
Z2V0X25hbWUoZGF0YSksICJHc3RCaW5Gb3J3YXJkZWQiKSkgeworICAgICAgICAgICAgR1JlZlB0
cjxHc3RNZXNzYWdlPiBzdWJNZXNzYWdlOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQo
ZGF0YSwgIm1lc3NhZ2UiLCBHU1RfVFlQRV9NRVNTQUdFLCAmc3ViTWVzc2FnZS5vdXRQdHIoKSwg
bnVsbHB0cik7CisgICAgICAgICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShzdWJNZXNzYWdlLmdl
dCgpKSA9PSBHU1RfTUVTU0FHRV9FT1MpCisgICAgICAgICAgICAgICAgZGlzcG9zZUVsZW1lbnRD
aGFpbihHU1RfRUxFTUVOVF9DQVNUKEdTVF9NRVNTQUdFX1NSQyhzdWJNZXNzYWdlLmdldCgpKSkp
OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAg
ICBicmVhazsKKyAgICB9CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6ZGlzcG9zZUVsZW1lbnRDaGFpbihHc3RFbGVtZW50KiBlbGVtZW50KQorewor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkdvdCBlbGVtZW50IEVPUyBt
ZXNzYWdlIGZyb20gJSIgR1NUX1BUUl9GT1JNQVQsIGVsZW1lbnQpOworCisgICAgYXV0byBwYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQoZWxlbWVudCwgInNpbmsiKSk7
CisgICAgYXV0byBwZWVyID0gYWRvcHRHUmVmKGdzdF9wYWRfZ2V0X3BlZXIocGFkLmdldCgpKSk7
CisKKyAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIFRS
VUUpOworICAgIGdzdF9wYWRfdW5saW5rKHBlZXIuZ2V0KCksIHBhZC5nZXQoKSk7CisgICAgZ3N0
X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBlbGVtZW50KTsKKyAg
ICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVlc3RfcGFkKG1fd2VicnRjQmluLmdldCgpLCBwZWVy
LmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUoZWxlbWVudCwgR1NUX1NUQVRFX05V
TEwpOworICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwg
RkFMU0UpOworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRp
b24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgaWYg
KG1fcGlwZWxpbmUpCisgICAgICAgIHRlYXJkb3duUGlwZWxpbmUoKTsKKworICAgIGlmICghaW5p
dGlhbGl6ZVBpcGVsaW5lKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYnVu
ZGxlUG9saWN5ID0gYnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7
CisgICAgYXV0byBpY2VUcmFuc3BvcnRQb2xpY3kgPSBpY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29u
ZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKKyAgICBnX29iamVjdF9zZXQobV93ZWJydGNCaW4u
Z2V0KCksICJidW5kbGUtcG9saWN5IiwgYnVuZGxlUG9saWN5LCAiaWNlLXRyYW5zcG9ydC1wb2xp
Y3kiLCBpY2VUcmFuc3BvcnRQb2xpY3ksIG51bGxwdHIpOworCisgICAgZm9yIChhdXRvJiBzZXJ2
ZXIgOiBjb25maWd1cmF0aW9uLmljZVNlcnZlcnMpIHsKKyAgICAgICAgYm9vbCBzdHVuU2V0ID0g
ZmFsc2U7CisgICAgICAgIGZvciAoYXV0byYgdXJsIDogc2VydmVyLnVybHMpIHsKKyAgICAgICAg
ICAgIGlmICh1cmwucHJvdG9jb2woKS5zdGFydHNXaXRoKCJ0dXJuIikpIHsKKyAgICAgICAgICAg
ICAgICBhdXRvIHZhbGlkID0gdXJsLnN0cmluZygpLmlzb2xhdGVkQ29weSgpLnJlcGxhY2UoInR1
cm46IiwgInR1cm46Ly8iKS5yZXBsYWNlKCJ0dXJuczoiLCAidHVybnM6Ly8iKTsKKyAgICAgICAg
ICAgICAgICBVUkwgdmFsaWRVUkwoVVJMKCksIHZhbGlkKTsKKyAgICAgICAgICAgICAgICAvLyBG
SVhNRTogbGlibmljZSBjdXJyZW50bHkgZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBJUHY2IGFkZHJl
c3NlcyB2ZXJ5IHdlbGwuCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkVVJMLmhvc3QoKS5zdGFy
dHNXaXRoKCdbJykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIHZhbGlkVVJMLnNldFVzZXIoc2VydmVyLnVzZXJuYW1lKTsKKyAgICAgICAgICAgICAgICB2
YWxpZFVSTC5zZXRQYXNzd29yZChzZXJ2ZXIuY3JlZGVudGlhbCk7CisgICAgICAgICAgICAgICAg
Ym9vbCByZXN1bHQgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV93ZWJydGNCaW4uZ2V0KCksICJhZGQtdHVybi1zZXJ2ZXIiLCB2YWxpZFVSTC5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCAmcmVzdWx0KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkK
KyAgICAgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkcoIlVuYWJsZSB0byB1c2UgVFVSTiBzZXJ2
ZXI6ICVzIiwgdmFsaWRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBpZiAoIXN0dW5TZXQgJiYgdXJsLnByb3RvY29sKCkuc3RhcnRzV2l0aCgi
c3R1biIpKSB7CisgICAgICAgICAgICAgICAgYXV0byB2YWxpZCA9IHVybC5zdHJpbmcoKS5pc29s
YXRlZENvcHkoKS5yZXBsYWNlKCJzdHVuOiIsICJzdHVuOi8vIik7CisgICAgICAgICAgICAgICAg
VVJMIHZhbGlkVVJMKFVSTCgpLCB2YWxpZCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGxp
Ym5pY2UgY3VycmVudGx5IGRvZXNuJ3Qgc2VlbSB0byBoYW5kbGUgSVB2NiBhZGRyZXNzZXMgdmVy
eSB3ZWxsLgorICAgICAgICAgICAgICAgIGlmICh2YWxpZFVSTC5ob3N0KCkuc3RhcnRzV2l0aCgn
WycpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB2YWxp
ZFVSTC5zZXRVc2VyKHNlcnZlci51c2VybmFtZSk7CisgICAgICAgICAgICAgICAgdmFsaWRVUkwu
c2V0UGFzc3dvcmQoc2VydmVyLmNyZWRlbnRpYWwpOworICAgICAgICAgICAgICAgIGdfb2JqZWN0
X3NldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInN0dW4tc2VydmVyIiwgdmFsaWRVUkwuc3RyaW5nKCku
dXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7CisgICAgICAgICAgICAgICAgc3R1blNldCA9IHRydWU7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICAvLyBXSVA6IGh0dHBzOi8v
Z2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2Vf
cmVxdWVzdHMvMzAyCisgICAgR1NUX0ZJWE1FKCIlenUgY3VzdG9tIGNlcnRpZmljYXRlcyBub3Qg
cHJvcGFnYXRlZCB0byB3ZWJydGNiaW4iLCBjb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5zaXpl
KCkpOworCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9T
VEFURV9QTEFZSU5HKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJF
bmQtcG9pbnQgcmVhZHkiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpyZXN0YXJ0SWNlKCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJyZXN0YXJ0aW5nIElDRSIpOworICAgIC8vIFdJUCBpbiBodHRwczovL2dp
dGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3Jl
cXVlc3RzLzE4NzcKKyAgICBpbml0aWF0ZSh0cnVlLCBnc3Rfc3RydWN0dXJlX25ldygid2VicnRj
YmluLW9mZmVyLW9wdGlvbnMiLCAiaWNlLXJlc3RhcnQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwg
bnVsbHB0cikpOworfQorCitzdGF0aWMgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UlRDU2RwVHlw
ZSwgU3RyaW5nPj4gZmV0Y2hEZXNjcmlwdGlvbihHc3RFbGVtZW50KiB3ZWJydGNCaW4sIGNvbnN0
IGNoYXIqIG5hbWUpCit7CisgICAgaWYgKCF3ZWJydGNCaW4pCisgICAgICAgIHJldHVybiB7IH07
CisKKyAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVzY3Jp
cHRpb247CisgICAgZ19vYmplY3RfZ2V0KHdlYnJ0Y0JpbiwgbWFrZVN0cmluZyhuYW1lLCAiLWRl
c2NyaXB0aW9uIikudXRmOCgpLmRhdGEoKSwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRy
KTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgR1Vu
aXF1ZVB0cjxjaGFyPiBzZHBTdHJpbmcoZ3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoZGVzY3JpcHRp
b24tPnNkcCkpOworICAgIEdTVF9UUkFDRV9PQkpFQ1Qod2VicnRjQmluLCAiJXMtZGVzY3JpcHRp
b24gU0RQOiAlcyIsIG5hbWUsIHNkcFN0cmluZy5nZXQoKSk7CisgICAgcmV0dXJuIHsgeyBmcm9t
U2Vzc2lvbkRlc2NyaXB0aW9uVHlwZSgqZGVzY3JpcHRpb24uZ2V0KCkpLCBzZHBTdHJpbmcuZ2V0
KCkgfSB9OworfQorCitzdGF0aWMgR3N0V2ViUlRDU2lnbmFsaW5nU3RhdGUgZmV0Y2hTaWduYWxp
bmdTdGF0ZShHc3RFbGVtZW50KiB3ZWJydGNCaW4pCit7CisgICAgR3N0V2ViUlRDU2lnbmFsaW5n
U3RhdGUgc3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KHdlYnJ0Y0JpbiwgInNpZ25hbGluZy1zdGF0
ZSIsICZzdGF0ZSwgbnVsbHB0cik7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAg
IEdVbmlxdWVQdHI8Y2hhcj4gZGVzYyhnX2VudW1fdG9fc3RyaW5nKEdTVF9UWVBFX1dFQlJUQ19T
SUdOQUxJTkdfU1RBVEUsIHN0YXRlKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVCh3ZWJydGNCaW4s
ICJTaWduYWxpbmcgc3RhdGUgc2V0IHRvICVzIiwgZGVzYy5nZXQoKSk7CisjZW5kaWYKKyAgICBy
ZXR1cm4gc3RhdGU7Cit9CisKK2VudW0gY2xhc3MgR2F0aGVyU2lnbmFsaW5nU3RhdGUgeyBObywg
WWVzIH07CitzdGF0aWMgc3RkOjpvcHRpb25hbDxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkRlc2Ny
aXB0aW9uU3RhdGVzPiBkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKEdzdEVsZW1lbnQqIHdlYnJ0
Y0JpbiwgR2F0aGVyU2lnbmFsaW5nU3RhdGUgZ2F0aGVyU2lnbmFsaW5nU3RhdGUgPSBHYXRoZXJT
aWduYWxpbmdTdGF0ZTo6Tm8pCit7CisgICAgc3RkOjpvcHRpb25hbDxSVENTZHBUeXBlPiBjdXJy
ZW50TG9jYWxEZXNjcmlwdGlvblNkcFR5cGUsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwVHlw
ZSwgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwVHlwZSwgcGVuZGluZ1JlbW90ZURlc2NyaXB0
aW9uU2RwVHlwZTsKKyAgICBTdHJpbmcgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHAsIHBlbmRp
bmdMb2NhbERlc2NyaXB0aW9uU2RwLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHAsIHBlbmRp
bmdSZW1vdGVEZXNjcmlwdGlvblNkcDsKKyAgICBpZiAoYXV0byBjdXJyZW50TG9jYWxEZXNjcmlw
dGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAiY3VycmVudC1sb2NhbCIpKSB7Cisg
ICAgICAgIGF1dG8gW3NkcFR5cGUsIGRlc2NyaXB0aW9uXSA9ICpjdXJyZW50TG9jYWxEZXNjcmlw
dGlvbjsKKyAgICAgICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsK
KyAgICAgICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9u
KTsKKyAgICB9CisgICAgaWYgKGF1dG8gcGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gPSBmZXRjaERl
c2NyaXB0aW9uKHdlYnJ0Y0JpbiwgInBlbmRpbmctbG9jYWwiKSkgeworICAgICAgICBhdXRvIFtz
ZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAqcGVuZGluZ0xvY2FsRGVzY3JpcHRpb247CisgICAgICAg
IHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSA9IHNkcFR5cGU7CisgICAgICAgIHBlbmRp
bmdMb2NhbERlc2NyaXB0aW9uU2RwID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAg
IGlmIChhdXRvIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2Vi
cnRjQmluLCAiY3VycmVudC1yZW1vdGUiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNj
cmlwdGlvbl0gPSAqY3VycmVudFJlbW90ZURlc2NyaXB0aW9uOworICAgICAgICBjdXJyZW50UmVt
b3RlRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgY3VycmVudFJlbW90ZURl
c2NyaXB0aW9uU2RwID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChhdXRv
IHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAi
cGVuZGluZy1yZW1vdGUiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0g
PSAqcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uOworICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3Jp
cHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9u
U2RwID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxS
VENTaWduYWxpbmdTdGF0ZT4gc2lnbmFsaW5nU3RhdGU7CisgICAgaWYgKGdhdGhlclNpZ25hbGlu
Z1N0YXRlID09IEdhdGhlclNpZ25hbGluZ1N0YXRlOjpZZXMpCisgICAgICAgIHNpZ25hbGluZ1N0
YXRlID0gdG9TaWduYWxpbmdTdGF0ZShmZXRjaFNpZ25hbGluZ1N0YXRlKHdlYnJ0Y0JpbikpOwor
CisgICAgcmV0dXJuIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6RGVzY3JpcHRpb25TdGF0ZXMgewor
ICAgICAgICBzaWduYWxpbmdTdGF0ZSwKKyAgICAgICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25T
ZHBUeXBlLCBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcCwKKyAgICAgICAgcGVuZGluZ0xvY2Fs
RGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvblNkcCwKKyAgICAgICAg
Y3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwVHlwZSwgY3VycmVudFJlbW90ZURlc2NyaXB0aW9u
U2RwLAorICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nUmVt
b3RlRGVzY3JpcHRpb25TZHAKKyAgICB9OworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRl
c2NyaXB0aW9uKQoreworICAgIHNldERlc2NyaXB0aW9uKGRlc2NyaXB0aW9uLCB0cnVlLCBbcHJv
dGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRoaXNdIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRo
aXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGRlc2Ny
aXB0aW9ucyA9IGRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCksIEdh
dGhlclNpZ25hbGluZ1N0YXRlOjpZZXMpOworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1NDVFBU
cmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICAgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdl
dCgpLCAic2N0cC10cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAg
ICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuc2V0TG9jYWxEZXNjcmlwdGlvblN1Y2NlZWRl
ZChXVEZNb3ZlKGRlc2NyaXB0aW9ucyksIHRyYW5zcG9ydCA/IG1ha2VVbmlxdWU8R1N0cmVhbWVy
U2N0cFRyYW5zcG9ydEJhY2tlbmQ+KFdURk1vdmUodHJhbnNwb3J0KSkgOiBudWxscHRyKTsKKyAg
ICB9LCBbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRoaXNdKGNvbnN0IEdFcnJvciogZXJy
b3IpIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoZXJyb3IgJiYgZXJyb3ItPmNvZGUgPT0gR1NUX1dFQlJU
Q19FUlJPUl9JTlZBTElEX1NUQVRFKQorICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tl
bmQuc2V0TG9jYWxEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJv
ciwgIkZhaWxlZCB0byBzZXQgbG9jYWwgYW5zd2VyIHNkcDogbm8gcGVuZGluZyByZW1vdGUgZGVz
Y3JpcHRpb24uIl9zIH0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0
aW9uQmFja2VuZC5zZXRMb2NhbERlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlv
bkVycm9yLCAiVW5hYmxlIHRvIGFwcGx5IHNlc3Npb24gbG9jYWwgZGVzY3JpcHRpb24iX3MgfSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9TZXRSZW1vdGVE
ZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorewor
ICAgIHNldERlc2NyaXB0aW9uKCZkZXNjcmlwdGlvbiwgZmFsc2UsIFtwcm90ZWN0ZWRUaGlzID0g
UmVmKCp0aGlzKSwgdGhpc10geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVk
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBl
bGluZS5nZXQoKSwgIkFja2luZyByZW1vdGUgZGVzY3JpcHRpb24iKTsKKyAgICAgICAgYXV0byBk
ZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgp
LCBHYXRoZXJTaWduYWxpbmdTdGF0ZTo6WWVzKTsKKyAgICAgICAgR1JlZlB0cjxHc3RXZWJSVENT
Q1RQVHJhbnNwb3J0PiB0cmFuc3BvcnQ7CisgICAgICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jp
bi5nZXQoKSwgInNjdHAtdHJhbnNwb3J0IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7
CisgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldFJlbW90ZURlc2NyaXB0aW9uU3Vj
Y2VlZGVkKFdURk1vdmUoZGVzY3JpcHRpb25zKSwgdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3Ry
ZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZD4oV1RGTW92ZSh0cmFuc3BvcnQpKSA6IG51bGxwdHIp
OworICAgIH0sIFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpc10oY29uc3QgR0Vycm9y
KiBlcnJvcikgeworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHU1Rf
V0VCUlRDX0VSUk9SX0lOVkFMSURfU1RBVEUpCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9u
QmFja2VuZC5zZXRSZW1vdGVEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBJbnZhbGlkU3Rh
dGVFcnJvciwgIkZhaWxlZCB0byBzZXQgcmVtb3RlIGFuc3dlciBzZHAiX3MgfSk7CisgICAgICAg
IGVsc2UKKyAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldFJlbW90ZURlc2Ny
aXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFwcGx5
IHNlc3Npb24gcmVtb3RlIGRlc2NyaXB0aW9uIl9zIH0pOworICAgIH0pOworI2lmICFSRUxFQVNF
X0xPR19ESVNBQkxFRAorICAgIHN0YXJ0TG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKworc3Ry
dWN0IFNldERlc2NyaXB0aW9uQ2FsbERhdGEgeworICAgIEZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vz
c0NhbGxiYWNrOworICAgIEZ1bmN0aW9uPHZvaWQoY29uc3QgR0Vycm9yKik+IGZhaWx1cmVDYWxs
YmFjazsKK307CisKK1dFQktJVF9ERUZJTkVfQVNZTkNfREFUQV9TVFJVQ1QoU2V0RGVzY3JpcHRp
b25DYWxsRGF0YSk7CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0RGVzY3JpcHRp
b24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbiwgYm9vbCBpc0xvY2Fs
LCBGdW5jdGlvbjx2b2lkKCk+JiYgc3VjY2Vzc0NhbGxiYWNrLCBGdW5jdGlvbjx2b2lkKGNvbnN0
IEdFcnJvciopPiYmIGZhaWx1cmVDYWxsYmFjaykKK3sKKyAgICBHc3RTRFBNZXNzYWdlKiBtZXNz
YWdlOworICAgIGF1dG8gc2RwVHlwZSA9IFJUQ1NkcFR5cGU6Ok9mZmVyOworCisgICAgaWYgKGRl
c2NyaXB0aW9uKSB7CisgICAgICAgIGlmIChnc3Rfc2RwX21lc3NhZ2VfbmV3X2Zyb21fdGV4dChy
ZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkZXNjcmlwdGlvbi0+c2RwKCkuY2hhcmFjdGVy
czgoKSksICZtZXNzYWdlKSAhPSBHU1RfU0RQX09LKSB7CisgICAgICAgICAgICBmYWlsdXJlQ2Fs
bGJhY2sobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
c2RwVHlwZSA9IGRlc2NyaXB0aW9uLT50eXBlKCk7CisgICAgfSBlbHNlIGlmIChnc3Rfc2RwX21l
c3NhZ2VfbmV3KCZtZXNzYWdlKSAhPSBHU1RfU0RQX09LKSB7CisgICAgICAgIGZhaWx1cmVDYWxs
YmFjayhudWxscHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGlmICghaXNMb2Nh
bCkKKyAgICAgICAgc3RvcmVSZW1vdGVNTGluZUluZm8obWVzc2FnZSk7CisKKyAgICBhdXRvIHR5
cGUgPSB0b1Nlc3Npb25EZXNjcmlwdGlvblR5cGUoc2RwVHlwZSk7CisgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ3JlYXRpbmcgJXMgc2Vzc2lvbiBmb3IgU0RQICVzIiwg
aXNMb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwgZ3N0X3dlYnJ0Y19zZHBfdHlwZV90b19zdHJp
bmcodHlwZSkpOworCisgICAgR1VuaXF1ZVB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+
IHNlc3Npb25EZXNjcmlwdGlvbihnc3Rfd2VicnRjX3Nlc3Npb25fZGVzY3JpcHRpb25fbmV3KHR5
cGUsIG1lc3NhZ2UpKTsKKyAgICBhdXRvIHNpZ25hbE5hbWUgPSBtYWtlU3RyaW5nKCJzZXQtIiwg
aXNMb2NhbCA/ICJsb2NhbCIgOiAicmVtb3RlIiwgIi1kZXNjcmlwdGlvbiIpOworICAgIGF1dG8q
IGRhdGEgPSBjcmVhdGVTZXREZXNjcmlwdGlvbkNhbGxEYXRhKCk7CisgICAgZGF0YS0+c3VjY2Vz
c0NhbGxiYWNrID0gV1RGTW92ZShzdWNjZXNzQ2FsbGJhY2spOworICAgIGRhdGEtPmZhaWx1cmVD
YWxsYmFjayA9IFdURk1vdmUoZmFpbHVyZUNhbGxiYWNrKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUobV93ZWJydGNCaW4uZ2V0KCksIHNpZ25hbE5hbWUuYXNjaWkoKS5kYXRhKCksIHNlc3Np
b25EZXNjcmlwdGlvbi5nZXQoKSwgZ3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10o
R3N0UHJvbWlzZSogcmF3UHJvbWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0
byogZGF0YSA9IHN0YXRpY19jYXN0PFNldERlc2NyaXB0aW9uQ2FsbERhdGEqPih1c2VyRGF0YSk7
CisgICAgICAgIGF1dG8gcHJvbWlzZSA9IGFkb3B0R1JlZihyYXdQcm9taXNlKTsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBnc3RfcHJvbWlzZV93YWl0KHByb21pc2UuZ2V0KCkpOworICAgICAgICBj
b25zdCBhdXRvKiByZXBseSA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsK
KyAgICAgICAgaWYgKHJlc3VsdCAhPSBHU1RfUFJPTUlTRV9SRVNVTFRfUkVQTElFRCB8fCAocmVw
bHkgJiYgZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQocmVwbHksICJlcnJvciIpKSkgeworICAgICAg
ICAgICAgc3RkOjpvcHRpb25hbDxHVW5pcXVlUHRyPEdFcnJvcj4+IGVycm9ySG9sZGVyOworICAg
ICAgICAgICAgaWYgKHJlcGx5KSB7CisgICAgICAgICAgICAgICAgR1VuaXF1ZU91dFB0cjxHRXJy
b3I+IGVycm9yOworICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJlcGx5LCAiZXJy
b3IiLCBHX1RZUEVfRVJST1IsICZlcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICAgICAgR1NUX0VSUk9SKCJVbmFibGUgdG8gc2V0IGRlc2NyaXB0aW9uLCBlcnJvcjogJXMiLCBl
cnJvci0+bWVzc2FnZSk7CisgICAgICAgICAgICAgICAgZXJyb3JIb2xkZXIuZW1wbGFjZShnX2Vy
cm9yX2NvcHkoZXJyb3IuZ2V0KCkpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGNhbGxP
bk1haW5UaHJlYWQoW2Vycm9yID0gV1RGTW92ZShlcnJvckhvbGRlciksIGZhaWx1cmVDYWxsYmFj
ayA9IFdURk1vdmUoZGF0YS0+ZmFpbHVyZUNhbGxiYWNrKV0geworICAgICAgICAgICAgICAgIGZh
aWx1cmVDYWxsYmFjayhlcnJvciA/IGVycm9yLT5nZXQoKSA6IG51bGxwdHIpOworICAgICAgICAg
ICAgfSk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgY2FsbE9uTWFp
blRocmVhZChbc3VjY2Vzc0NhbGxiYWNrID0gV1RGTW92ZShkYXRhLT5zdWNjZXNzQ2FsbGJhY2sp
XSB7CisgICAgICAgICAgICBzdWNjZXNzQ2FsbGJhY2soKTsKKyAgICAgICAgfSk7CisgICAgfSwg
ZGF0YSwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZGVzdHJveVNldERlc2NyaXB0
aW9uQ2FsbERhdGEpKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcmVS
ZW1vdGVNTGluZUluZm8oR3N0U0RQTWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBtX3JlbW90ZU1M
aW5lSW5mb3MuY2xlYXIoKTsKKyAgICB1bnNpZ25lZCB0b3RhbE1lZGlhcyA9IGdzdF9zZHBfbWVz
c2FnZV9tZWRpYXNfbGVuKG1lc3NhZ2UpOworICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5yZXNlcnZl
Q2FwYWNpdHkodG90YWxNZWRpYXMpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5n
ZXQoKSwgIlN0b3JpbmcgJXUgcmVtb3RlIHBlbmRpbmcgbWxpbmVzIiwgdG90YWxNZWRpYXMpOwor
ICAgIGZvciAodW5zaWduZWQgbWVkaWFJbmRleCA9IDA7IG1lZGlhSW5kZXggPCB0b3RhbE1lZGlh
czsgbWVkaWFJbmRleCsrKSB7CisgICAgICAgIGNvbnN0IGF1dG8qIG1lZGlhID0gZ3N0X3NkcF9t
ZXNzYWdlX2dldF9tZWRpYShtZXNzYWdlLCBtZWRpYUluZGV4KTsKKyAgICAgICAgY29uc3QgY2hh
ciogbWVkaWFUeXBlID0gZ3N0X3NkcF9tZWRpYV9nZXRfbWVkaWEobWVkaWEpOworICAgICAgICBp
ZiAoIWdfc3RyX2VxdWFsKG1lZGlhVHlwZSwgImF1ZGlvIikgJiYgIWdfc3RyX2VxdWFsKG1lZGlh
VHlwZSwgInZpZGVvIikpCisgICAgICAgICAgICBjb250aW51ZTsKKworI2lmbmRlZiBHU1RfRElT
QUJMRV9HU1RfREVCVUcKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBtZWRpYVJlcHJlc2VudGF0
aW9uKGdzdF9zZHBfbWVkaWFfYXNfdGV4dChtZWRpYSkpOworICAgICAgICBHU1RfTE9HX09CSkVD
VChtX3BpcGVsaW5lLmdldCgpLCAiUHJvY2Vzc2luZyBtZWRpYTpcbiVzIiwgbWVkaWFSZXByZXNl
bnRhdGlvbi5nZXQoKSk7CisjZW5kaWYKKyAgICAgICAgY29uc3QgY2hhciogbWlkID0gZ3N0X3Nk
cF9tZWRpYV9nZXRfYXR0cmlidXRlX3ZhbChtZWRpYSwgIm1pZCIpOworICAgICAgICBpZiAoIW1p
ZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIGJvb2wgaXNJbmFjdGl2ZSA9IGZh
bHNlOworICAgICAgICB1bnNpZ25lZCB0b3RhbEF0dHJpYnV0ZXMgPSBnc3Rfc2RwX21lZGlhX2F0
dHJpYnV0ZXNfbGVuKG1lZGlhKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBhdHRyaWJ1dGVJbmRl
eCA9IDA7IGF0dHJpYnV0ZUluZGV4IDwgdG90YWxBdHRyaWJ1dGVzOyBhdHRyaWJ1dGVJbmRleCsr
KSB7CisgICAgICAgICAgICBjb25zdCBhdXRvKiBhdHRyaWJ1dGUgPSBnc3Rfc2RwX21lZGlhX2dl
dF9hdHRyaWJ1dGUobWVkaWEsIGF0dHJpYnV0ZUluZGV4KTsKKyAgICAgICAgICAgIGlmICghZ19z
dHJjbXAwKGF0dHJpYnV0ZS0+a2V5LCAiaW5hY3RpdmUiKSkgeworICAgICAgICAgICAgICAgIGlz
SW5hY3RpdmUgPSB0cnVlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgICAgIGlmIChpc0luYWN0aXZlKSB7CisgICAgICAgICAgICBHU1RfREVC
VUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTa2lwcGluZyBpbmFjdGl2ZSBtZWRpYSIpOwor
ICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIH0KKworICAgICAgICBtX21lZGlhRm9yTWlk
LnNldCh7IG1pZCB9LCBnX3N0cl9lcXVhbChtZWRpYVR5cGUsICJhdWRpbyIpID8gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8gOiBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpWaWRl
byk7CisKKyAgICAgICAgLy8gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1l
ci9nc3QtcGx1Z2lucy1iYWQvLS9tZXJnZV9yZXF1ZXN0cy8xOTA3CisgICAgICAgIGlmIChzZHBN
ZWRpYUhhc0F0dHJpYnV0ZUtleShtZWRpYSwgImljZS1saXRlIikpIHsKKyAgICAgICAgICAgIEdS
ZWZQdHI8R09iamVjdD4gaWNlOworICAgICAgICAgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmlu
LmdldCgpLCAiaWNlLWFnZW50IiwgJmljZS5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICBnX29iamVjdF9zZXQoaWNlLmdldCgpLCAiaWNlLWxpdGUiLCBUUlVFLCBudWxscHRyKTsKKyAg
ICAgICAgfQorCisgICAgICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1w
dHkoKSk7CisgICAgICAgIFZlY3RvcjxpbnQ+IHBheWxvYWRUeXBlczsKKyAgICAgICAgdW5zaWdu
ZWQgdG90YWxGb3JtYXRzID0gZ3N0X3NkcF9tZWRpYV9mb3JtYXRzX2xlbihtZWRpYSk7CisgICAg
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIk1lZGlhICVzIGhhcyAldSBm
b3JtYXRzIiwgbWVkaWFUeXBlLCB0b3RhbEZvcm1hdHMpOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGZvcm1hdEluZGV4ID0gMDsgZm9ybWF0SW5kZXggPCB0b3RhbEZvcm1hdHM7IGZvcm1hdEluZGV4
KyspIHsKKyAgICAgICAgICAgIGF1dG8gZm9ybWF0ID0gbWFrZVN0cmluZyhnc3Rfc2RwX21lZGlh
X2dldF9mb3JtYXQobWVkaWEsIGZvcm1hdEluZGV4KSk7CisgICAgICAgICAgICBhdXRvIHBheWxv
YWRUeXBlID0gcGFyc2VJbnRlZ2VyPGludD4oZm9ybWF0KTsKKyAgICAgICAgICAgIGlmICghcGF5
bG9hZFR5cGUgfHwgISpwYXlsb2FkVHlwZSkgeworICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5H
X09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiSW52YWxpZCBwYXlsb2FkIHR5cGU6ICVzIiwgZm9y
bWF0LnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgYXV0byBmb3JtYXRDYXBzID0gYWRvcHRHUmVmKGdzdF9zZHBfbWVk
aWFfZ2V0X2NhcHNfZnJvbV9tZWRpYShtZWRpYSwgKnBheWxvYWRUeXBlKSk7CisgICAgICAgICAg
ICBpZiAoIWZvcm1hdENhcHMpIHsKKyAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIk5vIGNhcHMgZm91bmQgZm9yIHBheWxvYWQgdHlwZSAlZCIsICpw
YXlsb2FkVHlwZSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisK
KyAgICAgICAgICAgIC8vIFJlbGF5IFNEUCBhdHRyaWJ1dGVzIHRvIHRoZSBjYXBzLCB0aGlzIGlz
IHNwZWNpYWxseSB1c2VmdWwgc28gdGhhdCBlbGVtZW50cyBpbgorICAgICAgICAgICAgLy8gd2Vi
cnRjYmluIHdpbGwgYmUgYWJsZSB0byBlbmFibGUgUlRQIGhlYWRlciBleHRlbnNpb25zLgorICAg
ICAgICAgICAgZ3N0X3NkcF9tZWRpYV9hdHRyaWJ1dGVzX3RvX2NhcHMobWVkaWEsIGZvcm1hdENh
cHMuZ2V0KCkpOworCisgICAgICAgICAgICBnc3RfY2Fwc19hcHBlbmQoY2Fwcy5nZXQoKSwgZm9y
bWF0Q2Fwcy5sZWFrUmVmKCkpOworICAgICAgICAgICAgbV9wdENvdW50ZXIgPSBzdGQ6Om1heCht
X3B0Q291bnRlciwgKnBheWxvYWRUeXBlICsgMSk7CisgICAgICAgICAgICBwYXlsb2FkVHlwZXMu
YXBwZW5kKCpwYXlsb2FkVHlwZSk7CisgICAgICAgIH0KKworICAgICAgICB1bnNpZ25lZCB0b3Rh
bENhcHMgPSBnc3RfY2Fwc19nZXRfc2l6ZShjYXBzLmdldCgpKTsKKyAgICAgICAgaWYgKHRvdGFs
Q2FwcykgeworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBjYXBzSW5kZXggPSAwOyBjYXBzSW5k
ZXggPCB0b3RhbENhcHM7IGNhcHNJbmRleCsrKSB7CisgICAgICAgICAgICAgICAgR3N0U3RydWN0
dXJlKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMuZ2V0KCksIGNhcHNJ
bmRleCk7CisgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXRfbmFtZShzdHJ1Y3R1cmUs
ICJhcHBsaWNhdGlvbi94LXJ0cCIpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgR1NUX0RF
QlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ2FjaGluZyBwYXlsb2FkIGNhcHM6ICUiIEdT
VF9QVFJfRk9STUFULCBjYXBzLmdldCgpKTsKKyAgICAgICAgICAgIG1fcmVtb3RlTUxpbmVJbmZv
cy51bmNoZWNrZWRBcHBlbmQoeyBXVEZNb3ZlKGNhcHMpLCBmYWxzZSwgV1RGTW92ZShwYXlsb2Fk
VHlwZXMpIH0pOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OmNvbmZpZ3VyZUFuZExpbmtTb3VyY2UoUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyJiBzb3VyY2UpCit7CisgICAgYXV0byBjYXBzID0gc291cmNlLmFsbG93ZWRDYXBz
KCk7CisgICAgc3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UGVuZGluZ01MaW5lSW5mbywgR1JlZlB0
cjxHc3RDYXBzPj4+IGZvdW5kOworICAgIGZvciAoYXV0byYgbUxpbmVJbmZvIDogbV9yZW1vdGVN
TGluZUluZm9zKSB7CisgICAgICAgIGlmIChtTGluZUluZm8uaXNVc2VkKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgdW5zaWduZWQgdG90YWxDYXBzID0gZ3N0X2NhcHNfZ2V0X3Np
emUobUxpbmVJbmZvLmNhcHMuZ2V0KCkpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGNhcHNJbmRl
eCA9IDA7IGNhcHNJbmRleCA8IHRvdGFsQ2FwczsgY2Fwc0luZGV4KyspIHsKKyAgICAgICAgICAg
IGF1dG8qIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUobUxpbmVJbmZvLmNhcHMu
Z2V0KCksIGNhcHNJbmRleCk7CisgICAgICAgICAgICBhdXRvIGNhcHMyID0gYWRvcHRHUmVmKGdz
dF9jYXBzX25ld19mdWxsKGdzdF9zdHJ1Y3R1cmVfY29weShzdHJ1Y3R1cmUpLCBudWxscHRyKSk7
CisgICAgICAgICAgICBhdXRvIGludGVyc2VjdGVkID0gYWRvcHRHUmVmKGdzdF9jYXBzX2ludGVy
c2VjdChjYXBzLmdldCgpLCBjYXBzMi5nZXQoKSkpOworICAgICAgICAgICAgaWYgKCFnc3RfY2Fw
c19pc19lbXB0eShpbnRlcnNlY3RlZC5nZXQoKSkpIHsKKyAgICAgICAgICAgICAgICBmb3VuZCA9
IHN0ZDo6bWFrZV9wYWlyKG1MaW5lSW5mbywgV1RGTW92ZShpbnRlcnNlY3RlZCkpOworICAgICAg
ICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgICAgIGlmIChm
b3VuZC5oYXNfdmFsdWUoKSkKKyAgICAgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGJvb2wg
cGF5bG9hZFR5cGVXYXNTZXQgPSBmYWxzZTsKKyAgICBpZiAoZm91bmQpIHsKKyAgICAgICAgR1NU
X0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiVW51c2VkIGFuZCBjb21wYXRpYmxlIGNh
cHMgZm91bmQgZm9yICUiIEdTVF9QVFJfRk9STUFUICIuLi4gJSIgR1NUX1BUUl9GT1JNQVQsIGNh
cHMuZ2V0KCksIGZvdW5kLT5zZWNvbmQuZ2V0KCkpOworICAgICAgICBwYXlsb2FkVHlwZVdhc1Nl
dCA9IHNvdXJjZS5zZXRQYXlsb2FkVHlwZShmb3VuZC0+c2Vjb25kKTsKKyAgICAgICAgZm91bmQt
PmZpcnN0LmlzVXNlZCA9IHRydWU7CisgICAgfSBlbHNlCisgICAgICAgIHBheWxvYWRUeXBlV2Fz
U2V0ID0gc291cmNlLnNldFBheWxvYWRUeXBlKGNhcHMpOworCisgICAgaWYgKCFwYXlsb2FkVHlw
ZVdhc1NldCkKKyAgICAgICAgcmV0dXJuOworCisgICAgaWYgKCFzb3VyY2UucGFkKCkpIHsKKyAg
ICAgICAgc291cmNlLnNldFNpbmtQYWQocmVxdWVzdFBhZChtX3JlcXVlc3RQYWRDb3VudGVyLCBz
b3VyY2UuYWxsb3dlZENhcHMoKSkpOworICAgICAgICBtX3JlcXVlc3RQYWRDb3VudGVyKys7Cisg
ICAgfQorCisgICAgYXV0byYgc2lua1BhZCA9IHNvdXJjZS5wYWQoKTsKKyAgICBSRUxFQVNFX0FT
U0VSVCghZ3N0X3BhZF9pc19saW5rZWQoc2lua1BhZC5nZXQoKSkpOworICAgIGF1dG8gc291cmNl
QmluID0gc291cmNlLmJpbigpOworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX3BpcGVs
aW5lLmdldCgpKSwgc291cmNlQmluLmdldCgpKTsKKyAgICBzb3VyY2UubGluaygpOworCisgICAg
R1VuaXF1ZVB0cjxjaGFyPiBwYWRJZChnc3RfcGFkX2dldF9uYW1lKHNpbmtQYWQuZ2V0KCkpKTsK
KyAgICBhdXRvIGRvdEZpbGVOYW1lID0gbWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUobV9waXBl
bGluZS5nZXQoKSksICIub3V0Z29pbmctIiwgcGFkSWQuZ2V0KCkpOworICAgIEdTVF9ERUJVR19C
SU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVC
VUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworfQorCitHUmVm
UHRyPEdzdFBhZD4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVxdWVzdFBhZCh1bnNpZ25lZCBt
bGluZUluZGV4LCBjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBhbGxvd2VkQ2FwcykKK3sKKyAgICBh
dXRvIHBhZElkID0gbWFrZVN0cmluZygic2lua18iLCBtbGluZUluZGV4KTsKKyAgICBhdXRvIGNh
cHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfY29weShhbGxvd2VkQ2Fwcy5nZXQoKSkpOworCisgICAg
Z3N0X2NhcHNfbWFwX2luX3BsYWNlKGNhcHMuZ2V0KCksIFtdKEdzdENhcHNGZWF0dXJlcyosIEdz
dFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewor
ICAgICAgICBhdXRvKiBlbmRQb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVyTWVkaWFF
bmRwb2ludCo+KHVzZXJEYXRhKTsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJl
LCAicGF5bG9hZCIsIEdfVFlQRV9JTlQsIGVuZFBvaW50LT5tX3B0Q291bnRlcisrLCBudWxscHRy
KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfSwgdGhpcyk7CisKKyAgICAvLyBGSVhNRTog
UmVzdHJpY3RpbmcgY2FwcyBhbmQgY29kZWMtcHJlZmVyZW5jZXMgYnJlYWtzIGNhcHMgbmVnb3Rp
YXRpb24gb2Ygb3V0Z29pbmcgc291cmNlcyBpbgorICAgIC8vIHNvbWUgY2FzZSAoaml0c2kpLgor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlJlcXVlc3RpbmcgcGFkICVz
IHJlc3RyaWN0ZWQgdG8gJSIgR1NUX1BUUl9GT1JNQVQsIHBhZElkLnV0ZjgoKS5kYXRhKCksIGNh
cHMuZ2V0KCkpOworICAgIGF1dG8qIHBhZFRlbXBsYXRlID0gZ3N0X2VsZW1lbnRfZ2V0X3BhZF90
ZW1wbGF0ZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgInNpbmtfJXUiKTsKKyAgICBhdXRvIHNpbmtQYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQobV93ZWJydGNCaW4uZ2V0KCksIHBh
ZFRlbXBsYXRlLCBwYWRJZC51dGY4KCkuZGF0YSgpLCBjYXBzLmdldCgpKSk7CisgICAgR1JlZlB0
cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gdHJhbnNjZWl2ZXI7CisgICAgZ19vYmplY3RfZ2V0
KHNpbmtQYWQuZ2V0KCksICJ0cmFuc2NlaXZlciIsICZ0cmFuc2NlaXZlci5vdXRQdHIoKSwgbnVs
bHB0cik7CisgICAgZ19vYmplY3Rfc2V0KHRyYW5zY2VpdmVyLmdldCgpLCAiY29kZWMtcHJlZmVy
ZW5jZXMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gc2lua1BhZDsKK30KKwor
Ym9vbCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBjb25zdCBGaXhlZFZlY3Rv
cjxTdHJpbmc+JikKK3sKKyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2Ugc291
cmNlOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBydGNTZW5kZXI7CisKKyAgICBp
ZiAodHJhY2sucHJpdmF0ZVRyYWNrKCkuaGFzQXVkaW8oKSkgeworICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBZGRpbmcgb3V0Z29pbmcgYXVkaW8gc291cmNlIik7
CisgICAgICAgIGF1dG8gYXVkaW9Tb3VyY2UgPSBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI6OmNyZWF0ZSh0cmFjay5wcml2YXRlVHJhY2soKSk7CisgICAgICAgIGNvbmZpZ3Vy
ZUFuZExpbmtTb3VyY2UoYXVkaW9Tb3VyY2UpOworCisgICAgICAgIHJ0Y1NlbmRlciA9IGF1ZGlv
U291cmNlLT5zZW5kZXIoKTsKKyAgICAgICAgc291cmNlID0gV1RGTW92ZShhdWRpb1NvdXJjZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgUkVMRUFTRV9BU1NFUlQodHJhY2sucHJpdmF0ZVRyYWNr
KCkuaGFzVmlkZW8oKSk7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIkFkZGluZyBvdXRnb2luZyB2aWRlbyBzb3VyY2UiKTsKKyAgICAgICAgYXV0byB2aWRlb1Nv
dXJjZSA9IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNr
LnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAgY29uZmlndXJlQW5kTGlua1NvdXJjZSh2aWRlb1Nv
dXJjZSk7CisKKyAgICAgICAgcnRjU2VuZGVyID0gdmlkZW9Tb3VyY2UtPnNlbmRlcigpOworICAg
ICAgICBzb3VyY2UgPSBXVEZNb3ZlKHZpZGVvU291cmNlKTsKKyAgICB9CisKKyAgICBzZW5kZXIu
c2V0U291cmNlKFdURk1vdmUoc291cmNlKSk7CisKKyAgICBpZiAoYXV0byBydHBTZW5kZXIgPSBz
ZW5kZXIucnRjU2VuZGVyKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5l
LmdldCgpLCAiQWxyZWFkeSBoYXMgYSBzZW5kZXIuIik7CisgICAgICAgIHJldHVybiB0cnVlOwor
ICAgIH0KKworICAgIHNlbmRlci5zZXRSVENTZW5kZXIoV1RGTW92ZShydGNTZW5kZXIpKTsKKwor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlNlbmRlciBjb25maWd1cmVk
Iik7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
cmVtb3ZlVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgc2VuZGVyKQoreworICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlJlbW92aW5nIHRyYWNrIik7CisgICAg
aWYgKGF1dG8gYmluID0gc2VuZGVyLnN0b3BTb3VyY2UoKSkKKyAgICAgICAgZ3N0X2Jpbl9yZW1v
dmUoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBiaW4uZ2V0KCkpOworICAgIHNlbmRl
ci5jbGVhclNvdXJjZSgpOworICAgIG9uTmVnb3RpYXRpb25OZWVkZWQoKTsKK30KKwordm9pZCBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0ZU9mZmVyKGNvbnN0IFJUQ09mZmVyT3B0aW9u
cyYgb3B0aW9ucykKK3sKKyAgICAvLyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0
cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3RzLzE4NzcKKyAgICAvLyBGSVhN
RTogUGx1bWIgb3B0aW9ucy52b2ljZUFjdGl2aXR5RGV0ZWN0aW9uLgorICAgIGluaXRpYXRlKHRy
dWUsIGdzdF9zdHJ1Y3R1cmVfbmV3KCJ3ZWJydGNiaW4tb2ZmZXItb3B0aW9ucyIsICJpY2UtcmVz
dGFydCIsIEdfVFlQRV9CT09MRUFOLCBvcHRpb25zLmljZVJlc3RhcnQsIG51bGxwdHIpKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0ZUFuc3dlcigpCit7CisgICAg
aW5pdGlhdGUoZmFsc2UsIG51bGxwdHIpOworfQorCitzdHJ1Y3QgR1N0cmVhbWVyTWVkaWFFbmRw
b2ludEhvbGRlciB7CisgICAgV1RGX01BS0VfU1RSVUNUX0ZBU1RfQUxMT0NBVEVEOworICAgIGV4
cGxpY2l0IEdTdHJlYW1lck1lZGlhRW5kcG9pbnRIb2xkZXIoR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dCYgZW5kUG9pbnQpCisgICAgICAgIDogZW5kUG9pbnQoZW5kUG9pbnQpCisgICAgeyB9CisKKyAg
ICBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gZW5kUG9pbnQ7Cit9OworCit2b2lkIEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYXRlKGJvb2wgaXNJbml0aWF0b3IsIEdzdFN0cnVjdHVy
ZSogcmF3T3B0aW9ucykKK3sKKyAgICBtX2lzSW5pdGlhdG9yID0gaXNJbml0aWF0b3I7CisgICAg
Y29uc3QgY2hhciogdHlwZSA9IGlzSW5pdGlhdG9yID8gIm9mZmVyIiA6ICJhbnN3ZXIiOworICAg
IEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNyZWF0aW5nICVzIiwgdHlwZSk7
CisgICAgYXV0byBzaWduYWxOYW1lID0gbWFrZVN0cmluZygiY3JlYXRlLSIsIHR5cGUpOworICAg
IEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBvcHRpb25zKHJhd09wdGlvbnMpOworICAgIGF1dG8g
ZGF0YSA9IG1ha2VVbmlxdWU8R1N0cmVhbWVyTWVkaWFFbmRwb2ludEhvbGRlcj4oKnRoaXMpOwor
ICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgc2lnbmFsTmFtZS5h
c2NpaSgpLmRhdGEoKSwgb3B0aW9ucy5nZXQoKSwgZ3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdl
X2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAg
ICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lck1lZGlhRW5kcG9pbnRIb2xkZXI+IGRhdGEo
c3RhdGljX2Nhc3Q8R1N0cmVhbWVyTWVkaWFFbmRwb2ludEhvbGRlcio+KHVzZXJEYXRhKSk7Cisg
ICAgICAgIGF1dG8gcHJvbWlzZSA9IGFkb3B0R1JlZihyYXdQcm9taXNlKTsKKyAgICAgICAgYXV0
byByZXN1bHQgPSBnc3RfcHJvbWlzZV93YWl0KHByb21pc2UuZ2V0KCkpOworICAgICAgICBpZiAo
cmVzdWx0ICE9IEdTVF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEKSB7CisgICAgICAgICAgICBkYXRh
LT5lbmRQb2ludC0+Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uRmFpbGVkKHsgfSk7CisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBhdXRvKiByZXBseSA9IGdz
dF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgUkVMRUFTRV9BU1NF
UlQocmVwbHkpOworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQocmVwbHksICJl
cnJvciIpKSB7CisgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gcHJvbWlzZUVycm9y
OworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksICJlcnJvciIsIEdfVFlQRV9F
UlJPUiwgJnByb21pc2VFcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBHVW5p
cXVlUHRyPEdFcnJvcj4gZXJyb3IocHJvbWlzZUVycm9yLnJlbGVhc2UoKSk7CisgICAgICAgICAg
ICBkYXRhLT5lbmRQb2ludC0+Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uRmFpbGVkKFdURk1vdmUo
ZXJyb3IpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0
IGNoYXIqIHR5cGUgPSBkYXRhLT5lbmRQb2ludC0+bV9pc0luaXRpYXRvciA/ICJvZmZlciIgOiAi
YW5zd2VyIjsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRp
b24+IHNlc3Npb25EZXNjcmlwdGlvbjsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHks
IHR5cGUsIEdTVF9UWVBFX1dFQlJUQ19TRVNTSU9OX0RFU0NSSVBUSU9OLCAmc2Vzc2lvbkRlc2Ny
aXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVC
VUcKKyAgICAgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHAoZ3N0X3NkcF9tZXNzYWdlX2FzX3RleHQo
c2Vzc2lvbkRlc2NyaXB0aW9uLT5zZHApKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChkYXRh
LT5lbmRQb2ludC0+cGlwZWxpbmUoKSwgIkNyZWF0ZWQgJXM6ICVzIiwgdHlwZSwgc2RwLmdldCgp
KTsKKyNlbmRpZgorICAgICAgICBHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlv
bj4gZGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uLnJlbGVhc2UoKSk7CisgICAgICAgIGRh
dGEtPmVuZFBvaW50LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNjZWVkZWQoV1RGTW92ZShk
ZXNjcmlwdGlvbikpOworICAgIH0sIGRhdGEucmVsZWFzZSgpLCBudWxscHRyKSk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2V0U3RhdHMoR3N0UGFkKiBwYWQsIFJlZjxEZWZl
cnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBtX3N0YXRzQ29sbGVjdG9yLT5nZXRTdGF0
cyhbcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSksIHByb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMp
XShhdXRvJiYgcmVwb3J0KSBtdXRhYmxlIHsKKyAgICAgICAgQVNTRVJUKGlzTWFpblRocmVhZCgp
KTsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpIHx8ICFyZXBvcnQpCisg
ICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgcHJvbWlzZS0+cmVzb2x2ZTxJRExJbnRlcmZh
Y2U8UlRDU3RhdHNSZXBvcnQ+PihyZXBvcnQucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfSwgcGFk
KTsKK30KKworTWVkaWFTdHJlYW0mIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om1lZGlhU3RyZWFt
RnJvbVJUQ1N0cmVhbShTdHJpbmcgbGFiZWwpCit7CisgICAgYXV0byBtZWRpYVN0cmVhbSA9IG1f
cmVtb3RlU3RyZWFtc0J5SWQuZW5zdXJlKGxhYmVsLCBbbGFiZWwsIHRoaXNdKCkgbXV0YWJsZSB7
CisgICAgICAgIGF1dG8mIGRvY3VtZW50ID0gZG93bmNhc3Q8RG9jdW1lbnQ+KCptX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jb25uZWN0aW9uKCkuc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKyAg
ICAgICAgcmV0dXJuIE1lZGlhU3RyZWFtOjpjcmVhdGUoZG9jdW1lbnQsIE1lZGlhU3RyZWFtUHJp
dmF0ZTo6Y3JlYXRlKGRvY3VtZW50LmxvZ2dlcigpLCB7IH0sIFdURk1vdmUobGFiZWwpKSk7Cisg
ICAgfSk7CisgICAgcmV0dXJuICptZWRpYVN0cmVhbS5pdGVyYXRvci0+dmFsdWU7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkUmVtb3RlU3RyZWFtKEdzdFBhZCogcGFkKQor
eworICAgIG1fcGVuZGluZ0luY29taW5nU3RyZWFtcysrOworCisgICAgYXV0byBjYXBzID0gYWRv
cHRHUmVmKGdzdF9wYWRfcXVlcnlfY2FwcyhwYWQsIG51bGxwdHIpKTsKKyAgICBjb25zdCBjaGFy
KiBtZWRpYVR5cGUgPSBjYXBzTWVkaWFUeXBlKGNhcHMuZ2V0KCkpOworICAgIEdTVF9ERUJVR19P
QkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyByZW1vdGUgJXMgc3RyZWFtIHRvICUiIEdT
VF9QVFJfRk9STUFUICIgJXUgcGVuZGluZyBpbmNvbWluZyBzdHJlYW1zLCBjYXBzOiAlIiBHU1Rf
UFRSX0ZPUk1BVCwgbWVkaWFUeXBlLCBwYWQsIG1fcGVuZGluZ0luY29taW5nU3RyZWFtcywgY2Fw
cy5nZXQoKSk7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBydGNUcmFu
c2NlaXZlcjsKKyAgICBnX29iamVjdF9nZXQocGFkLCAidHJhbnNjZWl2ZXIiLCAmcnRjVHJhbnNj
ZWl2ZXIub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBtX3Bl
ZXJDb25uZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0cmFuc2Nl
aXZlckJhY2tlbmQpIHsKKyAgICAgICAgcmV0dXJuIHJ0Y1RyYW5zY2VpdmVyLmdldCgpID09IHRy
YW5zY2VpdmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgIH0pOworICAgIGlmICghdHJh
bnNjZWl2ZXIpIHsKKyAgICAgICAgYXV0byB0eXBlID0gZG9DYXBzSGF2ZVR5cGUoY2Fwcy5nZXQo
KSwgImF1ZGlvIikgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1l
TWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOworICAgICAgICB0cmFuc2NlaXZlciA9ICZtX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5uZXdSZW1vdGVUcmFuc2NlaXZlcihtYWtlVW5pcXVlPEdTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZD4oV1RGTW92ZShydGNUcmFuc2NlaXZlcikpLCB0eXBlKTsK
KyAgICB9CisKKyAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4g
ZGVzY3JpcHRpb247CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAicmVtb3Rl
LWRlc2NyaXB0aW9uIiwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKworICAgIHVu
c2lnbmVkIG1MaW5lSW5kZXg7CisgICAgZ19vYmplY3RfZ2V0KHJ0Y1RyYW5zY2VpdmVyLmdldCgp
LCAibWxpbmVpbmRleCIsICZtTGluZUluZGV4LCBudWxscHRyKTsKKyAgICBjb25zdCBhdXRvKiBt
ZWRpYSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEoZGVzY3JpcHRpb24tPnNkcCwgbUxpbmVJ
bmRleCk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHAoZ3N0X3NkcF9tZWRpYV9hc190ZXh0KG1l
ZGlhKSk7CisgICAgYXV0byBzZHBTdHJpbmcgPSBtYWtlU3RyaW5nKHNkcC5nZXQoKSk7CisKKyAg
ICBHVW5pcXVlUHRyPGdjaGFyPiBuYW1lKGdzdF9wYWRfZ2V0X25hbWUocGFkKSk7CisgICAgU3Ry
aW5nIGxhYmVsKG5hbWUuZ2V0KCkpOworICAgIGF1dG8ga2V5ID0gbWFrZVN0cmluZygibXNpZDoi
KTsKKyAgICBhdXRvIGxpbmVzID0gc2RwU3RyaW5nLnNwbGl0KCdcbicpOworICAgIGZvciAoYXV0
byYgbGluZSA6IGxpbmVzKSB7CisgICAgICAgIGF1dG8gaSA9IGxpbmUuZmluZChrZXkpOworICAg
ICAgICBpZiAoaSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgYXV0byB0bXAgPSBsaW5lLnN1
YnN0cmluZyhpICsga2V5LmFzY2lpKCkubGVuZ3RoKCkpOworICAgICAgICAgICAgbGFiZWwgPSB0
bXAuc3Vic3RyaW5nKDAsIHRtcC5maW5kKCcgJykpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJt
c2lkOiAlcyIsIGxhYmVsLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIEdzdEVsZW1lbnQqIGJpbiA9
IG51bGxwdHI7CisgICAgYXV0byYgdHJhY2sgPSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKS50cmFj
aygpOworICAgIGF1dG8mIHNvdXJjZSA9IHRyYWNrLnByaXZhdGVUcmFjaygpLnNvdXJjZSgpOwor
ICAgIGlmIChzb3VyY2UuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0
YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSku
YmluKCk7CisgICAgZWxzZSBpZiAoc291cmNlLmlzSW5jb21pbmdWaWRlb1NvdXJjZSgpKQorICAg
ICAgICBiaW4gPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXImPihzb3VyY2UpLmJpbigpOworICAgIGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdl
dCgpKSwgYmluKTsKKyAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQoYmluLCAic2luayIpKTsKKyAgICBnc3RfcGFkX2xpbmsocGFkLCBzaW5rUGFk
LmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGJpbik7CisK
KyAgICB0cmFjay5zZXRFbmFibGVkKHRydWUpOworICAgIHNvdXJjZS5zZXRNdXRlZChmYWxzZSk7
CisKKyAgICBhdXRvJiBtZWRpYVN0cmVhbSA9IG1lZGlhU3RyZWFtRnJvbVJUQ1N0cmVhbShsYWJl
bCk7CisgICAgbWVkaWFTdHJlYW0uYWRkVHJhY2tGcm9tUGxhdGZvcm0odHJhY2spOworCisgICAg
VmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IHBlbmRpbmdTdHJlYW1zOworICAgIHBlbmRpbmdT
dHJlYW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7CisgICAgcGVuZGluZ1N0cmVhbXMudW5j
aGVja2VkQXBwZW5kKCZtZWRpYVN0cmVhbSk7CisKKyAgICBtX3BlZXJDb25uZWN0aW9uQmFja2Vu
ZC5hZGRQZW5kaW5nVHJhY2tFdmVudCh7IFJlZih0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKSksIFJl
Zih0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKS50cmFjaygpKSwgV1RGTW92ZShwZW5kaW5nU3RyZWFt
cyksIFJlZigqdHJhbnNjZWl2ZXIpIH0pOworCisgICAgaWYgKG1fcGVuZGluZ0luY29taW5nU3Ry
ZWFtcyA9PSBnc3Rfc2RwX21lc3NhZ2VfbWVkaWFzX2xlbihkZXNjcmlwdGlvbi0+c2RwKSkgewor
ICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJJbmNvbWluZyBzdHJl
YW1zIGdhdGhlcmVkLCBub3cgZmlyaW5nIHRyYWNrIGV2ZW50cyIpOworICAgICAgICBtX3BlbmRp
bmdJbmNvbWluZ1N0cmVhbXMgPSAwOworICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5k
aXNwYXRjaFBlbmRpbmdUcmFja0V2ZW50cygpOworICAgIH0KKworICAgIGF1dG8gZG90RmlsZU5h
bWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwgIi5pbmNv
bWluZy0iLCBtZWRpYVR5cGUsICctJywgR1NUX09CSkVDVF9OQU1FKHBhZCkpOworICAgIEdTVF9E
RUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBH
U1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworfQor
Cit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVJlbW90ZVN0cmVhbShHc3RQYWQq
KQoreworICAgIEdTVF9GSVhNRV9PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgInJlbW92ZVJlbW90
ZVN0cmVhbSIpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNy
ZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHMoY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBSVENSdHBU
cmFuc2NlaXZlckluaXQmIGluaXQsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYm
IHNvdXJjZSkKK3sKKyAgICBpZiAoIW1fd2VicnRjQmluKQorICAgICAgICByZXR1cm4gc3RkOjpu
dWxsb3B0OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiJXp1IHN0
cmVhbXMgaW4gaW5pdCBkYXRhIiwgaW5pdC5zdHJlYW1zLnNpemUoKSk7CisKKyAgICAvLyBGSVhN
RTogU2hvdWxkIHdlIGJ1aWxkIHRoZSBjYXBzIGZyb20gdGhlIGluaXQuc2VuZEVuY29kaW5ncz8g
UHJvYmxlbSBpcyB0aGVyZSBpcyBubworICAgIC8vIGVuY29kaW5nTmFtZSBvciBjbG9ja1JhdGUg
aW4gUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzLgorICAgIFZlY3RvcjxzdGQ6OnBhaXI8Y29uc3Qg
Y2hhciosIGludD4+IGVuY29kaW5nczsKKyAgICBjb25zdCBjaGFyKiBtZWRpYSA9IGtpbmQudXRm
OCgpLmRhdGEoKTsKKyAgICBpZiAoa2luZCA9PSAidmlkZW8iX3MpIHsKKyAgICAgICAgZW5jb2Rp
bmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMyk7CisgICAgICAgIGVuY29kaW5ncy51bmNoZWNr
ZWRBcHBlbmQoeyAiVlA4IiwgOTAwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy51bmNoZWNrZWRB
cHBlbmQoeyAiVlA5IiwgOTAwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy51bmNoZWNrZWRBcHBl
bmQoeyAiSDI2NCIsIDkwMDAwIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5ncy5y
ZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQpOworICAgICAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBw
ZW5kKHsgIk9QVVMiLCA0ODAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVu
ZCh7ICJHNzIyIiwgODAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVuZCh7
ICJQQ01BIiwgODAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVuZCh7ICJQ
Q01VIiwgODAwMCB9KTsKKyAgICB9CisKKyAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2Nh
cHNfbmV3X2VtcHR5KCkpOworICAgIGZvciAoYXV0byYgW2VuY29kaW5nTmFtZSwgY2xvY2tSYXRl
XSA6IGVuY29kaW5ncykgeworICAgICAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlKGNhcHMu
Z2V0KCksIGdzdF9zdHJ1Y3R1cmVfbmV3KCJhcHBsaWNhdGlvbi94LXJ0cCIsICJtZWRpYSIsIEdf
VFlQRV9TVFJJTkcsIG1lZGlhLCAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGVuY29k
aW5nTmFtZSwKKyAgICAgICAgICAgICJwYXlsb2FkIiwgR19UWVBFX0lOVCwgbV9wdENvdW50ZXIr
KywgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCBjbG9ja1JhdGUsIG51bGxwdHIpKTsKKyAgICB9
CisKKyAgICBhdXRvIGRpcmVjdGlvbiA9IGZyb21SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihp
bml0LmRpcmVjdGlvbik7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIEdVbmlx
dWVQdHI8Y2hhcj4gZGVzYyhnX2VudW1fdG9fc3RyaW5nKEdTVF9UWVBFX1dFQlJUQ19SVFBfVFJB
TlNDRUlWRVJfRElSRUNUSU9OLCBkaXJlY3Rpb24pKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJBZGRpbmcgJXMgdHJhbnNjZWl2ZXIgZm9yIHBheWxvYWQgJSIgR1NU
X1BUUl9GT1JNQVQsIGRlc2MuZ2V0KCksIGNhcHMuZ2V0KCkpOworI2VuZGlmCisKKyAgICAvLyBG
SVhNRTogTm9uZSBvZiB0aGlzIChleGNlcHRlZCBkaXJlY3Rpb24pIGlzIHBhc3NlZCB0byB3ZWJy
dGNiaW4geWV0LgorICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBpbml0RGF0YShnc3Rfc3Ry
dWN0dXJlX25ldygidHJhbnNjZWl2ZXItaW5pdC1kYXRhIiwgImRpcmVjdGlvbiIsIEdTVF9UWVBF
X1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OLCBkaXJlY3Rpb24sIG51bGxwdHIpKTsK
KworICAgIEdWYWx1ZSBzdHJlYW1JZHNWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICBnX3ZhbHVl
X2luaXQoJnN0cmVhbUlkc1ZhbHVlLCBHU1RfVFlQRV9MSVNUKTsKKyAgICBmb3IgKGF1dG8mIHN0
cmVhbSA6IGluaXQuc3RyZWFtcykgeworICAgICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lO
SVQ7CisgICAgICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdfVFlQRV9TVFJJTkcpOworICAgICAg
ICBnX3ZhbHVlX3NldF9zdHJpbmcoJnZhbHVlLCBzdHJlYW0tPmlkKCkudXRmOCgpLmRhdGEoKSk7
CisgICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSgmc3RyZWFtSWRzVmFsdWUsICZ2
YWx1ZSk7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKKyAgICB9CisgICAgZ3N0X3N0
cnVjdHVyZV90YWtlX3ZhbHVlKGluaXREYXRhLmdldCgpLCAic3RyZWFtLWlkcyIsICZzdHJlYW1J
ZHNWYWx1ZSk7CisKKyAgICBHVmFsdWUgZW5jb2RpbmdzVmFsdWUgPSBHX1ZBTFVFX0lOSVQ7Cisg
ICAgZ192YWx1ZV9pbml0KCZlbmNvZGluZ3NWYWx1ZSwgR1NUX1RZUEVfTElTVCk7CisgICAgaWYg
KGtpbmQgPT0gImF1ZGlvIikgeworICAgICAgICBpZiAoIWluaXQuc2VuZEVuY29kaW5ncy5pc0Vt
cHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RpbmdEYXRhID0gZnJvbVJUQ0VuY29kaW5n
UGFyYW1ldGVycyhpbml0LnNlbmRFbmNvZGluZ3NbMF0pOworICAgICAgICAgICAgR1ZhbHVlIHZh
bHVlID0gR19WQUxVRV9JTklUOworICAgICAgICAgICAgZ192YWx1ZV9pbml0KCZ2YWx1ZSwgR1NU
X1RZUEVfU1RSVUNUVVJFKTsKKyAgICAgICAgICAgIGdzdF92YWx1ZV9zZXRfc3RydWN0dXJlKCZ2
YWx1ZSwgZW5jb2RpbmdEYXRhLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF92YWx1ZV9saXN0X2Fw
cGVuZF92YWx1ZSgmZW5jb2RpbmdzVmFsdWUsICZ2YWx1ZSk7CisgICAgICAgICAgICBnX3ZhbHVl
X3Vuc2V0KCZ2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3IgKGF1
dG8mIGVuY29kaW5nIDogaW5pdC5zZW5kRW5jb2RpbmdzKSB7CisgICAgICAgICAgICBhdXRvIGVu
Y29kaW5nRGF0YSA9IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoZW5jb2RpbmcpOworICAgICAg
ICAgICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOworICAgICAgICAgICAgZ192YWx1ZV9p
bml0KCZ2YWx1ZSwgR1NUX1RZUEVfU1RSVUNUVVJFKTsKKyAgICAgICAgICAgIGdzdF92YWx1ZV9z
ZXRfc3RydWN0dXJlKCZ2YWx1ZSwgZW5jb2RpbmdEYXRhLmdldCgpKTsKKyAgICAgICAgICAgIGdz
dF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSgmZW5jb2RpbmdzVmFsdWUsICZ2YWx1ZSk7CisgICAg
ICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZ2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAgZ3N0
X3N0cnVjdHVyZV90YWtlX3ZhbHVlKGluaXREYXRhLmdldCgpLCAiZW5jb2RpbmdzIiwgJmVuY29k
aW5nc1ZhbHVlKTsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHJ0Y1Ry
YW5zY2VpdmVyOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwg
ImFkZC10cmFuc2NlaXZlciIsIGRpcmVjdGlvbiwgY2Fwcy5nZXQoKSwgJnJ0Y1RyYW5zY2VpdmVy
Lm91dFB0cigpKTsKKyAgICBpZiAoIXJ0Y1RyYW5zY2VpdmVyKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgYXV0byB0cmFuc2NlaXZlciA9IG1ha2VVbmlxdWU8R1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJ0Y1RyYW5zY2VpdmVyKSk7CisgICAgcmV0
dXJuIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkJhY2tlbmRzIHsgdHJhbnNjZWl2ZXItPmNyZWF0
ZVNlbmRlckJhY2tlbmQobV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQsIFdURk1vdmUoc291cmNlKSwg
V1RGTW92ZShpbml0RGF0YSkpLCB0cmFuc2NlaXZlci0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCks
IFdURk1vdmUodHJhbnNjZWl2ZXIpIH07Cit9CisKK3N0ZDo6b3B0aW9uYWw8R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYW5zY2Vp
dmVyKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQm
IGluaXQpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHModHJhY2tLaW5k
LCBpbml0LCBudWxscHRyKTsKK30KKworR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNl
IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNvdXJjZUZvclRyYWNrKE1lZGlhU3RyZWFt
VHJhY2smIHRyYWNrKQoreworICAgIGlmICh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNBdWRpbygp
KQorICAgICAgICByZXR1cm4gUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpj
cmVhdGUodHJhY2sucHJpdmF0ZVRyYWNrKCkpOworCisgICAgUkVMRUFTRV9BU1NFUlQodHJhY2su
cHJpdmF0ZVRyYWNrKCkuaGFzVmlkZW8oKSk7CisgICAgcmV0dXJuIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsKK30KKwor
c3RkOjpvcHRpb25hbDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6YWRkVHJhbnNjZWl2ZXIoTWVkaWFTdHJlYW1UcmFjayYgdHJhY2ssIGNv
bnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlVHJh
bnNjZWl2ZXJCYWNrZW5kcyh0cmFjay5raW5kKCksIGluaXQsIGNyZWF0ZVNvdXJjZUZvclRyYWNr
KHRyYWNrKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0U2VuZGVyU291
cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNr
JikKK3sKKyAgICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJzZXRTZW5kZXJT
b3VyY2VGcm9tVHJhY2siKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50Ojp0cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQmIGJhY2tlbmQpCit7CisgICAgR1JlZlB0cjxHQXJyYXk+IHRyYW5zY2VpdmVyczsKKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJnZXQtdHJhbnNjZWl2ZXJz
IiwgJnRyYW5zY2VpdmVycy5vdXRQdHIoKSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJMb29raW5nIGZvciBzZW5kZXIgJXAgaW4gJXUgZXhpc3RpbmcgdHJhbnNj
ZWl2ZXJzIiwgYmFja2VuZC5ydGNTZW5kZXIoKSwgdHJhbnNjZWl2ZXJzLT5sZW4pOworICAgIGZv
ciAodW5zaWduZWQgdHJhbnNjZWl2ZXJJbmRleCA9IDA7IHRyYW5zY2VpdmVySW5kZXggPCB0cmFu
c2NlaXZlcnMtPmxlbjsgdHJhbnNjZWl2ZXJJbmRleCsrKSB7CisgICAgICAgIEdzdFdlYlJUQ1JU
UFRyYW5zY2VpdmVyKiBjdXJyZW50ID0gZ19hcnJheV9pbmRleCh0cmFuc2NlaXZlcnMuZ2V0KCks
IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiwgdHJhbnNjZWl2ZXJJbmRleCk7CisgICAgICAgIEdS
ZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXI7CisgICAgICAgIGdfb2JqZWN0X2dldChj
dXJyZW50LCAic2VuZGVyIiwgJnNlbmRlci5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICAgICAg
aWYgKCFzZW5kZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHNlbmRlci5n
ZXQoKSA9PSBiYWNrZW5kLnJ0Y1NlbmRlcigpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bWFr
ZVVuaXF1ZTxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KGN1cnJlbnQpOworICAgIH0K
KworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmFkZEljZUNhbmRpZGF0ZShHU3RyZWFtZXJJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQorewor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyBJQ0UgY2FuZGlk
YXRlICVzIiwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICgh
Y2FuZGlkYXRlLmNhbmRpZGF0ZS5zdGFydHNXaXRoKCJjYW5kaWRhdGU6IikpIHsKKyAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxiYWNr
KSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICB0YXNrLT5ydW4oRXhjZXB0aW9uIHsgT3BlcmF0
aW9uRXJyb3IsICJFeHBlY3QgbGluZTogY2FuZGlkYXRlOjxjYW5kaWRhdGUtc3RyPiIgfSk7Cisg
ICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBwYXJzZWRDYW5k
aWRhdGUgPSBwYXJzZUljZUNhbmRpZGF0ZVNEUChjYW5kaWRhdGUuY2FuZGlkYXRlKTsKKyAgICBp
ZiAoIXBhcnNlZENhbmRpZGF0ZSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0g
Y3JlYXRlU2hhcmVkVGFzazxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNh
bGxiYWNrRnVuY3Rpb24+KFdURk1vdmUoY2FsbGJhY2spKV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgIHRhc2stPnJ1bihFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgIkVycm9yIHByb2Nlc3Np
bmcgSUNFIGNhbmRpZGF0ZSIgfSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gRklYTUU6IGludmFsaWQgc2RwTUxpbmVJbmRleCBleGNlcHRpb24gbm90IHJl
bGF5ZWQgZnJvbSB3ZWJydGNiaW4uCisgICAgLy8gRklYTUU6IElkZWFsbHkgdGhpcyBzaG91bGQg
cGFzcyB0aGUgcmVzdWx0L2Vycm9yIHRvIGEgR3N0UHJvbWlzZSBvYmplY3QuCisgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiYWRkLWljZS1jYW5kaWRhdGUiLCBj
YW5kaWRhdGUuc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0YSgp
KTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gY3JlYXRlU2hhcmVkVGFzazxQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrRnVuY3Rpb24+KFdURk1vdmUo
Y2FsbGJhY2spKSwgZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0JpbihtX3dl
YnJ0Y0Jpbi5nZXQoKSldKCkgbXV0YWJsZSB7CisgICAgICAgIHRhc2stPnJ1bihXVEZNb3ZlKGRl
c2NyaXB0aW9ucykpOworICAgIH0pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5u
ZWxIYW5kbGVyPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbChjb25z
dCBTdHJpbmcmIGxhYmVsLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmIG9wdGlvbnMpCit7Cisg
ICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRv
IGluaXQgPSBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmZyb21SVENEYXRhQ2hhbm5lbElu
aXQob3B0aW9ucyk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ3Jl
YXRpbmcgZGF0YSBjaGFubmVsIGZvciBpbml0IG9wdGlvbnMgJSIgR1NUX1BUUl9GT1JNQVQsIGlu
aXQuZ2V0KCkpOworICAgIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGNoYW5uZWw7Cisg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiY3JlYXRlLWRhdGEt
Y2hhbm5lbCIsIGxhYmVsLnV0ZjgoKS5kYXRhKCksIGluaXQuZ2V0KCksICZjaGFubmVsLm91dFB0
cigpKTsKKyAgICBpZiAoIWNoYW5uZWwpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI+KFdURk1v
dmUoY2hhbm5lbCkpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uRGF0YUNo
YW5uZWwoR3N0V2ViUlRDRGF0YUNoYW5uZWwqIGRhdGFDaGFubmVsKQoreworICAgIEdSZWZQdHI8
R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGNoYW5uZWwgPSBkYXRhQ2hhbm5lbDsKKyAgICBjYWxsT25N
YWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywgZGF0YUNoYW5uZWwg
PSBXVEZNb3ZlKGNoYW5uZWwpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoaXNTdG9wcGVkKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGlu
ZS5nZXQoKSwgIkluY29taW5nIGRhdGEgY2hhbm5lbCIpOworICAgICAgICBhdXRvJiBjb25uZWN0
aW9uID0gbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29ubmVjdGlvbigpOworICAgICAgICBjb25u
ZWN0aW9uLmRpc3BhdGNoRXZlbnQoR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjcmVhdGVE
YXRhQ2hhbm5lbEV2ZW50KCpjb25uZWN0aW9uLmRvY3VtZW50KCksIFdURk1vdmUoZGF0YUNoYW5u
ZWwpKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y2xvc2Uo
KQoreworICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0
LXBsdWdpbnMtYmFkLy0vaXNzdWVzLzExODEKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxp
bmUuZ2V0KCksICJDbG9zaW5nIik7CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIGdzdF9l
bGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUkVBRFkpOworCisj
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3RvcExvZ2dpbmdTdGF0cygpOworI2VuZGlm
Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcCgpCit7CisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECisgICAgc3RvcExvZ2dpbmdTdGF0cygpOworI2VuZGlmCisKKyAgICBp
ZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIlN0b3BwaW5nIik7CisgICAgdGVhcmRvd25QaXBlbGluZSgpOwor
fQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN1c3BlbmQoKQoreworICAgIGlmIChp
c1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiU3VzcGVuZGluZyIpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSht
X3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUEFVU0VEKTsKK30KKwordm9pZCBHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpyZXN1bWUoKQoreworICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVzdW1p
bmciKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NU
QVRFX1BMQVlJTkcpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uTmVnb3Rp
YXRpb25OZWVkZWQoKQoreworICAgIG1faXNOZWdvdGlhdGlvbk5lZWRlZCA9IHRydWU7CisKKyAg
ICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpc10gewor
ICAgICAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIk5lZ290aWF0aW9uIG5lZWRlZCEiKTsK
KyAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQubWFya0FzTmVlZGluZ05lZ290aWF0aW9u
KDApOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlQ29u
bmVjdGlvbkNoYW5nZSgpCit7CisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHN0YXRl
OworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImljZS1jb25uZWN0aW9uLXN0
YXRlIiwgJnN0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRU
aGlzID0gUmVmKCp0aGlzKSwgdGhpcywgY29ubmVjdGlvblN0YXRlID0gdG9SVENJY2VDb25uZWN0
aW9uU3RhdGUoc3RhdGUpXSB7CisgICAgICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgYXV0byYgY29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmNvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0
YXRlKCkgIT0gY29ubmVjdGlvblN0YXRlKQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJ
Y2VDb25uZWN0aW9uU3RhdGUoY29ubmVjdGlvblN0YXRlKTsKKyAgICB9KTsKK30KKwordm9pZCBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUdhdGhlcmluZ0NoYW5nZSgpCit7CisgICAgR3N0
V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgc3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRj
QmluLmdldCgpLCAiaWNlLWdhdGhlcmluZy1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0cik7CisgICAg
Y2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRoaXMsIHN0YXRl
XSB7CisgICAgICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgYXV0byYgY29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNvbm5lY3Rpb24o
KTsKKyAgICAgICAgaWYgKHN0YXRlID09IEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9D
T01QTEVURSkKKyAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmRvbmVHYXRoZXJp
bmdDYW5kaWRhdGVzKCk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlID09IEdTVF9XRUJSVENfSUNF
X0dBVEhFUklOR19TVEFURV9HQVRIRVJJTkcpCisgICAgICAgICAgICBjb25uZWN0aW9uLnVwZGF0
ZUljZUdhdGhlcmluZ1N0YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpHYXRoZXJpbmcpOworICAg
ICAgICBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfTkVX
KQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShSVENJY2VH
YXRoZXJpbmdTdGF0ZTo6TmV3KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpvbkljZUNhbmRpZGF0ZShndWludCBzZHBNTGluZUluZGV4LCBnY2hhcmFycmF5IGNh
bmRpZGF0ZSkKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEZJWE1FOiBHZXQgbWlkIGZyb20gY2FuZGlkYXRlPworICAgIEdVbmlxdWVPdXRQdHI8R3N0
V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbjsKKyAgICBnX29iamVjdF9nZXQo
bV93ZWJydGNCaW4uZ2V0KCksICJsb2NhbC1kZXNjcmlwdGlvbiIsICZkZXNjcmlwdGlvbi5vdXRQ
dHIoKSwgbnVsbHB0cik7CisgICAgaWYgKCFkZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgYXV0byogbWVkaWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0X21lZGlhKGRlc2Ny
aXB0aW9uLT5zZHAsIHNkcE1MaW5lSW5kZXgpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3Rl
Y3RlZFRoaXMgPSBSZWYoKnRoaXMpLCB0aGlzLCBtaWQgPSBtYWtlU3RyaW5nKGdzdF9zZHBfbWVk
aWFfZ2V0X2F0dHJpYnV0ZV92YWwobWVkaWEsICJtaWQiKSksIHNkcCA9IG1ha2VTdHJpbmcoY2Fu
ZGlkYXRlKSwgc2RwTUxpbmVJbmRleF0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKGlzU3RvcHBl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGRlc2NyaXB0aW9ucyA9IGRl
c2NyaXB0aW9uc0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCkpOworICAgICAgICBtX3Bl
ZXJDb25uZWN0aW9uQmFja2VuZC5uZXdJQ0VDYW5kaWRhdGUoV1RGTW92ZShzZHApLCBXVEZNb3Zl
KG1pZCksIHNkcE1MaW5lSW5kZXgsIHsgfSwgV1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAgICB9
KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3Jp
cHRpb25TdWNjZWVkZWQoR1VuaXF1ZVB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYg
ZGVzY3JpcHRpb24pCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJl
ZigqdGhpcyksIHRoaXMsIGRlc2NyaXB0aW9uID0gV1RGTW92ZShkZXNjcmlwdGlvbildIHsKKyAg
ICAgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEdV
bmlxdWVQdHI8Y2hhcj4gc2RwKGdzdF9zZHBfbWVzc2FnZV9hc190ZXh0KGRlc2NyaXB0aW9uLT5z
ZHApKTsKKyAgICAgICAgaWYgKG1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlclN1Y2NlZWRlZChzZHAuZ2V0KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJTdWNj
ZWVkZWQoc2RwLmdldCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1ZVB0cjxHRXJyb3I+JiYg
ZXJyb3IpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhp
cyksIHRoaXMsIGVycm9yID0gV1RGTW92ZShlcnJvcildIHsKKyAgICAgICAgaWYgKGlzU3RvcHBl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gZXhjID0gRXhjZXB0aW9u
IHsgT3BlcmF0aW9uRXJyb3IsIGVycm9yID8gZXJyb3ItPm1lc3NhZ2UgOiAiVW5rbm93biBFcnJv
ciIgfTsKKyAgICAgICAgaWYgKG1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlckZhaWxlZChXVEZNb3ZlKGV4YykpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJGYWls
ZWQoV1RGTW92ZShleGMpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50Ojpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAgICBHUmVmUHRyPEdBcnJheT4gdHJhbnNj
ZWl2ZXJzOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdl
dC10cmFuc2NlaXZlcnMiLCAmdHJhbnNjZWl2ZXJzLm91dFB0cigpKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdHJhbnNjZWl2ZXJzLT5sZW47IGkrKykgeworICAgICAgICBHc3RXZWJS
VENSVFBUcmFuc2NlaXZlciogY3VycmVudCA9IGdfYXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdl
dCgpLCBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciosIGkpOworCisgICAgICAgIGF1dG8qIGV4aXN0
aW5nVHJhbnNjZWl2ZXIgPSBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2Vp
dmVyKFsmXShhdXRvJiB0cmFuc2NlaXZlckJhY2tlbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBj
dXJyZW50ID09IHRyYW5zY2VpdmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgICAgICB9
KTsKKyAgICAgICAgaWYgKGV4aXN0aW5nVHJhbnNjZWl2ZXIpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiByZWNlaXZlcjsKKyAg
ICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBtaWQ7CisgICAgICAgIGdfb2JqZWN0X2dldChjdXJy
ZW50LCAicmVjZWl2ZXIiLCAmcmVjZWl2ZXIub3V0UHRyKCksICJtaWQiLCAmbWlkLm91dFB0cigp
LCBudWxscHRyKTsKKworICAgICAgICBpZiAoIXJlY2VpdmVyIHx8ICFtaWQpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5uZXdSZW1vdGVU
cmFuc2NlaXZlcihXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
PihXVEZNb3ZlKGN1cnJlbnQpKSwgbV9tZWRpYUZvck1pZC5nZXQobWlkLmdldCgpKSk7CisgICAg
fQorfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZygpCit7CisgICAgYXV0byBkYXRhID0gbWFrZVVu
aXF1ZTxHU3RyZWFtZXJNZWRpYUVuZHBvaW50SG9sZGVyPigqdGhpcyk7CisgICAgZ19zaWduYWxf
ZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiZ2V0LXN0YXRzIiwgbnVsbHB0ciwgZ3N0
X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlzZSwg
Z3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9taXNlID0gYWRvcHRHUmVmKHJh
d1Byb21pc2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9taXNlX3dhaXQocHJvbWlz
ZS5nZXQoKSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJ
RUQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3QgYXV0byogcmVwbHkgPSBn
c3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIFJFTEVBU0VfQVNT
RVJUKHJlcGx5KTsKKyAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlcGx5LCAi
ZXJyb3IiKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8
R1N0cmVhbWVyTWVkaWFFbmRwb2ludEhvbGRlcj4gZGF0YShzdGF0aWNfY2FzdDxHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50SG9sZGVyKj4odXNlckRhdGEpKTsKKyAgICAgICAgZGF0YS0+ZW5kUG9pbnQt
Pm9uU3RhdHNEZWxpdmVyZWQocmVwbHkpOworICAgIH0sIGRhdGEucmVsZWFzZSgpLCBudWxscHRy
KSk7Cit9CisKK2NsYXNzIFJUQ1N0YXRzTG9nZ2VyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBS
VENTdGF0c0xvZ2dlcihjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0YXRzKQorICAgICAgICA6IG1fc3Rh
dHMoc3RhdHMpCisgICAgeyB9CisKKyAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3QgeyBy
ZXR1cm4gZ3N0U3RydWN0dXJlVG9KU09OU3RyaW5nKG1fc3RhdHMpOyB9CisKK3ByaXZhdGU6Cisg
ICAgY29uc3QgR3N0U3RydWN0dXJlKiBtX3N0YXRzOworfTsKKwordm9pZCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50Ojpwcm9jZXNzU3RhdHMoY29uc3QgR1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAo
IUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUodmFsdWUpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF92YWx1ZV9nZXRfc3RydWN0dXJl
KHZhbHVlKTsKKyAgICBHc3RXZWJSVENTdGF0c1R5cGUgc3RhdHNUeXBlOworICAgIGlmICghZ3N0
X3N0cnVjdHVyZV9nZXQoc3RydWN0dXJlLCAidHlwZSIsIEdTVF9UWVBFX1dFQlJUQ19TVEFUU19U
WVBFLCAmc3RhdHNUeXBlLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSnVz
dCBjaGVjayBhIHNpbmdsZSB0aW1lc3RhbXAsIGluYm91bmQgUlRQIGZvciBpbnN0YW5jZS4KKyAg
ICBpZiAoIW1fc3RhdHNGaXJzdERlbGl2ZXJlZFRpbWVzdGFtcCAmJiBzdGF0c1R5cGUgPT0gR1NU
X1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUCkgeworICAgICAgICBkb3VibGUgdGltZXN0YW1wOwor
ICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHN0cnVjdHVyZSwgInRpbWVzdGFt
cCIsICZ0aW1lc3RhbXApKSB7CisgICAgICAgICAgICBhdXRvIHRzID0gU2Vjb25kczo6ZnJvbU1p
bGxpc2Vjb25kcyh0aW1lc3RhbXApOworICAgICAgICAgICAgbV9zdGF0c0ZpcnN0RGVsaXZlcmVk
VGltZXN0YW1wID0gdHM7CisKKyAgICAgICAgICAgIGlmICghaXNTdG9wcGVkKCkgJiYgbV9zdGF0
c0xvZ1RpbWVyLnJlcGVhdEludGVydmFsKCkgIT0gc3RhdHNMb2dJbnRlcnZhbCh0cykpIHsKKyAg
ICAgICAgICAgICAgICBtX3N0YXRzTG9nVGltZXIuc3RvcCgpOworICAgICAgICAgICAgICAgIG1f
c3RhdHNMb2dUaW1lci5zdGFydFJlcGVhdGluZyhzdGF0c0xvZ0ludGVydmFsKHRzKSk7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobG9nZ2VyKCkud2lsbExvZyhs
b2dDaGFubmVsKCksIFdURkxvZ0xldmVsOjpEZWJ1ZykpIHsKKyAgICAgICAgLy8gU3RhdHMgYXJl
IHZlcnkgdmVyYm9zZSwgbGV0J3Mgb25seSBkaXNwbGF5IHRoZW0gaW4gaW5zcGVjdG9yIGNvbnNv
bGUgaW4gdmVyYm9zZSBtb2RlLgorICAgICAgICBsb2dnZXIoKS5kZWJ1ZyhMb2dXZWJSVEMsCisg
ICAgICAgICAgICBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKCJHU3RyZWFtZXJNZWRpYUVuZHBv
aW50IiwgIm9uU3RhdHNEZWxpdmVyZWQiLCBsb2dJZGVudGlmaWVyKCkpLAorICAgICAgICAgICAg
UlRDU3RhdHNMb2dnZXIgeyBzdHJ1Y3R1cmUgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9n
Z2VyKCkubG9nQWx3YXlzKExvZ1dlYlJUQ1N0YXRzLAorICAgICAgICAgICAgTG9nZ2VyOjpMb2dT
aXRlSWRlbnRpZmllcigiR1N0cmVhbWVyTWVkaWFFbmRwb2ludCIsICJvblN0YXRzRGVsaXZlcmVk
IiwgbG9nSWRlbnRpZmllcigpKSwKKyAgICAgICAgICAgIFJUQ1N0YXRzTG9nZ2VyIHsgc3RydWN0
dXJlIH0pOworICAgIH0KK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvblN0YXRz
RGVsaXZlcmVkKGNvbnN0IEdzdFN0cnVjdHVyZSogc3RhdHMpCit7CisgICAgR1VuaXF1ZVB0cjxH
c3RTdHJ1Y3R1cmU+IHN0YXRzQ29weShnc3Rfc3RydWN0dXJlX2NvcHkoc3RhdHMpKTsKKyAgICBj
YWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywgc3RhdHMg
PSBXVEZNb3ZlKHN0YXRzQ29weSldIHsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoKHN0
YXRzLmdldCgpLCBzdGF0aWNfY2FzdDxHc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYz4oW10oR1F1YXJr
LCBjb25zdCBHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewor
ICAgICAgICAgICAgYXV0byogZW5kUG9pbnQgPSByZWludGVycHJldF9jYXN0PEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBlbmRQb2ludC0+cHJvY2Vzc1N0
YXRzKHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9KSwgdGhpcyk7
CisgICAgfSk7Cit9CisjZW5kaWYKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAordm9pZCBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdGFydExvZ2dpbmdTdGF0cygpCit7CisgICAgaWYgKG1f
c3RhdHNMb2dUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3N0YXRzTG9nVGltZXIuc3RvcCgp
OworICAgIG1fc3RhdHNMb2dUaW1lci5zdGFydFJlcGVhdGluZyhzdGF0c0xvZ0ludGVydmFsKFNl
Y29uZHM6Om5hbigpKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcExv
Z2dpbmdTdGF0cygpCit7CisgICAgbV9zdGF0c0xvZ1RpbWVyLnN0b3AoKTsKK30KKworV1RGTG9n
Q2hhbm5lbCYgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6bG9nQ2hhbm5lbCgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIExvZ1dlYlJUQzsKK30KKworU2Vjb25kcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpzdGF0c0xvZ0ludGVydmFsKFNlY29uZHMgcmVwb3J0VGltZXN0YW1wKSBjb25zdAoreworICAg
IGlmIChsb2dnZXIoKS53aWxsTG9nKGxvZ0NoYW5uZWwoKSwgV1RGTG9nTGV2ZWw6OkluZm8pKQor
ICAgICAgICByZXR1cm4gMl9zOworCisgICAgaWYgKHJlcG9ydFRpbWVzdGFtcCAtIG1fc3RhdHNG
aXJzdERlbGl2ZXJlZFRpbWVzdGFtcCA+IDE1X3MpCisgICAgICAgIHJldHVybiAxMF9zOworCisg
ICAgcmV0dXJuIDRfczsKK30KKyNlbmRpZgorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUoRnVuY3Rpb248dm9pZChTdHJpbmcmJik+
JiYgY2FsbGJhY2spCit7CisgICAgLy8gVE9ETzogY29sbGVjdCBzdGF0cyBhbmQgbG9va3VwIElu
Ym91bmRSdHAgImRlY29kZXJfaW1wbGVtZW50YXRpb24iIGZpZWxkLgorICAgIGNhbGxiYWNrKHsg
fSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2lmICFSRUxFQVNFX0xPR19ESVNB
QkxFRAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CitzdHJ1Y3Qg
TG9nQXJndW1lbnQ7CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgTG9nQXJndW1lbnQ8V2ViQ29yZTo6
UlRDU3RhdHNMb2dnZXI+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFdlYkNv
cmU6OlJUQ1N0YXRzTG9nZ2VyJiBsb2dnZXIpCisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5n
KGxvZ2dlci50b0pTT05TdHJpbmcoKSk7CisgICAgfQorfTsKKworfTsgLy8gbmFtZXNwYWNlIFdU
RgorI2VuZGlmIC8vICFSRUxFQVNFX0xPR19ESVNBQkxFRAorCisjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZjg2NWIzNDlhZWEyYWM5Yjk3MjQ1Njk1MTI2NGEyODk4NTFmODRhOQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCIKKyNpbmNsdWRl
ICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRDUnRwUmVjZWl2ZXIuaCIKKwor
I2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJl
ZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOworY2xhc3Mg
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOworY2xhc3MgTWVkaWFTdHJlYW1UcmFjazsK
K2NsYXNzIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbjsKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjsKKworY2xhc3MgR1N0cmVhbWVyTWVkaWFFbmRwb2ludCA6IHB1Ymxp
YyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50LCBXVEY6OkRlc3Ry
dWN0aW9uVGhyZWFkOjpNYWluPgorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICwgcHJp
dmF0ZSBMb2dnZXJIZWxwZXIKKyNlbmRpZgoreworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R1N0
cmVhbWVyTWVkaWFFbmRwb2ludD4gY3JlYXRlKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZCYgcGVlckNvbm5lY3Rpb24pIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludChwZWVyQ29ubmVjdGlvbikpOyB9CisgICAgdmlydHVhbCB+R1N0cmVhbWVyTWVkaWFF
bmRwb2ludCgpOworCisgICAgYm9vbCBzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25m
aWd1cmF0aW9uJik7CisgICAgdm9pZCByZXN0YXJ0SWNlKCk7CisKKyAgICB2b2lkIGRvU2V0TG9j
YWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qKTsKKyAgICB2b2lkIGRv
U2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJik7CisgICAg
dm9pZCBkb0NyZWF0ZU9mZmVyKGNvbnN0IFJUQ09mZmVyT3B0aW9ucyYpOworICAgIHZvaWQgZG9D
cmVhdGVBbnN3ZXIoKTsKKworICAgIHZvaWQgZ2V0U3RhdHMoR3N0UGFkKiwgUmVmPERlZmVycmVk
UHJvbWlzZT4mJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVy
PiBjcmVhdGVEYXRhQ2hhbm5lbChjb25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hhbm5lbElu
aXQmKTsKKyAgICB2b2lkIG9uRGF0YUNoYW5uZWwoR3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsKKwor
ICAgIHZvaWQgYWRkSWNlQ2FuZGlkYXRlKEdTdHJlYW1lckljZUNhbmRpZGF0ZSYsIFBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRlQ2FsbGJhY2smJik7CisKKyAgICB2b2lkIGNs
b3NlKCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgYm9vbCBpc1N0b3BwZWQoKSBjb25zdCB7IHJl
dHVybiAhbV9waXBlbGluZTsgfQorCisgICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCByZXN1
bWUoKTsKKworICAgIHZvaWQgZ2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlv
bjx2b2lkKFN0cmluZyYmKT4mJik7CisgICAgYm9vbCBpc05lZ290aWF0aW9uTmVlZGVkKCkgY29u
c3QgeyByZXR1cm4gbV9pc05lZ290aWF0aW9uTmVlZGVkOyB9CisKKyAgICB2b2lkIGNvbmZpZ3Vy
ZUFuZExpbmtTb3VyY2UoUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyJik7CisK
KyAgICBib29sIGFkZFRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVh
bVRyYWNrJiwgY29uc3QgRml4ZWRWZWN0b3I8U3RyaW5nPiYpOworICAgIHZvaWQgcmVtb3ZlVHJh
Y2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYpOworCisgICAgc3RydWN0IEJhY2tlbmRzIHsK
KyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+IHNlbmRl
ckJhY2tlbmQ7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZlckJh
Y2tlbmQ+IHJlY2VpdmVyQmFja2VuZDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZD4gdHJhbnNjZWl2ZXJCYWNrZW5kOworICAgIH07CisgICAg
c3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gYWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFj
a0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpOworICAgIHN0ZDo6b3B0aW9uYWw8
QmFja2VuZHM+IGFkZFRyYW5zY2VpdmVyKE1lZGlhU3RyZWFtVHJhY2smLCBjb25zdCBSVENSdHBU
cmFuc2NlaXZlckluaXQmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kPiB0cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKEdTdHJlYW1lclJ0cFNl
bmRlckJhY2tlbmQmKTsKKworICAgIHZvaWQgc2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKEdTdHJl
YW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICB2b2lkIGNv
bGxlY3RUcmFuc2NlaXZlcnMoKTsKKworICAgIHZvaWQgY3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9u
U3VjY2VlZGVkKEdVbmlxdWVQdHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmKTsKKyAg
ICB2b2lkIGNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbkZhaWxlZChHVW5pcXVlUHRyPEdFcnJvcj4m
Jik7CisKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGlwZWxp
bmUuZ2V0KCk7IH0KKyAgICBib29sIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOworCisjaWYg
IVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9pZCBwcm9jZXNzU3RhdHMoY29uc3QgR1ZhbHVl
Kik7CisjZW5kaWYKKworcHJvdGVjdGVkOgorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAg
IHZvaWQgb25TdGF0c0RlbGl2ZXJlZChjb25zdCBHc3RTdHJ1Y3R1cmUqKTsKKyNlbmRpZgorCitw
cml2YXRlOgorICAgIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQoR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kJik7CisKKyAgICBib29sIGluaXRpYWxpemVQaXBlbGluZSgpOworICAgIHZvaWQg
dGVhcmRvd25QaXBlbGluZSgpOworICAgIHZvaWQgZGlzcG9zZUVsZW1lbnRDaGFpbihHc3RFbGVt
ZW50Kik7CisKKyAgICB2b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlw
dGlvbiosIGJvb2wgaXNMb2NhbCwgRnVuY3Rpb248dm9pZCgpPiYmIHN1Y2Nlc3NDYWxsYmFjaywg
RnVuY3Rpb248dm9pZChjb25zdCBHRXJyb3IqKT4mJiBmYWlsdXJlQ2FsbGJhY2spOworICAgIHZv
aWQgaW5pdGlhdGUoYm9vbCBpc0luaXRpYXRvciwgR3N0U3RydWN0dXJlKik7CisKKyAgICB2b2lk
IG9uTmVnb3RpYXRpb25OZWVkZWQoKTsKKyAgICB2b2lkIG9uSWNlQ29ubmVjdGlvbkNoYW5nZSgp
OworICAgIHZvaWQgb25JY2VHYXRoZXJpbmdDaGFuZ2UoKTsKKyAgICB2b2lkIG9uSWNlQ2FuZGlk
YXRlKGd1aW50IHNkcE1MaW5lSW5kZXgsIGdjaGFyYXJyYXkgY2FuZGlkYXRlKTsKKworICAgIE1l
ZGlhU3RyZWFtJiBtZWRpYVN0cmVhbUZyb21SVENTdHJlYW0oU3RyaW5nIGxhYmVsKTsKKworICAg
IHZvaWQgYWRkUmVtb3RlU3RyZWFtKEdzdFBhZCopOworICAgIHZvaWQgcmVtb3ZlUmVtb3RlU3Ry
ZWFtKEdzdFBhZCopOworCisgICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gY3JlYXRlVHJhbnNj
ZWl2ZXJCYWNrZW5kcyhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVy
SW5pdCYsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYmKTsKKyAgICBHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UgY3JlYXRlU291cmNlRm9yVHJhY2soTWVkaWFTdHJl
YW1UcmFjayYpOworCisgICAgdm9pZCBzdG9yZVJlbW90ZU1MaW5lSW5mbyhHc3RTRFBNZXNzYWdl
Kik7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gcmVxdWVzdFBhZCh1bnNpZ25lZCBtbGluZUluZGV4
LCBjb25zdCBHUmVmUHRyPEdzdENhcHM+Jik7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQK
KyAgICB2b2lkIGdhdGhlclN0YXRzRm9yTG9nZ2luZygpOworICAgIHZvaWQgc3RhcnRMb2dnaW5n
U3RhdHMoKTsKKyAgICB2b2lkIHN0b3BMb2dnaW5nU3RhdHMoKTsKKworICAgIGNvbnN0IExvZ2dl
ciYgbG9nZ2VyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBj
b25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVu
dGlmaWVyOyB9CisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gIkdTdHJlYW1lck1lZGlhRW5kcG9pbnQiOyB9CisgICAgV1RGTG9nQ2hhbm5lbCYgbG9n
Q2hhbm5lbCgpIGNvbnN0IGZpbmFsOworCisgICAgU2Vjb25kcyBzdGF0c0xvZ0ludGVydmFsKFNl
Y29uZHMpIGNvbnN0OworI2VuZGlmCisKKyAgICBIYXNoTWFwPFN0cmluZywgUmVhbHRpbWVNZWRp
YVNvdXJjZTo6VHlwZT4gbV9tZWRpYUZvck1pZDsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlIG1lZGlhVHlwZUZvck1pZChjb25zdCBjaGFyKiBtaWQpOworCisgICAgR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kJiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZDsKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fd2VicnRjQmluOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBl
bGluZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiBtX3JlbW90
ZVN0cmVhbXNCeUlkOworCisgICAgc3RydWN0IFBlbmRpbmdNTGluZUluZm8geworICAgICAgICBH
UmVmUHRyPEdzdENhcHM+IGNhcHM7CisgICAgICAgIGJvb2wgaXNVc2VkOworICAgICAgICBWZWN0
b3I8aW50PiBwYXlsb2FkVHlwZXM7CisgICAgfTsKKyAgICBWZWN0b3I8UGVuZGluZ01MaW5lSW5m
bz4gbV9yZW1vdGVNTGluZUluZm9zOworCisgICAgUmVmPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9y
PiBtX3N0YXRzQ29sbGVjdG9yOworCisgICAgdW5zaWduZWQgbV9yZXF1ZXN0UGFkQ291bnRlciB7
IDAgfTsKKyAgICBpbnQgbV9wdENvdW50ZXIgeyA5NiB9OworICAgIHVuc2lnbmVkIG1fbWxpbmVJ
bmRleCB7IDAgfTsKKyAgICBWZWN0b3I8UmVmPFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdT
dHJlYW1lcj4+IG1fc291cmNlczsKKyAgICB1bnNpZ25lZCBtX3BlbmRpbmdJbmNvbWluZ1N0cmVh
bXMgeyAwIH07CisgICAgYm9vbCBtX2lzSW5pdGlhdG9yIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
aXNOZWdvdGlhdGlvbk5lZWRlZCB7IGZhbHNlIH07CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKKyAgICBUaW1lciBtX3N0YXRzTG9nVGltZXI7CisgICAgU2Vjb25kcyBtX3N0YXRzRmlyc3RE
ZWxpdmVyZWRUaW1lc3RhbXA7CisgICAgUmVmPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CisgICAg
Y29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjI1NjRlOWE0NjQ4MDhiYjA4Y2I0MDYzY2FhYzYxMjQwMmJkZmQ1YzIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9u
LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oIgorI2luY2x1ZGUgIkdTdHJl
YW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKyNp
bmNsdWRlICJJY2VDYW5kaWRhdGUuaCIKKyNpbmNsdWRlICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisj
aW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJUQ0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJUQ1Bl
ZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDUnRwQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVk
ZSAiUlRDUnRwUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIK
KyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJS
ZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3JlYXRlR1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKFJUQ1BlZXJDb25uZWN0aW9uJiBwZWVyQ29ubmVj
dGlvbikKK3sKKyAgICBlbnN1cmVHU3RyZWFtZXJJbml0aWFsaXplZCgpOworICAgIGlmICghaXNH
U3RyZWFtZXJQbHVnaW5BdmFpbGFibGUoIndlYnJ0YyIpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5
cygiR3N0V2ViUlRDIHBsdWdpbiBub3QgZm91bmQuIE1ha2Ugc3VyZSB0byBpbnN0YWxsIGdzdC1w
bHVnaW5zLWJhZCA+PSAxLjIwIHdpdGggdGhlIHdlYnJ0YyBwbHVnaW4gZW5hYmxlZC4iKTsKKyAg
ICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kPihwZWVyQ29ubmVjdGlvbik7Cit9CisKK0Ny
ZWF0ZVBlZXJDb25uZWN0aW9uQmFja2VuZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZSA9
IGNyZWF0ZUdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDsKKworc3RhdGljIFJUQ1J0cENh
cGFiaWxpdGllcyBnc3RyZWFtZXJSdHBDYXBhdGlibGl0aWVzKGNvbnN0IFN0cmluZyYga2luZCkK
K3sKKyAgICBSVENSdHBDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOworICAgIGNhcGFiaWxpdGll
cy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJodHRwOi8vd3d3LmlldGYub3JnL2lkL2RyYWZ0
LWhvbG1lci1ybWNhdC10cmFuc3BvcnQtd2lkZS1jYy1leHRlbnNpb25zLTAxIiB9KTsKKyAgICBp
ZiAoa2luZCA9PSAiYXVkaW8iX3MpIHsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5yZXNl
cnZlQ2FwYWNpdHkoNCk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MudW5jaGVja2VkQXBw
ZW5kKHsgLm1pbWVUeXBlID0gImF1ZGlvL09QVVMiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9
IDQ4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMiwKKyAgICAgICAgICAgIC5zZHBGbXRw
TGluZSA9ICIiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVu
ZCh7IC5taW1lVHlwZSA9ICJhdWRpby9HNzIyIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4
MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGlu
ZSA9ICIiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7
IC5taW1lVHlwZSA9ICJhdWRpby9QQ01BIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4MDAw
LAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9
ICIiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5t
aW1lVHlwZSA9ICJhdWRpby9QQ01VIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4MDAwLAor
ICAgICAgICAgICAgLmNoYW5uZWxzID0gMSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIi
IH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25z
LmFwcGVuZCh7ICJ1cm46M2dwcDp2aWRlby1vcmllbnRhdGlvbiIgfSk7CisgICAgICAgIGNhcGFi
aWxpdGllcy5jb2RlY3MucmVzZXJ2ZUNhcGFjaXR5KDQpOworICAgICAgICBjYXBhYmlsaXRpZXMu
Y29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDgiLAorICAgICAg
ICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIg
fSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MudW5jaGVja2VkQXBwZW5kKHsgLm1pbWVU
eXBlID0gInZpZGVvL1ZQOSIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAg
ICAgICAgICAuc2RwRm10cExpbmUgPSAicHJvZmlsZS1pZD0wIiB9KTsKKyAgICAgICAgY2FwYWJp
bGl0aWVzLmNvZGVjcy51bmNoZWNrZWRBcHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vVlA5IiwK
KyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGlu
ZSA9ICJwcm9maWxlLWlkPTEiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hl
Y2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9IMjY0IiwKKyAgICAgICAgICAgIC5jbG9j
a1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwYWNrZXRpemF0aW9u
LW1vZGU9MTtwcm9maWxlLWxldmVsLWlkPTQyZTAxZiIgfSk7CisgICAgfQorICAgIHJldHVybiBj
YXBhYmlsaXRpZXM7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OnJlY2VpdmVyQ2FwYWJpbGl0aWVzKFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHQmLCBjb25zdCBTdHJpbmcmIGtpbmQpCit7CisgICAgcmV0dXJuIGdzdHJlYW1lclJ0cENh
cGF0aWJsaXRpZXMoa2luZCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVz
PiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRlckNhcGFiaWxpdGllcyhTY3JpcHRFeGVjdXRp
b25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBraW5kKQoreworICAgIHJldHVybiBnc3RyZWFtZXJS
dHBDYXBhdGlibGl0aWVzKGtpbmQpOworfQorCitHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYgcGVl
ckNvbm5lY3Rpb24pCisgICAgOiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24p
CisgICAgLCBtX2VuZHBvaW50KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSgqdGhpcykp
Cit7CisgICAgZGlzYWJsZUlDRUNhbmRpZGF0ZUZpbHRlcmluZygpOworfQorCitHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6On5HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQoKSA9
IGRlZmF1bHQ7CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzdXNwZW5k
KCkKK3sKKyAgICBtX2VuZHBvaW50LT5zdXNwZW5kKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN1bWUoKQoreworICAgIG1fZW5kcG9pbnQtPnJlc3VtZSgp
OworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVzdGFydEljZSgp
Cit7CisgICAgbV9lbmRwb2ludC0+cmVzdGFydEljZSgpOworfQorCitib29sIEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIG1fZW5kcG9pbnQtPnNldENv
bmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpnZXRTdGF0cyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7
CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7Cit9
CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgYmFja2VuZEZyb21S
VFBTZW5kZXIoUlRDUnRwU2VuZGVyJiBzZW5kZXIpCit7CisgICAgQVNTRVJUKCFzZW5kZXIuaXNT
dG9wcGVkKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBTZW5kZXJCYWNr
ZW5kJj4oKnNlbmRlci5iYWNrZW5kKCkpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwU2VuZGVyJiBzZW5kZXIsIFJlZjxEZWZlcnJlZFBy
b21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBpZiAoIXNlbmRlci5iYWNrZW5kKCkpIHsKKyAgICAg
ICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBiYWNrZW5kID0gYmFja2VuZEZyb21SVFBT
ZW5kZXIoc2VuZGVyKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOworICAgIGlmIChSZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQuYXVkaW9Tb3Vy
Y2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5wYWQoKTsKKyAgICBlbHNlIGlmIChSZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQudmlkZW9Tb3Vy
Y2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5wYWQoKTsKKyAgICBtX2VuZHBvaW50LT5nZXRT
dGF0cyhwYWQuZ2V0KCksIFdURk1vdmUocHJvbWlzZSkpOworfQorCit2b2lkIEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwUmVjZWl2ZXImIHJlY2VpdmVyLCBS
ZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7CisgICAgaWYgKCFyZWNlaXZlci5iYWNr
ZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShw
cm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHc3RFbGVtZW50KiBiaW4g
PSBudWxscHRyOworICAgIGF1dG8mIHNvdXJjZSA9IHJlY2VpdmVyLnRyYWNrKCkucHJpdmF0ZVRy
YWNrKCkuc291cmNlKCk7CisgICAgaWYgKHNvdXJjZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkK
KyAgICAgICAgYmluID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0
cmVhbWVyJj4oc291cmNlKS5iaW4oKTsKKyAgICBlbHNlIGlmIChzb3VyY2UuaXNJbmNvbWluZ1Zp
ZGVvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZQorICAgICAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRH
UmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGJpbiwgInNpbmsiKSk7CisgICAgYXV0byBz
cmNQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihzaW5rUGFkLmdldCgpKSk7CisgICAg
bV9lbmRwb2ludC0+Z2V0U3RhdHMoc3JjUGFkLmdldCgpLCBXVEZNb3ZlKHByb21pc2UpKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0TG9jYWxEZXNjcmlw
dGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQoreworICAgIG1f
ZW5kcG9pbnQtPmRvU2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7CisgICAgbV9pc0xv
Y2FsRGVzY3JpcHRpb25TZXQgPSB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3Jp
cHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0UmVtb3RlRGVzY3Jp
cHRpb24oZGVzY3JpcHRpb24pOworICAgIG1faXNSZW1vdGVEZXNjcmlwdGlvblNldCA9IHRydWU7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0ZU9mZmVy
KFJUQ09mZmVyT3B0aW9ucyYmIG9wdGlvbnMpCit7CisgICAgbV9lbmRwb2ludC0+ZG9DcmVhdGVP
ZmZlcihvcHRpb25zKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OmRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlvbnMmJikKK3sKKyAgICBpZiAoIW1faXNSZW1v
dGVEZXNjcmlwdGlvblNldCkgeworICAgICAgICBjcmVhdGVBbnN3ZXJGYWlsZWQoRXhjZXB0aW9u
IHsgSW52YWxpZFN0YXRlRXJyb3IsICJObyByZW1vdGUgZGVzY3JpcHRpb24gc2V0IiB9KTsKKyAg
ICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2VuZHBvaW50LT5kb0NyZWF0ZUFuc3dlcigpOwor
fQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y2xvc2UoKQoreworICAg
IG1fZW5kcG9pbnQtPmNsb3NlKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpkb1N0b3AoKQoreworICAgIG1fZW5kcG9pbnQtPnN0b3AoKTsKKyAgICBtX3BlbmRp
bmdSZWNlaXZlcnMuY2xlYXIoKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBBZGRJ
Y2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIHVuc2lnbmVkIHNkcE1MaW5l
SW5kZXggPSBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCgpID8gY2FuZGlkYXRlLnNkcE1MaW5lSW5k
ZXgoKS52YWx1ZSgpIDogMDsKKyAgICBhdXRvIHJ0Y0NhbmRpZGF0ZSA9IFdURjo6bWFrZVVuaXF1
ZTxHU3RyZWFtZXJJY2VDYW5kaWRhdGU+KCpuZXcgR1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsgc2Rw
TUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0ZSgpIH0pOworICAgIG1fZW5kcG9pbnQtPmFk
ZEljZUNhbmRpZGF0ZSgqcnRjQ2FuZGlkYXRlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKK1Jl
ZjxSVENSdHBSZWNlaXZlcj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVS
ZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiYmIGJh
Y2tlbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCit7
CisgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcGVlckNvbm5lY3Rp
b24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKworICAgIGF1dG8gc291cmNlID0gYmFja2Vu
ZC0+Y3JlYXRlU291cmNlKHRyYWNrS2luZCwgdHJhY2tJZCk7CisgICAgLy8gUmVtb3RlIHNvdXJj
ZSBpcyBpbml0aWFsbHkgbXV0ZWQgYW5kIHdpbGwgYmUgdW5tdXRlZCB3aGVuIHJlY2VpdmluZyB0
aGUgZmlyc3QgcGFja2V0LgorICAgIHNvdXJjZS0+c2V0TXV0ZWQodHJ1ZSk7CisgICAgYXV0byB0
cmFja0lEID0gc291cmNlLT5wZXJzaXN0ZW50SUQoKTsKKyAgICBhdXRvIHJlbW90ZVRyYWNrUHJp
dmF0ZSA9IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoZG9jdW1lbnQubG9nZ2VyKCks
IFdURk1vdmUoc291cmNlKSwgV1RGTW92ZSh0cmFja0lEKSk7CisgICAgYXV0byByZW1vdGVUcmFj
ayA9IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShkb2N1bWVudCwgV1RGTW92ZShyZW1vdGVUcmFj
a1ByaXZhdGUpKTsKKworICAgIHJldHVybiBSVENSdHBSZWNlaXZlcjo6Y3JlYXRlKCp0aGlzLCBX
VEZNb3ZlKHJlbW90ZVRyYWNrKSwgV1RGTW92ZShiYWNrZW5kKSk7Cit9CisKK3N0ZDo6dW5pcXVl
X3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJU
Q0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykKK3sKKyAgICByZXR1cm4gbV9lbmRwb2ludC0+Y3Jl
YXRlRGF0YUNoYW5uZWwobGFiZWwsIG9wdGlvbnMpOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0
cjxSVENSdHBTZW5kZXI+IGZpbmRFeGlzdGluZ1NlbmRlcihjb25zdCBWZWN0b3I8UmVmUHRyPFJU
Q1J0cFRyYW5zY2VpdmVyPj4mIHRyYW5zY2VpdmVycywgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZCYgc2VuZGVyQmFja2VuZCkKK3sKKyAgICBBU1NFUlQoc2VuZGVyQmFja2VuZC5ydGNTZW5kZXIo
KSk7CisgICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgeworICAgICAg
ICBhdXRvJiBzZW5kZXIgPSB0cmFuc2NlaXZlci0+c2VuZGVyKCk7CisgICAgICAgIGlmICghc2Vu
ZGVyLmlzU3RvcHBlZCgpICYmIHNlbmRlckJhY2tlbmQucnRjU2VuZGVyKCkgPT0gYmFja2VuZEZy
b21SVFBTZW5kZXIoc2VuZGVyKS5ydGNTZW5kZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBSZWYo
c2VuZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0V4Y2VwdGlvbk9yPFJl
ZjxSVENSdHBTZW5kZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYWNr
KE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBGaXhlZFZlY3RvcjxTdHJpbmc+JiYgbWVkaWFTdHJl
YW1JZHMpCit7CisgICAgYXV0byBzZW5kZXJCYWNrZW5kID0gV1RGOjptYWtlVW5pcXVlPEdTdHJl
YW1lclJ0cFNlbmRlckJhY2tlbmQ+KCp0aGlzLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBpZiAo
IW1fZW5kcG9pbnQtPmFkZFRyYWNrKCpzZW5kZXJCYWNrZW5kLCB0cmFjaywgbWVkaWFTdHJlYW1J
ZHMpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAiVW5hYmxlIHRvIGFk
ZCB0cmFjayJfcyB9OworCisgICAgaWYgKGF1dG8gc2VuZGVyID0gZmluZEV4aXN0aW5nU2VuZGVy
KG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5zY2VpdmVycygpLCAqc2VuZGVyQmFja2VuZCkp
IHsKKyAgICAgICAgYmFja2VuZEZyb21SVFBTZW5kZXIoKnNlbmRlcikudGFrZVNvdXJjZSgqc2Vu
ZGVyQmFja2VuZCk7CisgICAgICAgIHNlbmRlci0+c2V0VHJhY2soUmVmKHRyYWNrKSk7CisgICAg
ICAgIHNlbmRlci0+c2V0TWVkaWFTdHJlYW1JZHMoV1RGTW92ZShtZWRpYVN0cmVhbUlkcykpOwor
ICAgICAgICByZXR1cm4gc2VuZGVyLnJlbGVhc2VOb25OdWxsKCk7CisgICAgfQorCisgICAgYXV0
byB0cmFuc2NlaXZlckJhY2tlbmQgPSBtX2VuZHBvaW50LT50cmFuc2NlaXZlckJhY2tlbmRGcm9t
U2VuZGVyKCpzZW5kZXJCYWNrZW5kKTsKKworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVy
OjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgUmVmKHRyYWNrKSwgV1RGTW92ZShzZW5kZXJCYWNr
ZW5kKSk7CisgICAgc2VuZGVyLT5zZXRNZWRpYVN0cmVhbUlkcyhXVEZNb3ZlKG1lZGlhU3RyZWFt
SWRzKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKHRyYW5zY2VpdmVyQmFj
a2VuZC0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCksIHRyYWNrLmtpbmQoKSwgdHJhY2suaWQoKSk7
CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoc2VuZGVy
LmNvcHlSZWYoKSwgV1RGTW92ZShyZWNlaXZlciksIFdURk1vdmUodHJhbnNjZWl2ZXJCYWNrZW5k
KSk7CisgICAgbV9wZWVyQ29ubmVjdGlvbi5hZGRJbnRlcm5hbFRyYW5zY2VpdmVyKFdURk1vdmUo
dHJhbnNjZWl2ZXIpKTsKKyAgICByZXR1cm4gc2VuZGVyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFt
ZSBUPgorRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChUJiYgdHJhY2tP
cktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICBhdXRvIGJh
Y2tlbmRzID0gbV9lbmRwb2ludC0+YWRkVHJhbnNjZWl2ZXIodHJhY2tPcktpbmQsIGluaXQpOwor
ICAgIGlmICghYmFja2VuZHMpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNj
ZXNzRXJyb3IsICJVbmFibGUgdG8gYWRkIHRyYW5zY2VpdmVyIl9zIH07CisKKyAgICBhdXRvIHNl
bmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKG1fcGVlckNvbm5lY3Rpb24sIFdURk1vdmUodHJh
Y2tPcktpbmQpLCBXVEZNb3ZlKGJhY2tlbmRzLT5zZW5kZXJCYWNrZW5kKSk7CisgICAgYXV0byBy
ZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKFdURk1vdmUoYmFja2VuZHMtPnJlY2VpdmVyQmFja2Vu
ZCksIHNlbmRlci0+dHJhY2tLaW5kKCksIHNlbmRlci0+dHJhY2tJZCgpKTsKKyAgICBhdXRvIHRy
YW5zY2VpdmVyID0gUlRDUnRwVHJhbnNjZWl2ZXI6OmNyZWF0ZShXVEZNb3ZlKHNlbmRlciksIFdU
Rk1vdmUocmVjZWl2ZXIpLCBXVEZNb3ZlKGJhY2tlbmRzLT50cmFuc2NlaXZlckJhY2tlbmQpKTsK
KyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIu
Y29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2ZXI7Cit9CisKK0V4Y2VwdGlvbk9yPFJl
ZjxSVENSdHBUcmFuc2NlaXZlcj4+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRk
VHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2Vp
dmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gYWRkVHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktp
bmQoU3RyaW5nIHsgdHJhY2tLaW5kIH0sIGluaXQpOworfQorCitFeGNlcHRpb25PcjxSZWY8UlRD
UnRwVHJhbnNjZWl2ZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5z
Y2VpdmVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYmIHRyYWNrLCBjb25zdCBSVENSdHBUcmFuc2Nl
aXZlckluaXQmIGluaXQpCit7CisgICAgcmV0dXJuIGFkZFRyYW5zY2VpdmVyRnJvbVRyYWNrT3JL
aW5kKFdURk1vdmUodHJhY2spLCBpbml0KTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrKQoreworICAgIG1fZW5kcG9p
bnQtPnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhzZW5kZXIsIHRyYWNrKTsKK30KKworc3RhdGlj
IGlubGluZSBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmIGJhY2tlbmRGcm9tUlRQVHJh
bnNjZWl2ZXIoUlRDUnRwVHJhbnNjZWl2ZXImIHRyYW5zY2VpdmVyKQoreworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmPigqdHJhbnNjZWl2ZXIu
YmFja2VuZCgpKTsKK30KKworUlRDUnRwVHJhbnNjZWl2ZXIqIEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6ZXhpc3RpbmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJvb2woR1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJik+JiYgbWF0Y2hpbmdGdW5jdGlvbikKK3sKKyAgICBm
b3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV9wZWVyQ29ubmVjdGlvbi5jdXJyZW50VHJhbnNjZWl2
ZXJzKCkpIHsKKyAgICAgICAgaWYgKG1hdGNoaW5nRnVuY3Rpb24oYmFja2VuZEZyb21SVFBUcmFu
c2NlaXZlcigqdHJhbnNjZWl2ZXIpKSkKKyAgICAgICAgICAgIHJldHVybiB0cmFuc2NlaXZlci5n
ZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVy
JiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6Om5ld1JlbW90ZVRyYW5zY2VpdmVyKHN0
ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+JiYgdHJhbnNjZWl2
ZXJCYWNrZW5kLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUpCit7CisgICAgYXV0byB0
cmFja0tpbmQgPSB0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1
ZGlvIl9zIDogInZpZGVvIl9zOworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVh
dGUobV9wZWVyQ29ubmVjdGlvbiwgdHJhY2tLaW5kLCB0cmFuc2NlaXZlckJhY2tlbmQtPmNyZWF0
ZVNlbmRlckJhY2tlbmQoKnRoaXMsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBhdXRvIHJlY2Vp
dmVyID0gY3JlYXRlUmVjZWl2ZXIodHJhbnNjZWl2ZXJCYWNrZW5kLT5jcmVhdGVSZWNlaXZlckJh
Y2tlbmQoKSwgdHJhY2tLaW5kLCBzZW5kZXItPnRyYWNrSWQoKSk7CisgICAgYXV0byB0cmFuc2Nl
aXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoV1RGTW92ZShzZW5kZXIpLCBXVEZNb3Zl
KHJlY2VpdmVyKSwgV1RGTW92ZSh0cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25u
ZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAg
ICByZXR1cm4gdHJhbnNjZWl2ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAgICBtX2VuZHBvaW50LT5j
b2xsZWN0VHJhbnNjZWl2ZXJzKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kOjphZGRQZW5kaW5nVHJhY2tFdmVudChQZW5kaW5nVHJhY2tFdmVudCYmIGV2ZW50KQor
eworICAgIG1fcGVuZGluZ1RyYWNrRXZlbnRzLmFwcGVuZChXVEZNb3ZlKGV2ZW50KSk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkaXNwYXRjaFBlbmRpbmdUcmFj
a0V2ZW50cygpCit7CisgICAgYXV0byBldmVudHMgPSBXVEZNb3ZlKG1fcGVuZGluZ1RyYWNrRXZl
bnRzKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNwYXRjaFRy
YWNrRXZlbnQoZXZlbnQpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6cmVtb3ZlVHJhY2soUlRDUnRwU2VuZGVyJiBzZW5kZXIpCit7CisgICAgbV9lbmRwb2ludC0+
cmVtb3ZlVHJhY2soYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKSk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRl
b1NvdXJjZXMoKQoreworICAgIGZvciAoYXV0byYgdHJhbnNjZWl2ZXIgOiBtX3BlZXJDb25uZWN0
aW9uLmN1cnJlbnRUcmFuc2NlaXZlcnMoKSkgeworICAgICAgICBpZiAoIXRyYW5zY2VpdmVyLT5z
ZW5kZXIoKS5pc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHZpZGVvU291cmNl
ID0gYmFja2VuZEZyb21SVFBTZW5kZXIodHJhbnNjZWl2ZXItPnNlbmRlcigpKS52aWRlb1NvdXJj
ZSgpKQorICAgICAgICAgICAgICAgIHZpZGVvU291cmNlLT5zZXRBcHBseVJvdGF0aW9uKHRydWUp
OworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmlu
ZyYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBtX2VuZHBvaW50LT5nYXRoZXJEZWNvZGVySW1wbGVt
ZW50YXRpb25OYW1lKFdURk1vdmUoY2FsbGJhY2spKTsKK30KKworYm9vbCBHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmlzTmVnb3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0Cit7
CisgICAgcmV0dXJuIG1fZW5kcG9pbnQtPmlzTmVnb3RpYXRpb25OZWVkZWQoKTsKK30KKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmUzODgzMzhjMDU4YTM3ODM3YTYwNmY3ZGY2NDE4N2FlMWY5YTA3M2IKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaApAQCAtMCwwICsxLDEyNCBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2lu
Y2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5j
bHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOwor
Y2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDsKK2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5z
Y2VpdmVyQmFja2VuZDsKK2NsYXNzIFJUQ1J0cFJlY2VpdmVyOworY2xhc3MgUlRDUnRwUmVjZWl2
ZXJCYWNrZW5kOworY2xhc3MgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uOworY2xhc3MgUlRDU3RhdHNS
ZXBvcnQ7CitjbGFzcyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFz
cyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU1l
ZGlhU291cmNlR1N0cmVhbWVyOworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0
cmVhbWVyOworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOworCitz
dHJ1Y3QgR1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9B
TExPQ0FURUQ7CisgICAgdW5zaWduZWQgc2RwTUxpbmVJbmRleDsKKyAgICBTdHJpbmcgY2FuZGlk
YXRlOworfTsKKworY2xhc3MgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kIGZpbmFsIDog
cHVibGljIFBlZXJDb25uZWN0aW9uQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
KFJUQ1BlZXJDb25uZWN0aW9uJik7CisgICAgfkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIGRvQ3Jl
YXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYpIGZpbmFsOworICAgIHZvaWQgZG9DcmVhdGVBbnN3
ZXIoUlRDQW5zd2VyT3B0aW9ucyYmKSBmaW5hbDsKKyAgICB2b2lkIGRvU2V0TG9jYWxEZXNjcmlw
dGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qKSBmaW5hbDsKKyAgICB2b2lkIGRvU2V0
UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikgZmluYWw7Cisg
ICAgdm9pZCBkb0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmLCBBZGRJY2VDYW5kaWRh
dGVDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIGRvU3RvcCgpIGZpbmFsOworICAgIHN0ZDo6
dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFDaGFubmVsSGFuZGxl
cihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKSBmaW5hbDsKKyAgICB2
b2lkIHJlc3RhcnRJY2UoKSBmaW5hbDsKKyAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFF
bmRwb2ludENvbmZpZ3VyYXRpb24mJikgZmluYWw7CisgICAgdm9pZCBnZXRTdGF0cyhSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKKyAgICB2b2lkIGdldFN0YXRzKFJUQ1J0cFNlbmRlciYs
IFJlZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFsOworICAgIHZvaWQgZ2V0U3RhdHMoUlRDUnRw
UmVjZWl2ZXImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKKworICAgIHZvaWQgZW11
bGF0ZVBsYXRmb3JtRXZlbnQoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9CisgICAgdm9pZCBhcHBs
eVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKSBmaW5hbDsKKworICAgIHZvaWQgZ2F0
aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJikg
ZmluYWw7CisKKyAgICBib29sIGlzTmVnb3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0IGZp
bmFsOworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBjYW5Ucmlja2xlSWNlQ2FuZGlkYXRlcygp
IGNvbnN0IHsgcmV0dXJuIHRydWU7IH07CisKKyAgICBmcmllbmQgY2xhc3MgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDsKKyAgICBmcmllbmQgY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDsK
KyAgICBSVENQZWVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fcGVlckNvbm5l
Y3Rpb247IH0KKworICAgIHZvaWQgZ2V0U3RhdHNTdWNjZWVkZWQoY29uc3QgRGVmZXJyZWRQcm9t
aXNlJiwgUmVmPFJUQ1N0YXRzUmVwb3J0PiYmKTsKKworICAgIEV4Y2VwdGlvbk9yPFJlZjxSVENS
dHBTZW5kZXI+PiBhZGRUcmFjayhNZWRpYVN0cmVhbVRyYWNrJiwgRml4ZWRWZWN0b3I8U3RyaW5n
PiYmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZVRyYWNrKFJUQ1J0cFNlbmRlciYpIGZpbmFsOwor
CisgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIo
Y29uc3QgU3RyaW5nJiwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JikgZmluYWw7CisgICAg
RXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIoUmVmPE1l
ZGlhU3RyZWFtVHJhY2s+JiYsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpIGZpbmFsOwor
ICAgIHZvaWQgc2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQmLCBNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICBSVENSdHBUcmFuc2NlaXZlciogZXhpc3Rp
bmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kJik+JiYpOworICAgIFJUQ1J0cFRyYW5zY2VpdmVyJiBuZXdSZW1vdGVUcmFuc2NlaXZl
cihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiYmLCBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlKTsKKworICAgIHZvaWQgY29sbGVjdFRyYW5zY2VpdmVycygp
IGZpbmFsOworCisgICAgdm9pZCBhZGRQZW5kaW5nVHJhY2tFdmVudChQZW5kaW5nVHJhY2tFdmVu
dCYmKTsKKyAgICB2b2lkIGRpc3BhdGNoUGVuZGluZ1RyYWNrRXZlbnRzKCk7CisKK3ByaXZhdGU6
CisgICAgYm9vbCBpc0xvY2FsRGVzY3JpcHRpb25TZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBt
X2lzTG9jYWxEZXNjcmlwdGlvblNldDsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAg
ICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlckZyb21U
cmFja09yS2luZChUJiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYp
OworCisgICAgUmVmPFJUQ1J0cFJlY2VpdmVyPiBjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9w
dHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiYmLCBjb25zdCBTdHJpbmcmIHRyYWNrS2lu
ZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKTsKKworICAgIHZvaWQgc3VzcGVuZCgpIGZpbmFsOwor
ICAgIHZvaWQgcmVzdW1lKCkgZmluYWw7CisKKyAgICBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dD4gbV9lbmRwb2ludDsKKyAgICBib29sIG1faXNMb2NhbERlc2NyaXB0aW9uU2V0IHsgZmFsc2Ug
fTsKKyAgICBib29sIG1faXNSZW1vdGVEZXNjcmlwdGlvblNldCB7IGZhbHNlIH07CisKKyAgICBW
ZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lckljZUNhbmRpZGF0ZT4+IG1fcGVuZGluZ0Nh
bmRpZGF0ZXM7CisgICAgVmVjdG9yPFJlZjxSVENSdHBSZWNlaXZlcj4+IG1fcGVuZGluZ1JlY2Vp
dmVyczsKKyAgICBWZWN0b3I8UGVuZGluZ1RyYWNrRXZlbnQ+IG1fcGVuZGluZ1RyYWNrRXZlbnRz
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNr
ZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45YzEzNDNiMTM5ZjViYTkyZjQxNTVmM2QwNTA1MDVkMmNmYWZj
ZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc2
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJh
bnNmb3JtQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworUlRDUnRwUGFyYW1ldGVycyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tl
bmQ6OmdldFBhcmFtZXRlcnMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJu
IHsgfTsKK30KKworVmVjdG9yPFJUQ1J0cENvbnRyaWJ1dGluZ1NvdXJjZT4gR1N0cmVhbWVyUnRw
UmVjZWl2ZXJCYWNrZW5kOjpnZXRDb250cmlidXRpbmdTb3VyY2VzKCkgY29uc3QKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxSVENSdHBTeW5j
aHJvbml6YXRpb25Tb3VyY2U+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0U3luY2hy
b25pemF0aW9uU291cmNlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCitSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gR1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kOjpjcmVhdGVTb3VyY2UoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0
IFN0cmluZyYgdHJhY2tJZCkKK3sKKyAgICBpZiAodHJhY2tLaW5kID09ICJ2aWRlbyJfcykKKyAg
ICAgICAgcmV0dXJuIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRl
KHRyYWNrSWQuaXNvbGF0ZWRDb3B5KCkpOworCisgICAgUkVMRUFTRV9BU1NFUlQodHJhY2tLaW5k
ID09ICJhdWRpbyJfcyk7CisgICAgcmV0dXJuIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcjo6Y3JlYXRlKHRyYWNrSWQuaXNvbGF0ZWRDb3B5KCkpOworfQorCitSZWY8UlRDUnRw
VHJhbnNmb3JtQmFja2VuZD4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpydGNSdHBUcmFu
c2Zvcm1CYWNrZW5kKCkKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zv
cm1CYWNrZW5kOjpjcmVhdGUobV9ydGNSZWNlaXZlcik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxS
VENEdGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpkdGxz
VHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0
PiB0cmFuc3BvcnQ7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjUmVjZWl2ZXIuZ2V0KCksICJ0cmFu
c3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJhbnNw
b3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0
KSA6IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2Vp
dmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjYzYTc1OTdiOTgy
NzY3NmRlMDMzYTE5YmM0M2ZjZGEyZjgxMzMwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVy
QmFja2VuZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0
cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQg
ZmluYWwgOiBwdWJsaWMgUlRDUnRwUmVjZWl2ZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJSdHBSZWNlaXZlckJh
Y2tlbmQoR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4mJiBydGNSZWNlaXZlcikKKyAgICAg
ICAgOiBtX3J0Y1JlY2VpdmVyKFdURk1vdmUocnRjUmVjZWl2ZXIpKQorICAgIHsKKyAgICB9CisK
KyAgICBHc3RXZWJSVENSVFBSZWNlaXZlciogcnRjUmVjZWl2ZXIoKSB7IHJldHVybiBtX3J0Y1Jl
Y2VpdmVyLmdldCgpOyB9CisgICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZVNvdXJj
ZShjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKTsKKworcHJp
dmF0ZToKKyAgICBSVENSdHBQYXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMoKSBmaW5hbDsKKyAgICBW
ZWN0b3I8UlRDUnRwQ29udHJpYnV0aW5nU291cmNlPiBnZXRDb250cmlidXRpbmdTb3VyY2VzKCkg
Y29uc3QgZmluYWw7CisgICAgVmVjdG9yPFJUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZT4gZ2V0
U3luY2hyb25pemF0aW9uU291cmNlcygpIGNvbnN0IGZpbmFsOworICAgIFJlZjxSVENSdHBUcmFu
c2Zvcm1CYWNrZW5kPiBydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkgZmluYWw7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBkdGxzVHJhbnNwb3J0QmFja2VuZCgp
IGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gbV9ydGNSZWNlaXZl
cjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNm
b3JtQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmUyOTA4MmZlY2E0ZDQ4YTgzNzAzNjk3OTE3NjdkYmFkYWUzM2Y5MGIKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVu
dGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJS
dHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZSBtZWRpYVR5cGVGcm9tUmVjZWl2
ZXIoY29uc3QgR3N0V2ViUlRDUlRQUmVjZWl2ZXImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZTo6VmlkZW87Cit9
CisKK0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+
JiBydGNSZWNlaXZlcikKKyAgICA6IEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQobWVkaWFU
eXBlRnJvbVJlY2VpdmVyKCpydGNSZWNlaXZlciksIFNpZGU6OlJlY2VpdmVyKQorICAgICwgbV9y
dGNSZWNlaXZlcihydGNSZWNlaXZlcikKK3sKK30KKworR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFu
c2Zvcm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKCkKK3sK
K30KKwordm9pZCBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5z
Zm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgc2V0SW5w
dXRDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlG
cmFtZSgpCit7CisgICAgQVNTRVJUKG1lZGlhVHlwZSgpID09IE1lZGlhVHlwZTo6VmlkZW8pOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5k
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uODU4NjY3NmEwNmI3YWI5ZWIwYjMyZTdkZjdjNjM0ODE1YThjOTc5Zgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEs
NDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tl
bmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVj
ZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kIGZpbmFsIDogcHVibGljIEdTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyUnRwUmVjZWl2ZXJU
cmFuc2Zvcm1CYWNrZW5kPiBjcmVhdGUoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZl
cj4mIHJlY2VpdmVyKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lclJ0cFJlY2VpdmVy
VHJhbnNmb3JtQmFja2VuZChyZWNlaXZlcikpOyB9CisgICAgfkdTdHJlYW1lclJ0cFJlY2VpdmVy
VHJhbnNmb3JtQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lclJ0
cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2Vp
dmVyPiYpOworCisgICAgLy8gUlRDUnRwVHJhbnNmb3JtQmFja2VuZAorICAgIHZvaWQgc2V0VHJh
bnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soQ2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCByZXF1
ZXN0S2V5RnJhbWUoKSBmaW5hbDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+
IG1fcnRjUmVjZWl2ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5NmJjYmE5
MjVmZTlkZmY3ZjZlNTZhNTUxNjUyZDg1ZTJiODMwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zv
cm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRl
ICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSVENSdHBTZW5kZXIuaCIK
KyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJS
dW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4
dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZT4K
K3N0YXRpYyBpbmxpbmUgYm9vbCB1cGRhdGVUcmFja1NvdXJjZShTb3VyY2UmIHNvdXJjZSwgTWVk
aWFTdHJlYW1UcmFjayogdHJhY2spCit7CisgICAgaWYgKCF0cmFjaykgeworICAgICAgICBzb3Vy
Y2Uuc3RvcCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHNvdXJj
ZS5zZXRUcmFjayh0cmFjay0+cHJpdmF0ZVRyYWNrKCkpOworfQorCit2b2lkIEdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQ6OnN0YXJ0U291cmNlKCkKK3sKKyAgICBzd2l0Y2hPbihtX3NvdXJjZSwg
W10oUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgewor
ICAgICAgICBzb3VyY2UtPnN0YXJ0KCk7CisgICAgfSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0YXJ0KCk7
CisgICAgfSwgW10oc3RkOjpudWxscHRyX3QmKSB7CisgICAgfSk7Cit9CisKK1dBUk5fVU5VU0VE
X1JFVFVSTiBHUmVmUHRyPEdzdEVsZW1lbnQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0
b3BTb3VyY2UoKQoreworICAgIHN3aXRjaE9uKG1fc291cmNlLCBbXShSZWY8UmVhbHRpbWVPdXRn
b2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7CisgICAgICAgIHNvdXJjZS0+c3Rv
cCgpOworICAgICAgICByZXR1cm4gR1JlZlB0cjxHc3RFbGVtZW50Pihzb3VyY2UtPmJpbigpKTsK
KyAgICB9LCBbXShSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiYgc291
cmNlKSB7CisgICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAgICByZXR1cm4gR1JlZlB0cjxH
c3RFbGVtZW50Pihzb3VyY2UtPmJpbigpKTsKKyAgICB9LCBbXShzdGQ6Om51bGxwdHJfdCYpIHsK
KyAgICAgICAgcmV0dXJuIEdSZWZQdHI8R3N0RWxlbWVudD4obnVsbHB0cik7CisgICAgfSk7Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6
cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2VuZGVyLCBNZWRpYVN0cmVhbVRyYWNrKiB0cmFj
aykKK3sKKyAgICBpZiAoIXRyYWNrKSB7CisgICAgICAgIGF1dG8gc3RvcHBlZFNvdXJjZSA9IHN0
b3BTb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHNlbmRl
ci50cmFjaygpKSB7CisgICAgICAgIHN3aXRjaE9uKG1fc291cmNlLCBbJl0oUmVmPFJlYWx0aW1l
T3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICAgICAgQVNT
RVJUKHRyYWNrLT5zb3VyY2UoKS50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6
QXVkaW8pOworICAgICAgICAgICAgc291cmNlLT5zdG9wKCk7CisgICAgICAgICAgICBzb3VyY2Ut
PnNldFNvdXJjZSh0cmFjay0+cHJpdmF0ZVRyYWNrKCkpOworICAgICAgICAgICAgc291cmNlLT5z
dGFydCgpOworICAgICAgICB9LCBbJl0oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICAgICAgQVNTRVJUKHRyYWNrLT5zb3VyY2UoKS50
eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pOworICAgICAgICAgICAg
c291cmNlLT5zdG9wKCk7CisgICAgICAgICAgICBzb3VyY2UtPnNldFNvdXJjZSh0cmFjay0+cHJp
dmF0ZVRyYWNrKCkpOworICAgICAgICAgICAgc291cmNlLT5zdGFydCgpOworICAgICAgICB9LCBb
XShzdGQ6Om51bGxwdHJfdCYpIHsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgbV9wZWVyQ29u
bmVjdGlvbkJhY2tlbmQtPnNldFNlbmRlclNvdXJjZUZyb21UcmFjaygqdGhpcywgKnRyYWNrKTsK
KyAgICByZXR1cm4gdHJ1ZTsKK30KKworUlRDUnRwU2VuZFBhcmFtZXRlcnMgR1N0cmVhbWVyUnRw
U2VuZGVyQmFja2VuZDo6Z2V0UGFyYW1ldGVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvUlRD
UnRwU2VuZFBhcmFtZXRlcnMobV9pbml0RGF0YS5nZXQoKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZDo6c2V0UGFyYW1ldGVycyhjb25zdCBSVENSdHBTZW5kUGFyYW1ldGVy
cyYsIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCit7CisgICAgaWYgKCFtX3J0
Y1NlbmRlcikgeworICAgICAgICBwcm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHByb21p
c2UucmVzb2x2ZSgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRFRNRlNlbmRlckJhY2tlbmQ+
IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmNyZWF0ZURUTUZCYWNrZW5kKCkKK3sKKyAgICBy
ZXR1cm4gbWFrZVVuaXF1ZTxHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZD4oKTsKK30KKworUmVm
PFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJ0Y1J0
cFRyYW5zZm9ybUJhY2tlbmQoKQoreworICAgIHJldHVybiBHU3RyZWFtZXJSdHBTZW5kZXJUcmFu
c2Zvcm1CYWNrZW5kOjpjcmVhdGUobV9ydGNTZW5kZXIpOworfQorCit2b2lkIEdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQ6OnNldE1lZGlhU3RyZWFtSWRzKGNvbnN0IEZpeGVkVmVjdG9yPFN0cmlu
Zz4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENE
dGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6ZHRsc1RyYW5z
cG9ydEJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJh
bnNwb3J0OworICAgIGdfb2JqZWN0X2dldChtX3J0Y1NlbmRlci5nZXQoKSwgInRyYW5zcG9ydCIs
ICZ0cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworICAgIHJldHVybiB0cmFuc3BvcnQgPyBt
YWtlVW5pcXVlPEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kPih0cmFuc3BvcnQpIDogbnVs
bHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwU2VuZGVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMzEwODFjZjdiMjI0YWI1NjU1Y2Mz
Njg5NTgxM2EwYjMyNjZlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgKQEAg
LTAsMCArMSwxMjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisj
aW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1Vu
aXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFNlbmRlckJhY2tlbmQuaCIKKyNp
bmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYv
V2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZDsKKworY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCBmaW5h
bCA6IHB1YmxpYyBSVENSdHBTZW5kZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9D
QVRFRDsKK3B1YmxpYzoKKyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZCYgYmFja2VuZCwgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+
JiYgcnRjU2VuZGVyLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBpbml0RGF0YSkKKyAgICAg
ICAgOiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZChXZWFrUHRyIHsgJmJhY2tlbmQgfSkKKyAgICAg
ICAgLCBtX3J0Y1NlbmRlcihXVEZNb3ZlKHJ0Y1NlbmRlcikpCisgICAgICAgICwgbV9pbml0RGF0
YShXVEZNb3ZlKGluaXREYXRhKSkKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgU291cmNlID0g
c3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0cl90LCBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291
cmNlR1N0cmVhbWVyPiwgUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4+
OworICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kJiBiYWNrZW5kLCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mJiBydGNTZW5kZXIs
IFNvdXJjZSYmIHNvdXJjZSwgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEpCisg
ICAgICAgIDogbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQoV2Vha1B0ciB7ICZiYWNrZW5kIH0pCisg
ICAgICAgICwgbV9ydGNTZW5kZXIoV1RGTW92ZShydGNTZW5kZXIpKQorICAgICAgICAsIG1fc291
cmNlKFdURk1vdmUoc291cmNlKSkKKyAgICAgICAgLCBtX2luaXREYXRhKFdURk1vdmUoaW5pdERh
dGEpKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldFJUQ1NlbmRlcihHUmVmUHRyPEdzdFdl
YlJUQ1JUUFNlbmRlcj4mJiBydGNTZW5kZXIpIHsgbV9ydGNTZW5kZXIgPSBXVEZNb3ZlKHJ0Y1Nl
bmRlcik7IH0KKyAgICBHc3RXZWJSVENSVFBTZW5kZXIqIHJ0Y1NlbmRlcigpIHsgcmV0dXJuIG1f
cnRjU2VuZGVyLmdldCgpOyB9CisKKyAgICBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIqIGF1ZGlvU291cmNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9u
KG1fc291cmNlLAorICAgICAgICAgICAgW10gKFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5wdHIoKTsgfSwKKyAgICAgICAg
ICAgIFtdIChjb25zdCBhdXRvJikgLT4gUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVh
bWVyKiB7IHJldHVybiBudWxscHRyOyB9CisgICAgICAgICk7CisgICAgfQorCisgICAgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKiB2aWRlb1NvdXJjZSgpCisgICAgeworICAg
ICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChSZWY8
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7IHJldHVybiBz
b3VyY2UucHRyKCk7IH0sCisgICAgICAgICAgICBbXSAoY29uc3QgYXV0byYpIC0+IFJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciogeyByZXR1cm4gbnVsbHB0cjsgfQorICAgICAg
ICApOworICAgIH0KKworICAgIGJvb2wgaGFzU291cmNlKCkgY29uc3QKKyAgICB7CisgICAgICAg
IHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLAorICAgICAgICAgICAgW10gKGNvbnN0IHN0
ZDo6bnVsbHB0cl90JikgeyByZXR1cm4gZmFsc2U7IH0sCisgICAgICAgICAgICBbXSAoY29uc3Qg
YXV0byYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgKTsKKyAgICB9CisKKyAgICB2b2lkIGNs
ZWFyU291cmNlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTb3VyY2UoKSk7CisgICAgICAg
IG1fc291cmNlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIHNldFNvdXJjZShTb3VyY2Um
JiBzb3VyY2UpCisgICAgeworICAgICAgICBBU1NFUlQoIWhhc1NvdXJjZSgpKTsKKyAgICAgICAg
bV9zb3VyY2UgPSBXVEZNb3ZlKHNvdXJjZSk7CisgICAgICAgIEFTU0VSVChoYXNTb3VyY2UoKSk7
CisgICAgfQorCisgICAgdm9pZCB0YWtlU291cmNlKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQm
IGJhY2tlbmQpCisgICAgeworICAgICAgICBBU1NFUlQoYmFja2VuZC5oYXNTb3VyY2UoKSk7Cisg
ICAgICAgIHNldFNvdXJjZShXVEZNb3ZlKGJhY2tlbmQubV9zb3VyY2UpKTsKKyAgICB9CisKKyAg
ICBXQVJOX1VOVVNFRF9SRVRVUk4gR1JlZlB0cjxHc3RFbGVtZW50PiBzdG9wU291cmNlKCk7CisK
K3ByaXZhdGU6CisgICAgYm9vbCByZXBsYWNlVHJhY2soUlRDUnRwU2VuZGVyJiwgTWVkaWFTdHJl
YW1UcmFjayopIGZpbmFsOworICAgIFJUQ1J0cFNlbmRQYXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMo
KSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgUlRDUnRwU2VuZFBh
cmFtZXRlcnMmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJikgZmluYWw7CisgICAgc3RkOjp1
bmlxdWVfcHRyPFJUQ0RUTUZTZW5kZXJCYWNrZW5kPiBjcmVhdGVEVE1GQmFja2VuZCgpIGZpbmFs
OworICAgIFJlZjxSVENSdHBUcmFuc2Zvcm1CYWNrZW5kPiBydGNSdHBUcmFuc2Zvcm1CYWNrZW5k
KCkgZmluYWw7CisgICAgdm9pZCBzZXRNZWRpYVN0cmVhbUlkcyhjb25zdCBGaXhlZFZlY3RvcjxT
dHJpbmc+JikgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNr
ZW5kPiBkdGxzVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworCisgICAgdm9pZCBzdGFydFNvdXJj
ZSgpOworCisgICAgV2Vha1B0cjxHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IG1fcGVl
ckNvbm5lY3Rpb25CYWNrZW5kOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBtX3J0
Y1NlbmRlcjsKKyAgICBTb3VyY2UgbV9zb3VyY2U7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1
cmU+IG1faW5pdERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBT
ZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuY3BwCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmY2NmM0ZGVjMWJiMDNhMzI3N2Q5MmIwNjU0MjljNjQwNzJiZTE0M2UKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApAQCAtMCwwICsxLDU5IEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oIgorCisjaWYgRU5B
QkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIEdTdHJl
YW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZSBtZWRpYVR5cGVGcm9tU2Vu
ZGVyKGNvbnN0IEdzdFdlYlJUQ1JUUFNlbmRlciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gUlRDUnRwVHJhbnNmb3JtQmFja2VuZDo6TWVkaWFUeXBlOjpWaWRlbzsKK30K
KworR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwU2VuZGVy
VHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mIHJ0Y1Nl
bmRlcikKKyAgICA6IEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQobWVkaWFUeXBlRnJvbVNl
bmRlcigqcnRjU2VuZGVyKSwgU2lkZTo6U2VuZGVyKQorICAgICwgbV9ydGNTZW5kZXIocnRjU2Vu
ZGVyKQoreworfQorCitHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0cmVh
bWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCgpCit7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRw
U2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6c2V0VHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soQ2Fs
bGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBzZXRJbnB1dENhbGxiYWNrKFdURk1vdmUoY2FsbGJh
Y2spKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRl
clRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSgpCit7CisgICAgQVNTRVJUKG1lZGlh
VHlwZSgpID09IE1lZGlhVHlwZTo6VmlkZW8pOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjBhNTc2ZGIxMjY4M2U3
NTg5Nzg0MmQxNGE3OTU4YTQ5MGU5MjZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNm
b3JtQmFja2VuZC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIx
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdT
dHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENV
dGlscy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgR1N0cmVhbWVyU2VuZGVyVHJhbnNmb3JtZXI7CisKK2NsYXNzIEdTdHJlYW1lclJ0
cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQgZmluYWwgOiBwdWJsaWMgR1N0cmVhbWVyUnRwVHJhbnNm
b3JtQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kPiBjcmVhdGUoY29u
c3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiBzZW5kZXIpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZChzZW5kZXIpKTsgfQorICAg
IH5HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKCk7CisKK3ByaXZhdGU6CisgICAg
ZXhwbGljaXQgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRy
PEdzdFdlYlJUQ1JUUFNlbmRlcj4mKTsKKworICAgIC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQK
KyAgICB2b2lkIHNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxiYWNrJiYpIGZpbmFs
OworICAgIHZvaWQgcmVxdWVzdEtleUZyYW1lKCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdl
YlJUQ1JUUFNlbmRlcj4gbV9ydGNTZW5kZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi4yNDQ5YWU4NWYxNmRkNDFiMWEzOWEyMDgwYjQ2M2E1ODY3MDA4NDljCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEyOSBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVy
UnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiTm90SW1w
bGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENSdHBDb2RlY0NhcGFiaWxpdHkuaCIKKyNpbmNsdWRl
IDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Vi
a2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJr
aXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQo
R1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4mJiBydGNUcmFuc2NlaXZlcikKKyAgICA6
IG1fcnRjVHJhbnNjZWl2ZXIoV1RGTW92ZShydGNUcmFuc2NlaXZlcikpCit7CisgICAgZ19vYmpl
Y3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJkby1uYWNrIiwgVFJVRSwgImZlYy10eXBl
IiwgR1NUX1dFQlJUQ19GRUNfVFlQRV9VTFBfUkVELCBudWxscHRyKTsKK30KKworc3RkOjp1bmlx
dWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kOjpjcmVhdGVSZWNlaXZlckJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2Vi
UlRDUlRQUmVjZWl2ZXI+IHJlY2VpdmVyOworICAgIGdfb2JqZWN0X2dldChtX3J0Y1RyYW5zY2Vp
dmVyLmdldCgpLCAicmVjZWl2ZXIiLCAmcmVjZWl2ZXIub3V0UHRyKCksIG51bGxwdHIpOworICAg
IHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPihXVEZN
b3ZlKHJlY2VpdmVyKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVNlbmRlckJhY2tl
bmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBiYWNrZW5kLCBHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kOjpTb3VyY2UmJiBzb3VyY2UsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYm
IGluaXREYXRhKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXI7Cisg
ICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJzZW5kZXIiLCAmc2VuZGVy
Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ+KGJhY2tlbmQsIFdURk1vdmUoc2VuZGVyKSwgV1RGTW92ZShzb3Vy
Y2UpLCBXVEZNb3ZlKGluaXREYXRhKSk7Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9u
IEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6ZGlyZWN0aW9uKCkgY29uc3QKK3sKKyAg
ICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlvbiBnc3REaXJlY3Rpb247CisgICAgZ19v
YmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJkaXJlY3Rpb24iLCAmZ3N0RGlyZWN0
aW9uLCBudWxscHRyKTsKKyAgICByZXR1cm4gdG9SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihn
c3REaXJlY3Rpb24pOworfQorCitzdGQ6Om9wdGlvbmFsPFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0
aW9uPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmN1cnJlbnREaXJlY3Rpb24oKSBj
b25zdAoreworICAgIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyRGlyZWN0aW9uIGdzdERpcmVjdGlv
bjsKKyAgICBnX29iamVjdF9nZXQobV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgImN1cnJlbnQtZGly
ZWN0aW9uIiwgJmdzdERpcmVjdGlvbiwgbnVsbHB0cik7CisgICAgaWYgKCFnc3REaXJlY3Rpb24p
CisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHRvUlRDUnRwVHJhbnNj
ZWl2ZXJEaXJlY3Rpb24oZ3N0RGlyZWN0aW9uKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQ6OnNldERpcmVjdGlvbihSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBk
aXJlY3Rpb24pCit7CisgICAgZ19vYmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJk
aXJlY3Rpb24iLCBmcm9tUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZGlyZWN0aW9uKSwgbnVs
bHB0cik7Cit9CisKK1N0cmluZyBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6Om1pZCgp
Cit7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBtaWQ7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRj
VHJhbnNjZWl2ZXIuZ2V0KCksICJtaWQiLCAmbWlkLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBy
ZXR1cm4gbWlkLmdldCgpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZDo6c3RvcCgpCit7CisgICAgLy8gRklYTUU6IHdlYnJ0Y2JpbiB0cmFuc2NlaXZlcnMgY2FuJ3Qg
YmUgc3RvcHBlZCB5ZXQuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBHU3RyZWFt
ZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnN0b3BwZWQoKSBjb25zdAoreworICAgIC8vIEZJWE1F
OiB3ZWJydGNiaW4gdHJhbnNjZWl2ZXJzIGNhbid0IGJlIHN0b3BwZWQgeWV0LgorICAgIHJldHVy
biBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBXQVJOX1VOVVNFRF9SRVRVUk4gRXhjZXB0aW9u
T3I8R3N0Q2Fwcyo+IHRvUnRwQ29kZWNDYXBhYmlsaXR5KGNvbnN0IFJUQ1J0cENvZGVjQ2FwYWJp
bGl0eSYgY29kZWMpCit7CisgICAgaWYgKCFjb2RlYy5taW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRl
by8iKSAmJiAhY29kZWMubWltZVR5cGUuc3RhcnRzV2l0aCgiYXVkaW8vIikpCisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3IsICJSVENSdHBDb2RlY0Nh
cGFiaWxpdHkgYmFkIG1pbWVUeXBlIiB9OworCisgICAgYXV0byBjb21wb25lbnRzID0gY29kZWMu
bWltZVR5cGUuc3BsaXQoJy8nKTsKKyAgICBhdXRvKiBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBs
ZSgiYXBwbGljYXRpb24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCBjb21wb25lbnRz
WzBdLmFzY2lpKCkuZGF0YSgpLCAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGNvbXBv
bmVudHNbMV0uYXNjaWkoKS5kYXRhKCksIG51bGxwdHIpOworICAgIGdzdF9jYXBzX3NldF9zaW1w
bGUoY2FwcywgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCBjb2RlYy5jbG9ja1JhdGUsIG51bGxw
dHIpOworICAgIGlmIChjb2RlYy5jaGFubmVscykKKyAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBs
ZShjYXBzLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAqY29kZWMuY2hhbm5lbHMsIG51bGxwdHIp
OworCisgICAgaWYgKCFjb2RlYy5zZHBGbXRwTGluZS5pc0VtcHR5KCkpCisgICAgICAgIEdTVF9G
SVhNRSgiVW5wcm9jZXNzZWQgU0RQIEZtdHBMaW5lOiAlcyIsIGNvZGVjLnNkcEZtdHBMaW5lLnV0
ZjgoKS5kYXRhKCkpOworICAgIEdTVF9ERUJVRygiQ29kZWMgY2FwYWJpbGl0eTogJSIgR1NUX1BU
Ul9GT1JNQVQsIGNhcHMpOworICAgIHJldHVybiBjYXBzOworfQorCitFeGNlcHRpb25Pcjx2b2lk
PiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNldENvZGVjUHJlZmVyZW5jZXMoY29u
c3QgVmVjdG9yPFJUQ1J0cENvZGVjQ2FwYWJpbGl0eT4mIGNvZGVjcykKK3sKKyAgICBhdXRvIGdz
dENvZGVjcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZm9yIChhdXRv
JiBjb2RlYyA6IGNvZGVjcykgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHRvUnRwQ29kZWNDYXBh
YmlsaXR5KGNvZGVjKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAg
ICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICBnc3RfY2Fw
c19hcHBlbmQoZ3N0Q29kZWNzLmdldCgpLCByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOwor
ICAgIH0KKyAgICBnX29iamVjdF9zZXQobV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgImNvZGVjLXBy
ZWZlcmVuY2VzIiwgZ3N0Q29kZWNzLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4geyB9Owor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlYTc3MzA0YjA2ZTQxODBmYzcw
NzE0N2Y1NDg4Njk4NTg4MTZhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIEln
YWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2lu
Y2x1ZGUgIlJUQ1J0cFRyYW5zY2VpdmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDsKKworY2xhc3MgR1N0cmVhbWVy
UnRwVHJhbnNjZWl2ZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ1J0cFRyYW5zY2VpdmVyQmFj
a2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+
JiYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4g
Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQ+IGNyZWF0ZVNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kJiwgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiYsIEdVbmlxdWVQ
dHI8R3N0U3RydWN0dXJlPiYmKTsKKworICAgIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBydGNU
cmFuc2NlaXZlcigpIHsgcmV0dXJuIG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCk7IH0KKworcHJpdmF0
ZToKKyAgICBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCBmaW5h
bDsKKyAgICBzdGQ6Om9wdGlvbmFsPFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uPiBjdXJyZW50
RGlyZWN0aW9uKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXREaXJlY3Rpb24oUlRDUnRwVHJh
bnNjZWl2ZXJEaXJlY3Rpb24pIGZpbmFsOworICAgIFN0cmluZyBtaWQoKSBmaW5hbDsKKyAgICB2
b2lkIHN0b3AoKSBmaW5hbDsKKyAgICBib29sIHN0b3BwZWQoKSBjb25zdCBmaW5hbDsKKyAgICBF
eGNlcHRpb25Pcjx2b2lkPiBzZXRDb2RlY1ByZWZlcmVuY2VzKGNvbnN0IFZlY3RvcjxSVENSdHBD
b2RlY0NhcGFiaWxpdHk+JikgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5z
Y2VpdmVyPiBtX3J0Y1RyYW5zY2VpdmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45OWI0YTZhMzdlNWZiMDNjZTk4MzYzMDZjYmVmY2RmZDlhNWEwZjUzCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5k
OjpzZXRJbnB1dENhbGxiYWNrKENhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgTG9ja2VyIGhv
bGRMb2NrIHsgbV9pbnB1dENhbGxiYWNrTG9jayB9OworICAgIG1faW5wdXRDYWxsYmFjayA9IFdU
Rk1vdmUoY2FsbGJhY2spOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6
OmNsZWFyVHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soKQoreworICAgIHNldElucHV0Q2FsbGJh
Y2soeyB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpwcm9jZXNz
VHJhbnNmb3JtZWRGcmFtZShSVENSdHBUcmFuc2Zvcm1hYmxlRnJhbWUmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5z
Zm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTU0NDhmYzdk
MzI2MThmNzhlN2U4MTVmYzE1ZTE0OTYxMWIyYjNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNm
b3JtQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIx
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUlRDUnRwVHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1
ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVy
UnRwVHJhbnNmb3JtQmFja2VuZCA6IHB1YmxpYyBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kIHsKK3By
b3RlY3RlZDoKKyAgICBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKE1lZGlhVHlwZSwgU2lk
ZSk7CisgICAgdm9pZCBzZXRJbnB1dENhbGxiYWNrKENhbGxiYWNrJiYpOworCitwcm90ZWN0ZWQ6
CisgICAgTWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbWVkaWFU
eXBlOyB9CisKK3ByaXZhdGU6CisgICAgLy8gUlRDUnRwVHJhbnNmb3JtQmFja2VuZAorICAgIHZv
aWQgcHJvY2Vzc1RyYW5zZm9ybWVkRnJhbWUoUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lJikgZmlu
YWw7CisgICAgdm9pZCBjbGVhclRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKCkgZmluYWw7Cisg
ICAgU2lkZSBzaWRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zaWRlOyB9CisKKyAgICBNZWRp
YVR5cGUgbV9tZWRpYVR5cGU7CisgICAgU2lkZSBtX3NpZGU7CisKKyAgICBMb2NrIG1faW5wdXRD
YWxsYmFja0xvY2s7CisgICAgQ2FsbGJhY2sgbV9pbnB1dENhbGxiYWNrOworCisgICAgTG9jayBt
X291dHB1dENhbGxiYWNrTG9jazsKK307CisKK2lubGluZSBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1C
YWNrZW5kOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKE1lZGlhVHlwZSBtZWRpYVR5cGUs
IFNpZGUgc2lkZSkKKyAgICA6IG1fbWVkaWFUeXBlKG1lZGlhVHlwZSkKKyAgICAsIG1fc2lkZShz
aWRlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY3OTIxM2Qx
NzhkZGI1MDliZmEyY2JkNmY2YzZiYjgzOTBjMjQxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFu
c3BvcnRCYWNrZW5kLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU2N0cFRy
YW5zcG9ydEJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitzdGF0aWMgaW5saW5lIFJUQ1NjdHBUcmFuc3BvcnRTdGF0ZSB0b1JUQ1NjdHBUcmFuc3BvcnRT
dGF0ZShHc3RXZWJSVENTQ1RQVHJhbnNwb3J0U3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChz
dGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9ORVc6Cisg
ICAgY2FzZSBHU1RfV0VCUlRDX1NDVFBfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAg
ICAgIHJldHVybiBSVENTY3RwVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgY2FzZSBH
U1RfV0VCUlRDX1NDVFBfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJu
IFJUQ1NjdHBUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19T
Q1RQX1RSQU5TUE9SVF9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENTY3RwVHJhbnNw
b3J0U3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworfQorCitHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVyU2N0cFRy
YW5zcG9ydEJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiYmIHRyYW5zcG9y
dCkKKyAgICA6IG1fYmFja2VuZChXVEZNb3ZlKHRyYW5zcG9ydCkpCit7CisgICAgQVNTRVJUKG1f
YmFja2VuZCk7Cit9CisKK0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVy
U2N0cFRyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIHVucmVnaXN0ZXJDbGllbnQoKTsKK30KKwor
VW5pcXVlUmVmPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRD
RFRMU1RyYW5zcG9ydD4gdHJhbnNwb3J0OworICAgIGdfb2JqZWN0X2dldChtX2JhY2tlbmQuZ2V0
KCksICJ0cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1
cm4gbWFrZVVuaXF1ZVJlZjxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0
KTsKK30KKwordm9pZCBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGll
bnQoQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9jbGll
bnQgPSBjbGllbnQ7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fYmFja2VuZC5nZXQo
KSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5kLT5zdGF0ZUNoYW5nZWQoKTsKKyAg
ICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnVu
cmVnaXN0ZXJDbGllbnQoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlf
ZGF0YShtX2JhY2tlbmQuZ2V0KCksIHRoaXMpOworICAgIG1fY2xpZW50LmNsZWFyKCk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCgpCit7Cisg
ICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDU0NUUFRy
YW5zcG9ydFN0YXRlIHRyYW5zcG9ydFN0YXRlOworICAgIGd1aW50MTYgbWF4Q2hhbm5lbHM7Cisg
ICAgdWludDY0X3QgbWF4TWVzc2FnZVNpemU7CisgICAgZ19vYmplY3RfZ2V0KG1fYmFja2VuZC5n
ZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0YXRlLCAibWF4LW1lc3NhZ2Utc2l6ZSIsICZtYXhN
ZXNzYWdlU2l6ZSwgIm1heC1jaGFubmVscyIsICZtYXhDaGFubmVscywgbnVsbHB0cik7CisgICAg
Y2FsbE9uTWFpblRocmVhZChbY2xpZW50ID0gbV9jbGllbnQsIHRyYW5zcG9ydFN0YXRlLCBtYXhD
aGFubmVscywgbWF4TWVzc2FnZVNpemVdIHsKKyAgICAgICAgaWYgKCFjbGllbnQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgY2xpZW50LT5vblN0YXRlQ2hhbmdlZCh0b1JUQ1NjdHBU
cmFuc3BvcnRTdGF0ZSh0cmFuc3BvcnRTdGF0ZSksIG1heE1lc3NhZ2VTaXplLCBtYXhDaGFubmVs
cyk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVO
QUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFu
c3BvcnRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ODBmYzg0
OThjMDVjMzk3ZGNiMDZjNzBjNDMzMDhiMDI5MGYwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJh
bnNwb3J0QmFja2VuZC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUg
IlJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwor
dHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1NDVFBUcmFuc3BvcnQgR3N0V2ViUlRDU0NUUFRyYW5z
cG9ydDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENTY3RwVHJhbnNwb3J0QmFja2VuZCwgcHVibGlj
IENhbk1ha2VXZWFrUHRyPEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kPiB7CisgICAgV1RG
X01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiYmKTsKKyAg
ICB+R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoKTsKKworcHJvdGVjdGVkOgorICAgIHZv
aWQgc3RhdGVDaGFuZ2VkKCk7CisKK3ByaXZhdGUgOgorICAgIC8vIFJUQ1NjdHBUcmFuc3BvcnRC
YWNrZW5kCisgICAgY29uc3Qgdm9pZCogYmFja2VuZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1f
YmFja2VuZC5nZXQoKTsgfQorICAgIFVuaXF1ZVJlZjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4g
ZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBmaW5hbDsKKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENs
aWVudCYpIGZpbmFsOworICAgIHZvaWQgdW5yZWdpc3RlckNsaWVudCgpIGZpbmFsOworCisgICAg
R1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiBtX2JhY2tlbmQ7CisgICAgV2Vha1B0cjxD
bGllbnQ+IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3Rh
dHNDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2YjAwN2IxNTYz
Y2EwYjgyOWI1ODYwZjkzYTI3ODI3ODM0NmJmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxl
Y3Rvci5jcHAKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIw
MjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJTdGF0c0NvbGxlY3Rv
ci5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisj
aW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5o
IgorI2luY2x1ZGUgIkpTUlRDU3RhdHNSZXBvcnQuaCIKKworI2RlZmluZSBHU1RfVVNFX1VOU1RB
QkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9V
TlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3Rm
L2dsaWIvV1RGR1R5cGUuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2Vi
cnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJy
dGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5l
IHZvaWQgZmlsbFJUQ1N0YXRzKFJUQ1N0YXRzUmVwb3J0OjpTdGF0cyYgc3RhdHMsIGNvbnN0IEdz
dFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGRvdWJsZSB0aW1lc3RhbXA7CisgICAgaWYg
KGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShzdHJ1Y3R1cmUsICJ0aW1lc3RhbXAiLCAmdGltZXN0
YW1wKSkKKyAgICAgICAgc3RhdHMudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIHN0YXRzLmlk
ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImlkIik7Cit9CisKK3N0YXRp
YyBpbmxpbmUgdm9pZCBmaWxsUlRDUlRQU3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlJ0cFN0
cmVhbVN0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAg
ZmlsbFJUQ1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworCisgICAgc3RhdHMudHJhbnNwb3J0SWQg
PSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAidHJhbnNwb3J0LWlkIik7Cisg
ICAgc3RhdHMuY29kZWNJZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJj
b2RlYy1pZCIpOworCisgICAgdW5zaWduZWQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVf
Z2V0X3VpbnQoc3RydWN0dXJlLCAic3NyYyIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnNzcmMg
PSB2YWx1ZTsKKworICAgIC8vIEZJWE1FOgorICAgIC8vIHN0YXRzLnRyYW5zcG9ydElkCisgICAg
Ly8gc3RhdHMuY29kZWNJZAorICAgIC8vIHN0YXRzLm1lZGlhVHlwZQorICAgIC8vIHN0YXRzLmtp
bmQKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENDb2RlY1N0YXRzKFJUQ1N0YXRzUmVw
b3J0OjpDb2RlY1N0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7
CisgICAgZmlsbFJUQ1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworCisgICAgdW5zaWduZWQgdmFs
dWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAicGF5bG9hZC10
eXBlIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMucGF5bG9hZFR5cGUgPSB2YWx1ZTsKKyAgICBp
ZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJnZhbHVl
KSkKKyAgICAgICAgc3RhdHMuY2xvY2tSYXRlID0gdmFsdWU7CisKKyAgICAvLyBGSVhNRToKKyAg
ICAvLyBzdGF0cy5taW1lVHlwZSA9CisgICAgLy8gc3RhdHMuY2hhbm5lbHMgPQorICAgIC8vIHN0
YXRzLnNkcEZtdHBMaW5lID0KKyAgICAvLyBzdGF0cy5pbXBsZW1lbnRhdGlvbiA9Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBmaWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRzKFJUQ1N0YXRzUmVwb3J0
OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVj
dHVyZSkKK3sKKyAgICBmaWxsUlRDUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisK
KyAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0
cnVjdHVyZSwgInBhY2tldHMtcmVjZWl2ZWQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5wYWNr
ZXRzUmVjZWl2ZWQgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0
cnVjdHVyZSwgImJ5dGVzLXJlY2VpdmVkIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuYnl0ZXNS
ZWNlaXZlZCA9IHZhbHVlOworCisgICAgdW5zaWduZWQgcGFja2V0c0xvc3Q7CisgICAgaWYgKGdz
dF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAicGFja2V0cy1sb3N0IiwgJnBhY2tldHNM
b3N0KSkKKyAgICAgICAgc3RhdHMucGFja2V0c0xvc3QgPSBwYWNrZXRzTG9zdDsKKworICAgIGRv
dWJsZSBqaXR0ZXI7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShzdHJ1Y3R1cmUs
ICJqaXR0ZXIiLCAmaml0dGVyKSkKKyAgICAgICAgc3RhdHMuaml0dGVyID0gaml0dGVyOworCisg
ICAgLy8gRklYTUU6CisgICAgLy8gc3RhdHMuZnJhY3Rpb25Mb3N0ID0KKyAgICAvLyBzdGF0cy5w
YWNrZXRzRGlzY2FyZGVkID0KKyAgICAvLyBzdGF0cy5wYWNrZXRzUmVwYWlyZWQgPQorICAgIC8v
IHN0YXRzLmJ1cnN0UGFja2V0c0xvc3QgPQorICAgIC8vIHN0YXRzLmJ1cnN0UGFja2V0c0Rpc2Nh
cmRlZCA9CisgICAgLy8gc3RhdHMuYnVyc3RMb3NzQ291bnQgPQorICAgIC8vIHN0YXRzLmJ1cnN0
RGlzY2FyZENvdW50ID0KKyAgICAvLyBzdGF0cy5idXJzdExvc3NSYXRlID0KKyAgICAvLyBzdGF0
cy5idXJzdERpc2NhcmRSYXRlID0KKyAgICAvLyBzdGF0cy5nYXBMb3NzUmF0ZSA9CisgICAgLy8g
c3RhdHMuZ2FwRGlzY2FyZFJhdGUgPQorICAgIC8vIHN0YXRzLmZyYW1lc0RlY29kZWQgPQorfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbE91dGJvdW5kUlRQU3RyZWFtU3RhdHMoUlRDU3RhdHNS
ZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUq
IHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVy
ZSk7CisKKyAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWlu
dDY0KHN0cnVjdHVyZSwgInBhY2tldHMtc2VudCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnBh
Y2tldHNTZW50ID0gdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChzdHJ1
Y3R1cmUsICJieXRlcy1zZW50IiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuYnl0ZXNTZW50ID0g
dmFsdWU7CisKKyAgICAvLyBGSVhNRQorICAgIC8vIHN0YXRzLnRhcmdldEJpdHJhdGUgPQorICAg
IC8vIHN0YXRzLmZyYW1lc0VuY29kZWQgPQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJU
Q1BlZXJDb25uZWN0aW9uU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHMm
IHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3Rh
dHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICBpbnQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1
Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJkYXRhLWNoYW5uZWxzLW9wZW5lZCIsICZ2YWx1ZSkp
CisgICAgICAgIHN0YXRzLmRhdGFDaGFubmVsc09wZW5lZCA9IHZhbHVlOworICAgIGlmIChnc3Rf
c3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAiZGF0YS1jaGFubmVscy1jbG9zZWQiLCAmdmFs
dWUpKQorICAgICAgICBzdGF0cy5kYXRhQ2hhbm5lbHNDbG9zZWQgPSB2YWx1ZTsKK30KKworc3Rh
dGljIGlubGluZSB2b2lkIGZpbGxSVENUcmFuc3BvcnRTdGF0cyhSVENTdGF0c1JlcG9ydDo6VHJh
bnNwb3J0U3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICAvLyBGSVhNRQorICAgIC8v
IHN0YXRzLmJ5dGVzU2VudCA9CisgICAgLy8gc3RhdHMuYnl0ZXNSZWNlaXZlZCA9CisgICAgLy8g
c3RhdHMucnRjcFRyYW5zcG9ydFN0YXRzSWQgPQorICAgIC8vIHN0YXRzLnNlbGVjdGVkQ2FuZGlk
YXRlUGFpcklkID0KKyAgICAvLyBzdGF0cy5sb2NhbENlcnRpZmljYXRlSWQgPQorICAgIC8vIHN0
YXRzLnJlbW90ZUNlcnRpZmljYXRlSWQgPQorICAgIC8vIHN0YXRzLmR0bHNTdGF0ZSA9CisgICAg
Ly8gc3RhdHMudGxzVmVyc2lvbiA9CisgICAgLy8gc3RhdHMuZHRsc0NpcGhlciA9CisgICAgLy8g
c3RhdHMuc3J0cENpcGhlciA9Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBmaWxsUmVwb3J0Q2FsbGJh
Y2soR1F1YXJrLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAg
ICBpZiAoIUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUodmFsdWUpKQorICAgICAgICByZXR1cm4g
VFJVRTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dl
dF9zdHJ1Y3R1cmUodmFsdWUpOworICAgIEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7Cisg
ICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VC
UlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gVFJV
RTsKKworICAgIERPTU1hcEFkYXB0ZXImIHJlcG9ydCA9ICpyZWludGVycHJldF9jYXN0PERPTU1h
cEFkYXB0ZXIqPih1c2VyRGF0YSk7CisKKyAgICBzd2l0Y2ggKHN0YXRzVHlwZSkgeworICAgIGNh
c2UgR1NUX1dFQlJUQ19TVEFUU19DT0RFQzogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6Q29k
ZWNTdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJUQ0NvZGVjU3RhdHMoc3RhdHMsIHN0cnVjdHVy
ZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0
YXRzUmVwb3J0OjpDb2RlY1N0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUDog
eworICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzIHN0YXRzOwor
ICAgICAgICBmaWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAg
ICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9y
dDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19PVVRCT1VORF9S
VFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3Rh
dHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0
c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRz
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUkVN
T1RFX0lOQk9VTkRfUlRQOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3Ry
ZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMs
IHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9u
YXJ5PFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0cy5pZCwgV1RG
TW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRD
X1NUQVRTX1JFTU9URV9PVVRCT1VORF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91
dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVh
bVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmlu
ZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+
KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBj
YXNlIEdTVF9XRUJSVENfU1RBVFNfQ1NSQzoKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVk
IHN0YXRzOiBjc3JjIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFU
U19QRUVSX0NPTk5FQ1RJT046IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0
aW9uU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRz
LCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlv
bmFyeTxSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cz4+KHN0YXRzLmlkLCBXVEZN
b3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENf
U1RBVFNfVFJBTlNQT1JUOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0
cyBzdGF0czsKKyAgICAgICAgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0
c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1NUUkVBTToKKyAg
ICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0YXRzOiBzdHJlYW0iKTsKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX0RBVEFfQ0hBTk5FTDoKKyAgICAgICAgR1NU
X0ZJWE1FKCJNaXNzaW5nIGRhdGEtY2hhbm5lbCBzdGF0cyBzdXBwb3J0Iik7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DQU5ESURBVEVfUEFJUjoKKyAgICBjYXNl
IEdTVF9XRUJSVENfU1RBVFNfTE9DQUxfQ0FORElEQVRFOgorICAgIGNhc2UgR1NUX1dFQlJUQ19T
VEFUU19SRU1PVEVfQ0FORElEQVRFOgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2FuZGlk
YXRlIHN0YXRzIHN1cHBvcnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRD
X1NUQVRTX0NFUlRJRklDQVRFOgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2VydGlmaWNh
dGUgc3RhdHMgc3VwcG9ydCIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4g
VFJVRTsKK30KKworc3RydWN0IENhbGxiYWNrSG9sZGVyIHsKKyAgICBHU3RyZWFtZXJTdGF0c0Nv
bGxlY3Rvcjo6Q29sbGVjdG9yQ2FsbGJhY2sgY2FsbGJhY2s7Cit9OworCitXRUJLSVRfREVGSU5F
X0FTWU5DX0RBVEFfU1RSVUNUKENhbGxiYWNrSG9sZGVyKTsKKwordm9pZCBHU3RyZWFtZXJTdGF0
c0NvbGxlY3Rvcjo6Z2V0U3RhdHMoQ29sbGVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgR3N0UGFk
KiBwYWQpCit7CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikgeworICAgICAgICBjYWxsYmFjayhudWxs
cHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8qIGhvbGRlciA9IGNyZWF0
ZUNhbGxiYWNrSG9sZGVyKCk7CisgICAgaG9sZGVyLT5jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJh
Y2spOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC1z
dGF0cyIsIHBhZCwgZ3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlz
ZSogcmF3UHJvbWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9taXNl
ID0gYWRvcHRHUmVmKHJhd1Byb21pc2UpOworICAgICAgICBhdXRvKiBob2xkZXIgPSBzdGF0aWNf
Y2FzdDxDYWxsYmFja0hvbGRlcio+KHVzZXJEYXRhKTsKKyAgICAgICAgaWYgKGdzdF9wcm9taXNl
X3dhaXQocHJvbWlzZS5nZXQoKSkgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpIHsKKyAg
ICAgICAgICAgIGhvbGRlci0+Y2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBhdXRvKiBzdGF0cyA9IGdzdF9wcm9taXNlX2dl
dF9yZXBseShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgaWYgKCFzdGF0cykgeworICAgICAgICAg
ICAgaG9sZGVyLT5jYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZChzdGF0cywgImVycm9y
IikpIHsKKyAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0YXRzLCAiZXJyb3IiLCBHX1RZUEVfRVJST1IsICZlcnJv
ci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBHU1RfV0FSTklORygiVW5hYmxlIHRv
IGdldCBzdGF0cywgZXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICAgICAgaG9s
ZGVyLT5jYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFtwcm9taXNlID0gV1RGTW92ZShwcm9t
aXNlKSwgaG9sZGVyXSB7CisgICAgICAgICAgICAvLyBIb2xkIGFuIGFkZGl0aW9uYWwgcmVmIHRv
IHRoZSBwcm9taXNlIGJlY2F1c2UgaXQgaXMgYXN5bmNocm9ub3VzbHkgdXNlZCBmcm9tIHRoZSBK
UyBiaW5kaW5ncy4KKyAgICAgICAgICAgIGhvbGRlci0+Y2FsbGJhY2soUlRDU3RhdHNSZXBvcnQ6
OmNyZWF0ZShbcHJvbWlzZSA9IEdSZWZQdHI8R3N0UHJvbWlzZT4ocHJvbWlzZS5nZXQoKSldKGF1
dG8mIG1hcEFkYXB0ZXIpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvKiBzdGF0cyA9IGdz
dF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBnc3Rf
c3RydWN0dXJlX2ZvcmVhY2goc3RhdHMsIGZpbGxSZXBvcnRDYWxsYmFjaywgJm1hcEFkYXB0ZXIp
OworICAgICAgICAgICAgfSkpOworICAgICAgICB9KTsKKyAgICB9LCBob2xkZXIsIHJlaW50ZXJw
cmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lDYWxsYmFja0hvbGRlcikpKTsKK30KKwor
fTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxl
Y3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjU0MjczNTUzZjgyNTEzNzI2MWZhOTQ3NmJmZTBhZTE3MmJkMDgx
YjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oCkBAIC0wLDAgKzEsNDggQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdT
dHJlYW1lci5oIgorCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJUQ1N0YXRzUmVwb3J0OworCitjbGFzcyBH
U3RyZWFtZXJTdGF0c0NvbGxlY3RvciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHU3Ry
ZWFtZXJTdGF0c0NvbGxlY3RvciwgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4geworcHVi
bGljOgorICAgIHVzaW5nIENvbGxlY3RvckNhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9p
ZChSZWZQdHI8UlRDU3RhdHNSZXBvcnQ+JiYpPjsKKyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lclN0
YXRzQ29sbGVjdG9yPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lclN0
YXRzQ29sbGVjdG9yKCkpOyB9CisKKyAgICB2b2lkIHNldEVsZW1lbnQoR3N0RWxlbWVudCogZWxl
bWVudCkgeyBtX3dlYnJ0Y0JpbiA9IGVsZW1lbnQ7IH0KKyAgICB2b2lkIGdldFN0YXRzKENvbGxl
Y3RvckNhbGxiYWNrJiYsIEdzdFBhZCopOworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxl
bWVudD4gbV93ZWJydGNCaW47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJX
ZWJSVENVdGlscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZjMTQ5YTNhOGNjYWFh
Mzc4YzNhNTk3YTkyMmRlYzAyZTZlYTBhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNw
cApAQCAtMCwwICsxLDQ0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2Fs
aWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisKKyNpbmNsdWRlICJS
VENJY2VDYW5kaWRhdGUuaCIKKyNpbmNsdWRlICJSVENJY2VQcm90b2NvbC5oIgorCisjaW5jbHVk
ZSA8b3BlbnNzbC9ibi5oPgorI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjaW5jbHVkZSA8b3Bl
bnNzbC9zc2wuaD4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIu
aD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKyNp
bmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0lu
dGVnZXJDb252ZXJzaW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X3dl
YnJ0Y191dGlsc19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRj
X3V0aWxzX2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBSVENJ
Y2VDb21wb25lbnQgdG9SVENJY2VDb21wb25lbnQoaW50IGNvbXBvbmVudCkKK3sKKyAgICByZXR1
cm4gY29tcG9uZW50ID09IDEgPyBSVENJY2VDb21wb25lbnQ6OlJ0cCA6IFJUQ0ljZUNvbXBvbmVu
dDo6UnRjcDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0ljZVByb3RvY29s
PiB0b1JUQ0ljZVByb3RvY29sKGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCit7CisgICAgaWYgKHBy
b3RvY29sLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAocHJvdG9jb2wg
PT0gInVkcCIpCisgICAgICAgIHJldHVybiBSVENJY2VQcm90b2NvbDo6VWRwOworICAgIEFTU0VS
VChwcm90b2NvbCA9PSAidGNwIik7CisgICAgcmV0dXJuIFJUQ0ljZVByb3RvY29sOjpUY3A7Cit9
CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxSVENJY2VUY3BDYW5kaWRhdGVUeXBlPiB0
b1JUQ0ljZVRjcENhbmRpZGF0ZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGlmICh0
eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAodHlwZSA9PSAiYWN0
aXZlIikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU6OkFjdGl2ZTsKKyAg
ICBpZiAodHlwZSA9PSAicGFzc2l2ZSIpCisgICAgICAgIHJldHVybiBSVENJY2VUY3BDYW5kaWRh
dGVUeXBlOjpQYXNzaXZlOworICAgIEFTU0VSVCh0eXBlID09ICJzbyIpOworICAgIHJldHVybiBS
VENJY2VUY3BDYW5kaWRhdGVUeXBlOjpTbzsKK30KKworc3RhdGljIGlubGluZSBzdGQ6Om9wdGlv
bmFsPFJUQ0ljZUNhbmRpZGF0ZVR5cGU+IHRvUlRDSWNlQ2FuZGlkYXRlVHlwZShjb25zdCBTdHJp
bmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9
OworICAgIGlmICh0eXBlID09ICJob3N0IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNhbmRpZGF0
ZVR5cGU6Okhvc3Q7CisgICAgaWYgKHR5cGUgPT0gInNyZmx4IikKKyAgICAgICAgcmV0dXJuIFJU
Q0ljZUNhbmRpZGF0ZVR5cGU6OlNyZmx4OworICAgIGlmICh0eXBlID09ICJwcmZseCIpCisgICAg
ICAgIHJldHVybiBSVENJY2VDYW5kaWRhdGVUeXBlOjpQcmZseDsKKyAgICBBU1NFUlQodHlwZSA9
PSAicmVsYXkiKTsKKyAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6UmVsYXk7Cit9CisK
K1JlZlB0cjxSVENFcnJvcj4gdG9SVENFcnJvcihHRXJyb3IqIHJ0Y0Vycm9yKQoreworICAgIGF1
dG8gZGV0YWlsID0gdG9SVENFcnJvckRldGFpbFR5cGUoc3RhdGljX2Nhc3Q8R3N0V2ViUlRDRXJy
b3I+KHJ0Y0Vycm9yLT5jb2RlKSk7CisgICAgaWYgKCFkZXRhaWwpCisgICAgICAgIHJldHVybiBu
dWxscHRyOworICAgIHJldHVybiBSVENFcnJvcjo6Y3JlYXRlKCpkZXRhaWwsIHJ0Y0Vycm9yLT5t
ZXNzYWdlKTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgdG9XZWJSVENCaXRSYXRlUHJpb3Jp
dHkoUlRDUHJpb3JpdHlUeXBlIHByaW9yaXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkpIHsK
KyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6VmVyeUxvdzoKKyAgICAgICAgcmV0dXJuIDAuNTsK
KyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6TG93OgorICAgICAgICByZXR1cm4gMTsKKyAgICBj
YXNlIFJUQ1ByaW9yaXR5VHlwZTo6TWVkaXVtOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNl
IFJUQ1ByaW9yaXR5VHlwZTo6SGlnaDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1
cmU+IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3QgUlRDUnRwRW5jb2RpbmdQYXJhbWV0
ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBydGNQYXJh
bWV0ZXJzKGdzdF9zdHJ1Y3R1cmVfbmV3KCJlbmNvZGluZy1wYXJhbWV0ZXJzIiwgImFjdGl2ZSIs
IEdfVFlQRV9CT09MRUFOLCBwYXJhbWV0ZXJzLmFjdGl2ZSwKKyAgICAgICAgInJpZCIsIEdfVFlQ
RV9TVFJJTkcsIHBhcmFtZXRlcnMucmlkLnV0ZjgoKS5kYXRhKCksICJiaXRyYXRlLXByaW9yaXR5
IiwgR19UWVBFX0RPVUJMRSwgdG9XZWJSVENCaXRSYXRlUHJpb3JpdHkocGFyYW1ldGVycy5wcmlv
cml0eSksIG51bGxwdHIpKTsKKworICAgIGlmIChwYXJhbWV0ZXJzLnNzcmMpCisgICAgICAgIGdz
dF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJzc3JjIiwgR19UWVBFX1VMT05H
LCBwYXJhbWV0ZXJzLnNzcmMsIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMubWF4Qml0
cmF0ZSkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgIm1h
eC1iaXRyYXRlIiwgR19UWVBFX1VMT05HLCBwYXJhbWV0ZXJzLm1heEJpdHJhdGUsIG51bGxwdHIp
OworCisgICAgaWYgKHBhcmFtZXRlcnMubWF4RnJhbWVyYXRlKQorICAgICAgICBnc3Rfc3RydWN0
dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAibWF4LWZyYW1lcmF0ZSIsIEdfVFlQRV9VTE9O
RywgcGFyYW1ldGVycy5tYXhGcmFtZXJhdGUsIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRl
cnMuc2NhbGVSZXNvbHV0aW9uRG93bkJ5KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQ
YXJhbWV0ZXJzLmdldCgpLCAic2NhbGUtcmVzb2x1dGlvbi1kb3duLWJ5IiwgR19UWVBFX0RPVUJM
RSwgcGFyYW1ldGVycy5zY2FsZVJlc29sdXRpb25Eb3duQnksIG51bGxwdHIpOworCisgICAgaWYg
KHBhcmFtZXRlcnMubmV0d29ya1ByaW9yaXR5KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChy
dGNQYXJhbWV0ZXJzLmdldCgpLCAibmV0d29yay1wcmlvcml0eSIsIEdfVFlQRV9JTlQsICpwYXJh
bWV0ZXJzLm5ldHdvcmtQcmlvcml0eSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gcnRjUGFyYW1l
dGVyczsKK30KKworc3RhdGljIGlubGluZSBSVENQcmlvcml0eVR5cGUgZnJvbVdlYlJUQ0JpdFJh
dGVQcmlvcml0eShkb3VibGUgcHJpb3JpdHkpCit7CisgICAgaWYgKHByaW9yaXR5IDwgMC43KQor
ICAgICAgICByZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93OworICAgIGlmIChwcmlvcml0
eSA8IDEuNSkKKyAgICAgICAgcmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6TG93OworICAgIGlmIChw
cmlvcml0eSA8IDIuNSkKKyAgICAgICAgcmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6TWVkaXVtOwor
ICAgIHJldHVybiBSVENQcmlvcml0eVR5cGU6OkhpZ2g7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRD
UnRwRW5jb2RpbmdQYXJhbWV0ZXJzIHRvUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0IEdzdFN0
cnVjdHVyZSogcnRjUGFyYW1ldGVycykKK3sKKyAgICBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMg
cGFyYW1ldGVyczsKKworICAgIHVuc2lnbmVkIHNzcmM7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVf
Z2V0X3VpbnQocnRjUGFyYW1ldGVycywgInNzcmMiLCAmc3NyYykpCisgICAgICAgIHBhcmFtZXRl
cnMuc3NyYyA9IHNzcmM7CisKKyAgICBnc3Rfc3RydWN0dXJlX2dldChydGNQYXJhbWV0ZXJzLCAi
YWN0aXZlIiwgR19UWVBFX0JPT0xFQU4sICYocGFyYW1ldGVycy5hY3RpdmUpLCBudWxscHRyKTsK
KworICAgIHVpbnQ2NF90IG1heEJpdHJhdGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3Vp
bnQ2NChydGNQYXJhbWV0ZXJzLCAibWF4LWJpdHJhdGUiLCAmbWF4Qml0cmF0ZSkpCisgICAgICAg
IHBhcmFtZXRlcnMubWF4Qml0cmF0ZSA9IG1heEJpdHJhdGU7CisKKyAgICB1aW50NjRfdCBtYXhG
cmFtZXJhdGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChydGNQYXJhbWV0ZXJz
LCAibWF4LWZyYW1lcmF0ZSIsICZtYXhGcmFtZXJhdGUpKQorICAgICAgICBwYXJhbWV0ZXJzLm1h
eEZyYW1lcmF0ZSA9IG1heEZyYW1lcmF0ZTsKKworICAgIHBhcmFtZXRlcnMucmlkID0gZ3N0X3N0
cnVjdHVyZV9nZXRfc3RyaW5nKHJ0Y1BhcmFtZXRlcnMsICJyaWQiKTsKKworICAgIGRvdWJsZSBz
Y2FsZVJlc29sdXRpb25Eb3duQnk7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShy
dGNQYXJhbWV0ZXJzLCAic2NhbGUtcmVzb2x1dGlvbi1kb3duLWJ5IiwgJnNjYWxlUmVzb2x1dGlv
bkRvd25CeSkpCisgICAgICAgIHBhcmFtZXRlcnMuc2NhbGVSZXNvbHV0aW9uRG93bkJ5ID0gc2Nh
bGVSZXNvbHV0aW9uRG93bkJ5OworCisgICAgZG91YmxlIGJpdHJhdGVQcmlvcml0eTsKKyAgICBp
ZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHJ0Y1BhcmFtZXRlcnMsICJiaXRyYXRlLXByaW9y
aXR5IiwgJmJpdHJhdGVQcmlvcml0eSkpCisgICAgICAgIHBhcmFtZXRlcnMucHJpb3JpdHkgPSBm
cm9tV2ViUlRDQml0UmF0ZVByaW9yaXR5KGJpdHJhdGVQcmlvcml0eSk7CisKKyAgICBpbnQgbmV0
d29ya1ByaW9yaXR5OworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQocnRjUGFyYW1ldGVy
cywgIm5ldHdvcmstcHJpb3JpdHkiLCAmbmV0d29ya1ByaW9yaXR5KSkKKyAgICAgICAgcGFyYW1l
dGVycy5uZXR3b3JrUHJpb3JpdHkgPSBzdGF0aWNfY2FzdDxSVENQcmlvcml0eVR5cGU+KG5ldHdv
cmtQcmlvcml0eSk7CisKKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30KKworUlRDUnRwU2VuZFBh
cmFtZXRlcnMgdG9SVENSdHBTZW5kUGFyYW1ldGVycyhjb25zdCBHc3RTdHJ1Y3R1cmUqIHJ0Y1Bh
cmFtZXRlcnMpCit7CisgICAgaWYgKCFydGNQYXJhbWV0ZXJzKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgUlRDUnRwU2VuZFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBhdXRvKiBlbmNv
ZGluZ3MgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShydGNQYXJhbWV0ZXJzLCAiZW5jb2Rpbmdz
Iik7CisgICAgdW5zaWduZWQgc2l6ZSA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplKGVuY29kaW5n
cyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBj
b25zdCBhdXRvKiB2YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZShlbmNvZGluZ3MsIGkp
OworICAgICAgICBwYXJhbWV0ZXJzLmVuY29kaW5ncy5hcHBlbmQodG9SVENFbmNvZGluZ1BhcmFt
ZXRlcnMoR1NUX1NUUlVDVFVSRV9DQVNUKHZhbHVlKSkpOworICAgIH0KKworICAgIC8vIEZJWE1F
OiBIYW5kbGUgcnRjUGFyYW1ldGVycy5kZWdyYWRhdGlvbl9wcmVmZXJlbmNlLgorICAgIHJldHVy
biBwYXJhbWV0ZXJzOworfQorCisKK3N0YXRpYyB2b2lkIGVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0
aWFsaXplZCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0
ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9J
TklUKHdlYmtpdF93ZWJydGNfdXRpbHNfZGVidWcsICJ3ZWJraXR3ZWJydGN1dGlscyIsIDAsICJX
ZWJLaXQgV2ViUlRDIHV0aWxpdGllcyIpOworICAgIH0pOworfQorCitzdGQ6Om9wdGlvbmFsPFJU
Q0ljZUNhbmRpZGF0ZTo6RmllbGRzPiBwYXJzZUljZUNhbmRpZGF0ZVNEUChjb25zdCBTdHJpbmcm
IHNkcCkKK3sKKyAgICBlbnN1cmVEZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQoKTsKKyAgICBHU1Rf
REVCVUcoIlBhcnNpbmcgSUNFIENhbmRpZGF0ZTogJXMiLCBzZHAudXRmOCgpLmRhdGEoKSk7Cisg
ICAgaWYgKCFzZHAuc3RhcnRzV2l0aCgiY2FuZGlkYXRlOiIpKQorICAgICAgICByZXR1cm4geyB9
OworCisgICAgU3RyaW5nIGZvdW5kYXRpb247CisgICAgdW5zaWduZWQgY29tcG9uZW50SWQgPSAw
OworICAgIFN0cmluZyB0cmFuc3BvcnQ7CisgICAgdW5zaWduZWQgcHJpb3JpdHkgPSAwOworICAg
IFN0cmluZyBhZGRyZXNzOworICAgIHVpbnQzMl90IHBvcnQgPSAwOworICAgIFN0cmluZyB0eXBl
OworICAgIFN0cmluZyB0Y3B0eXBlOworICAgIFN0cmluZyByZWxhdGVkQWRkcmVzczsKKyAgICBn
dWludDE2IHJlbGF0ZWRQb3J0ID0gMDsKKyAgICBTdHJpbmcgdXNlcm5hbWVGcmFnbWVudDsKKyAg
ICBhdXRvIHRva2VucyA9IHNkcC5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnN1YnN0cmluZygx
MCkuc3BsaXQoJyAnKTsKKworICAgIGZvciAoYXV0byBpdCA9IHRva2Vucy5iZWdpbigpOyBpdCAh
PSB0b2tlbnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgYXV0byBpID0gc3RkOjpkaXN0YW5jZSh0
b2tlbnMuYmVnaW4oKSwgaXQpOworICAgICAgICBhdXRvIHRva2VuID0gKml0OworICAgICAgICBz
d2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgZm91bmRhdGlvbiA9IHRv
a2VuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlm
IChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVkPih0b2tlbikpCisgICAgICAgICAg
ICAgICAgY29tcG9uZW50SWQgPSAqdmFsdWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6Cisg
ICAgICAgICAgICB0cmFuc3BvcnQgPSB0b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICBjYXNlIDM6CisgICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlcjx1bnNp
Z25lZD4odG9rZW4pKQorICAgICAgICAgICAgICAgIHByaW9yaXR5ID0gKnZhbHVlOworICAgICAg
ICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgYWRkcmVzcyA9IHRva2VuOworICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVl
ID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVkPih0b2tlbikpCisgICAgICAgICAgICAgICAgcG9ydCA9
ICp2YWx1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoaXQg
KyAxID09IHRva2Vucy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAg
ICAgICAgICBpdCsrOworICAgICAgICAgICAgaWYgKHRva2VuID09ICJ0eXAiKQorICAgICAgICAg
ICAgICAgIHR5cGUgPSAqaXQ7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAicmFkZHIi
KQorICAgICAgICAgICAgICAgIHJlbGF0ZWRBZGRyZXNzID0gKml0OworICAgICAgICAgICAgZWxz
ZSBpZiAodG9rZW4gPT0gInJwb3J0IikKKyAgICAgICAgICAgICAgICByZWxhdGVkUG9ydCA9IHBh
cnNlSW50ZWdlcjx1bnNpZ25lZD4oKml0KS52YWx1ZV9vcigwKTsKKyAgICAgICAgICAgIGVsc2Ug
aWYgKHRva2VuID09ICJ0Y3B0eXBlIikKKyAgICAgICAgICAgICAgICB0Y3B0eXBlID0gKml0Owor
ICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gPT0gInVmcmFnIikKKyAgICAgICAgICAgICAgICB1
c2VybmFtZUZyYWdtZW50ID0gKml0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAg
ICBSVENJY2VDYW5kaWRhdGU6OkZpZWxkcyBmaWVsZHM7CisgICAgZmllbGRzLmZvdW5kYXRpb24g
PSBmb3VuZGF0aW9uOworICAgIGZpZWxkcy5jb21wb25lbnQgPSB0b1JUQ0ljZUNvbXBvbmVudChj
b21wb25lbnRJZCk7CisgICAgZmllbGRzLnByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgZmllbGRz
LnByb3RvY29sID0gdG9SVENJY2VQcm90b2NvbCh0cmFuc3BvcnQpOworICAgIGlmICghYWRkcmVz
cy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZmllbGRzLmFkZHJlc3MgPSBhZGRyZXNzOworICAgICAg
ICBmaWVsZHMucG9ydCA9IHBvcnQ7CisgICAgfQorICAgIGZpZWxkcy50eXBlID0gdG9SVENJY2VD
YW5kaWRhdGVUeXBlKHR5cGUpOworICAgIGZpZWxkcy50Y3BUeXBlID0gdG9SVENJY2VUY3BDYW5k
aWRhdGVUeXBlKHRjcHR5cGUpOworICAgIGlmICghcmVsYXRlZEFkZHJlc3MuaXNFbXB0eSgpKSB7
CisgICAgICAgIGZpZWxkcy5yZWxhdGVkQWRkcmVzcyA9IHJlbGF0ZWRBZGRyZXNzOworICAgICAg
ICBmaWVsZHMucmVsYXRlZFBvcnQgPSByZWxhdGVkUG9ydDsKKyAgICB9CisgICAgZmllbGRzLnVz
ZXJuYW1lRnJhZ21lbnQgPSB1c2VybmFtZUZyYWdtZW50OworICAgIHJldHVybiBmaWVsZHM7Cit9
CisKK3N0YXRpYyBTdHJpbmcgeDUwOVNlcmlhbGl6ZShYNTA5KiB4NTA5KQoreworICAgIEJJTyog
YmlvID0gQklPX25ldyhCSU9fc19tZW0oKSk7CisgICAgaWYgKCFiaW8pCisgICAgICAgIHJldHVy
biB7IH07CisKKyAgICBhdXRvIHNjb3BlRXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0gewor
ICAgICAgICBCSU9fZnJlZShiaW8pOworICAgIH0pOworCisgICAgaWYgKCFQRU1fd3JpdGVfYmlv
X1g1MDkoYmlvLCB4NTA5KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxjaGFy
PiBidWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eSg0MDk2KTsKKyAgICBpbnQgbGVu
Z3RoID0gQklPX3JlYWQoYmlvLCBidWZmZXIuZGF0YSgpLCA0MDk2KTsKKyAgICBpZiAoIWxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLmRhdGEo
KSwgbGVuZ3RoKTsKK30KKworc3RhdGljIFN0cmluZyBwcml2YXRlS2V5U2VyaWFsaXplKEVWUF9Q
S0VZKiBwcml2YXRlS2V5KQoreworICAgIEJJTyogYmlvID0gQklPX25ldyhCSU9fc19tZW0oKSk7
CisgICAgaWYgKCFiaW8pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHNjb3BlRXhp
dCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBCSU9fZnJlZShiaW8pOworICAg
IH0pOworCisgICAgaWYgKCFQRU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkoYmlvLCBwcml2YXRlS2V5
LCBudWxscHRyLCBudWxscHRyLCAwLCBudWxscHRyLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVDYXBh
Y2l0eSg0MDk2KTsKKyAgICBpbnQgbGVuZ3RoID0gQklPX3JlYWQoYmlvLCBidWZmZXIuZGF0YSgp
LCA0MDk2KTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJl
dHVybiBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKK30KKworc3RkOjpvcHRpb25hbDxS
ZWY8UlRDQ2VydGlmaWNhdGU+PiBnZW5lcmF0ZUNlcnRpZmljYXRlKFJlZjxTZWN1cml0eU9yaWdp
bj4mJiBvcmlnaW4sIGNvbnN0IFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJbmZv
cm1hdGlvbiYgaW5mbykKK3sKKyAgICBlbnN1cmVEZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQoKTsK
KyAgICBFVlBfUEtFWSogcHJpdmF0ZUtleSA9IEVWUF9QS0VZX25ldygpOworICAgIGlmICghcHJp
dmF0ZUtleSkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBwcml2YXRl
IGtleSIpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGF1dG8gc2NvcGVFeGl0
ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIEVWUF9QS0VZX2ZyZWUocHJpdmF0
ZUtleSk7CisgICAgfSk7CisKKyAgICBzd2l0Y2ggKGluZm8udHlwZSkgeworICAgIGNhc2UgUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uOjpUeXBlOjpFQ0RTQVAy
NTY6IHsKKyAgICAgICAgRUNfS0VZKiBlY0tleSA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShO
SURfWDlfNjJfcHJpbWUyNTZ2MSk7CisgICAgICAgIC8vIEVuc3VyZSBjdXJ2ZSBuYW1lIGlzIGlu
Y2x1ZGVkIHdoZW4gRUMga2V5IGlzIHNlcmlhbGl6ZWQuCisgICAgICAgIC8vIFdpdGhvdXQgdGhp
cyBjYWxsLCBPcGVuU1NMIHZlcnNpb25zIGJlZm9yZSAxLjEuMCB3aWxsIGNyZWF0ZQorICAgICAg
ICAvLyBjZXJ0aWZpY2F0ZXMgdGhhdCBkb24ndCB3b3JrIGZvciBUTFMuCisgICAgICAgIC8vIFRo
aXMgaXMgYSBuby1vcCBmb3IgQm9yaW5nU1NMIGFuZCBPcGVuU1NMIDEuMS4wKworICAgICAgICBF
Q19LRVlfc2V0X2FzbjFfZmxhZyhlY0tleSwgT1BFTlNTTF9FQ19OQU1FRF9DVVJWRSk7CisgICAg
ICAgIGlmICghcHJpdmF0ZUtleSB8fCAhZWNLZXkgfHwgIUVDX0tFWV9nZW5lcmF0ZV9rZXkoZWNL
ZXkpIHx8ICFFVlBfUEtFWV9hc3NpZ25fRUNfS0VZKHByaXZhdGVLZXksIGVjS2V5KSkgeworICAg
ICAgICAgICAgRUNfS0VZX2ZyZWUoZWNLZXkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAg
ICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb246OlR5cGU6OlJTQVNTQVBLQ1MxdjE1OiB7Cisg
ICAgICAgIFJTQSogcnNhID0gUlNBX25ldygpOworICAgICAgICBpZiAoIXJzYSkKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQklHTlVNKiBleHBvbmVudCA9IEJOX25ldygpOwor
ICAgICAgICBpbnQgcHVibGljRXhwb25lbnQgPSBpbmZvLnJzYVBhcmFtZXRlcnMgPyBpbmZvLnJz
YVBhcmFtZXRlcnMtPnB1YmxpY0V4cG9uZW50IDogNjU1Mzc7CisgICAgICAgIGF1dG8gbW9kdWx1
c0xlbmd0aCA9IGluZm8ucnNhUGFyYW1ldGVycyA/IGluZm8ucnNhUGFyYW1ldGVycy0+bW9kdWx1
c0xlbmd0aCA6IDIwNDg7CisgICAgICAgIGlmICghQk5fc2V0X3dvcmQoZXhwb25lbnQsIHB1Ymxp
Y0V4cG9uZW50KSB8fCAhUlNBX2dlbmVyYXRlX2tleV9leChyc2EsIG1vZHVsdXNMZW5ndGgsIGV4
cG9uZW50LCBudWxscHRyKQorICAgICAgICAgICAgfHwgIUVWUF9QS0VZX2Fzc2lnbl9SU0EocHJp
dmF0ZUtleSwgcnNhKSkgeworICAgICAgICAgICAgUlNBX2ZyZWUocnNhKTsKKyAgICAgICAgICAg
IHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgQk5fZnJlZShleHBvbmVudCk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBYNTA5KiB4NTA5ID0gWDUwOV9uZXcoKTsK
KyAgICBpZiAoIXg1MDkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBjcmVhdGUg
Y2VydGlmaWNhdGUiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvIGNl
cnRTY29wZUV4aXQgPSBXVEY6Om1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgWDUwOV9mcmVl
KHg1MDkpOworICAgIH0pOworCisgICAgWDUwOV9zZXRfdmVyc2lvbih4NTA5LCAyKTsKKworICAg
IC8vIFNldCBhIHJhbmRvbSA2NCBiaXQgaW50ZWdlciBhcyBzZXJpYWwgbnVtYmVyLgorICAgIEJJ
R05VTSogc2VyaWFsTnVtYmVyID0gQk5fbmV3KCk7CisgICAgQk5fcHNldWRvX3JhbmQoc2VyaWFs
TnVtYmVyLCA2NCwgMCwgMCk7CisgICAgQVNOMV9JTlRFR0VSKiBhc24xU2VyaWFsTnVtYmVyID0g
WDUwOV9nZXRfc2VyaWFsTnVtYmVyKHg1MDkpOworICAgIEJOX3RvX0FTTjFfSU5URUdFUihzZXJp
YWxOdW1iZXIsIGFzbjFTZXJpYWxOdW1iZXIpOworICAgIEJOX2ZyZWUoc2VyaWFsTnVtYmVyKTsK
KworICAgIC8vIFNldCBhIHJhbmRvbSA4IGJ5dGUgYmFzZTY0IHN0cmluZyBhcyBpc3N1ZXIvc3Vi
amVjdC4KKyAgICBYNTA5X05BTUUqIG5hbWUgPSBYNTA5X05BTUVfbmV3KCk7CisgICAgVmVjdG9y
PHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg4KTsK
KyAgICBXVEY6OmNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKGJ1ZmZlci5kYXRhKCksIDgp
OworICAgIGF1dG8gY29tbW9uTmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZlcik7Cisg
ICAgWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9OSUQobmFtZSwgTklEX2NvbW1vbk5hbWUsIE1CU1RS
SU5HX0FTQywgKGNvbnN0IGd1Y2hhciopY29tbW9uTmFtZS5hc2NpaSgpLmRhdGEoKSwgLTEsIC0x
LCAwKTsKKyAgICBYNTA5X3NldF9zdWJqZWN0X25hbWUoeDUwOSwgbmFtZSk7CisgICAgWDUwOV9z
ZXRfaXNzdWVyX25hbWUoeDUwOSwgbmFtZSk7CisgICAgWDUwOV9OQU1FX2ZyZWUobmFtZSk7CisK
KyAgICAvLyBGYWxsYmFjayB0byAzMCBkYXlzLCBtYXggb3V0IGF0IG9uZSB5ZWFyLgorICAgIHVp
bnQ2NF90IGV4cGlyZXMgPSBpbmZvLmV4cGlyZXMudmFsdWVfb3IoMjU5MjAwMCk7CisgICAgZXhw
aXJlcyA9IHN0ZDo6bWluPHVpbnQ2NF90PihleHBpcmVzLCAzMTUzNjAwMDAwMCk7CisgICAgWDUw
OV9nbXRpbWVfYWRqKFg1MDlfZ2V0bV9ub3RCZWZvcmUoeDUwOSksIDApOworICAgIFg1MDlfZ210
aW1lX2FkaihYNTA5X2dldG1fbm90QWZ0ZXIoeDUwOSksIGV4cGlyZXMpOworICAgIFg1MDlfc2V0
X3B1YmtleSh4NTA5LCBwcml2YXRlS2V5KTsKKworICAgIGlmICghWDUwOV9zaWduKHg1MDksIHBy
aXZhdGVLZXksIEVWUF9zaGEyNTYoKSkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0
byBzaWduIGNlcnRpZmljYXRlIik7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisgICAg
YXV0byBwZW0gPSB4NTA5U2VyaWFsaXplKHg1MDkpOworICAgIEdTVF9ERUJVRygiR2VuZXJhdGVk
IGNlcnRpZmljYXRlIFBFTTogJXMiLCBwZW0uYXNjaWkoKS5kYXRhKCkpOworICAgIGF1dG8gc2Vy
aWFsaXplZFByaXZhdGVLZXkgPSBwcml2YXRlS2V5U2VyaWFsaXplKHByaXZhdGVLZXkpOworICAg
IFZlY3RvcjxSVENDZXJ0aWZpY2F0ZTo6RHRsc0ZpbmdlcnByaW50PiBmaW5nZXJwcmludHM7Cisg
ICAgLy8gRklYTUU6IEZpbGwgZmluZ2VycHJpbnRzLgorICAgIGF1dG8gZXhwaXJhdGlvblRpbWUg
PSBXVEY6OldhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpICsgV1RGOjpTZWNvbmRz
KGV4cGlyZXMpOworICAgIHJldHVybiBSVENDZXJ0aWZpY2F0ZTo6Y3JlYXRlKFdURk1vdmUob3Jp
Z2luKSwgZXhwaXJhdGlvblRpbWUubWlsbGlzZWNvbmRzKCksIFdURk1vdmUoZmluZ2VycHJpbnRz
KSwgV1RGTW92ZShwZW0pLCBXVEZNb3ZlKHNlcmlhbGl6ZWRQcml2YXRlS2V5KSk7Cit9CisKK2Jv
b2wgc2RwTWVkaWFIYXNBdHRyaWJ1dGVLZXkoY29uc3QgR3N0U0RQTWVkaWEqIG1lZGlhLCBjb25z
dCBjaGFyKiBrZXkpCit7CisgICAgdW5zaWduZWQgbGVuID0gZ3N0X3NkcF9tZWRpYV9hdHRyaWJ1
dGVzX2xlbihtZWRpYSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7
CisgICAgICAgIGNvbnN0IGF1dG8qIGF0dHJpYnV0ZSA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJp
YnV0ZShtZWRpYSwgaSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKGF0dHJpYnV0ZS0+a2V5LCBr
ZXkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNl
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRD
VXRpbHMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lcldlYlJUQ1V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI4OGZhNGRiMDQ3YWZmOGFkYWI4ZDky
OTljNTdiOWVjYzVkYTE4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmgKQEAgLTAsMCAr
MSwyNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVk
ZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25maWd1
cmF0aW9uLmgiCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAi
UlRDQnVuZGxlUG9saWN5LmgiCisjaW5jbHVkZSAiUlRDQ2VydGlmaWNhdGUuaCIKKyNpbmNsdWRl
ICJSVENEdGxzVHJhbnNwb3J0LmgiCisjaW5jbHVkZSAiUlRDRXJyb3IuaCIKKyNpbmNsdWRlICJS
VENJY2VDb25uZWN0aW9uU3RhdGUuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRQb2xpY3ku
aCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRTdGF0ZS5oIgorI2luY2x1ZGUgIlJUQ1J0cFNl
bmRQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24uaCIK
KyNpbmNsdWRlICJSVENTZHBUeXBlLmgiCisjaW5jbHVkZSAiUlRDU2lnbmFsaW5nU3RhdGUuaCIK
KworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJydGMvd2Vi
cnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitpbmxpbmUgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gdG9SVENSdHBUcmFuc2NlaXZl
ckRpcmVjdGlvbihHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24pCit7
CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RSQU5T
Q0VJVkVSX0RJUkVDVElPTl9OT05FOgorICAgICAgICAvLyDCr1xfKOODhClfL8KvCisgICAgICAg
IHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6SW5hY3RpdmU7CisgICAgY2FzZSBH
U1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fSU5BQ1RJVkU6CisgICAgICAgIHJl
dHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6SW5hY3RpdmU7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fU0VORE9OTFk6CisgICAgICAgIHJldHVy
biBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6U2VuZG9ubHk7CisgICAgY2FzZSBHU1RfV0VC
UlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fUkVDVk9OTFk6CisgICAgICAgIHJldHVybiBS
VENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6UmVjdm9ubHk7CisgICAgY2FzZSBHU1RfV0VCUlRD
X1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fU0VORFJFQ1Y6CisgICAgICAgIHJldHVybiBSVENS
dHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6U2VuZHJlY3Y7CisgICAgfQorICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9u
OjpJbmFjdGl2ZTsKK30KKworaW5saW5lIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyRGlyZWN0aW9u
IGZyb21SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlv
biBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFJUQ1J0
cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJS
VENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9JTkFDVElWRTsKKyAgICBjYXNlIFJUQ1J0cFRy
YW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kb25seToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENf
UlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5ET05MWTsKKyAgICBjYXNlIFJUQ1J0cFRyYW5z
Y2VpdmVyRGlyZWN0aW9uOjpSZWN2b25seToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfUlRQ
X1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9SRUNWT05MWTsKKyAgICBjYXNlIFJUQ1J0cFRyYW5zY2Vp
dmVyRGlyZWN0aW9uOjpTZW5kcmVjdjoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfUlRQX1RS
QU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5EUkVDVjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElS
RUNUSU9OX05PTkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgR3N0V2ViUlRDU0RQVHlwZSB0b1Nlc3Np
b25EZXNjcmlwdGlvblR5cGUoUlRDU2RwVHlwZSBzZHBUeXBlKQoreworICAgIHN3aXRjaCAoc2Rw
VHlwZSkgeworICAgIGNhc2UgUlRDU2RwVHlwZTo6T2ZmZXI6CisgICAgICAgIHJldHVybiBHU1Rf
V0VCUlRDX1NEUF9UWVBFX09GRkVSOworICAgIGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6Cisg
ICAgICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX1BSQU5TV0VSOworICAgIGNhc2UgUlRD
U2RwVHlwZTo6QW5zd2VyOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19TRFBfVFlQRV9BTlNX
RVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpSb2xsYmFjazoKKyAgICAgICAgcmV0dXJuIEdTVF9X
RUJSVENfU0RQX1RZUEVfUk9MTEJBQ0s7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJUQ19TRFBfVFlQRV9PRkZFUjsKK30KKwor
c3RhdGljIGlubGluZSBSVENTZHBUeXBlIGZyb21TZXNzaW9uRGVzY3JpcHRpb25UeXBlKGNvbnN0
IEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgYXV0byB0
eXBlID0gZGVzY3JpcHRpb24udHlwZTsKKyAgICBpZiAodHlwZSA9PSBHU1RfV0VCUlRDX1NEUF9U
WVBFX09GRkVSKQorICAgICAgICByZXR1cm4gUlRDU2RwVHlwZTo6T2ZmZXI7CisgICAgaWYgKHR5
cGUgPT0gR1NUX1dFQlJUQ19TRFBfVFlQRV9BTlNXRVIpCisgICAgICAgIHJldHVybiBSVENTZHBU
eXBlOjpBbnN3ZXI7CisgICAgQVNTRVJUKHR5cGUgPT0gR1NUX1dFQlJUQ19TRFBfVFlQRV9QUkFO
U1dFUik7CisgICAgcmV0dXJuIFJUQ1NkcFR5cGU6OlByYW5zd2VyOworfQorCitzdGF0aWMgaW5s
aW5lIFJUQ1NpZ25hbGluZ1N0YXRlIHRvU2lnbmFsaW5nU3RhdGUoR3N0V2ViUlRDU2lnbmFsaW5n
U3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJU
Q19TSUdOQUxJTkdfU1RBVEVfU1RBQkxFOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5nU3Rh
dGU6OlN0YWJsZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NUQVRFX0hBVkVfTE9D
QUxfT0ZGRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsT2Zm
ZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX0xPQ0FMX1BSQU5T
V0VSOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5nU3RhdGU6OkhhdmVMb2NhbFByYW5zd2Vy
OworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9SRU1PVEVfT0ZGRVI6
CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90ZU9mZmVyOworICAg
IGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9SRU1PVEVfUFJBTlNXRVI6Cisg
ICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90ZVByYW5zd2VyOworICAg
IGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4g
UlRDU2lnbmFsaW5nU3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOworfQor
CitzdGF0aWMgaW5saW5lIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB0b1JUQ0ljZUNvbm5lY3Rpb25T
dGF0ZShHc3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChz
dGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ORVc6Cisg
ICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsKKyAgICBjYXNlIEdTVF9X
RUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkc6CisgICAgICAgIHJldHVybiBSVENJ
Y2VDb25uZWN0aW9uU3RhdGU6OkNoZWNraW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09O
TkVDVElPTl9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9u
U3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RB
VEVfQ09NUExFVEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDb21w
bGV0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0ZBSUxFRDoK
KyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6RmFpbGVkOworICAgIGNhc2Ug
R1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNURUQ6CisgICAgICAgIHJl
dHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkRpc2Nvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9X
RUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDSWNl
Q29ubmVjdGlvblN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7Cit9CisK
K3N0YXRpYyBpbmxpbmUgUlRDRHRsc1RyYW5zcG9ydFN0YXRlIHRvUlRDRHRsc1RyYW5zcG9ydFN0
YXRlKEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnRTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0
YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX05FVzoKKyAg
ICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6TmV3OworICAgIGNhc2UgR1NUX1dF
QlJUQ19EVExTX1RSQU5TUE9SVF9TVEFURV9DT05ORUNUSU5HOgorICAgICAgICByZXR1cm4gUlRD
RHRsc1RyYW5zcG9ydFN0YXRlOjpDb25uZWN0aW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19EVExT
X1RSQU5TUE9SVF9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJhbnNw
b3J0U3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRf
U1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpDbG9z
ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0ZBSUxFRDoKKyAg
ICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6RmFpbGVkOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNl
VHJhbnNwb3J0U3RhdGUgdG9SVENJY2VUcmFuc3BvcnRTdGF0ZShHc3RXZWJSVENJQ0VDb25uZWN0
aW9uU3RhdGUgc3RhdGUpCit7CisgICAgLy8gRklYTUU6IE5vIEdzdFdlYlJUQ0lDRVRyYW5zcG9y
dFN0YXRlID8KKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9D
T05ORUNUSU9OX1NUQVRFX05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRl
OjpOZXc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NIRUNLSU5H
OgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5nOworICAgIGNh
c2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJl
dHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJU
Q19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT01QTEVURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VU
cmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVD
VElPTl9TVEFURV9GQUlMRUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6
RmFpbGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ESVNDT05O
RUNURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RGlzY29ubmVjdGVk
OworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DTE9TRUQ6CisgICAg
ICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOworICAgIH0KKworICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0
YXRlOjpOZXc7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlR2F0aGVyaW5nU3RhdGUgdG9SVENJ
Y2VHYXRoZXJpbmdTdGF0ZShHc3RXZWJSVENJQ0VHYXRoZXJpbmdTdGF0ZSBzdGF0ZSkKK3sKKyAg
ICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RB
VEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5ldzsKKyAgICBj
YXNlIEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9HQVRIRVJJTkc6CisgICAgICAgIHJl
dHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5nOworICAgIGNhc2UgR1NUX1dFQlJU
Q19JQ0VfR0FUSEVSSU5HX1NUQVRFX0NPTVBMRVRFOgorICAgICAgICByZXR1cm4gUlRDSWNlR2F0
aGVyaW5nU3RhdGU6OkNvbXBsZXRlOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR3N0V2ViUlRDQnVuZGxlUG9saWN5IGJ1bmRs
ZVBvbGljeUZyb21Db25maWd1cmF0aW9uKGNvbnN0IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9u
JiBjb25maWd1cmF0aW9uKQoreworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbi5idW5kbGVQb2xp
Y3kpIHsKKyAgICBjYXNlIFJUQ0J1bmRsZVBvbGljeTo6QmFsYW5jZWQ6CisgICAgICAgIHJldHVy
biBHU1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfQkFMQU5DRUQ7CisgICAgY2FzZSBSVENCdW5kbGVQ
b2xpY3k6Ok1heENvbXBhdDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElD
WV9NQVhfQ09NUEFUOworICAgIGNhc2UgUlRDQnVuZGxlUG9saWN5OjpNYXhCdW5kbGU6CisgICAg
ICAgIHJldHVybiBHU1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfTUFYX0JVTkRMRTsKKyAgICB9CisK
KyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRD
X0JVTkRMRV9QT0xJQ1lfTk9ORTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENJQ0VUcmFu
c3BvcnRQb2xpY3kgaWNlVHJhbnNwb3J0UG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oY29uc3QgTWVk
aWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgc3dpdGNoIChj
b25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkgeworICAgIGNhc2UgUlRDSWNlVHJhbnNw
b3J0UG9saWN5OjpBbGw6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0lDRV9UUkFOU1BPUlRf
UE9MSUNZX0FMTDsKKyAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFBvbGljeTo6UmVsYXk6CisgICAg
ICAgIHJldHVybiBHU1RfV0VCUlRDX0lDRV9UUkFOU1BPUlRfUE9MSUNZX1JFTEFZOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9XRUJS
VENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lfQUxMOworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0
aW9uYWw8UlRDRXJyb3JEZXRhaWxUeXBlPiB0b1JUQ0Vycm9yRGV0YWlsVHlwZShHc3RXZWJSVENF
cnJvciBjb2RlKQoreworICAgIHN3aXRjaCAoY29kZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19F
UlJPUl9EQVRBX0NIQU5ORUxfRkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWls
VHlwZTo6RGF0YUNoYW5uZWxGYWlsdXJlOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9EVExT
X0ZBSUxVUkU6CisgICAgICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OkR0bHNGYWlsdXJl
OworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9GSU5HRVJQUklOVF9GQUlMVVJFOgorICAgICAg
ICByZXR1cm4gUlRDRXJyb3JEZXRhaWxUeXBlOjpGaW5nZXJwcmludEZhaWx1cmU7CisgICAgY2Fz
ZSBHU1RfV0VCUlRDX0VSUk9SX1NDVFBfRkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9y
RGV0YWlsVHlwZTo6U2N0cEZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX1NEUF9T
WU5UQVhfRVJST1I6CisgICAgICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OlNkcFN5bnRh
eEVycm9yOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9IQVJEV0FSRV9FTkNPREVSX05PVF9B
VkFJTEFCTEU6CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0VOQ09ERVJfRVJST1I6CisgICAg
ICAgIC8vIEZJWE1FCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9Owor
fQorCitSZWZQdHI8UlRDRXJyb3I+IHRvUlRDRXJyb3IoR0Vycm9yKik7CisKK0dVbmlxdWVQdHI8
R3N0U3RydWN0dXJlPiBmcm9tUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0IFJUQ1J0cEVuY29k
aW5nUGFyYW1ldGVycyYpOworUlRDUnRwU2VuZFBhcmFtZXRlcnMgdG9SVENSdHBTZW5kUGFyYW1l
dGVycyhjb25zdCBHc3RTdHJ1Y3R1cmUqKTsKKworc3RkOjpvcHRpb25hbDxSZWY8UlRDQ2VydGlm
aWNhdGU+PiBnZW5lcmF0ZUNlcnRpZmljYXRlKFJlZjxTZWN1cml0eU9yaWdpbj4mJiwgY29uc3Qg
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uJik7CisKK2Jvb2wg
c2RwTWVkaWFIYXNBdHRyaWJ1dGVLZXkoY29uc3QgR3N0U0RQTWVkaWEqLCBjb25zdCBjaGFyKiBr
ZXkpOworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQpp
bmRleCAyNDEzMDYxZDhmMzUyYzc4YTM2MzNmNzkwMTdiM2ExZTc0ODdlMGIzLi5jODVjZTZkMzdj
NGNmZTIzZWRlYjg2MmY0MWU2MTE3MmJkNmY3N2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
R1N0cmVhbWVyLmNtYWtlCkBAIC0xLDUgKzEsNiBAQAogaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFC
TEVfV0VCX0FVRElPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURFX0RJ
UkVDVE9SSUVTCisgICAgICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lciIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lciIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9tc2UiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvZW1lIgpAQCAtNyw3ICs4LDIzIEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9B
VURJTykKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAgICAg
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
LmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxz
VHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKKyAgICAgICAgTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
LmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBS
ZWNlaXZlckJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAKKyAg
ICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJh
bnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcAorICAgICAg
ICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFj
a2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
U3RhdHNDb2xsZWN0b3IuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcAorCiAgICAgICAgIE1vZHVsZXMvd2ViYXVkaW8vTWVk
aWFTdHJlYW1BdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKwogICAgICAgICBwbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtHU3RyZWFtZXIuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1lci5j
cHAKQEAgLTY0LDYgKzgxLDcgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElP
KQogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9D
YXB0dXJlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAKICAgICAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRpc3BsYXlDYXB0dXJlRGV2
aWNlTWFuYWdlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcApAQCAtNzEsNyArODks
MTMgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcAogICAg
ICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1lQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9N
b2NrUmVhbHRpbWVWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5j
cHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21p
bmdTb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVyR1N0
cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmNw
cAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcAogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNv
cmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwpAQCAtMTYxLDcgKzE4NSw3IEBAIGlmIChFTkFC
TEVfVklERU8pCiAgICAgICAgICkKICAgICBlbmRpZiAoKQogCi0gICAgaWYgKEVOQUJMRV9NRURJ
QV9TVFJFQU0gT1IgRU5BQkxFX1dFQl9SVEMpCisgICAgaWYgKFVTRV9MSUJXRUJSVEMpCiAgICAg
ICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKICAgICAg
ICAgICAgICR7R1NUUkVBTUVSX0NPREVDUEFSU0VSU19JTkNMVURFX0RJUlN9CiAgICAgICAgICkK
QEAgLTE3MCw2ICsxOTQsMjEgQEAgaWYgKEVOQUJMRV9WSURFTykKICAgICAgICAgICAgICAgICAk
e0dTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfTElCUkFSSUVTfQogICAgICAgICAgICAgKQogICAgICAg
ICBlbmRpZiAoKQorICAgIGVsc2VpZiAoVVNFX0dTVFJFQU1FUl9XRUJSVEMpCisgICAgICAgIGxp
c3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAgICAg
ICR7R1NUUkVBTUVSX1JUUF9JTkNMVURFX0RJUlN9CisgICAgICAgICAgICAke0dTVFJFQU1FUl9T
RFBfSU5DTFVERV9ESVJTfQorICAgICAgICAgICAgJHtHU1RSRUFNRVJfV0VCUlRDX0lOQ0xVREVf
RElSU30KKyAgICAgICAgKQorICAgICAgICBpZiAoTk9UIFVTRV9HU1RSRUFNRVJfRlVMTCkKKyAg
ICAgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCisgICAgICAgICAgICAgICAg
JHtHU1RSRUFNRVJfUlRQX0xJQlJBUklFU30KKyAgICAgICAgICAgICAgICAke0dTVFJFQU1FUl9T
RFBfTElCUkFSSUVTfQorICAgICAgICAgICAgICAgICR7R1NUUkVBTUVSX1dFQlJUQ19MSUJSQVJJ
RVN9CisgICAgICAgICAgICApCisgICAgICAgIGVuZGlmICgpCisKKyAgICAgICAgbGlzdChBUFBF
TkQgV2ViQ29yZV9MSUJSQVJJRVMgT3BlblNTTDo6Q3J5cHRvKQogICAgIGVuZGlmICgpCiBlbmRp
ZiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFt
ZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHAKaW5k
ZXggYjRkNWY2NzAzZTkyOWVkZjE3ZjEwOWVmNjQ4MTMwYWNlMDM4Y2FjNC4uYTFhY2U5NzYxZGEy
Y2UyYWFkNDY0MjFiOWJlNmRmOGQzYTllNTQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIuY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb1NvdXJj
ZVByb3ZpZGVyR1N0cmVhbWVyLmNwcApAQCAtMTAwLDEwICsxMDAsNTggQEAgQXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lcjo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcihNZWRpYVN0cmVh
bVRyYWNrUHJpdmEKIAogICAgIG1fYXVkaW9TaW5rQmluID0gZ3N0X3BhcnNlX2Jpbl9mcm9tX2Rl
c2NyaXB0aW9uKCJ0ZWUgbmFtZT1hdWRpb1RlZSIsIHRydWUsIG51bGxwdHIpOwogCi0gICAgZ3N0
X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIHNyYywgbV9hdWRp
b1NpbmtCaW4uZ2V0KCksIG51bGxwdHIpOwotICAgIGdzdF9lbGVtZW50X2xpbmsoc3JjLCBtX2F1
ZGlvU2lua0Jpbi5nZXQoKSk7CisgICAgYXV0byogZGVjb2RlYmluID0gbWFrZUdTdHJlYW1lckVs
ZW1lbnQoImRlY29kZWJpbjMiLCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBw
ZWQoZGVjb2RlYmluLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSygrW10oQXVkaW9Tb3VyY2VQcm92
aWRlckdTdHJlYW1lciogcHJvdmlkZXIsIEdzdFBhZCogcGFkKSB7CisgICAgICAgIGF1dG8gcGFk
Q2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX3F1ZXJ5X2NhcHMocGFkLCBudWxscHRyKSk7CisgICAg
ICAgIGJvb2wgaXNBdWRpbyA9IGRvQ2Fwc0hhdmVUeXBlKHBhZENhcHMuZ2V0KCksICJhdWRpbyIp
OworICAgICAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE4LCAwKSkKKyAgICAgICAg
ICAgIFJFTEVBU0VfQVNTRVJUKGlzQXVkaW8pOworICAgICAgICBlbHNlIGlmICghaXNBdWRpbykK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYo
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJvdmlkZXItPm1fYXVkaW9TaW5rQmluLmdldCgp
LCAic2luayIpKTsKKyAgICAgICAgZ3N0X3BhZF9saW5rKHBhZCwgc2lua1BhZC5nZXQoKSk7Cisg
ICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocHJvdmlkZXItPm1fYXVk
aW9TaW5rQmluLmdldCgpKTsKKyAgICB9KSwgdGhpcyk7CisKKyAgICBnc3RfYmluX2FkZF9tYW55
KEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgc3JjLCBkZWNvZGViaW4sIG1fYXVkaW9T
aW5rQmluLmdldCgpLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9saW5rKHNyYywgZGVjb2Rl
YmluKTsKKworICAgIGF1dG8gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVzKEdT
VF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOworICAgIEFTU0VSVChidXMpOworCisgICAg
Z3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgW10oR3N0QnVzKiwgR3N0TWVzc2Fn
ZSogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IEdzdEJ1c1N5bmNSZXBseSB7CisgICAg
ICAgIGF1dG8qIGRlY29kZWJpbiA9IEdTVF9FTEVNRU5UX0NBU1QodXNlckRhdGEpOworICAgICAg
ICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSAhPSBHU1RfTUVTU0FHRV9TVFJFQU1fQ09M
TEVDVElPTiB8fCBHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkgIT0gR1NUX09CSkVDVF9DQVNUKGRl
Y29kZWJpbikpIHsKKyAgICAgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAg
ICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAgICAgICAgfQorCisgICAgICAgIEdSZWZQ
dHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKKyAgICAgICAgZ3N0X21lc3NhZ2Vf
cGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb24obWVzc2FnZSwgJmNvbGxlY3Rpb24ub3V0UHRyKCkpOwor
ICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAgIGdzdF9tZXNzYWdlX3VucmVm
KG1lc3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAgICAgICAgfQor
CisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3NpemUo
Y29sbGVjdGlvbi5nZXQoKSk7CisgICAgICAgIEdMaXN0KiBzdHJlYW1zID0gbnVsbHB0cjsKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAgICAg
YXV0byogc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0oY29sbGVjdGlv
bi5nZXQoKSwgaSk7CisgICAgICAgICAgICBhdXRvIHN0cmVhbVR5cGUgPSBnc3Rfc3RyZWFtX2dl
dF9zdHJlYW1fdHlwZShzdHJlYW0pOworICAgICAgICAgICAgaWYgKHN0cmVhbVR5cGUgPT0gR1NU
X1NUUkVBTV9UWVBFX0FVRElPKSB7CisgICAgICAgICAgICAgICAgc3RyZWFtcyA9IGdfbGlzdF9h
cHBlbmQoc3RyZWFtcywgY29uc3RfY2FzdDxjaGFyKj4oZ3N0X3N0cmVhbV9nZXRfc3RyZWFtX2lk
KHN0cmVhbSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorICAgICAgICBpZiAoc3RyZWFtcykgeworICAgICAgICAgICAgZ3N0X2VsZW1lbnRfc2Vu
ZF9ldmVudChkZWNvZGViaW4sIGdzdF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXMoc3RyZWFtcykp
OworICAgICAgICAgICAgZ19saXN0X2ZyZWUoc3RyZWFtcyk7CisgICAgICAgIH0KIAotICAgIGNv
bm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5nZXQoKSk7CisgICAgICAg
IGdzdF9tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgICAgICByZXR1cm4gR1NUX0JVU19EUk9Q
OworICAgIH0sIGdzdF9vYmplY3RfcmVmKGRlY29kZWJpbiksIGdzdF9vYmplY3RfdW5yZWYpOwog
fQogI2VuZGlmCiAKQEAgLTEyMCwxMCArMTY4LDggQEAgQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJl
YW1lcjo6fkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIoKQogCiAgICAgc2V0Q2xpZW50KG51
bGxwdHIpOwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgaWYgKG1fcGlwZWxpbmUpIHsK
LSAgICAgICAgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdl
dCgpKTsKKyAgICBpZiAobV9waXBlbGluZSkKICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRl
KG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICB9CiAjZW5kaWYKIH0KIApA
QCAtMzQ1LDcgKzM5MSw2IEBAIHZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6aGFu
ZGxlTmV3RGVpbnRlcmxlYXZlUGFkKEdzdFBhZCogcGFkKQogCiAgICAgR1F1YXJrIHF1YXJrID0g
Z19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoInBlZXIiKTsKICAgICBnX29iamVjdF9zZXRfcWRh
dGEoR19PQkpFQ1QocGFkKSwgcXVhcmssIHNpbmtQYWQuZ2V0KCkpOwotCiAgICAgbV9kZWludGVy
bGVhdmVTb3VyY2VQYWRzKys7CiAgICAgR1F1YXJrIGNoYW5uZWxJZFF1YXJrID0gZ19xdWFya19m
cm9tX3N0YXRpY19zdHJpbmcoImNoYW5uZWwtaWQiKTsKICAgICBnX29iamVjdF9zZXRfcWRhdGEo
R19PQkpFQ1Qoc2luayksIGNoYW5uZWxJZFF1YXJrLCBHSU5UX1RPX1BPSU5URVIobV9kZWludGVy
bGVhdmVTb3VyY2VQYWRzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9h
dWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24uaAppbmRleCA2ZjI4ODcyYWZiMTE3NmU1MTNkMmJkZjU1YTYyMjFkNGY2ZmIwYWU3
Li5kZDMxM2IzMTQyNDA2Y2FmNTc5NGVhYzdjYzJhZjhkNjRlNTQ1YWEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJl
YW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKQEAgLTMyLDE5ICszMiwxNiBA
QCBjbGFzcyBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGZpbmFsOiBwdWJsaWMgQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbiB7CiBwdWJsaWM6CiAgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbihHc3RBdWRpb0luZm8mJiBpbmZvKQogICAgICAgICA6IG1faW5mbyhXVEZNb3Zl
KGluZm8pKQotICAgICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2Fw
cygmbV9pbmZvKSkpCiAgICAgewogICAgIH0KIAogICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVz
Y3JpcHRpb24oY29uc3QgR3N0QXVkaW9JbmZvJiBpbmZvKQogICAgICAgICA6IG1faW5mbyhpbmZv
KQotICAgICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcygmbV9p
bmZvKSkpCiAgICAgewogICAgIH0KIAogICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRp
b24oR3N0QXVkaW9JbmZvKiBpbmZvKQogICAgICAgICA6IG1faW5mbygqaW5mbykKLSAgICAgICAg
LCBtX2NhcHMoYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpKQogICAg
IHsKICAgICB9CiAKQEAgLTk5LDcgKzk2LDEyIEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJhdG9y
PT0oY29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIHsgcmV0dXJu
IGdzdF9hdWRpb19pbmZvX2lzX2VxdWFsKCZtX2luZm8sICZvdGhlci5tX2luZm8pOyB9CiAgICAg
Ym9vbCBvcGVyYXRvciE9KGNvbnN0IEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24mIG90
aGVyKSB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsgfQogCi0gICAgY29uc3QgR1JlZlB0
cjxHc3RDYXBzPiYgY2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwczsgfQorICAgIGNvbnN0IEdS
ZWZQdHI8R3N0Q2Fwcz4mIGNhcHMoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhcHMpCisgICAg
ICAgICAgICBtX2NhcHMgPSBhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcygmbV9pbmZv
KSk7CisgICAgICAgIHJldHVybiBtX2NhcHM7CisgICAgfQogICAgIGNvbnN0IEdzdEF1ZGlvSW5m
byYgZ2V0SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQogCiBwcml2YXRlOgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJH
U3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dSZWZQdHJHU3RyZWFtZXIuY3BwCmluZGV4IDMxMGJlYWQ3MmE0OGNiZGIzMzBiNDUzN2VlMDEw
NjJhYTdiMmQwMDguLmQxNmI3YzBiMDU5NTRhZTZmMDdlNzM5M2M2MWVkZmMxZWE1MzgzMmYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVm
UHRyR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKQEAgLTI3LDYgKzI3LDEyIEBACiAjaW5jbHVk
ZSA8Z3N0L2dsL2VnbC9nc3RlZ2xpbWFnZS5oPgogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRlIDxnc3Qvd2Vi
cnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjZW5kaWYKKwogbmFt
ZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiBhZG9wdEdS
ZWYoR3N0TWluaU9iamVjdCogcHRyKQpAQCAtNTg0LDEzICs1OTAsMTUwIEBAIEdzdEVuY29kaW5n
UHJvZmlsZSogcmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmlsZSog
cHRyKQogICAgIHJldHVybiBwdHI7CiB9CiAKLXRlbXBsYXRlIDw+Cit0ZW1wbGF0ZTw+CiB2b2lk
IGRlcmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmlsZSogcHRyKQog
ewogICAgIGlmIChwdHIpCiAgICAgICAgIGdzdF9lbmNvZGluZ19wcm9maWxlX3VucmVmKHB0cik7
CiB9CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxH
c3RXZWJSVENSVFBSZWNlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIp
Cit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KHB0ciwgR1JlZlB0
ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHJlZkdQdHI8
R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIpCit7CisgICAg
aWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAg
IHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JU
UFJlY2VpdmVyPihHc3RXZWJSVENSVFBSZWNlaXZlciogcHRyKQoreworICAgIGlmIChwdHIpCisg
ICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KKwordGVtcGxhdGUgPD4gR1JlZlB0cjxH
c3RXZWJSVENSVFBTZW5kZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sK
KyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+KHB0ciwgR1JlZlB0ckFkb3B0
KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQU2VuZGVyKiByZWZHUHRyPEdzdFdlYlJU
Q1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAg
ICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7
Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4oR3N0
V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVj
dF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5z
Y2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sKKyAgICBy
ZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4ocHRyLCBHUmVmUHRyQWRvcHQp
OworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcmVmR1B0cjxHc3RX
ZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sKKyAg
ICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisg
ICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRD
UlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBwdHIpCit7CisgICAgaWYg
KHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBH
UmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBhZG9wdEdSZWYoR3N0V2ViUlRDRGF0YUNoYW5u
ZWwqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4ocHRy
LCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEYXRhQ2hhbm5lbCog
cmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHB0cikK
K3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX29iamVjdF9yZWYoR19PQkpFQ1QocHRyKSk7CisK
KyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJS
VENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHB0cikKK3sKKyAgICBpZiAocHRy
KQorICAgICAgICBnX29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRy
PEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJSVENEVExTVHJhbnNwb3J0
KiBwdHIpCit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4ocHRy
LCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEVExTVHJhbnNwb3J0
KiByZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQq
IHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNU
KHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQ
dHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcHRyKQor
eworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KKwordGVt
cGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJS
VENJQ0VUcmFuc3BvcnQqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENJQ0VU
cmFuc3BvcnQ+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRD
SUNFVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRDSUNF
VHJhbnNwb3J0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9yZWYo
R1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZv
aWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRDSUNFVHJhbnNwb3J0
KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOwor
fQorCit0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0UHJvbWlzZT4gYWRvcHRHUmVmKEdzdFByb21pc2Uq
IHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RQcm9taXNlPihwdHIsIEdSZWZQdHJBZG9w
dCk7Cit9CisKK3RlbXBsYXRlPD4gR3N0UHJvbWlzZSogcmVmR1B0cjxHc3RQcm9taXNlPihHc3RQ
cm9taXNlKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X3Byb21pc2VfcmVmKHB0
cik7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRyPEdz
dFByb21pc2U+KEdzdFByb21pc2UqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rf
cHJvbWlzZV91bnJlZihwdHIpOworfQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRy
R1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIv
R1JlZlB0ckdTdHJlYW1lci5oCmluZGV4IDdhMGI1YTExZGRmYTgxNjcwOTY4OGU4MTM2NmRiN2I1
YjM1ZDNhNDEuLmY5ZGVhZWRmNTBmZWI5NTM4OGQyNWY3MzBkYmRjNjgyZmM0ZWFhMWQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRy
R1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dSZWZQdHJHU3RyZWFtZXIuaApAQCAtMzQsNiArMzQsMTYgQEAgdHlwZWRlZiBzdHJ1Y3Qg
X0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7CiB0eXBlZGVmIHN0cnVjdCBfR3N0RUdMSW1hZ2Ug
R3N0RUdMSW1hZ2U7CiAjZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQordHlwZWRl
ZiBzdHJ1Y3QgX0dzdFByb21pc2UgR3N0UHJvbWlzZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJS
VENEVExTVHJhbnNwb3J0IEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ7Cit0eXBlZGVmIHN0cnVjdCBf
R3N0V2ViUlRDRGF0YUNoYW5uZWwgR3N0V2ViUlRDRGF0YUNoYW5uZWw7Cit0eXBlZGVmIHN0cnVj
dCBfR3N0V2ViUlRDSUNFVHJhbnNwb3J0IEdzdFdlYlJUQ0lDRVRyYW5zcG9ydDsKK3R5cGVkZWYg
c3RydWN0IF9Hc3RXZWJSVENSVFBSZWNlaXZlciBHc3RXZWJSVENSVFBSZWNlaXZlcjsKK3R5cGVk
ZWYgc3RydWN0IF9Hc3RXZWJSVENSVFBTZW5kZXIgR3N0V2ViUlRDUlRQU2VuZGVyOwordHlwZWRl
ZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVy
OworI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0UGx1
Z2luPiBhZG9wdEdSZWYoR3N0UGx1Z2luKiBwdHIpOwpAQCAtMTUxLDYgKzE2MSwzNiBAQCB0ZW1w
bGF0ZTw+IEdSZWZQdHI8R3N0RW5jb2RpbmdQcm9maWxlPiBhZG9wdEdSZWYoR3N0RW5jb2RpbmdQ
cm9maWxlKik7CiB0ZW1wbGF0ZTw+IEdzdEVuY29kaW5nUHJvZmlsZSogcmVmR1B0cjxHc3RFbmNv
ZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmlsZSopOwogdGVtcGxhdGU8PiB2b2lkIGRlcmVm
R1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmlsZSopOwogCisjaWYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2Vp
dmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQUmVjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IEdzdFdl
YlJUQ1JUUFJlY2VpdmVyKiByZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPihHc3RXZWJSVENS
VFBSZWNlaXZlciopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQUmVj
ZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0
V2ViUlRDUlRQU2VuZGVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQU2VuZGVyKik7Cit0ZW1wbGF0
ZSA8PiBHc3RXZWJSVENSVFBTZW5kZXIqIHJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPihHc3RX
ZWJSVENSVFBTZW5kZXIqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JU
UFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0
V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciop
OwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHJlZkdQdHI8R3N0V2ViUlRD
UlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKik7Cit0ZW1wbGF0ZSA8PiB2
b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNj
ZWl2ZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4gYWRv
cHRHUmVmKEdzdFdlYlJUQ0RhdGFDaGFubmVsKik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEYXRh
Q2hhbm5lbCogcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5u
ZWwqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihH
c3RXZWJSVENEYXRhQ2hhbm5lbCopOworCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0RU
TFNUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJSVENEVExTVHJhbnNwb3J0Kik7Cit0ZW1wbGF0
ZSA8PiBHc3RXZWJSVENEVExTVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRy
PEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqKTsKKwordGVt
cGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJS
VENJQ0VUcmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCogcmVm
R1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCopOwordGVt
cGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJ
Q0VUcmFuc3BvcnQqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RQcm9taXNlPiBhZG9wdEdS
ZWYoR3N0UHJvbWlzZSopOwordGVtcGxhdGUgPD4gR3N0UHJvbWlzZSogcmVmR1B0cjxHc3RQcm9t
aXNlPihHc3RQcm9taXNlKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RQcm9taXNl
PihHc3RQcm9taXNlKik7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAppbmRleCBlMGE2Zjkw
ZDdjN2YzMzA5MjJjYjNmZGE1ZmI1YTc3OGUyNThiZjk4Li45Y2ExYzU4MmI5OWYwNGNmN2Y4ZGM2
NjQ5NGNiYjZjNzg0MTAwZWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAtMTg4
LDYgKzE4OCw5IEBAIGNvbnN0IGNoYXIqIGNhcHNNZWRpYVR5cGUoY29uc3QgR3N0Q2FwcyogY2Fw
cykKICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNhdGlv
bi94LWNlbmMiKSB8fCBnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0
aW9uL3gtY2JjcyIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiYXBwbGlj
YXRpb24veC13ZWJtLWVuYyIpKQogICAgICAgICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9nZXRfc3Ry
aW5nKHN0cnVjdHVyZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKTsKICNlbmRpZgorICAgIGlmIChn
c3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtcnRwIikpCisg
ICAgICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAibWVkaWEi
KTsKKwogICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0cnVjdHVyZSk7CiB9CiAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
VW5pcXVlUHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oCmluZGV4IGJmNzRlY2YwMmNjMjJmNjA2ZWJj
YjlmZTg1YzAzNGIyNmM0MDY0NDEuLmU1MjQ3MWNhN2VhNjJhMzE1OGM1MjMzMzYwNjM1MmVjNjMx
NTJhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaApAQCAtMzAsNiArMzAsMTIg
QEAKICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5p
cXVlUHRyLmg+CiAKKyNpZiBkZWZpbmVkKEJVSUxESU5HX1dlYkNvcmUpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQorI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93
ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNlbmRpZgorCiAj
aWYgVVNFKFdQRV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRikKICNpbmNsdWRlIDx3cGUvZXh0
ZW5zaW9ucy92aWRlby1wbGFuZS1kaXNwbGF5LWRtYWJ1Zi5oPgogI2VuZGlmCkBAIC00OSw2ICs1
NSwxMCBAQCBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RCeXRlUmVhZGVyLCBnc3RfYnl0ZV9y
ZWFkZXJfZnJlZSkKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdFZpZGVvQ29udmVydGVyLCBn
c3RfdmlkZW9fY29udmVydGVyX2ZyZWUpCiBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RBdWRp
b0NvbnZlcnRlciwgZ3N0X2F1ZGlvX2NvbnZlcnRlcl9mcmVlKQogCisjaWYgZGVmaW5lZChCVUlM
RElOR19XZWJDb3JlKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKK1dURl9ERUZJTkVfR1BUUl9E
RUxFVEVSKEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiwgZ3N0X3dlYnJ0Y19zZXNzaW9uX2Rl
c2NyaXB0aW9uX2ZyZWUpCisjZW5kaWYKKwogI2lmIFVTRShXUEVfVklERU9fUExBTkVfRElTUExB
WV9ETUFCVUYpCiBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihzdHJ1Y3Qgd3BlX3ZpZGVvX3BsYW5l
X2Rpc3BsYXlfZG1hYnVmX3NvdXJjZSwgd3BlX3ZpZGVvX3BsYW5lX2Rpc3BsYXlfZG1hYnVmX3Nv
dXJjZV9kZXN0cm95KQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKaW5kZXgg
ZWMzMmJhODVjY2Y4NDcyNTM4MzUyNjgxODU5YzQwNzdlYmQ0OTkyZC4uMTgyNjZmMTIyYzRiMTg2
NzRhMWY3OWJhYjkxZjA1NDk2N2ZjYjcwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNw
cApAQCAtMzgsNyArMzgsNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAiTWVk
aWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5oIgotI2VsaWYgRU5BQkxFKFdF
Ql9BVURJTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYgVVNF
KEdTVFJFQU1FUikKKyNlbGlmIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShNRURJQV9TVFJF
QU0pICYmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJl
YW1lci5oIgogI2Vsc2UKICNpbmNsdWRlICJXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCkBAIC0x
OTksNyArMTk5LDcgQEAgUmVmUHRyPFdlYkF1ZGlvU291cmNlUHJvdmlkZXI+IE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpjcmVhdGVBdWRpb1NvdXJjZVByb3ZpZGUKIAogI2lmIFBMQVRGT1JNKENP
Q09BKQogICAgIHJldHVybiBNZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VQcm92aWRlckNvY29h
OjpjcmVhdGUoKnRoaXMpOwotI2VsaWYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikK
KyNlbGlmIFVTRShHU1RSRUFNRVIpCiAgICAgcmV0dXJuIEF1ZGlvU291cmNlUHJvdmlkZXJHU3Ry
ZWFtZXI6OmNyZWF0ZSgqdGhpcyk7CiAjZWxzZQogICAgIHJldHVybiBudWxscHRyOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckF1ZGlvQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCmluZGV4IDI2ZWU0MjYzYjlk
Yjg3ODFkYmFlNjFlMWEzMDEyZWY3ZGM3MDk3MjUuLjM1ZTY1YzBlYjBiZDQ4MWQzZjg1YTlkZDA1
YjY2YmY5NTY5MGU3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0
dXJlci5jcHAKQEAgLTI5LDI5ICsyOSw0NiBAQAogI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlvRm9y
bWF0LmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgotCiBuYW1l
c3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoTElCV0VCUlRDKQotc3RhdGljIGNvbnN0ZXhwciBz
aXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IExpYldlYlJUQ0F1ZGlvRm9ybWF0OjpzYW1w
bGVSYXRlOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRl
ID0gTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGU7CiAjZWxzZQotc3RhdGljIGNvbnN0
ZXhwciBzaXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IDQ4MDAwOworc3RhdGljIGNvbnN0
ZXhwciBzaXplX3Qgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gNDgwMDA7CiAjZW5kaWYKIAog
R1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcihHU3RyZWFtZXJD
YXB0dXJlRGV2aWNlIGRldmljZSkKLSAgICA6IEdTdHJlYW1lckNhcHR1cmVyKGRldmljZSwgYWRv
cHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVf
SU5ULCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSkpCisgICAgOiBHU3RyZWFtZXJD
YXB0dXJlcihkZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJh
dyIsICJyYXRlIiwgR19UWVBFX0lOVCwgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRy
KSkpCiB7CiB9CiAKIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdTdHJlYW1lckF1ZGlvQ2FwdHVy
ZXIoKQotICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIsIGFkb3B0R1JlZihnc3RfY2Fw
c19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgQXVkaW9DYXB0
dXJlU2FtcGxlUmF0ZSwgbnVsbHB0cikpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpNaWNy
b3Bob25lKQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIsIGFkb3B0R1JlZihnc3Rf
Y2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgc19hdWRp
b0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6
Ok1pY3JvcGhvbmUpCiB7CiB9CiAKIEdzdEVsZW1lbnQqIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6
OmNyZWF0ZUNvbnZlcnRlcigpCiB7Ci0gICAgcmV0dXJuIG1ha2VHU3RyZWFtZXJCaW4oImF1ZGlv
Y29udmVydCAhIGF1ZGlvcmVzYW1wbGUiLCB0cnVlKTsKKyAgICBhdXRvKiBiaW4gPSBnc3RfYmlu
X25ldyhudWxscHRyKTsKKyAgICBhdXRvKiBhdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0
b3J5X21ha2UoImF1ZGlvY29udmVydCIsIG51bGxwdHIpOworICAgIGF1dG8qIGF1ZGlvcmVzYW1w
bGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvcmVzYW1wbGUiLCBudWxscHRyKTsK
KyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChiaW4pLCBhdWRpb2NvbnZlcnQsIGF1
ZGlvcmVzYW1wbGUsIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmsoYXVkaW9jb252ZXJ0
LCBhdWRpb3Jlc2FtcGxlKTsKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorICAgIGlmIChh
dXRvKiB3ZWJydGNkc3AgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgid2VicnRjZHNwIiwgbnVsbHB0
cikpIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0KHdlYnJ0Y2RzcCwgImVjaG8tY2FuY2VsIiwgZmFs
c2UsICJ2b2ljZS1kZXRlY3Rpb24iLCB0cnVlLCBudWxscHRyKTsKKyAgICAgICAgZ3N0X2Jpbl9h
ZGQoR1NUX0JJTl9DQVNUKGJpbiksIHdlYnJ0Y2RzcCk7CisgICAgICAgIGdzdF9lbGVtZW50X2xp
bmsod2VicnRjZHNwLCBhdWRpb2NvbnZlcnQpOworICAgIH0KKyNlbmRpZgorCisgICAgaWYgKGF1
dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQoR1NUX0JJTl9DQVNU
KGJpbiksIEdTVF9QQURfU1JDKSkpCisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoR1NUX0VM
RU1FTlRfQ0FTVChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgcGFkLmdldCgpKSk7Cisg
ICAgaWYgKGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQoR1NU
X0JJTl9DQVNUKGJpbiksIEdTVF9QQURfU0lOSykpKQorICAgICAgICBnc3RfZWxlbWVudF9hZGRf
cGFkKEdTVF9FTEVNRU5UX0NBU1QoYmluKSwgZ3N0X2dob3N0X3BhZF9uZXcoInNpbmsiLCBwYWQu
Z2V0KCkpKTsKKworICAgIHJldHVybiBiaW47CiB9CiAKIGJvb2wgR1N0cmVhbWVyQXVkaW9DYXB0
dXJlcjo6c2V0U2FtcGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQ2FwdHVyZXIuY3BwCmluZGV4IGM5ZTBkNWViNjBlMmJjMzhlZjNhOWE1ZDUzMmM0Mzg4MDEw
OTZmNGUuLjE5NjE2NjcxOGQ4MjU2ZjM0MDJlOWJlMmY2MTE4NDE0MjRkYWExY2QgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJDYXB0dXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIEdzdEVs
ZW1lbnQqIEdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UoKQogICAgICAgICBtX3NyYyA9
IG1ha2VFbGVtZW50KG1fc291cmNlRmFjdG9yeSk7CiAgICAgICAgIEFTU0VSVChtX3NyYyk7CiAg
ICAgICAgIGlmIChHU1RfSVNfQVBQX1NSQyhtX3NyYy5nZXQoKSkpCi0gICAgICAgICAgICBnX29i
amVjdF9zZXQobV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9GT1JN
QVRfVElNRSwgbnVsbHB0cik7CisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9zcmMuZ2V0KCks
ICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgImRvLXRpbWVzdGFt
cCIsIHRydWUsIG51bGxwdHIpOwogCiAgICAgICAgIGF1dG8gc3JjUGFkID0gYWRvcHRHUmVmKGdz
dF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fc3JjLmdldCgpLCAic3JjIikpOwogICAgICAgICBp
ZiAobV9kZXZpY2VUeXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNhbWVyYSkgewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZmExZGU1MmJkNTgxOTRjNzM3NmE2YTFhNGYzZmZlNGRlZGMxYTcyYQotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoKKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQg
YW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3
YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3Ig
KGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAg
YnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFu
dHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBV
UlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZv
ciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGgg
dGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91
bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBN
QSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVh
bWVyRFRNRlNlbmRlckJhY2tlbmQ6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCitHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6fkdT
dHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQor
Citib29sIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpjYW5JbnNlcnREVE1GKCkKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHU3RyZWFt
ZXJEVE1GU2VuZGVyQmFja2VuZDo6cGxheVRvbmUoY29uc3QgU3RyaW5nJiwgc2l6ZV90LCBzaXpl
X3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEdTdHJlYW1lckRUTUZT
ZW5kZXJCYWNrZW5kOjp0b25lcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4geyB9OworfQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmR1
cmF0aW9uKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOwor
fQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmludGVyVG9uZUdhcCgpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBH
U3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6b25Ub25lUGxheWVkKEZ1bmN0aW9uPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYgb25Ub25lUGxheWVkKQoreworICAgIG1fb25Ub25lUGxheWVkID0gV1RG
TW92ZShvblRvbmVQbGF5ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
RFRNRlNlbmRlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1Nzk3
MDUwY2VjOWI0YjBhYTZkOWVmZTk4MDhhZTVjOTA4OGZiMzMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRN
RlNlbmRlckJhY2tlbmQuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJUQ0RUTUZTZW5kZXJCYWNrZW5kLmgiCisjaW5j
bHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2UgZWFn
ZXIgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBzaW5jZSB3ZSBjYWxsIG1h
a2VXZWFrUHRyKCkgZnJvbSBhbm90aGVyIHRocmVhZC4KK2NsYXNzIEdTdHJlYW1lckRUTUZTZW5k
ZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0RUTUZTZW5kZXJCYWNrZW5kLCBwdWJsaWMgQ2Fu
TWFrZVdlYWtQdHI8R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQsIFdlYWtQdHJGYWN0b3J5SW5p
dGlhbGl6YXRpb246OkVhZ2VyPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJs
aWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKTsKKyAgICB+R1N0
cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENEVE1GU2Vu
ZGVyQmFja2VuZAorICAgIGJvb2wgY2FuSW5zZXJ0RFRNRigpIGZpbmFsOworICAgIHZvaWQgcGxh
eVRvbmUoY29uc3QgU3RyaW5nJiB0b25lLCBzaXplX3QgZHVyYXRpb24sIHNpemVfdCBpbnRlclRv
bmVHYXApIGZpbmFsOworICAgIHZvaWQgb25Ub25lUGxheWVkKEZ1bmN0aW9uPHZvaWQoY29uc3Qg
U3RyaW5nJik+JiYpIGZpbmFsOworICAgIFN0cmluZyB0b25lcygpIGNvbnN0IGZpbmFsOworICAg
IHNpemVfdCBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHNpemVfdCBpbnRlclRvbmVHYXAo
KSBjb25zdCBmaW5hbDsKKworICAgIEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1fb25U
b25lUGxheWVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5B
QkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3Ry
ZWFtU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKaW5kZXggNGE4N2QyYTgyMzBhZTFh
MWQ0MWNkYzA2YTE4NjQ1ZTE1Y2I3NjdjMS4uOTVlN2MwZDRkNWY0NjU0ZDc0MmNjZmQ1NGM0N2E2
NjM1MDJkMzJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJl
YW1Tb3VyY2UuY3BwCkBAIC0zNCwxNyArMzQsMjMgQEAKICNpbmNsdWRlICJWaWRlb0ZyYW1lTWV0
YWRhdGFHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU3RyZWFt
LmgiCiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJSZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBz
cmMuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaD4KICNpbmNsdWRlIDx3
dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CiAKIHVzaW5nIG5hbWVz
cGFjZSBXZWJDb3JlOwogCiBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdmlkZW9TcmNUZW1w
bGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJ2aWRlb19zcmMldSIsIEdTVF9QQURfU1JD
LCBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gtcmF3O3Zp
ZGVvL3gtaDI2NDt2aWRlby94LXZwOCIpKTsKKyAgICBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gt
cmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwODt2aWRlby94LXZwOTthcHBsaWNhdGlvbi94LXJ0
cCwgbWVkaWE9KHN0cmluZyl2aWRlbyIpKTsKIAogc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBsYXRl
IGF1ZGlvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgiYXVkaW9fc3JjJXUi
LCBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBTKCJh
dWRpby94LXJhdyhBTlkpOyIpKTsKKyAgICBHU1RfU1RBVElDX0NBUFMoImF1ZGlvL3gtcmF3KEFO
WSk7YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8iKSk7CiAKIEdTVF9ERUJV
R19DQVRFR09SWV9TVEFUSUMod2Via2l0TWVkaWFTdHJlYW1TcmNEZWJ1Zyk7CiAjZGVmaW5lIEdT
VF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnCkBAIC0yMzYsNyArMjQyLDcg
QEAgcHVibGljOgogCiAgICAgICAgIGlmIChkcm9wKSB7CiAgICAgICAgICAgICBtX25lZWRzRGlz
Y29udCA9IHRydWU7Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QobV9zcmMuZ2V0KCksICIl
cyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4gbm90IHB1c2hpbmciLCBtX3RyYWNrLmhhc1ZpZGVvKCkg
PyAiVmlkZW8iIDogIkF1ZGlvIik7CisgICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKG1fc3Jj
LmdldCgpLCAiJXMgcXVldWUgZnVsbCBhbHJlYWR5Li4uIG5vdCBwdXNoaW5nIiwgbV90cmFjay5o
YXNWaWRlbygpID8gIlZpZGVvIiA6ICJBdWRpbyIpOwogICAgICAgICAgICAgcmV0dXJuOwogICAg
ICAgICB9CiAKQEAgLTY4OCw2ICs2OTQsNyBAQCB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRk
VHJhY2soV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcgogICAg
IGNvbnN0IGNoYXIqIHNvdXJjZVR5cGU7CiAgICAgdW5zaWduZWQgY291bnRlcjsKICAgICBHc3RT
dGF0aWNQYWRUZW1wbGF0ZSogcGFkVGVtcGxhdGU7CisKICAgICBpZiAodHJhY2stPmhhc0F1ZGlv
KCkpIHsKICAgICAgICAgcGFkVGVtcGxhdGUgPSAmYXVkaW9TcmNUZW1wbGF0ZTsKICAgICAgICAg
c291cmNlVHlwZSA9ICJhdWRpbyI7CkBAIC02OTksOSArNzA2LDE5IEBAIHZvaWQgd2Via2l0TWVk
aWFTdHJlYW1TcmNBZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJl
YW1UcmFja1ByCiAgICAgICAgIGNvdW50ZXIgPSBzZWxmLT5wcml2LT52aWRlb1BhZENvdW50ZXIu
ZXhjaGFuZ2VBZGQoMSk7CiAgICAgfQogCi0gICAgYXV0byBwYWROYW1lID0gbWFrZVN0cmluZyhz
b3VyY2VUeXBlLCAiX3NyYyIsIGNvdW50ZXIpOworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
ICAgIGlmICh0cmFjay0+c291cmNlKCkuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpIHsKKyAgICAg
ICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
R1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgpKTsKKyAgICAgICAgc291cmNlLnJlZ2lzdGVyQ2xp
ZW50KCk7CisgICAgfSBlbHNlIGlmICh0cmFjay0+c291cmNlKCkuaXNJbmNvbWluZ1ZpZGVvU291
cmNlKCkpIHsKKyAgICAgICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgpKTsKKyAgICAgICAgc291
cmNlLnJlZ2lzdGVyQ2xpZW50KCk7CisgICAgfQorI2VuZGlmCisKICAgICBHU1RfREVCVUdfT0JK
RUNUKHNlbGYsICJTZXR1cCAlcyBzb3VyY2UgZm9yIHRyYWNrICVzLCBvbmx5IHRyYWNrOiAlcyIs
IHNvdXJjZVR5cGUsIHRyYWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCksIGJvb2xGb3JQcmludGluZyhv
bmx5VHJhY2spKTsKIAorICAgIGF1dG8gcGFkTmFtZSA9IG1ha2VTdHJpbmcoc291cmNlVHlwZSwg
Il9zcmMiLCBjb3VudGVyKTsKICAgICBhdXRvIHNvdXJjZSA9IG1ha2VVbmlxdWU8SW50ZXJuYWxT
b3VyY2U+KEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksICp0cmFjaywgcGFkTmFtZSk7CiAgICAgYXV0
byogZWxlbWVudCA9IHNvdXJjZS0+Z2V0KCk7CiAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNU
KHNlbGYpLCBlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rl
ci5jcHAKaW5kZXggZmFjNDcwNWZiOGE3Y2YyZGMyM2VhNTExYjE1ZmNmNDg1NTJjZjMzYS4uYTc2
ZWYxZWZmZDE2ZmEyNmI2ZGUzNTc0ZjQ2NGY1ZDIzM2M5NWVmZSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5j
b2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKQEAgLTI5Nyw5ICsyOTcsMTEgQEAgc3RhdGlj
IHZvaWQgd2Via2l0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2NsYXNzX2luaXQoV2ViS2l0V2VicnRj
VmlkZW9FbmNvZGVyQ2xhc3MKICAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZWxmLT5wcml2LT5w
YXJzZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRyKTsKICAgICAgICAgfSwg
InRhcmdldC1iaXRyYXRlIiwgc2V0Qml0cmF0ZUJpdFBlclNlYywgImludGVydmFsLWludHJhZnJh
bWVzIik7CiAgICAgRW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihYMjY0LCAieDI2NGVuYyIsICJo
MjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKLSAgICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1l
bnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVhbSxwcm9maWxlPWJhc2VsaW5lIiwKKyAgICAg
ICAgInZpZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVhbSxw
cm9maWxlPWNvbnN0cmFpbmVkLWJhc2VsaW5lIiwKICAgICAgICAgW10oV2ViS2l0V2VicnRjVmlk
ZW9FbmNvZGVyKiBzZWxmKSB7CiAgICAgICAgICAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhH
X09CSkVDVChzZWxmLT5wcml2LT5lbmNvZGVyLmdldCgpKSwgInR1bmUiLCAiemVyb2xhdGVuY3ki
KTsKKyAgICAgICAgICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdfT0JKRUNUKHNlbGYtPnBy
aXYtPmVuY29kZXIuZ2V0KCkpLCAic3BlZWQtcHJlc2V0IiwgInVsdHJhZmFzdCIpOworICAgICAg
ICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAi
a2V5LWludC1tYXgiLCAxNSwgTlVMTCk7CiAgICAgICAgICAgICBnX29iamVjdF9zZXQoc2VsZi0+
cHJpdi0+cGFyc2VyLmdldCgpLCAiY29uZmlnLWludGVydmFsIiwgMSwgbnVsbHB0cik7CiAgICAg
ICAgIH0sICJiaXRyYXRlIiwgc2V0Qml0cmF0ZUtiaXRQZXJTZWMsICJrZXktaW50LW1heCIpOwog
ICAgIEVuY29kZXJzOjpyZWdpc3RlckVuY29kZXIoT3BlbkgyNjQsICJvcGVuaDI2NGVuYyIsICJo
MjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NTZmNTVhMmQ1ZmEzYjA1NzhmNTQxODAyNmZmOTg1OThiZWRiYTU2MwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9EYXRhLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkKKyAgICA6IFJl
YWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8sIFdURk1v
dmUoYXVkaW9UcmFja0lkKSkKKyAgICAsIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIo
KQoreworICAgIHN0YXJ0KCk7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcjo6flJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcigpCit7CisgICAgc3Rv
cCgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c3Rh
cnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBvcGVuVmFsdmUoKTsKK30KKwordm9pZCBSZWFsdGlt
ZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sKKyAg
ICBjbG9zZVZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmlsaXRp
ZXMmIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVzKCkK
K3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlDYXBh
YmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBSZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKCkKK3sKKyAgICByZXR1
cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJiBnc3RTYW1w
bGUpCit7CisgICAgYXV0byogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKGdzdFNhbXBs
ZS5nZXQoKSk7CisgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBkZXNjcmlwdGlv
bjsKKyAgICBHU3RyZWFtZXJBdWRpb0RhdGEgZnJhbWVzKFdURk1vdmUoZ3N0U2FtcGxlKSwgZGVz
Y3JpcHRpb24uZ2V0SW5mbygpKTsKKworICAgIGF1ZGlvU2FtcGxlc0F2YWlsYWJsZShNZWRpYVRp
bWUoR1NUX1RJTUVfQVNfVVNFQ09ORFMoR1NUX0JVRkZFUl9QVFMoYnVmZmVyKSksIEdfVVNFQ19Q
RVJfU0VDKSwgZnJhbWVzLCBkZXNjcmlwdGlvbiwgMCk7Cit9CisKK30KKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NjhkYjUzYmNm
OWMxNmQzMDFiODE3MmU2OGIxOTE4OTA3ZmRhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1
ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyIDogcHVibGljIFJlYWx0aW1lTWVk
aWFTb3VyY2UsIHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1Ymxp
YzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4g
Y3JlYXRlKFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZShhdWRpb1RyYWNrSWQpKSk7
IH0KKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
cihTdHJpbmcmJik7CisgICAgflJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcigp
OworCitwcml2YXRlOgorICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2UgQVBJCisgICAgdm9pZCBz
dGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRhKCkg
ZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJp
bGl0aWVzKCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBz
ZXR0aW5ncygpIGZpbmFsOworICAgIGJvb2wgaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdT
dHJlYW1lciBBUEkKKyAgICB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYm
KSBmaW5hbDsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRTZXR0
aW5nczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RS
QUlUU19CRUdJTihXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIp
CisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3Vy
Y2UmIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmlzSW5jb21pbmdBdWRpb1NvdXJjZSgpOyB9CitT
UEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNl
R1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NGIxNjU0MmI3NzUxMDJkMjZmMTVkMjBlNmZlZjVl
MzNjOWVkZDcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwCkBA
IC0wLDAgKzEsOTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0
aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIk1lZGlhU2FtcGxlR1N0
cmVhbWVyLmgiCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisjaW5jbHVkZSA8d3Rm
L3RleHQvV1RGU3RyaW5nLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dl
YnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2Vi
cnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVJbmNv
bWluZ1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcigpCit7
CisgICAgbV9iaW4gPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBtX3ZhbHZlID0gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAgIG1fdGVlID0gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCJ0ZWUiLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9zZXQobV90
ZWUuZ2V0KCksICJhbGxvdy1ub3QtbGlua2VkIiwgdHJ1ZSwgbnVsbHB0cik7CisKKyAgICBhdXRv
KiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxscHRyKTsKKyAg
ICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fdmFsdmUuZ2V0
KCksIHF1ZXVlLCBtX3RlZS5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBnc3RfZWxlbWVudF9saW5r
X21hbnkobV92YWx2ZS5nZXQoKSwgcXVldWUsIG1fdGVlLmdldCgpLCBudWxscHRyKTsKKyAgICBn
c3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fdmFsdmUuZ2V0KCkpOworICAgIGdz
dF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUpOworICAgIGdzdF9lbGVtZW50
X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV90ZWUuZ2V0KCkpOworCisgICAgYXV0byBzaW5rUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fdmFsdmUuZ2V0KCksICJz
aW5rIikpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4uZ2V0KCksIGdzdF9naG9zdF9w
YWRfbmV3KCJzaW5rIiwgc2lua1BhZC5nZXQoKSkpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21p
bmdTb3VyY2VHU3RyZWFtZXI6OmNsb3NlVmFsdmUoKSBjb25zdAoreworICAgIGlmIChtX3ZhbHZl
KQorICAgICAgICBnX29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3AiLCB0cnVlLCBudWxs
cHRyKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpvcGVuVmFs
dmUoKSBjb25zdAoreworICAgIGlmIChtX3ZhbHZlKQorICAgICAgICBnX29iamVjdF9zZXQobV92
YWx2ZS5nZXQoKSwgImRyb3AiLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVnaXN0ZXJDbGllbnQoKQoreworICAgIEdTVF9ERUJV
RygiUmVnaXN0ZXJpbmcgbmV3IGNsaWVudCIpOworICAgIGF1dG8qIHF1ZXVlID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIGF1dG8qIHNpbmsgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsiLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9z
ZXQoc2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAiZW1pdC1zaWduYWxzIiwgVFJV
RSwgIm1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2Fw
cGVkKHNpbmssICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSygrW10oUmVhbHRpbWVJbmNvbWluZ1Nv
dXJjZUdTdHJlYW1lciogc2VsZiwgR3N0RWxlbWVudCogc2luaykgLT4gR3N0Rmxvd1JldHVybiB7
CisgICAgICAgIGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3NhbXBs
ZShHU1RfQVBQX1NJTksoc2luaykpKTsKKyAgICAgICAgc2VsZi0+ZGlzcGF0Y2hTYW1wbGUoV1RG
TW92ZShzYW1wbGUpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0pLCB0aGlz
KTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChzaW5rLCAibmV3LXByZXJvbGwiLCBH
X0NBTExCQUNLKCtbXShSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKiBzZWxmLCBHc3RF
bGVtZW50KiBzaW5rKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAgICAgYXV0byBzYW1wbGUgPSBh
ZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1RfQVBQX1NJTksoc2luaykpKTsK
KyAgICAgICAgc2VsZi0+ZGlzcGF0Y2hTYW1wbGUoV1RGTW92ZShzYW1wbGUpKTsKKyAgICAgICAg
cmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0pLCB0aGlzKTsKKworICAgIGdzdF9iaW5fYWRkX21h
bnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgcXVldWUsIHNpbmssIG51bGxwdHIpOworICAg
IGdzdF9lbGVtZW50X2xpbmtfbWFueShtX3RlZS5nZXQoKSwgcXVldWUsIHNpbmssIG51bGxwdHIp
OworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUpOworICAgIGdz
dF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc2luayk7CisKKyAgICBhdXRvIGRvdEZp
bGVOYW1lID0gbWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUobV9iaW4uZ2V0KCkpLCAiLmluY29t
aW5nIik7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU5fQ0FT
VChtX2Jpbi5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUudXRm
OCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUlu
Y29taW5nU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQ2NGM0OTcwY2NiOGQxMWI3OWE1
YzIwZDdmMTM1MmU2ZjRhZmJiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVh
bWVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJ
Z2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGlt
ZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBHc3RFbGVtZW50KiBiaW4o
KSB7IHJldHVybiBtX2Jpbi5nZXQoKTsgfQorICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoKTsKKwor
cHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIoKTsKKworICAg
IHZvaWQgY2xvc2VWYWx2ZSgpIGNvbnN0OworICAgIHZvaWQgb3BlblZhbHZlKCkgY29uc3Q7CisK
KyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmFsdmU7CisKK3ByaXZhdGU6CisgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmKSB7IH0KKworICAgIEdS
ZWZQdHI8R3N0RWxlbWVudD4gbV9iaW47CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3RlZTsK
K307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWlu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDY4ZWU1YjkxMjZiZTZlN2U4
MDJmYjJiZDFjNmE4OTVjNGQ1MzdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorCisj
aW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJWaWRlb0ZyYW1lTWV0
YWRhdGFHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvcnRwL3J0cC5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmIHZpZGVvVHJhY2tJZCkKKyAg
ICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8s
IFdURk1vdmUodmlkZW9UcmFja0lkKSkKKyAgICAsIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXIoKQoreworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50cyBj
b25zdHJhaW50czsKKyAgICBjb25zdHJhaW50cy5zZXRTdXBwb3J0c1dpZHRoKHRydWUpOworICAg
IGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0KHRydWUpOworICAgIG1fY3VycmVudFNldHRp
bmdzID0gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHsgfTsKKyAgICBtX2N1cnJlbnRTZXR0
aW5ncy0+c2V0U3VwcG9ydGVkQ29uc3RyYWludHMoV1RGTW92ZShjb25zdHJhaW50cykpOworCisg
ICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1f
dmFsdmUuZ2V0KCksICJzaW5rIikpOworICAgIGdzdF9wYWRfYWRkX3Byb2JlKHNpbmtQYWQuZ2V0
KCksIHN0YXRpY19jYXN0PEdzdFBhZFByb2JlVHlwZT4oR1NUX1BBRF9QUk9CRV9UWVBFX0JVRkZF
UiksIFtdKEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5mbywgZ3BvaW50ZXIpIC0+IEdzdFBh
ZFByb2JlUmV0dXJuIHsKKyAgICAgICAgYXV0byB2aWRlb1NhbXBsZU1ldGFkYXRhID0gc3RkOjpt
YWtlX29wdGlvbmFsPFZpZGVvU2FtcGxlTWV0YWRhdGE+KHsgfSk7CisgICAgICAgIHZpZGVvU2Ft
cGxlTWV0YWRhdGEtPnJlY2VpdmVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCkuc2Vjb25kc1Np
bmNlRXBvY2goKTsKKworICAgICAgICBhdXRvKiBidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1QoR1NU
X1BBRF9QUk9CRV9JTkZPX0RBVEEoaW5mbykpOworICAgICAgICBHc3RSVFBCdWZmZXIgcnRwQnVm
ZmVyIEdTVF9SVFBfQlVGRkVSX0lOSVQ7CisgICAgICAgIGlmIChnc3RfcnRwX2J1ZmZlcl9tYXAo
YnVmZmVyLCBHU1RfTUFQX1JFQUQsICZydHBCdWZmZXIpKSB7CisgICAgICAgICAgICB2aWRlb1Nh
bXBsZU1ldGFkYXRhLT5ydHBUaW1lc3RhbXAgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfdGltZXN0YW1w
KCZydHBCdWZmZXIpOworICAgICAgICAgICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAoJnJ0cEJ1ZmZl
cik7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyID0gd2Via2l0R3N0QnVmZmVyU2V0VmlkZW9T
YW1wbGVNZXRhZGF0YShidWZmZXIsIFdURk1vdmUodmlkZW9TYW1wbGVNZXRhZGF0YSkpOworICAg
ICAgICBHU1RfUEFEX1BST0JFX0lORk9fREFUQShpbmZvKSA9IGJ1ZmZlcjsKKyAgICAgICAgcmV0
dXJuIEdTVF9QQURfUFJPQkVfT0s7CisgICAgfSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAgICBz
dGFydCgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6
c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBvcGVuVmFsdmUoKTsKK30KKwordm9pZCBSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sK
KyAgICBjbG9zZVZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmls
aXRpZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVz
KCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlD
YXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKCkKK3sKKyAgICBp
ZiAobV9jdXJyZW50U2V0dGluZ3MpCisgICAgICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5ncy52
YWx1ZSgpOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRzIGNv
bnN0cmFpbnRzOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzV2lkdGgodHJ1ZSk7CisgICAg
Y29uc3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7CisKKyAgICBSZWFsdGltZU1lZGlh
U291cmNlU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgYXV0byYgc2l6ZSA9IHRoaXMtPnNpemUoKTsK
KyAgICBzZXR0aW5ncy5zZXRXaWR0aChzaXplLndpZHRoKCkpOworICAgIHNldHRpbmdzLnNldEhl
aWdodChzaXplLmhlaWdodCgpKTsKKyAgICBzZXR0aW5ncy5zZXRTdXBwb3J0ZWRDb25zdHJhaW50
cyhjb25zdHJhaW50cyk7CisKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IFdURk1vdmUoc2V0dGlu
Z3MpOworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5ncy52YWx1ZSgpOworfQorCit2b2lkIFJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3NEaWRDaGFuZ2UoT3B0
aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gc2V0dGluZ3MpCit7Cisg
ICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
OjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWlnaHQg
fSkpCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0gc3RkOjpudWxsb3B0OworfQorCit2b2lk
IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUoR1Jl
ZlB0cjxHc3RTYW1wbGU+JiYgZ3N0U2FtcGxlKQoreworICAgIHZpZGVvU2FtcGxlQXZhaWxhYmxl
KE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVXcmFwcGVkU2FtcGxlKGdzdFNhbXBsZSksIHsg
fSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5YmMzMDA2OWNkMzMyMDkyMzE4
YmJmNzc4YWI5M2Q5MTg0ODMxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
R1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1
ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGlt
ZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3VyY2Us
IHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBz
dGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4gY3JlYXRlKFN0
cmluZyYmIHZpZGVvVHJhY2tJZCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZSh2aWRlb1RyYWNrSWQpKSk7IH0KKyAgICB+
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKCkgPSBkZWZhdWx0OworCitwcm90
ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFN0cmluZyYm
KTsKKworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAgIHZvaWQg
c3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0YSgp
ICBmaW5hbDsKKyAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBmaW5hbDsKKyAgICBjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgZmluYWw7CisgICAgYm9vbCBpc0lu
Y29taW5nVmlkZW9Tb3VyY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAv
LyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIEFQSQorICAgIHZvaWQgZGlzcGF0Y2hT
YW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYpIGZpbmFsOworCisgICAgc3RkOjpvcHRpb25hbDxS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdzOworfTsKKworfSAv
LyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdlYkNv
cmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcikKKyAgICBzdGF0aWMgYm9v
bCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZSYgc291cmNlKSB7IHJl
dHVybiBzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCk7IH0KK1NQRUNJQUxJWkVfVFlQRV9U
UkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
T3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVh
bWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi4xYTc0YjI1ZDRlZmQ1OGNmNzViNzNjZmQ2MmIwNzU3NDJmNTI4
OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAg
LTAsMCArMSwxMTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXIuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVy
QXVkaW9DYXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2Vy
Q29udmVyc2lvbi5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNf
ZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19l
bmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0Z29pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVy
KFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBzb3VyY2UpCisgICAgOiBSZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIFZlY3RvcjxzdGQ6OnBhaXI8Y29u
c3QgY2hhciosIGludD4+IGVuY29kaW5nczsKKyAgICBlbmNvZGluZ3MucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSg0KTsKKyAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBwZW5kKHsgIk9QVVMiLCA0ODAw
MCB9KTsKKyAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBwZW5kKHsgIkc3MjIiLCA4MDAwIH0pOwor
ICAgIGVuY29kaW5ncy51bmNoZWNrZWRBcHBlbmQoeyAiUENNQSIsIDgwMDAgfSk7CisgICAgZW5j
b2RpbmdzLnVuY2hlY2tlZEFwcGVuZCh7ICJQQ01VIiwgODAwMCB9KTsKKyAgICBtX2FsbG93ZWRD
YXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICBmb3IgKGF1dG8mIFtl
bmNvZGluZ05hbWUsIGNsb2NrUmF0ZV0gOiBlbmNvZGluZ3MpCisgICAgICAgIGdzdF9jYXBzX2Fw
cGVuZF9zdHJ1Y3R1cmUobV9hbGxvd2VkQ2Fwcy5nZXQoKSwgZ3N0X3N0cnVjdHVyZV9uZXcoImFw
cGxpY2F0aW9uL3gtcnRwIiwgIm1lZGlhIiwgR19UWVBFX1NUUklORywgImF1ZGlvIiwgImVuY29k
aW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBlbmNvZGluZ05hbWUsICJjbG9jay1yYXRlIiwgR19U
WVBFX0lOVCwgY2xvY2tSYXRlLCBudWxscHRyKSk7CisKKyAgICBtX2F1ZGlvY29udmVydCA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgbnVsbHB0cik7CisgICAgbV9h
dWRpb3Jlc2FtcGxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb3Jlc2FtcGxlIiwg
bnVsbHB0cik7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkp
LCBtX2F1ZGlvY29udmVydC5nZXQoKSwgbV9hdWRpb3Jlc2FtcGxlLmdldCgpLCBudWxscHRyKTsK
KyAgICBzZXRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKK30KKworYm9vbCBSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0
Q2Fwcz4mIGNhcHMpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX2Jpbi5nZXQoKSwgIk91dGdv
aW5nIGF1ZGlvIHNvdXJjZSBwYXlsb2FkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdl
dCgpKTsKKyAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNhcHMu
Z2V0KCksIDApOworICAgIGlmIChjb25zdCBjaGFyKiBlbmNvZGluZ05hbWUgPSBnc3Rfc3RydWN0
dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiZW5jb2RpbmctbmFtZSIpKSB7CisgICAgICAgIGlm
IChlcXVhbChlbmNvZGluZ05hbWUsICJPUFVTIikpIHsKKyAgICAgICAgICAgIG1fZW5jb2RlciA9
IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJvcHVzZW5jIiwgbnVsbHB0cik7CisgICAgICAgICAgICBt
X3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJydHBvcHVzcGF5IiwgbnVsbHB0cik7
CisgICAgICAgICAgICBpZiAoIW1fZW5jb2RlciB8fCAhbV9wYXlsb2FkZXIpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAvLyBGSVhNRTogRW5hYmxlIGR0eCB0
b28/CisgICAgICAgICAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVChtX2VuY29k
ZXIuZ2V0KCkpLCAiYXVkaW8tdHlwZSIsICJ2b2ljZSIpOworCisgICAgICAgICAgICBpZiAoY29u
c3QgY2hhciogdXNlSW5iYW5kRmVjID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVy
ZSwgInVzZWluYmFuZGZlYyIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAodXNlSW5i
YW5kRmVjLCAiMSIpKQorICAgICAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV9lbmNvZGVy
LmdldCgpLCAiaW5iYW5kLWZlYyIsIHRydWUsIG51bGxwdHIpOworICAgICAgICAgICAgfQorICAg
ICAgICB9IGVsc2UgaWYgKGVxdWFsKGVuY29kaW5nTmFtZSwgIkc3MjIiKSkgeworICAgICAgICAg
ICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwZzcyMnBheSIsIG51bGxw
dHIpOworICAgICAgICAgICAgaWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiUENNQSIp
IHx8IGVxdWFsKGVuY29kaW5nTmFtZSwgIlBDTVUiKSkgeworICAgICAgICAgICAgYXV0byBwYXls
b2FkZXJOYW1lID0gbWFrZVN0cmluZygicnRwIiwgZW5jb2RpbmdOYW1lLCAicGF5Iik7CisgICAg
ICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KHBheWxvYWRlck5hbWUu
Y29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5hc2NpaSgpLmRhdGEoKSwgbnVsbHB0cik7CisgICAg
ICAgICAgICBtX2VuY29kZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgiYWxhd2VuYyIsIG51bGxw
dHIpOworICAgICAgICAgICAgaWYgKCFtX3BheWxvYWRlciB8fCAhbV9lbmNvZGVyKQorICAgICAg
ICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEdT
VF9FUlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJVbnN1cHBvcnRlZCBvdXRnb2luZyBhdWRpbyBl
bmNvZGluZzogJXMiLCBlbmNvZGluZ05hbWUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX2Jpbi5n
ZXQoKSwgImVuY29kaW5nLW5hbWUgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJhdXRvLWhlYWRl
ci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBpZiAoY29uc3QgY2hhciogbWlu
UFRpbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAibWlucHRpbWUiKSkg
eworICAgICAgICBTdHJpbmcgdGltZShtaW5QVGltZSk7CisgICAgICAgIGlmIChhdXRvIHZhbHVl
ID0gcGFyc2VJbnRlZ2VyQWxsb3dpbmdUcmFpbGluZ0p1bms8aW50NjRfdD4odGltZSkpCisgICAg
ICAgICAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJtaW4tcHRpbWUiLCAqdmFs
dWUgKiBHU1RfTVNFQ09ORCwgbnVsbHB0cik7CisgICAgfQorCisgICAgaW50IHBheWxvYWRUeXBl
OworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAicGF5bG9hZCIsICZw
YXlsb2FkVHlwZSkpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwgInB0
IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIpOworCisgICAgZ19vYmplY3Rfc2V0KG1fY2Fwc0ZpbHRl
ci5nZXQoKSwgImNhcHMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKKworICAgIGdzdF9iaW5fYWRk
KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fcGF5bG9hZGVyLmdldCgpKTsKKyAgICBpZiAo
bV9lbmNvZGVyKSB7CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQo
KSksIG1fZW5jb2Rlci5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX291
dGdvaW5nU291cmNlLmdldCgpLCBtX3ZhbHZlLmdldCgpLCBtX2F1ZGlvY29udmVydC5nZXQoKSwg
bV9hdWRpb3Jlc2FtcGxlLmdldCgpLAorICAgICAgICAgICAgbV9wcmVFbmNvZGVyUXVldWUuZ2V0
KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9wYXlsb2FkZXIuZ2V0KCksIG1fcG9zdEVuY29kZXJRdWV1
ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRfbGlu
a19tYW55KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIG1fdmFsdmUuZ2V0KCksIG1fYXVkaW9jb252
ZXJ0LmdldCgpLCBtX2F1ZGlvcmVzYW1wbGUuZ2V0KCksCisgICAgICAgICAgICBtX3BheWxvYWRl
ci5nZXQoKSwgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBudWxscHRyKTsKKyAgICB9CisgICAg
cmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
ci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxOTAyYjVmNjkx
NDI1NDhiYTE3YzcwNjM0NzY4ZWU1YWM5YjViYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1
ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KworI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lciBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNl
R1N0cmVhbWVyPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIGF1ZGlvU291
cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcihXVEZNb3ZlKGF1ZGlvU291cmNlKSkpOyB9CisKKyAgICBib29sIHNldFBheWxvYWRU
eXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsKKworcHJvdGVjdGVkOgorICAgIGV4
cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU+JiYpOworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4g
bV9hdWRpb2NvbnZlcnQ7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2F1ZGlvcmVzYW1wbGU7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29p
bmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Y3NmQxOTVjZGY4ZWE3YmQw
OWE1Zjg3Njc5N2Q4OWYyNzM1Y2RlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3Vy
Y2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2lu
Z01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlhU3Ry
ZWFtU291cmNlLmgiCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRlIDxn
c3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisKK0dTVF9E
RUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVm
aW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIG1fYmluID0gZ3N0
X2Jpbl9uZXcobnVsbHB0cik7CisKKyAgICBtX3ZhbHZlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9t
YWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdfT0JK
RUNUKG1fdmFsdmUuZ2V0KCkpLCAiZHJvcC1tb2RlIiwgImZvcndhcmQtc3RpY2t5LWV2ZW50cyIp
OworCisgICAgbV9wcmVFbmNvZGVyUXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoInF1
ZXVlIiwgbnVsbHB0cik7CisgICAgbV9wb3N0RW5jb2RlclF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIG1fY2Fwc0ZpbHRlciA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIG51bGxwdHIpOworCisgICAgZ3N0X2Jpbl9h
ZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3ZhbHZlLmdldCgpLCBtX3ByZUVu
Y29kZXJRdWV1ZS5nZXQoKSwKKyAgICAgICAgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBtX2Nh
cHNGaWx0ZXIuZ2V0KCksIG51bGxwdHIpOworCisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYo
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9jYXBzRmlsdGVyLmdldCgpLCAic3JjIikpOwor
ICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4uZ2V0KCksIGdzdF9naG9zdF9wYWRfbmV3KCJz
cmMiLCBzcmNQYWQuZ2V0KCkpKTsKK30KKworUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyOjp+UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBz
dG9wKCk7CisKKyAgICBpZiAobV93ZWJydGNTaW5rUGFkKSB7CisgICAgICAgIGF1dG8gc3JjUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYmluLmdldCgpLCAic3Jj
IikpOworICAgICAgICBnc3RfcGFkX3VubGluayhzcmNQYWQuZ2V0KCksIG1fd2VicnRjU2lua1Bh
ZC5nZXQoKSk7CisKKyAgICAgICAgYXV0byBwYXJlbnQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRf
cGFyZW50X2VsZW1lbnQobV93ZWJydGNTaW5rUGFkLmdldCgpKSk7CisgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QocGFyZW50LmdldCgpLCAiUmVtb3ZpbmcgcGFkICUiIEdTVF9QVFJfRk9STUFULCBt
X3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworICAgICAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3JlcXVl
c3RfcGFkKHBhcmVudC5nZXQoKSwgbV93ZWJydGNTaW5rUGFkLmdldCgpKTsKKyAgICB9CisKKyAg
ICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9iaW4uZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKKyAg
ICBpZiAoYXV0byBwaXBlbGluZSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfcGFyZW50KG1f
YmluLmdldCgpKSkpCisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU5fQ0FTVChwaXBlbGlu
ZS5nZXQoKSksIG1fYmluLmdldCgpKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXI6OnNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYg
bmV3U291cmNlKQoreworICAgIGlmIChtX3NvdXJjZSAmJiAhbV9pbml0aWFsU2V0dGluZ3MpCisg
ICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV9zb3VyY2UudmFsdWUoKS0+c2V0dGluZ3MoKTsK
KworICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAgbV9zb3VyY2UudmFsdWUoKS0+cmVtb3ZlT2Jz
ZXJ2ZXIoKnRoaXMpOworICAgIG1fc291cmNlID0gV1RGTW92ZShuZXdTb3VyY2UpOworICAgIGlu
aXRpYWxpemVGcm9tVHJhY2soKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3Vy
Y2VHU3RyZWFtZXI6OnN0YXJ0KCkKK3sKKyAgICBtX3NvdXJjZS52YWx1ZSgpLT5hZGRPYnNlcnZl
cigqdGhpcyk7CisgICAgbV9pc1N0b3BwZWQgPSBmYWxzZTsKKyAgICBnc3RfZWxlbWVudF9saW5r
KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIG1fdmFsdmUuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50
X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV9iaW4uZ2V0KCkpOworfQorCit2b2lkIFJlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c3RvcCgpCit7CisgICAgbV9pc1N0b3BwZWQg
PSB0cnVlOworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1fc291
cmNlLnZhbHVlKCktPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBnc3RfZWxlbWVudF9zZW5k
X2V2ZW50KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIGdzdF9ldmVudF9uZXdfZW9zKCkpOworICAg
IGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9iaW4uZ2V0KCksIFRSVUUpOworICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShtX291dGdvaW5nU291cmNlLmdldCgpLCBHU1RfU1RBVEVfTlVM
TCk7CisgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV9vdXRn
b2luZ1NvdXJjZS5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZShtX2Jp
bi5nZXQoKSwgRkFMU0UpOworICAgIG1fc291cmNlLnJlc2V0KCk7Cit9CisKK3ZvaWQgUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2VNdXRlZENoYW5nZWQoKQorewor
ICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9tdXRlZCAh
PSBtX3NvdXJjZS52YWx1ZSgpLT5tdXRlZCgpKTsKKyAgICBtX211dGVkID0gbV9zb3VyY2UudmFs
dWUoKS0+bXV0ZWQoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXI6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fc291cmNlKQorICAg
ICAgICByZXR1cm47CisKKyAgICBtX2VuYWJsZWQgPSBtX3NvdXJjZS52YWx1ZSgpLT5lbmFibGVk
KCk7CisgICAgaWYgKG1fdmFsdmUpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3ZhbHZlLmdldCgp
LCAiZHJvcCIsICFtX2VuYWJsZWQsIG51bGxwdHIpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29p
bmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6aW5pdGlhbGl6ZUZyb21UcmFjaygpCit7CisgICAgbV9t
dXRlZCA9IG1fc291cmNlLnZhbHVlKCktPm11dGVkKCk7CisgICAgbV9lbmFibGVkID0gbV9zb3Vy
Y2UudmFsdWUoKS0+ZW5hYmxlZCgpOworICAgIG1fb3V0Z29pbmdTb3VyY2UgPSB3ZWJraXRNZWRp
YVN0cmVhbVNyY05ldygpOworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQo
KSksIG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCkpOworICAgIHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRk
VHJhY2soV0VCS0lUX01FRElBX1NUUkVBTV9TUkMobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSksIG1f
c291cmNlLT5wdHIoKSwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291
cmNlR1N0cmVhbWVyOjpsaW5rKCkKK3sKKyAgICBnc3RfZWxlbWVudF9saW5rKG1fcG9zdEVuY29k
ZXJRdWV1ZS5nZXQoKSwgbV9jYXBzRmlsdGVyLmdldCgpKTsKKworICAgIGF1dG8gc3JjUGFkID0g
YWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYmluLmdldCgpLCAic3JjIikp
OworICAgIGdzdF9wYWRfbGluayhzcmNQYWQuZ2V0KCksIG1fd2VicnRjU2lua1BhZC5nZXQoKSk7
CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChtX2Jpbi5nZXQoKSk7Cit9
CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTaW5rUGFk
KEdSZWZQdHI8R3N0UGFkPiYmIHBhZCkKK3sKKyAgICBtX3dlYnJ0Y1NpbmtQYWQgPSBXVEZNb3Zl
KHBhZCk7CisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gdHJhbnNjZWl2ZXI7
CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjU2lua1BhZC5nZXQoKSwgInRyYW5zY2VpdmVyIiwg
JnRyYW5zY2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9nZXQodHJhbnNj
ZWl2ZXIuZ2V0KCksICJzZW5kZXIiLCAmbV9zZW5kZXIub3V0UHRyKCksIG51bGxwdHIpOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTVjMWNkMmRlNWQ2NGMzNjFhY2VmZTZmNDMw
N2ZhZmQ3NDhkYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1l
ci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdh
bGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNw
cmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVm
UHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKKyNp
bmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIgOiBwdWJsaWMg
VGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
PiwgcHVibGljIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7CitwdWJsaWM6Cisg
ICAgflJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpOworCisgICAgdm9pZCBz
dGFydCgpOworICAgIHZvaWQgc3RvcCgpOworICAgIHZvaWQgc2V0U291cmNlKFJlZjxNZWRpYVN0
cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJj
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5nZXQoKTsgfQorCisgICAgY29uc3QgR1JlZlB0
cjxHc3RDYXBzPiYgYWxsb3dlZENhcHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93ZWRDYXBzOyB9
CisKKyAgICB2b2lkIGxpbmsoKTsKKyAgICBjb25zdCBHUmVmUHRyPEdzdFBhZD4mIHBhZCgpIGNv
bnN0IHsgcmV0dXJuIG1fd2VicnRjU2lua1BhZDsgfQorICAgIHZvaWQgc2V0U2lua1BhZChHUmVm
UHRyPEdzdFBhZD4mJik7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVy
KCkgY29uc3QgeyByZXR1cm4gbV9zZW5kZXI7IH0KKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGJp
bigpIGNvbnN0IHsgcmV0dXJuIG1fYmluOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2V0UGF5bG9h
ZFR5cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3Rl
Y3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIo
KTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21UcmFjaygpOworCisgICAgYm9vbCBtX2VuYWJs
ZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX211dGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNT
dG9wcGVkIHsgZmFsc2UgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZjxNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZT4+IG1fc291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzPiBtX2luaXRpYWxTZXR0aW5nczsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1f
YmluOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9vdXRnb2luZ1NvdXJjZTsKKyAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IG1fdmFsdmU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ByZUVu
Y29kZXJRdWV1ZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZW5jb2RlcjsKKyAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IG1fcGF5bG9hZGVyOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9w
b3N0RW5jb2RlclF1ZXVlOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9jYXBzRmlsdGVyOwor
ICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9hbGxvd2VkQ2FwczsKKyAgICBHUmVmUHRyPEdzdFdlYlJU
Q1JUUFNlbmRlcj4gbV9zZW5kZXI7CisgICAgR1JlZlB0cjxHc3RQYWQ+IG1fd2VicnRjU2lua1Bh
ZDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOworICAgIHZvaWQg
c291cmNlRW5hYmxlZENoYW5nZWQoKTsKKworICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjpPYnNlcnZlciBBUEkKKyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlJikgb3ZlcnJpZGUgeyBzb3VyY2VNdXRlZENoYW5nZWQoKTsgfQorICAgIHZvaWQg
dHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsg
c291cmNlRW5hYmxlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQo
TWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBvdmVycmlkZSB7IGluaXRpYWxpemVGcm9tVHJhY2so
KTsgfQorICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJy
aWRlIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiOGY2MzRiMjM0
MDA3YjFlOTYwYmJhMWU1NjczOTNmNjEyY2YyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKworR1NUX0RF
QlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZp
bmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1By
aXZhdGU+JiYgc291cmNlKQorICAgIDogUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyKCkKK3sKKyAgICByZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CisKKyAgICBt
X3ZpZGVvQ29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252ZXJ0Iiwg
bnVsbHB0cik7CisgICAgbV9lbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3ZWJy
dGN2aWRlb2VuY29kZXIiLCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5f
Q0FTVChtX2Jpbi5nZXQoKSksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX2VuY29kZXIuZ2V0KCks
IG51bGxwdHIpOworCisgICAgYXV0byogcGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9nZXRfcGFk
X3RlbXBsYXRlKG1fZW5jb2Rlci5nZXQoKSwgInNyYyIpOworICAgIGF1dG8gY2FwcyA9IGFkb3B0
R1JlZihnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzKHBhZFRlbXBsYXRlKSk7CisgICAgbV9hbGxv
d2VkQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZ3N0X2NhcHNf
Zm9yZWFjaChjYXBzLmdldCgpLCByZWludGVycHJldF9jYXN0PEdzdENhcHNGb3JlYWNoRnVuYz4o
K1tdKEdzdENhcHNGZWF0dXJlcyosIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9pbnRlciB1
c2VyRGF0YSkgeworICAgICAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAgY29u
c3QgY2hhciogbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKKyAgICAg
ICAgY29uc3QgY2hhciogZW5jb2RpbmdOYW1lID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGVxdWFs
KG5hbWUsICJ2aWRlby94LXZwOCIpKQorICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIlZQOCI7
CisgICAgICAgIGVsc2UgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LXZwOSIpKQorICAgICAgICAg
ICAgZW5jb2RpbmdOYW1lID0gIlZQOSI7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsKG5hbWUsICJ2
aWRlby94LWgyNjQiKSkKKyAgICAgICAgICAgIGVuY29kaW5nTmFtZSA9ICJIMjY0IjsKKyAgICAg
ICAgaWYgKGVuY29kaW5nTmFtZSkKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1
cmUoc291cmNlLT5tX2FsbG93ZWRDYXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGlj
YXRpb24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAidmlkZW8iLCAiZW5jb2Rpbmct
bmFtZSIsIEdfVFlQRV9TVFJJTkcsIGVuY29kaW5nTmFtZSwgImNsb2NrLXJhdGUiLCBHX1RZUEVf
SU5ULCA5MDAwMCwgbnVsbHB0cikpOworICAgIH0pLCB0aGlzKTsKKworICAgIHNldFNvdXJjZShX
VEZNb3ZlKHNvdXJjZSkpOworfQorCitib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcykKK3sK
KyAgICBHU1RfREVCVUdfT0JKRUNUKG1fYmluLmdldCgpLCAiT3V0Z29pbmcgdmlkZW8gc291cmNl
IHBheWxvYWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAgIGF1dG8q
IHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgMCk7CisgICAg
R1JlZlB0cjxHc3RDYXBzPiBlbmNvZGVyQ2FwczsKKyAgICBpZiAoY29uc3QgY2hhciogZW5jb2Rp
bmdOYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImVuY29kaW5nLW5h
bWUiKSkgeworICAgICAgICBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiVlA4IikpIHsKKyAgICAg
ICAgICAgIGVuY29kZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUo
InZpZGVvL3gtdnA4IikpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVy
RWxlbWVudCgicnRwdnA4cGF5IiwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwo
ZW5jb2RpbmdOYW1lLCAiVlA5IikpIHsKKyAgICAgICAgICAgIGVuY29kZXJDYXBzID0gYWRvcHRH
UmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtdnA5IikpOworICAgICAgICAg
ICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwdnA5cGF5IiwgbnVsbHB0
cik7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiSDI2NCIpKSB7Cisg
ICAgICAgICAgICBlbmNvZGVyQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2lt
cGxlKCJ2aWRlby94LWgyNjQiKSk7CisgICAgICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3Ry
ZWFtZXJFbGVtZW50KCJydHBoMjY0cGF5IiwgbnVsbHB0cik7CisgICAgICAgICAgICAvLyBGSVhN
RTogaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1n
b29kLy0vaXNzdWVzLzg5MworICAgICAgICAgICAgLy8gZ3N0X3V0aWxfc2V0X29iamVjdF9hcmco
R19PQkpFQ1QobV9wYXlsb2FkZXIuZ2V0KCkpLCAiYWdncmVnYXRlLW1vZGUiLCAiemVyby1sYXRl
bmN5Iik7CisgICAgICAgICAgICAvLyBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJj
b25maWctaW50ZXJ2YWwiLCAtMSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgICBHU1RfRVJST1JfT0JKRUNUKG1fYmluLmdldCgpLCAiVW5zdXBwb3J0ZWQgb3V0Z29pbmcg
dmlkZW8gZW5jb2Rpbmc6ICVzIiwgZW5jb2RpbmdOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1Qo
bV9iaW4uZ2V0KCksICJlbmNvZGluZy1uYW1lIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm4g
ZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgLy8gRklYTUU6IFJlLWVuYWJsZSB0aGlzLiBDdXJyZW50bHkgdHJpZ2dlcnMg
Y2FwcyBuZWdvdGlhdGlvbiBlcnJvci4KKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0
KCksICJhdXRvLWhlYWRlci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBnX29i
amVjdF9zZXQobV9lbmNvZGVyLmdldCgpLCAiZm9ybWF0IiwgZW5jb2RlckNhcHMuZ2V0KCksIG51
bGxwdHIpOworCisgICAgaW50IHBheWxvYWRUeXBlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dl
dF9pbnQoc3RydWN0dXJlLCAicGF5bG9hZCIsICZwYXlsb2FkVHlwZSkpCisgICAgICAgIGdfb2Jq
ZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwgInB0IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIpOwor
CisgICAgYXV0byBmaWx0ZXJlZENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwoZ3N0
X3N0cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSksIG51bGxwdHIpKTsKKyAgICBnX29iamVjdF9zZXQo
bV9jYXBzRmlsdGVyLmdldCgpLCAiY2FwcyIsIGZpbHRlcmVkQ2Fwcy5nZXQoKSwgbnVsbHB0cik7
CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3BheWxvYWRl
ci5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KG1fb3V0Z29pbmdTb3VyY2UuZ2V0
KCksIG1fdmFsdmUuZ2V0KCksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX3ByZUVuY29kZXJRdWV1
ZS5nZXQoKSwKKyAgICAgICAgbV9lbmNvZGVyLmdldCgpLCBtX3BheWxvYWRlci5nZXQoKSwgbV9w
b3N0RW5jb2RlclF1ZXVlLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE1MWZkY2EwMjMzMjI0NWFjYzlhZmYyMTVkMjk1
MGQxZWY1MzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIu
aApAQCAtMCwwICsxLDQ3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxp
YSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJh
Z21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyIGZpbmFsIDogcHVi
bGljIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAg
c3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+IGNyZWF0ZShS
ZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNlKSB7IHJldHVybiBhZG9wdFJlZigq
bmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKHNvdXJjZSkp
KTsgfQorCisgICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlv
bikgeyBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9CisKKyAg
ICBib29sIHNldFBheWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsKKwor
cHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCisgICAgYm9vbCBtX3Nob3Vs
ZEFwcGx5Um90YXRpb24geyBmYWxzZSB9OworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxl
bWVudD4gbV92aWRlb0NvbnZlcnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAppbmRleCAzZTEyZWM4ZjYwZDExNTNlNzUyZTFiNmNjM2EzMjI4ZGZhYWE2NDc3Li5kYjE4
ODI4NTA1NmQzN2UwZDU3NmYwZDA3ZjExODU3NzU2ZDcyYzc3IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCkBAIC01OTksNiArNTk5LDkgQEAgdm9pZCBJbnRlcm5hbHM6OnJlc2V0
VG9Db25zaXN0ZW50U3RhdGUoUGFnZSYgcGFnZSkKICAgICBydGNQcm92aWRlci5zZXRIMjY1U3Vw
cG9ydCh0cnVlKTsKICAgICBydGNQcm92aWRlci5zZXRWUDlTdXBwb3J0KHRydWUsIHRydWUpOwog
ICAgIHJ0Y1Byb3ZpZGVyLmNsZWFyRmFjdG9yeSgpOworI2VsaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisgICAgcGFnZS5zZXR0aW5ncygpLnNldFdlYlJUQ0VuY3J5cHRpb25FbmFibGVkKHRydWUp
OworICAgIHBhZ2Uuc2V0dGluZ3MoKS5zZXRQZWVyQ29ubmVjdGlvbkVuYWJsZWQodHJ1ZSk7CiAj
ZW5kaWYKIAogICAgIHBhZ2Uuc2V0RnVsbHNjcmVlbkF1dG9IaWRlRHVyYXRpb24oMF9zKTsKQEAg
LTE2MTksNiArMTYyMiw3IEBAIHZvaWQgSW50ZXJuYWxzOjphcHBseVJvdGF0aW9uRm9yT3V0Z29p
bmdWaWRlb1NvdXJjZXMoUlRDUGVlckNvbm5lY3Rpb24mIGNvbm5lY3RpCiB7CiAgICAgY29ubmVj
dGlvbi5hcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKTsKIH0KKwogdm9pZCBJ
bnRlcm5hbHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KGJvb2wgdmFsdWUpCiB7CiAjaWYgVVNFKExJ
QldFQlJUQykKQEAgLTE2MjYsNiArMTYzMCw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRXZWJSVENI
MjY1U3VwcG9ydChib29sIHZhbHVlKQogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigp
LnNldEgyNjVTdXBwb3J0KHZhbHVlKTsKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIo
KS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
CiAjZW5kaWYKIH0KIApAQCAtMTYzNiw2ICsxNjQyLDkgQEAgdm9pZCBJbnRlcm5hbHM6OnNldFdl
YlJUQ1ZQOVN1cHBvcnQoYm9vbCBzdXBwb3J0VlA5UHJvZmlsZTAsIGJvb2wgc3VwcG9ydFZQOVBy
b2YKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRWUDlTdXBwb3J0KHN1cHBv
cnRWUDlQcm9maWxlMCwgc3VwcG9ydFZQOVByb2ZpbGUyKTsKICAgICAgICAgcGFnZS0+bGliV2Vi
UlRDUHJvdmlkZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzdXBwb3J0VlA5UHJvZmlsZTApOworICAgIFVOVVNFRF9QQVJBTShzdXBwb3J0VlA5UHJv
ZmlsZTIpOwogI2VuZGlmCiB9CiAKQEAgLTE2NDYsNiArMTY1NSw4IEBAIHZvaWQgSW50ZXJuYWxz
OjpzZXRXZWJSVENWUDlWVEJTdXBwb3J0KGJvb2wgdmFsdWUpCiAgICAgICAgIHBhZ2UtPmxpYldl
YlJUQ1Byb3ZpZGVyKCkuc2V0VlA5VlRCU3VwcG9ydCh2YWx1ZSk7CiAgICAgICAgIHBhZ2UtPmxp
YldlYlJUQ1Byb3ZpZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2ODYsNiArMTY5Nyw4IEBAIHZvaWQg
SW50ZXJuYWxzOjpzZXRFbmFibGVXZWJSVENFbmNyeXB0aW9uKGJvb2wgdmFsdWUpCiAjaWYgVVNF
KExJQldFQlJUQykKICAgICBpZiAoYXV0byogcGFnZSA9IGNvbnRleHREb2N1bWVudCgpLT5wYWdl
KCkpCiAgICAgICAgIHBhZ2UtPnNldHRpbmdzKCkuc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQo
dmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAg
LTE2OTYsNiArMTcwOSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRVc2VEVExTMTAoYm9vbCB1c2VE
VExTMTApCiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGRvY3VtZW50LT5wYWdlKCktPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0VXNl
RFRMUzEwKHVzZURUTFMxMCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1c2VEVExTMTApOwog
I2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNtYWtl
IGIvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKaW5kZXggMDY2MzNlZDRkODk5ZjI4
M2NlZDQ1OGNkYjgzOTE4MjhiOGJjNWQzZS4uMzIxNmY2OTc0YjUzYzBjNzM4NzRmOWZlZGNhZmYy
OWM4YmMwYTIyYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UK
KysrIGIvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKQEAgLTI4LDYgKzI4LDkgQEAK
ICMgIGdzdHJlYW1lci1jb2RlY3BhcnNlcjpHU1RSRUFNRVJfQ09ERUNQQVJTRVJTX0lOQ0xVREVf
RElSUyBhbmQgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVMKICMgIGdzdHJlYW1lci1m
dWxsOiAgICAgICBHU1RSRUFNRVJfRlVMTF9JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9GVUxM
X0xJQlJBUklFUwogIyAgZ3N0cmVhbWVyLXRyYW5zY29kZXI6IEdTVFJFQU1FUl9UUkFOU0NPREVS
X0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1RSQU5TQ09ERVJfTElCUkFSSUVTCisjICBnc3Ry
ZWFtZXItcnRwOiAgICAgICAgR1NUUkVBTUVSX1JUUF9JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1F
Ul9SVFBfTElCUkFSSUVTCisjICBnc3RyZWFtZXItc2RwOiAgICAgICAgR1NUUkVBTUVSX1NEUF9J
TkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9TRFBfTElCUkFSSUVTCisjICBnc3RyZWFtZXItd2Vi
cnRjOiAgICAgR1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9XRUJS
VENfTElCUkFSSUVTCiAjCiAjIENvcHlyaWdodCAoQykgMjAxMiBSYXBoYWVsIEt1Ym8gZGEgQ29z
dGEgPHJha3Vjb0B3ZWJraXQub3JnPgogIwpAQCAtMTEwLDYgKzExMyw5IEBAIEZJTkRfR1NUUkVB
TUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVEFHIGdzdHJlYW1lci10YWctMS4wIGdzdHRhZy0xLjAp
CiBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX1ZJREVPIGdzdHJlYW1lci12aWRl
by0xLjAgZ3N0dmlkZW8tMS4wKQogRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9D
T0RFQ1BBUlNFUlMgZ3N0cmVhbWVyLWNvZGVjcGFyc2Vycy0xLjAgZ3N0Y29kZWNwYXJzZXJzLTEu
MCkKIEZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVFJBTlNDT0RFUiBnc3RyZWFt
ZXItdHJhbnNjb2Rlci0xLjAgZ3N0dHJhbnNjb2Rlci0xLjApCitGSU5EX0dTVFJFQU1FUl9DT01Q
T05FTlQoR1NUUkVBTUVSX1JUUCBnc3RyZWFtZXItcnRwLTEuMCBnc3RydHAtMS4wKQorRklORF9H
U1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9TRFAgZ3N0cmVhbWVyLXNkcC0xLjAgZ3N0c2Rw
LTEuMCkKK0ZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfV0VCUlRDIGdzdHJlYW1l
ci13ZWJydGMtMS4wIGdzdHdlYnJ0Yy0xLjApCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIDMuIFByb2Nlc3MgdGhlIENPTVBPTkVOVFMgcGFz
c2VkIHRvIEZJTkRfUEFDS0FHRQpAQCAtMTU0LDQgKzE2MCw2IEBAIG1hcmtfYXNfYWR2YW5jZWQo
CiAgICAgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVMKICAgICBHU1RSRUFNRVJfRlVM
TF9JTkNMVURFX0RJUlMKICAgICBHU1RSRUFNRVJfRlVMTF9MSUJSQVJJRVMKKyAgICBHU1RSRUFN
RVJfV0VCUlRDX0lOQ0xVREVfRElSUworICAgIEdTVFJFQU1FUl9XRUJSVENfTElCUkFSSUVTCiAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlIGIvU291cmNl
L2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZQppbmRleCA5MTFmNmU2Yzk1YWI4MzBiNmZjMDJl
MDFlZGI3NzU0ZmE5MTJmMzRhLi45ZTU0NGU1N2Y4YTNkMjk3OTdlYzYwN2E2Y2YxYjA0Nzg3M2Vk
ZjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UKQEAgLTMyLDYgKzMyLDEwIEBAIGlm
IChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgICAgICAgbGlzdChB
UFBFTkQgR1NUUkVBTUVSX0NPTVBPTkVOVFMgdHJhbnNjb2RlcikKICAgICAgICAgICBlbmRpZiAo
KQogCisgICAgICAgICAgaWYgKFVTRV9HU1RSRUFNRVJfV0VCX1JUQykKKyAgICAgICAgICAgICAg
bGlzdChBUFBFTkQgR1NUUkVBTUVSX0NPTVBPTkVOVFMgd2VicnRjKQorICAgICAgICAgIGVuZGlm
ICgpCisKICAgICAgICAgICBmaW5kX3BhY2thZ2UoR1N0cmVhbWVyIDEuMTQuMCBSRVFVSVJFRCBD
T01QT05FTlRTICR7R1NUUkVBTUVSX0NPTVBPTkVOVFN9KQogCiAgICAgICAgICAgaWYgKEVOQUJM
RV9XRUJfQVVESU8pCkBAIC01OCwxMSArNjIsMjAgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFC
TEVfV0VCX0FVRElPKQogICAgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJHU3RyZWFt
ZXJUcmFuc2NvZGVyID49IDEuMjAgaXMgbmVlZGVkIGZvciBVU0VfR1NUUkVBTUVSX1RSQU5TQ09E
RVIuIikKICAgICAgICAgICBlbmRpZiAoKQogCisgICAgICAgICAgaWYgKFVTRV9HU1RSRUFNRVJf
V0VCUlRDIEFORCAoUENfR1NUUkVBTUVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxLjIwIiBPUiBO
T1QgUENfR1NUUkVBTUVSX1dFQlJUQ19GT1VORCkpCisgICAgICAgICAgICAgIG1lc3NhZ2UoRkFU
QUxfRVJST1IgIkdTdHJlYW1lcldlYlJUQyA+PSAxLjIwIGlzIG5lZWRlZCBmb3IgVVNFX0dTVFJF
QU1FUl9XRUJSVEMuIikKKyAgICAgICAgICBlbmRpZiAoKQogICAgICAgZW5kaWYgKCkKIGVuZGlm
ICgpCiAKIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNIEFORCBFTkFCTEVfV0VCX1JUQykKLSAgICBT
RVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIFRSVUUpCisgICAgaWYgKFVTRV9H
U1RSRUFNRVJfV0VCUlRDKQorICAgICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElC
V0VCUlRDIEZBTFNFKQorCisgICAgICAgIGZpbmRfcGFja2FnZShPcGVuU1NMIFJFUVVJUkVEKQor
ICAgIGVsc2UgKCkKKyAgICAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0xJQldFQlJU
QyBUUlVFKQorICAgIGVuZGlmICgpCiBlbHNlICgpCiAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJ
TEQoVVNFX0xJQldFQlJUQyBGQUxTRSkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21h
a2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVm
aW5pdGlvbnMuY21ha2UKaW5kZXggMzk0ZjgwY2EyNDdlNTljYTM4OTk1ZTA5MTZhMTAwODQ4ZjNi
NjczYy4uZDVhZjBlMjJiMDQxOGFjNDA4MDgyNTkyMWNkZWM1ZDRiNDgzZDFiOCAxMDA2NDQKLS0t
IGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlCisrKyBiL1NvdXJjZS9j
bWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQpAQCAtMTEsMyArMTEsNCBAQCBXRUJLSVRf
T1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX05BVElWRV9WSURFTyAiVG9nZ2xlIG5hdGl2ZSB2
aWRlbyBzdXBwb3J0IGluCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX05BVElW
RV9BVURJTyAiVG9nZ2xlIG5hdGl2ZSBhdWRpbyBzdXBwb3J0IGluIEdTdHJlYW1lciBtZWRpYSBw
bGF5ZXIiIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9U
RVhUX1NJTksgIlRvZ2dsZSB0ZXh0IHNpbmsgc3VwcG9ydCBpbiBHU3RyZWFtZXIgbWVkaWEgcGxh
eWVyIiBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9UUkFO
U0NPREVSICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBHU3RyZWFtZXIgTWVkaWFSZWNv
cmRlciBiYWNrZW5kIiBQUklWQVRFIE9OKQorV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJF
QU1FUl9XRUJSVEMgIldoZXRoZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFdlYlJUQyIgUFJJVkFU
RSBPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21h
a2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlCmluZGV4IDIzZDIx
ZjUyZDA1NTA1MzI1Njk1ZDNhMWFmYTFmODcxNjcxYzBhMWMuLjczZjkzYzgxNTcyNmE3MTc3ZTJm
OTU0Y2IxNmM2NGI4M2RkMjJiMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJE
ZXBlbmRlbmNpZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVuZGVuY2ll
cy5jbWFrZQpAQCAtMiwzICsyLDQgQEAgV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX0dTVFJFQU1F
Ul9HTCBFTkFCTEVfVklERU8pCiBXRUJLSVRfT1BUSU9OX0RFUEVORChVU0VfR1NUUkVBTUVSX01Q
RUdUUyBFTkFCTEVfVklERU8pCiBXRUJLSVRfT1BUSU9OX0RFUEVORChVU0VfV1BFX1ZJREVPX1BM
QU5FX0RJU1BMQVlfRE1BQlVGIFVTRV9HU1RSRUFNRVJfR0wpCiBXRUJLSVRfT1BUSU9OX0RFUEVO
RChVU0VfR1NUUkVBTUVSX1RSQU5TQ09ERVIgRU5BQkxFX01FRElBX1JFQ09SREVSKQorV0VCS0lU
X09QVElPTl9ERVBFTkQoVVNFX0dTVFJFQU1FUl9XRUJSVEMgRU5BQkxFX1dFQl9SVEMpCmRpZmYg
LS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggZGJjYmNmNDUx
N2JmYWJkNDExM2QzZDIyNWQ1MTY3YzMxYjUzOTA5NC4uZjQzOTQ0NTQ1NzNlZTdiZTc1NzAzYjc2
Yzk4NTY5MjNmN2JjNzk5NiAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rvb2xz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAyLTEyICBQaGlsaXBwZSBOb3JtYW5k
ICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBJbml0aWFsIGlt
cG9ydCBvZiB0aGUgR3N0V2ViUlRDIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgICogZmxhdHBhay9mbGF0cGFrdXRpbHMucHk6CisgICAgICAg
IChXZWJraXRGbGF0cGFrLnJ1bl9pbl9zYW5kYm94KTogQWxsb3cgbGlibmljZSBkZWJ1ZyBsb2cg
ZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gcnVudGltZSBzYW5kYm94LgorCiAyMDIyLTAzLTA0ICBT
aWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUuY29tPgogCiAgICAgICAgIEFkZCBudWxsIGNoZWNr
IGZvciBwYXRoIGluIG1ha2VBbGxEaXJlY3RvcmllcwpkaWZmIC0tZ2l0IGEvVG9vbHMvZmxhdHBh
ay9mbGF0cGFrdXRpbHMucHkgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQppbmRleCBh
MDA3MzU0NDY3YTU1NmM4MTczOWE4Mzk3NjRlNzQ2ZTczMTI0MDdmLi41NjU0MzQxNDA1OGUwOWIy
Y2NmMDQ4MDlkNDczYTMzMjJlNmI2N2U2IDEwMDY0NAotLS0gYS9Ub29scy9mbGF0cGFrL2ZsYXRw
YWt1dGlscy5weQorKysgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQpAQCAtODM4LDYg
KzgzOCw3IEBAIGNsYXNzIFdlYmtpdEZsYXRwYWs6CiAgICAgICAgICAgICAiTUVTQSIsCiAgICAg
ICAgICAgICAiTElCR0wiLAogICAgICAgICAgICAgIlBJUEVXSVJFIiwKKyAgICAgICAgICAgICJO
SUNFIiwKICAgICAgICAgICAgICJSVVNUIiwKICAgICAgICAgICAgICJTQ0NBQ0hFIiwKICAgICAg
ICAgICAgICJTUEEiLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDNlMjc2MGMwNzM4NzVhOGJmMzAxN2Q3MzEzYzAxYTA3ZmIz
NWI1YjEuLmJiZDk5MzIwYjhkZjYyOTg3ZjkxNDVjZmI4NmRmMzA5MGE3YWFiMGMgMTAwNjQ0Ci0t
LSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwxOCBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGln
YWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdz
dFdlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yMzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczogRmxhZyBtb3N0IFdlYlJU
QyBhcyBmYWlsaW5nLiBEdXJpbmcgdGhpcyBmaXJzdCBkZXZlbG9wbWVudAorICAgICAgICBjeWNs
ZSBJIGZvY3VzZWQgbW9zdGx5IG9uIGZpeGluZyBjcmFzaGVzIGFuZCBvbmx5IGZpeGVkIGEgZmV3
IGZhaWx1cmVzLiBUaGUgcmVtYWluaW5nIG9uZXMKKyAgICAgICAgd2lsbCBiZSBhZHJlc3NlZCBp
biBmb2xsb3ctdXAgcGF0Y2hlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAq
IHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1v
dGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRm
b3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0
ZWQudHh0OiBBZGRlZC4KKwogMjAyMi0wMy0wNSAgQWxhbiBCdWp0YXMgIDx6YWxhbkBhcHBsZS5j
b20+CiAKICAgICAgICAgUmVtb3ZlIG5vbi1zdGFuZGFyZCBkaXNwbGF5OmJsb2NrIFVBIHN0eWxl
c2hlZXQgcnVsZSBmb3IgPGxheWVyPgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z2xpYi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhw
ZWN0YXRpb25zCmluZGV4IGVkNjQ5MDE5NTk2MzBkZTg4ZjBkMTVhY2I5MGNiOTBjYjE4MzY3NTUu
Ljc3OGQxOTgwYjBlYmZlYjU0OTY3NjQ1NzQ2NGU4ODE3OTViM2Q3YzkgMTAwNjQ0Ci0tLSBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTg1OCw3ICs4NTgsNiBAQCB3ZWJr
aXQub3JnL2IvMjI5OTczIG1lZGlhL3RyYWNrL2luLWJhbmQvdHJhY2staW4tYmFuZC1zcnQtbWt2
LWN1ZXMtYWRkZWQtb25jZS5odAogCiB3ZWJraXQub3JnL2IvMjMwMDI4IG1lZGlhL21lZGlhLXNv
dXJjZS9tZWRpYS1zb3VyY2Utc2Vlay10d2ljZS5odG1sIFsgUGFzcyBUaW1lb3V0IF0KIAotd2Vi
a2l0Lm9yZy9iLzIzMTgxMSBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1l
bnQtZW50ZXItYmFja2dyb3VuZC5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMxODEx
IG1lZGlhL2F1ZGlvLWJhY2tncm91bmQtcGxheWJhY2stcGxheWxpc3QuaHRtbCBbIEZhaWx1cmUg
XQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS9tZWRpYS1zZXNzaW9uL2FjdGlvbkhhbmRsZXJJ
bnRlcm5hbE1hcHBpbmdzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVk
aWEvbWVkaWEtc2Vzc2lvbi9kZWZhdWx0LWFjdGlvbkhhbmRsZXJzLmh0bWwgWyBGYWlsdXJlIF0K
QEAgLTg2Nyw3ICs4NjYsNiBAQCB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLWNvbmN1
cnJlbnQtcGxheWJhY2suaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRp
YS92aWRlby1pbnRlcnJ1cHRpb24td2l0aC1yZXN1bWUtbm90LWFsbG93aW5nLXBsYXkuaHRtbCBb
IEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS92aWRlby1tdWx0aXBsZS1jb25j
dXJyZW50LXBsYXliYWNrLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVk
aWEvd2ViYXVkaW8tYmFja2dyb3VuZC1wbGF5YmFjay5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQu
b3JnL2IvMjMxODExIHdlYnJ0Yy9jb25jdXJyZW50VmlkZW9QbGF5YmFjazIuaHRtbCBbIEZhaWx1
cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS9tZWRpYS1zZXNzaW9uL2NhbGxBY3Rpb25I
YW5kbGVyLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvbWVkaWEt
c2Vzc2lvbi9wbGF5LWFmdGVyLXNlZWsuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzIz
MTgxMSBtZWRpYS9yZW1vdGUtY29udHJvbC1jb21tYW5kLWlzLXVzZXItZ2VzdHVyZS5odG1sIFsg
VGltZW91dCBdCkBAIC04ODAsMTAgKzg3OCwxMCBAQCB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlh
L3ZpZGVvLXN5c3RlbS1zbGVlcC5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMxODEx
IHdlYmF1ZGlvL2F1ZGlvY29udGV4dC1zdGF0ZS1pbnRlcnJ1cHRlZC5odG1sIFsgVGltZW91dCBd
CiB3ZWJraXQub3JnL2IvMjMxODExIHdlYmF1ZGlvL3N1c3BlbmQtY29udGV4dC13aGlsZS1pbnRl
cnJ1cHRlZC5odG1sIFsgVGltZW91dCBdCiAKKyMgcnZmYyByZWxhdGVkIGZhaWx1cmVzCiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3ZpZGVvLXJ2ZmMgWyBQYXNzIF0KIGZhc3QvbWVk
aWFzdHJlYW0vZ2V0VXNlck1lZGlhLXJ2ZmMuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiB3ZWJydGMv
cGVlckNvbm5lY3Rpb24tcnZmYy5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvY2FudmFzLXRvLXBl
ZXItY29ubmVjdGlvbi5odG1sIFsgRmFpbHVyZSBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3ZpZGVvLXJ2ZmMvcmVxdWVzdC12aWRlby1mcmFtZS1jYWxsYmFjay13ZWJydGMuaHR0
cHMuaHRtbCBbIFNraXAgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1y
dmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2stYmVmb3JlLXhyLXNlc3Npb24uaHR0cHMu
aHRtbCBbIFNraXAgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1ydmZj
L3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2stZHVyaW5nLXhyLXNlc3Npb24uaHR0cHMuaHRt
bCBbIFNraXAgXQpAQCAtOTAzLDYgKzkwMSw4NyBAQCB3ZWJraXQub3JnL2IvMjM0MDg0IG1lZGlh
L3RyYWNrL3ZpZGVvLXRyYWNrLWNvbmZpZ3VyYXRpb24uaHRtbCBbIEZhaWx1cmUgXQogCiB3ZWJr
aXQub3JnL2IvMjM3MjU2IG1lZGlhL3ZpZGVvLXNyYy1ibG9iLXBlcmYuaHRtbCBbIFRpbWVvdXQg
XQogCisjIERhdGFDaGFubmVsIEdzdFdlYlJUQyBpbXBsZW1lbnRhdGlvbiBpbmNvbXBsZXRlCit3
ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9kYXRhY2hhbm5lbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSBodHRwL3dwdC93ZWJydGMvdHJhbnNmZXItZGF0YWNoYW5uZWwtc2VydmljZS13
b3JrZXIuaHR0cHMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRzU2VsZWN0b3IuaHRtbCBbIFNraXAgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFj
aGFubmVsLmh0bWwgWyBTa2lwIF0KKworIyBUaGUgR3N0V2ViUlRDIGJhY2tlbmQgZG9lc24ndCBz
dXBwb3J0IHRyYW5zZm9ybXMgeWV0Lgord2Via2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93ZWJy
dGMvYXVkaW92aWRlby1zY3JpcHQtdHJhbnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgaHR0cC93cHQvd2VicnRjL3ZpZGVvLXNjcmlwdC10cmFuc2Zvcm0ta2V5ZnJhbWUt
b25seS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy92
aWRlby1zY3JpcHQtdHJhbnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
aW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0v
c2NyaXB0LWF1ZGlvLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJh
bnNmb3JtL3NjcmlwdC1jaGFuZ2UtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5j
b2RlZC10cmFuc2Zvcm0vc2NyaXB0LW1ldGFkYXRhLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tp
cCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VicnRjLWVuY29kZWQtdHJhbnNmb3JtL3NjcmlwdC10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNr
aXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3Rz
L3dlYnJ0Yy1lbmNvZGVkLXRyYW5zZm9ybS9zY3JpcHQtd3JpdGUtdHdpY2UtdHJhbnNmb3JtLmh0
dHBzLmh0bWwgWyBTa2lwIF0KKworIyBUaGUgZ2VuZXJhdGVkIFNEUCBvZmZlciBjdXJyZW50bHkg
ZG9lcyBub3QgcmVmbGVjdCB0aGUgY29kZWMtcHJlZmVyZW5jZXMgc2V0CisjIG9uIHRyYW5zY2Vp
dmVycy4gSW5zdGVhZCB0aGUgbmVnb3RpYXRlZCBvdXRnb2luZyBtZWRpYSBzb3VyY2UgY2FwcyBh
cmUgdXNlZAorIyBhbmQgb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2Ygb3V0Z29pbmcgc291
cmNlIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZQorIyBwYXlsb2FkIHR5cGVzLgord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0aW9uLWc3MjIuaHRtbCBbIEZhaWx1
cmUgXQorCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24tYWRkSWNlQ2FuZGlkYXRlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1hZGRUcmFjay1yZXVzZS1zZW5k
ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLWhhdmUtbG9jYWwtb2ZmZXIuaHRtbCBbIENyYXNoIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLWxv
Y2FsLXByYW5zd2VyLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taGF2ZS1yZW1vdGUtb2ZmZXIuaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLWhhdmUtcmVtb3RlLXByYW5zd2VyLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taWNlY2FuZGlkYXRlLWV2ZW50
Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0LWFuc3dlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1v
ZmZlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24tbWVkaWEtc2V0dXAtY2FsbGJhY2tzLXNpbmdsZS1kaWFsb2cu
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLXR3by1kaWFsb2dzLmh0bWwgWyBDcmFzaCBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tb25u
ZWdvdGlhdGlvbm5lZWRlZC5odG1sIFsgUGFzcyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1wYWdlLWNhY2hlLmh0bWwgWyBD
cmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24tcmVtb3RlbHktYXNzaWduZWQtdHJhbnNjZWl2ZXItbWlkLmh0bWwgWyBQYXNzIEZhaWx1
cmUgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24tc2V0TG9jYWxEZXNjcmlwdGlvbi1vZmZlci5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0
UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgaHR0cC93cHQvd2VicnRjL3RoaXJkLXBhcnR5LWZyYW1lLWljZS1jYW5kaWRhdGUtZmlsdGVy
aW5nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZXh0ZW5zaW9ucy9SVENSdHBQYXJhbWV0ZXJzLW1heEZy
YW1lcmF0ZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3cz
Yy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWV4dGVuc2lvbnMvUlRDUnRwU3luY2hyb25pemF0
aW9uU291cmNlLWNhcHR1cmVUaW1lc3RhbXAuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1wcmlvcml0eS9S
VENSdHBQYXJhbWV0ZXJzLWVuY29kaW5ncy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IGluc3BlY3Rvci9wYWdlL292ZXJyaWRlU2V0dGluZy1JQ0VDYW5kaWRhdGVGaWx0ZXJp
bmdFbmFibGVkLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1jYXBhYmlsaXRpZXMvZGVjb2RpbmdJbmZvLndl
YnJ0Yy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtY2FwYWJpbGl0aWVzL2VuY29kaW5nSW5mby53ZWJydGMu
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYWRkVHJhbnNjZWl2
ZXItdGhlbi1hZGRUcmFjay5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy9hdWRpby12aWRlby1lbGVtZW50LXBsYXlpbmcuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FuZGlkYXRlLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2NhbnZhcy10by1wZWVyLWNvbm5lY3Rpb24uaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJy
dGMuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2xvc2luZy1w
ZWVyY29ubmVjdGlvbi5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy9kaXJlY3Rpb24tY2hhbmdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL2Rpc2FibGUtZW5jcnlwdGlvbi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IHdlYnJ0Yy9lcGhlbWVyYWwtY2VydGlmaWNhdGVzLWFuZC1jbmFtZXMuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRh
dGUtYWZ0ZXItcmVsb2FkLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2Vi
cnRjL2gyNjQtcGFja2V0aXphdGlvbi1tb2RlLmh0bWwgWyBUaW1lb3V0IEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvbGlid2VicnRjL3NldExvY2FsRGVzY3JpcHRpb25DcmFz
aC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9uby1wb3J0LXpl
cm8taW4tdXBkLWNhbmRpZGF0ZXMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLXJlbW90ZS1hdWRpby1tdXRlLmh0bWwgWyBUaW1lb3V0
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVk
aW8tbXV0ZTIuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVl
ci1jb25uZWN0aW9uLXRyYWNrLWVuZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy9wZWVyY29ubmVjdGlvbi1wYWdlLWNhY2hlLWxvbmcuaHRtbCBbIFRpbWVvdXQg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlcmNvbm5lY3Rpb24tcGFnZS1jYWNoZS5o
dG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZWNlaXZlci10cmFj
ay1zaG91bGQtc3RheS1saXZlLWV2ZW4taWYtcmVjZWl2ZXItaXMtaW5hY3RpdmUuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcmVtb3ZlLXRyYWNrLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3V0Zjgtc2RwLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLWFkZFRyYW5zY2VpdmVyLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLWdldFBhcmFt
ZXRlcnMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8t
bWVkaWFzdHJlYW10cmFjay1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy92aWRlby1tdXRlLXZwOC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IHdlYnJ0Yy92aWRlby1tdXRlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8y
MzU4ODUgd2VicnRjL3ZpZGVvLXJlcGxhY2UtdHJhY2stdG8tbnVsbC5odG1sIFsgRmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1yZXBsYWNlLXRyYWNrLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXN0YXRzLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXVubXV0ZS5odG1sIFsg
Q3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tdnA4LXZpZGVvcmFuZ2Uu
aHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8uaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdnA4LXRoZW4taDI2NC5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92cDktc3ZjLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZwOS5odG1sIFsgRmFpbHVyZSBd
CisKICMvLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIEVuZCBvZiBHU3RyZWFtZXIt
cmVsYXRlZCBidWdzCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTQ0MSwx
NiArMTUyMCwxNCBAQCB3ZWJraXQub3JnL2IvNzkyMDMgd2Via2l0Lm9yZy9iLzE4NjY3OCBmYXN0
L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1lbgogCiBmYXN0L21lZGlhc3RyZWFt
L01lZGlhRGV2aWNlcy1hZGRFdmVudExpc3RlbmVyLmh0bWwgWyBEdW1wSlNDb25zb2xlTG9nSW5T
dGRFcnIgXQogCi13ZWJraXQub3JnL2IvMTkxMDA2IHdlYnJ0Yy9zaW11bGNhc3QtaDI2NC5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTkxMDA2IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2Vi
cnRjL3NpbXVsY2FzdC1oMjY0Lmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQogCi13ZWJraXQub3Jn
L2IvMTkzNjQxIHdlYnJ0Yy92aWRlby1zZXREaXJlY3Rpb24uaHRtbCBbIEZhaWx1cmUgUGFzcyBd
Cit3ZWJraXQub3JnL2IvMTkzNjQxIHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXNl
dERpcmVjdGlvbi5odG1sIFsgRmFpbHVyZSBQYXNzIFRpbWVvdXQgXQogCiB3ZWJraXQub3JnL2Iv
MTk0NjExIGh0dHAvd3B0L3dlYnJ0Yy9nZXRVc2VyTWVkaWEtcHJvY2Vzc1N3YXBwaW5nLmh0bWwg
WyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIwMTI2NyBbIFJlbGVhc2UgXSB3ZWJydGMvdmlk
ZW8taDI2NC5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMjI1ODUgWyBE
ZWJ1ZyBdIHdlYnJ0Yy92aWRlby1oMjY0Lmh0bWwgWyBDcmFzaCBdCi0KLXdlYmtpdC5vcmcvYi8y
MTAyNzIgd2VicnRjL2RhdGFjaGFubmVsL211bHRpcGxlLWNvbm5lY3Rpb25zLmh0bWwgWyBUaW1l
b3V0IFBhc3MgXQord2Via2l0Lm9yZy9iLzIyMjU4NSB3ZWJraXQub3JnL2IvMjM1ODg1IFsgRGVi
dWcgXSB3ZWJydGMvdmlkZW8taDI2NC5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCiAKIHdlYmtpdC5v
cmcvYi8yMTUwMDUgd2Via2l0Lm9yZy9iLzIxODc4NyB3ZWJydGMvaDI2NC1iYXNlbGluZS5odG1s
IFsgQ3Jhc2ggVGltZW91dCBdCiAjIGgyNjQtaGlnaC5odG1sIGlzIG1hcmtlZCBhcyBzbG93IGlu
IHRoZSByb290IGV4cGVjdGF0aW9uCkBAIC0xNDU5LDcgKzE1MzYsNyBAQCB3ZWJraXQub3JnL2Iv
MjE1MDA3IFsgRGVidWcgXSB3ZWJydGMvaDI2NC1oaWdoLmh0bWwgWyBTbG93IEZhaWx1cmUgXQog
CiB3ZWJraXQub3JnL2IvMjE2NTM4IHdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2Fy
ZS1oMjY0LWJhc2VsaW5lLmh0bWwgWyBTbG93IEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2IvMjE2
NzYzIHdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2FyZS1oMjY0LWhpZ2guaHRtbCBb
IENyYXNoIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIxNjc2MyB3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2FyZS1oMjY0LWhpZ2guaHRtbCBbIENy
YXNoIEZhaWx1cmUgVGltZW91dCBdCiAKIHdlYmtpdC5vcmcvYi8yMTgyMjEgd2VicnRjL3ZwOS1w
cm9maWxlMi5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KIApAQCAtMjI0OCwxMyArMjMyNSwxMiBA
QCB3ZWJraXQub3JnL2IvMTg2MTAwIGNzczMvY29sb3ItZmlsdGVycy9jb2xvci1maWx0ZXItY29s
b3ItcHJvcGVydHktbGlzdC1pdGVtLmh0bQogd2Via2l0Lm9yZy9iLzE4NjEwMCBmYXN0L2hpZHBp
L2ZpbHRlcnMtdHVyYnVsZW5jZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTg3MDQ0IHdlYmFuaW1hdGlvbnMvb3BhY2l0eS1hbmltYXRpb24teWllbGRzLWNvbXBvc2l0
aW5nLXNwYW4uaHRtbCBbIEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy9k
YXRhY2hhbm5lbC9tZG5zLWljZS1jYW5kaWRhdGVzLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5v
cmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLWFkZFRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtp
dC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLWRpc2FibGVkLWJsYWNrLmh0bWwgWyBDcmFzaCBd
Ci13ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1yZW1vdGUtbXV0ZS5odG1sIFsgQ3Jh
c2ggXQotd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcmVwbGFjZS1tdXRlZC10cmFj
ay5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL3ZpZGVvLXJlcGxhY2UtbXV0ZWQtdHJhY2suaHRtbCBbIFRpbWVvdXQgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVv
LWRpc2FibGVkLWJsYWNrLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8xODcw
NjQgd2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVtb3RlLW11dGUuaHRtbCBbIENy
YXNoIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcm90YXRpb24u
aHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcm90YXRp
b24tbm8tY3ZvLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xODcwNjQgd2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcm90YXRpb24tbm8tY3ZvLmh0bWwgWyBGYWlsdXJlIENy
YXNoIF0KIHdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXdpdGgtZGF0YS1jaGFubmVs
Lmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xODcwNjQgaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tZ2V0U3RhdHMuaHR0cHMuaHRt
bCBbIEZhaWx1cmUgUGFzcyBdCiAKQEAgLTI0NjEsOSArMjUzNyw2IEBAIHdlYmtpdC5vcmcvYi8x
NzQyNDIgbWVkaWEvbWVkaWEtZnVsbHNjcmVlbi1wYXVzZS1pbmxpbmUuaHRtbCBbIFNraXAgXQog
d2Via2l0Lm9yZy9iLzE4MjEwOCBodHRwL3Rlc3RzL21lZGlhL2hscy9obHMtd2VidnR0LXRyYWNr
cy5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMTM3MzExIG1lZGlhL3ZpZGVvLWZ1bGxz
Y3JlZW4tb25seS1wbGF5YmFjay5odG1sIFsgVGltZW91dCBDcmFzaCBdCiAKLXdlYmtpdC5vcmcv
Yi8xOTgxMTMgWyBSZWxlYXNlIF0gZmFzdC9tZWRpYXN0cmVhbS9tZWRpYS1zdHJlYW0tcGFnZS1t
dXRlZC5odG1sIFsgUGFzcyBdCi13ZWJraXQub3JnL2IvMTk4MTEzIFsgRGVidWcgXSBmYXN0L21l
ZGlhc3RyZWFtL21lZGlhLXN0cmVhbS1wYWdlLW11dGVkLmh0bWwgWyBUaW1lb3V0IF0KLQogd2Vi
a2l0Lm9yZy9iLzE5NDA0NCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNv
dXJjZS9tZWRpYXNvdXJjZS1hZGRzb3VyY2VidWZmZXIuaHRtbCBbIEZhaWx1cmUgXQogCiAjIFJl
bW92ZWQgZnJvbSBnZW5lcmFsIFRlc3RFeHBlY3RhdGlvbnMgaW4gcjI3NjM5MywgYnV0IGNvbnNv
bGUgZXJyb3IgbWVzc2FnZSBzdGlsbCBoYXBwZW5pbmcgaW4gR0xpYi4KQEAgLTI1NDgsMTAgKzI2
MjEsNyBAQCBtZWRpYS92aWRlby1yZW1vdGUtY29udHJvbC1wbGF5cGF1c2UuaHRtbCBbIFNraXAg
XQogCiB3ZWJraXQub3JnL2IvMjA3MDYyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
bWVkaWEtc291cmNlL21lZGlhc291cmNlLXJlcGxheS5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAot
d2Via2l0Lm9yZy9iLzIyOTM0NiB3ZWJydGMvbXVsdGktYXVkaW8uaHRtbCBbIFRpbWVvdXQgUGFz
cyBdCi0KLXdlYmtpdC5vcmcvYi8yMjk3MTUgWyBEZWJ1ZyBdIGZhc3QvbWVkaWFzdHJlYW0vZ2V0
RGlzcGxheU1lZGlhLW1heC1jb25zdHJhaW50czMuaHRtbCBbIFRpbWVvdXQgXQotd2Via2l0Lm9y
Zy9iLzIyOTcxNSBbIERlYnVnIF0gZmFzdC9tZWRpYXN0cmVhbS9zY3JlZW5jYXB0dXJlLXVzZXIt
Z2VzdHVyZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjI5MzQ2IHdlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL211bHRpLWF1ZGlvLmh0bWwgWyBUaW1lb3V0IFBhc3MgRmFpbHVyZSBd
CiAKIHdlYmtpdC5vcmcvYi8yMjk3MzggZmFzdC90ZXh0L3doaXRlc3BhY2UvdGFiLWNoYXJhY3Rl
ci1iYXNpY3MuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIyOTczOCBmYXN0L3RleHQv
d29yZC1icmVhay5odG1sIFsgRmFpbHVyZSBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlw
dGlvbi1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uYzk1YTliNjE5MDA5YTc0MzJhMTI5MzZhN2M2YTgxODkwODRkMmM3ZgotLS0gL2Rl
di9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsx
LDE5IEBACitUZXN0cyBSVENQZWVyQ29ubmVjdGlvbiBsb2NhbERlc2NyaXB0aW9uLgorCitPbiBz
dWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dl
ZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNl
c3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgcmVxdWVzdEZhaWxlZDEp
OyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdFN1Y2NlZWRlZCB3YXMgY2Fs
bGVkLgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhl
bihyZXF1ZXN0U3VjY2VlZGVkMiwgcmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90IHRocm93IGV4Y2Vw
dGlvbi4KK1BBU1MgcmVxdWVzdEZhaWxlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5sb2NhbERlc2Ny
aXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNkcCBzaG91
bGQgYmUgbG9jYWwuIFdhcyB0PTAgMAorLgorUEFTUyBwYy5sb2NhbERlc2NyaXB0aW9uLnR5cGUg
aXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgbG9jYWwu
IFdhcyB0PTAgMAorLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENP
TVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9nLWV4cGVj
dGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9nLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5kOTM0MmRlNzI4MTlkN2E5YzUxN2Y1MzFiMWY1ZmQxN2Q1YTA0MjI0Ci0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLW1lZGlhLXNldHVwLXNpbmdsZS1kaWFsb2ctZXhwZWN0ZWQudHh0CkBA
IC0wLDAgKzEsNjEgQEAKK1Rlc3Qgc2V0dGluZyB1cCBtZWRpYSBiZXR3ZWVuIHR3byBSVENQZWVy
Q29ubmVjdGlvbiBpbnN0YW5jZXMgd2l0aCBvbmUgc2luZ2xlIFNEUCBkaWFsb2cuCisKK09uIHN1
Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2Vk
IGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitDcmVhdGUgUlRDUGVlckNvbm5lY3Rpb24gQQorUEFT
UyBwY0Euc2lnbmFsaW5nU3RhdGUgaXMgJ3N0YWJsZScKK1BBU1MgcGNBLnBlbmRpbmdMb2NhbERl
c2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGNBLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIGlzIG51
bGwKK1BBU1MgcGNBLnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjQS5j
dXJyZW50UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorCitDcmVhdGUgUlRDUGVlckNvbm5lY3Rp
b24gQgorUEFTUyBwY0Iuc2lnbmFsaW5nU3RhdGUgaXMgJ3N0YWJsZScKK1BBU1MgcGNCLnBlbmRp
bmdMb2NhbERlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGNCLmN1cnJlbnRMb2NhbERlc2NyaXB0
aW9uIGlzIG51bGwKK1BBU1MgcGNCLnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitQ
QVNTIHBjQi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorCitBOiBhZGQgbWVkaWEK
K0E6IGNyZWF0ZSBvZmZlcgorQTogZ290IG9mZmVyLCBzZXQgaXQgYXMgbG9jYWwgZGVzY3JpcHRp
b24KK0E6IGxvY2FsIG9mZmVyIHNldAorUEFTUyBwY0Euc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUt
bG9jYWwtb2ZmZXInCitQQVNTIHBjQS5wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiBpcyBhbiBpbnN0
YW5jZSBvZiBSVENTZXNzaW9uRGVzY3JpcHRpb24KK1BBU1MgcGNBLmN1cnJlbnRMb2NhbERlc2Ny
aXB0aW9uIGlzIG51bGwKKworQTogc2VuZCBvZmZlciB0byBCCitBIC0tLSBvZmZlciAtLT4gQgor
QjogZ290IG9mZmVyIGZyb20gQSwgc2V0IGl0IGFzIHJlbW90ZSBkZXNjcmlwdGlvbgorQjogcmVt
b3RlIG9mZmVyIHNldAorUEFTUyBwY0Iuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9m
ZmVyJworUEFTUyBwY0IucGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uIGlzIGFuIGluc3RhbmNlIG9m
IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbgorUEFTUyBwY0IuY3VycmVudFJlbW90ZURlc2NyaXB0aW9u
IGlzIG51bGwKKworQjogYWRkIG1lZGlhICh0byBpbmNsdWRlIGluIGFuc3dlcikKK0I6IGNyZWF0
ZSBhbnN3ZXIKK0I6IGdvdCBhbnN3ZXIsIHNldCBpdCBhcyBsb2NhbCBkZXNjcmlwdGlvbgorQjog
bG9jYWwgYW5zd2VyIHNldAorUEFTUyBwY0Iuc2lnbmFsaW5nU3RhdGUgaXMgJ3N0YWJsZScKK1BB
U1MgcGNCLnBlbmRpbmdMb2NhbERlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGNCLmN1cnJlbnRM
b2NhbERlc2NyaXB0aW9uIGlzIGFuIGluc3RhbmNlIG9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbgor
UEFTUyBwY0IucGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKK0ZBSUwgcGNCLmN1cnJl
bnRSZW1vZXREZXNjcmlwdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uCisKK0I6IHNlbmQgYW5zd2VyIHRvIEEKK0EgPC0tIGFuc3dlciAtLSBCCitBOiBnb3Qg
YW5zd2VyIGZyb20gQiwgc2V0IGl0IGFzIHJlbW90ZSBkZXNjcmlwdGlvbgorQTogcmVtb3RlIGFu
c3dlciBzZXQKK1BBU1MgcGNBLnNpZ25hbGluZ1N0YXRlIGlzICdzdGFibGUnCitQQVNTIHBjQS5w
ZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjQS5jdXJyZW50TG9jYWxEZXNj
cmlwdGlvbiBpcyBhbiBpbnN0YW5jZSBvZiBSVENTZXNzaW9uRGVzY3JpcHRpb24KK1BBU1MgcGNB
LnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitGQUlMIHBjQS5jdXJyZW50UmVtb2V0
RGVzY3JpcHRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbgor
CitQQVNTIE9mZmVyL2Fuc3dlciBkaWFsb2cgY29tcGxldGVkCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5
UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3Rl
RGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4cGVjdGVk
LnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi45ZDUzZWM1YzIxNjBkMDMyNzNjMTk4MWY4ZWQ5ZmExODM4NGZkMDc1
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDE5IEBACitUZXN0cyBSVENQZWVyQ29ubmVjdGlvbiByZW1vdGVEZXNjcmlwdGlv
bi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcGMuc2V0UmVtb3RlRGVz
Y3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKHJlcXVlc3RTdWNjZWVkZWQxLCByZXF1
ZXN0RmFpbGVkMSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyByZXF1ZXN0U3VjY2Vl
ZGVkIHdhcyBjYWxsZWQuCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNj
cmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgcmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90
IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdEZhaWxlZCB3YXMgY2FsbGVkLgorUEFTUyBw
Yy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMucmVtb3RlRGVzY3Jp
cHRpb24uc2RwIHNob3VsZCBiZSByZW1vdGUuIFdhcyB0PTAgMAorLgorUEFTUyBwYy5yZW1vdGVE
ZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24uc2Rw
IHNob3VsZCBiZSByZW1vdGUuIFdhcyB0PTAgMAorLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQg
aXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRm
b3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVseS1hc3Np
Z25lZC10cmFuc2NlaXZlci1taWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0v
Z2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZWx5LWFzc2lnbmVk
LXRyYW5zY2VpdmVyLW1pZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZmMDJhYTc0ZjcyMjBl
ZGFjY2UzN2QzZjFiYTc0ZGVjNTFhZGNlMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVs
eS1hc3NpZ25lZC10cmFuc2NlaXZlci1taWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjYgQEAK
K1Rlc3QgdGhlIGNhc2Ugd2hlcmUgYW4gUlRDUnRwVHJhbnNjZWl2ZXIgZ2V0cyBhIHJlbW90ZWx5
IGFzc2lnbmVkIG1pZCBhbmQgYWxzbyB1bm11dGUgdGhlIGFzc29jaWF0ZWQgc291cmNlCisKK09u
IHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxv
d2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKworCitwY0EuYWRkVHJhY2soc3RyZWFtLmdldEF1ZGlv
VHJhY2tzKClbMF0sIHN0cmVhbSkKK0EncyB0cmFuc2NlaXZlciBpcyBub3QgeWV0IGFzc29jaWF0
ZWQgd2l0aCBhIG1lZGlhIGRlc2NyaXB0aW9uIGFuZCBzaG91bGQgaGF2ZSBhIG51bGwgbWlkCitQ
QVNTIHBjQS5nZXRUcmFuc2NlaXZlcnMoKVswXS5taWQgaXMgbnVsbAorQTogbG9jYWwgb2ZmZXIg
c2V0IChtaWQgZ2V0cyBkZWZpbmVkKQorbWlkQXNzaWduZWRCeUEgPSBwY0EuZ2V0VHJhbnNjZWl2
ZXJzKClbMF0ubWlkCitGQUlMIG1pZEFzc2lnbmVkQnlBICE9PSBudWxsIHNob3VsZCBiZSB0cnVl
LiBXYXMgZmFsc2UuCitwY0IuYWRkVHJhY2soc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0sIHN0
cmVhbSkKK0IncyB0cmFuc2NlaXZlciBpcyBub3QgeWV0IGFzc29jaWF0ZWQgd2l0aCBhIG1lZGlh
IGRlc2NyaXB0aW9uIGFuZCBzaG91bGQgaGF2ZSBhIG51bGwgbWlkCitQQVNTIHBjQi5nZXRUcmFu
c2NlaXZlcnMoKVswXS5taWQgaXMgbnVsbAorQjogcmVtb3RlIG9mZmVyIHNldCAobWlkIGdldHMg
ZGVmaW5lZCkKK0IncyB0cmFuc2NlaXZlciBzaG91bGQgZ2V0IGl0cyBtaWQgZnJvbSB0aGUgcmVt
b3RlIHNpZGUgKEEpCitQQVNTIHBjQi5nZXRUcmFuc2NlaXZlcnMoKVswXS5taWQgaXMgbWlkQXNz
aWduZWRCeUEKK1BBU1MgT2ZmZXIvYW5zd2VyIGRpYWxvZyBjb21wbGV0ZWQKK1BBU1MgQjogZ290
IHJlbW90ZSB0cmFjayBldmVudAorUEFTUyBldmVudC50cmFjayBpcyBhbiBpbnN0YW5jZSBvZiBN
ZWRpYVN0cmVhbVRyYWNrCitQQVNTIEE6IGdvdCByZW1vdGUgdHJhY2sgZXZlbnQKK1BBU1MgQjog
cmVtb3RlIHRyYWNrIHVubXV0ZSBldmVudAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2ds
aWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlv
bi1vZmZlci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXItZXhw
ZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUyMDNmMGJiYzhkYmViNzg4Zjc4NTQ4OTU2NjA3NjIxNWUz
Y2RiZmUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXIt
ZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMzkgQEAKK1Rlc3QgUlRDUGVlckNvbm5lY3Rpb24uc2V0
UmVtb3RlRGVzY3JpcHRpb24gY2FsbGVkIHdpdGggYW4gUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIG9m
IHR5cGUgJ29mZmVyJworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBB
U1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworKioqIENyZWF0
ZSAocmVtb3RlKSBvZmZlciB3aXRoIGF1ZGlvIChyZW1vdGVPZmZlcjEpCisqKiogRG9uZSwgc3Rh
cnQgdGVzdGluZyB3aXRoIHJlbW90ZU9mZmVyMQorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAn
c3RhYmxlJworUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjLnBlbmRp
bmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjLmN1cnJlbnRSZW1vdGVEZXNjcmlw
dGlvbiBpcyBudWxsCisKK1BBU1MgcmVtb3RlT2ZmZXIxIHNldCBhcyByZW1vdGUgZGVzY3JpcHRp
b24KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9mZmVyJworRkFJTCBw
Yy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUgW29iamVjdCBPYmplY3RdLiBXYXMgW29iamVj
dCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgorRkFJTCBwYy5wZW5kaW5nUmVtb3RlRGVzY3JpcHRp
b24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3QgUlRDU2Vzc2lvbkRlc2Ny
aXB0aW9uXS4KK1BBU1MgcGMuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKKworUEFT
UyByZW1vdGVPZmZlcjEgc2V0IGFzIHJlbW90ZSBkZXNjcmlwdGlvbiAoYWdhaW4pCitQQVNTIHBj
LnNpZ25hbGluZ1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKKworKioqIFRyeSBzZXR0aW5n
IGxvY2FsIGRlc2NyaXB0aW9ucyB3aXRoIGJhZCB0eXBlcyBmb3IgdGhlIGN1cnJlbnQgc3RhdGUK
K1BBU1MgcHJvbWlzZSBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbih7dHlwZTonYW5zd2VyJywgc2Rw
OnJlbW90ZU9mZmVyMS5zZHB9KTsgcmVqZWN0ZWQgd2l0aCBJbnZhbGlkU3RhdGVFcnJvcjogRmFp
bGVkIHRvIHNldCByZW1vdGUgYW5zd2VyIHNkcAorUEFTUyBwcm9taXNlIHBjLnNldFJlbW90ZURl
c2NyaXB0aW9uKHt0eXBlOidwcmFuc3dlcicsIHNkcDpyZW1vdGVPZmZlcjEuc2RwfSk7IHJlamVj
dGVkIHdpdGggSW52YWxpZFN0YXRlRXJyb3I6IEZhaWxlZCB0byBzZXQgcmVtb3RlIGFuc3dlciBz
ZHAKKworKioqIENyZWF0ZSAocmVtb3RlKSBvZmZlciB3aXRoIHZpZGVvIChyZW1vdGVPZmZlcjIp
CisqKiogRG9uZSwgc3RhcnQgdGVzdGluZyB3aXRoIHJlbW90ZU9mZmVyMgorUEFTUyBwYy5zaWdu
YWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1vdGUtb2ZmZXInCisKK1BBU1MgcmVtb3RlT2ZmZXIyIHNl
dCBhcyByZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUt
cmVtb3RlLW9mZmVyJworRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUgW29iamVj
dCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgorRkFJTCBwYy5w
ZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtv
YmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uXS4KK1BBU1MgcGMuY3VycmVudFJlbW90ZURlc2Ny
aXB0aW9uIGlzIG51bGwKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNU
IENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9t
ZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0
YWJsZS1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg0MjY4Y2U3OGFhZTJhYzk2YzJjZDJmODQ0
MDYzMzA0MzA1ZTcxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2ds
aWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0
CkBAIC0wLDAgKzEsNTEgQEAKK1Rlc3RzIFJUQ1BlZXJDb25uZWN0aW9uIGluIHN0YWJsZSBzdGF0
ZS4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdl
cywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcGMuc2lnbmFsaW5nU3Rh
dGUgaXMgInN0YWJsZSIKK1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3Jp
cHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQxKTsgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uCitQQVNTIHNldExvY2FsRGVzY3JpcHRpb24gZmFpbGVkLgorRkFJTCBl
cnJvclJlYXNvbi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9uRXJyb3Iu
IFdhcyBJbnZhbGlkU3RhdGVFcnJvci4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQg
dGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24g
c2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0
YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2Ny
aXB0aW9uKS50aGVuKGZpbmlzaElmU3VjY2VlZGVkLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBub3Qg
dGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRMb2NhbERlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwg
ZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9y
LiBXYXMgSW52YWxpZFN0YXRlRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxk
IHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9u
IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdT
dGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVz
Y3JpcHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQzKTsgZGlkIG5v
dCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4KK0ZB
SUwgZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVy
cm9yLiBXYXMgSW52YWxpZFN0YXRlRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hv
dWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0
aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxp
bmdTdGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9u
RGVzY3JpcHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQ0KTsgZGlk
IG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4K
K0ZBSUwgZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlv
bkVycm9yLiBXYXMgSW52YWxpZFN0YXRlRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24g
c2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2Ny
aXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWdu
YWxpbmdTdGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Np
b25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgZmluaXNoSWZGYWlsZWQpOyBk
aWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0TG9jYWxEZXNjcmlwdGlvbiBzdWNjZWVk
ZWQuCitQQVNTIHBjLmxvY2FsRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLmxv
Y2FsRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSBsb2NhbC4gV2FzIHQ9MCAwCisuCitGQUlMIHBj
LnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgor
UEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1sb2NhbC1vZmZlciIKK0ZBSUwgcGMubG9j
YWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwg
cGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwu
CitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldFJlbW90ZURl
c2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgZmlu
aXNoSWZGYWlsZWQpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0UmVtb3RlRGVz
Y3JpcHRpb24gc3VjY2VlZGVkLgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJv
dyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBl
IGlzICJvZmZlciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSByZW1v
dGUuIFdhcyB0PTAgMAorLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1yZW1vdGUt
b2ZmZXIiCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUK
KwpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IGJkOWQ1YWU4YzE0MzYy
MTZlOThjOTE2MTViMGViMGY5MjY3MGZjNDYuLjllODJjMTk3YTQxNWJiZjFjYWZjZmQwZTEyMzJh
MjA3Y2UwYjM2OGMgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEs
MyArMSwxNyBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxp
YS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdl
YlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0yMzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBFbmFibGUgR3N0V2ViUlRDIGJ5IGRlZmF1bHQgaWYgYSByZWNlbnQtZW5vdWdoICg+PSAx
LjIwKSB2ZXJzaW9uIGlzIGF2YWlsYWJsZS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5k
R1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3Mu
Y21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtl
OgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2U6CisK
IDIwMjItMDMtMDMgIERhbiBHbGFzdG9uYnVyeSAgPGRqZ0BhcHBsZS5jb20+CiAKICAgICAgICAg
QWRkIERhbiBHbGFzdG9uYnVyeSdzIG5hbWUgdG8gY29udHJpYnV0b3JzLmpzb24K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454531</attachid>
            <date>2022-03-12 04:39:01 -0800</date>
            <delta_ts>2022-03-17 09:38:29 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220312043859.patch</filename>
            <type>text/plain</type>
            <size>338582</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxMjA2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDc0ZjRjMzdhOTVlNzk1YWJkN2QyZDU5
MjlkZTc3Yzc0YzBlNTQ5YzAuLmIyZWRjMzBhZWVjMzc1NDdmYTNiOGNhZTBjZjBmNDI5YWZmNjk1
MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAzLTExICBDaHJpcyBEdW1leiAgPGNkdW1l
ekBhcHBsZS5jb20+CiAKICAgICAgICAgSVBDIHRocmVhZCdzIFFPUyBzaG91bGQgbWF0Y2ggdGhl
IHNlbmRpbmcgdGhyZWFkJ3MgUU9TIHdoZW4gY2FsbGluZyBzZW5kU3luYygpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggOTJjMDM3OTUzYzg2MWFhYzBiMDEwNDA5YzVhYjcwMGE1OTNlMzhkMS4uZTA2OGViOTM0NzVj
MjA0ODdmMTczMzVjODNhNzcwZDc1MjM1MTcwYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3NCBA
QAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNr
ZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1
NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbml0
aWFsIEdzdFdlYlJUQyBiYWNrZW5kLiBBIGxvdCBvZiBmZWF0dXJlcyB1bmltcGxlbWVudGVkIHN0
aWxsLCBidXQgd2Ugd2lsbCBpbmNyZW1lbnRhbGx5CisgICAgICAgIGltcHJvdmUgdGhlIGxheW91
dCB0ZXN0IGNvdmVyYWdlIGluIGZvbGxvdy11cCBwYXRjaGVzLiBNb3N0IG5vdGFibGUgc2hvcnQt
Y29taW5ncyBjdXJyZW50bHk6CisKKyAgICAgICAgLSBEYXRhQ2hhbm5lbCBzdXBwb3J0IGlzIGlu
Y29tcGxldGUgKGJ1ZyAyMzU4NzkpCisgICAgICAgIC0gTmV0d29yayB0cmFmZmljIG5vdCByb3V0
ZWQgdGhyb3VnaCBOZXR3b3JrIHByb2Nlc3MgeWV0CisgICAgICAgIC0gU3RhdHMgc3VwcG9ydCBp
bmNvbXBsZXRlCisgICAgICAgIC0gRFRNRiBzdXBwb3J0IHVuaW1wbGVtZW50ZWQKKyAgICAgICAg
LSBJQ0UgcmVzdGFydHMgbm90IHN1cHBvcnRlZCB5ZXQKKyAgICAgICAgLSBSZS1uZWdvdGlhdGlv
biB1bmxpa2VseSB0byB3b3JrCisgICAgICAgIC0gU2ltdWxjYXN0IG5vdCBoYW5kbGVkIHlldAor
ICAgICAgICAtIEJhbGFuY2VkIGJ1bmRsZSBub3Qgc3VwcG9ydGVkCisgICAgICAgIC0gUlRYIGFu
ZCBGRUMgdW4tdGVzdGVkLCBidXQgc2hvdWxkbid0IGJlIGhhcmQgdG8gZml4CisKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHA6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwOgorICAgICAgICAoV2ViQ29y
ZTo6UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZW5lcmF0ZUNlcnRpZmljYXRlKToKKyAgICAgICAg
KiBNb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlJUQ1BlZXJDb25uZWN0aW9uOjpjcmVhdGUpOgorICAgICAgICAqIE1vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpmcm9tUlRD
RGF0YUNoYW5uZWxJbml0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlcjo6Y2hhbm5lbEV2ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6fkdTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6
OnNldENsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6OnNlbmRTdHJpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFu
bmVsSGFuZGxlcjo6c2VuZFJhd0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0
YUNoYW5uZWxIYW5kbGVyOjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRh
Q2hhbm5lbEhhbmRsZXI6OmNoZWNrU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
RGF0YUNoYW5uZWxIYW5kbGVyOjpyZWFkeVN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uTWVzc2FnZURhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbk1lc3NhZ2VTdHJpbmcpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbkVycm9yKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25CdWZmZXJl
ZEFtb3VudExvdyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXI6OnBvc3RUYXNrKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpH
U3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjppY2VUcmFu
c3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRC
YWNrZW5kOjpyZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEdGxz
VHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2Vu
ZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6On5HU3Ry
ZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lcklj
ZVRyYW5zcG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydENoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNsaWVu
dCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpzdGF0
ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZDo6Z2F0aGVyaW5nU3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6aW5pdGlhbGl6ZVBpcGVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6On5HU3RyZWFtZXJNZWRpYUVuZHBvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRlYXJkb3duUGlwZWxpbmUpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aGFuZGxlTWVzc2FnZSk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpkaXNwb3NlRWxlbWVudENoYWluKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRp
b24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVzdGFydElj
ZSk6CisgICAgICAgIChXZWJDb3JlOjpmZXRjaERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNv
cmU6OmZldGNoU2lnbmFsaW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6ZGVzY3JpcHRpb25z
RnJvbVdlYlJUQ0Jpbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
Ojpkb1NldExvY2FsRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6c2V0UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpTZXREZXNjcmlwdGlvbkNhbGxEYXRhOjpTZXREZXNjcmlwdGlvbkNh
bGxEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldERl
c2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0
b3JlUmVtb3RlTUxpbmVJbmZvKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OmNvbmZpZ3VyZUFuZExpbmtTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6cmVxdWVzdFBhZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjphZGRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpyZW1vdmVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50Ojpkb0NyZWF0ZU9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlQW5zd2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmdldFN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6Om1lZGlhU3RyZWFtRnJvbVJUQ1N0cmVhbSk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRSZW1vdGVTdHJlYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVtb3ZlUmVtb3RlU3RyZWFtKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVRyYW5zY2VpdmVyQmFj
a2VuZHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkVHJh
bnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3Jl
YXRlU291cmNlRm9yVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6c2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OnRyYW5zY2VpdmVyQmFja2VuZEZyb21TZW5kZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkSWNlQ2FuZGlkYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZURhdGFDaGFubmVs
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uRGF0YUNoYW5u
ZWwpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y2xvc2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdXNwZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlc3VtZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpvbk5lZ290aWF0aW9uTmVlZGVkKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlQ29ubmVjdGlvbkNoYW5nZSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUdhdGhlcmlu
Z0NoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpvbklj
ZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpj
cmVhdGVTZXNzaW9uRGVzY3JpcHRpb25TdWNjZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uRmFpbGVkKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNvbGxlY3RUcmFuc2NlaXZl
cnMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyU3Rh
dHNGb3JMb2dnaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyOjpSVENTdGF0
c0xvZ2dlcik6CisgICAgICAgIChXZWJDb3JlOjpSVENTdGF0c0xvZ2dlcjo6dG9KU09OU3RyaW5n
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnByb2Nl
c3NTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvblN0
YXRzRGVsaXZlcmVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OnN0YXJ0TG9nZ2luZ1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OnN0b3BMb2dnaW5nU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6bG9nQ2hhbm5lbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpzdGF0c0xvZ0ludGVydmFsIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5h
bWUpOgorICAgICAgICAoV1RGOjpMb2dBcmd1bWVudDxXZWJDb3JlOjpSVENTdGF0c0xvZ2dlcj46
OnRvU3RyaW5nKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50Lmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmlzU3RvcHBlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50Ojppc05lZ290aWF0aW9uTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnBpcGVsaW5lIGNvbnN0KToKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZUdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OnJlY2VpdmVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9u
QmFja2VuZDo6c2VuZGVyQ2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZDo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c3VzcGVu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJl
c3VtZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OnJlc3RhcnRJY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpzZXRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6YmFja2Vu
ZEZyb21SVFBTZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpkb1NldExvY2FsRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb1NldFJlbW90ZURlc2NyaXB0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9DcmVhdGVP
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OmRvQ3JlYXRlQW5zd2VyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpkb1N0b3ApOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpkb0FkZEljZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZVJlY2VpdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlRGF0YUNoYW5u
ZWxIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbmRFeGlzdGluZ1NlbmRlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJh
bnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpiYWNrZW5kRnJvbVJUUFRyYW5zY2VpdmVyKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZXhpc3RpbmdUcmFuc2Nl
aXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
Om5ld1JlbW90ZVRyYW5zY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZDo6Y29sbGVjdFRyYW5zY2VpdmVycyk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlbW92ZVRyYWNrKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YXBwbHlSb3RhdGlvbkZv
ck91dGdvaW5nVmlkZW9Tb3VyY2VzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZDo6Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZSk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmlzTmVnb3RpYXRp
b25OZWVkZWQgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6
Z2V0UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJh
Y2tlbmQ6OmdldENvbnRyaWJ1dGluZ1NvdXJjZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRTeW5jaHJvbml6YXRpb25Tb3VyY2VzIGNv
bnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Y3Jl
YXRlU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2Vu
ZDo6cnRjUnRwVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJS
dHBSZWNlaXZlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuaDog
QWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
UnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjptZWRpYVR5cGVGcm9tUmVjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRw
UmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJh
Y2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1C
YWNrZW5kOjp+R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6c2V0VHJhbnNm
b3JtYWJsZUZyYW1lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJhbWUpOgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFj
a2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp1
cGRhdGVUcmFja1NvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kOjpzdGFydFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kOjpzdG9wU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNl
bmRlckJhY2tlbmQ6OnJlcGxhY2VUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnNldFBhcmFtZXRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6Y3JlYXRlRFRNRkJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6cnRjUnRwVHJhbnNmb3Jt
QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpz
ZXRNZWRpYVN0cmVhbUlkcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFu
c2Zvcm1CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjptZWRpYVR5cGVGcm9t
U2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJh
Y2tlbmQ6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJlYW1lclJ0cFNl
bmRlclRyYW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2Vu
ZGVyVHJhbnNmb3JtQmFja2VuZDo6c2V0VHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2spOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6cmVxdWVz
dEtleUZyYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5j
cHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVSZWNlaXZlckJhY2tlbmQpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVT
ZW5kZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZDo6ZGlyZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0
cFRyYW5zY2VpdmVyQmFja2VuZDo6Y3VycmVudERpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNldERpcmVjdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6Om1pZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnN0b3ApOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzdG9wcGVk
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZDo6c2V0Q29kZWNQcmVmZXJlbmNlcyk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJh
Y2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQ6OnNldElucHV0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UnRwVHJhbnNmb3JtQmFja2VuZDo6Y2xlYXJUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpwcm9jZXNzVHJh
bnNmb3JtZWRGcmFtZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tl
bmQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNj
dHBUcmFuc3BvcnRCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b1JUQ1Nj
dHBUcmFuc3BvcnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZDo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFj
a2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
U2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQp
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBU
cmFuc3BvcnRCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpmaWxsUlRDU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJUQ1JUUFN0cmVh
bVN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENDb2RlY1N0YXRzKToKKyAgICAgICAg
KFdlYkNvcmU6OmZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6
ZmlsbE91dGJvdW5kUlRQU3RyZWFtU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJUQ1Bl
ZXJDb25uZWN0aW9uU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJUQ1RyYW5zcG9ydFN0
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSZXBvcnRDYWxsYmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpDYWxsYmFja0hvbGRlcjo6Q2FsbGJhY2tIb2xkZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OmdldFN0YXRzKToKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpjcmVhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I6OnNldEVsZW1lbnQpOgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxz
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZUNvbXBvbmVudCk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1JUQ0ljZVByb3RvY29sKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRD
SWNlVGNwQ2FuZGlkYXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZUNhbmRpZGF0
ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENFcnJvcik6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1dlYlJUQ0JpdFJhdGVQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjpmcm9tUlRDRW5j
b2RpbmdQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmZyb21XZWJSVENCaXRSYXRlUHJp
b3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENFbmNvZGluZ1BhcmFtZXRlcnMpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9SVENSdHBTZW5kUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3Jl
OjplbnN1cmVEZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQpOgorICAgICAgICAoV2ViQ29yZTo6cGFy
c2VJY2VDYW5kaWRhdGVTRFApOgorICAgICAgICAoV2ViQ29yZTo6eDUwOVNlcmlhbGl6ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpwcml2YXRlS2V5U2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6
OmdlbmVyYXRlQ2VydGlmaWNhdGUpOgorICAgICAgICAoV2ViQ29yZTo6c2RwTWVkaWFIYXNBdHRy
aWJ1dGVLZXkpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lcldlYlJUQ1V0aWxzLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9SVENSdHBUcmFu
c2NlaXZlckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmcm9tUlRDUnRwVHJhbnNjZWl2
ZXJEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6dG9TZXNzaW9uRGVzY3JpcHRpb25UeXBl
KToKKyAgICAgICAgKFdlYkNvcmU6OmZyb21TZXNzaW9uRGVzY3JpcHRpb25UeXBlKToKKyAgICAg
ICAgKFdlYkNvcmU6OnRvU2lnbmFsaW5nU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJ
Y2VDb25uZWN0aW9uU3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENEdGxzVHJhbnNwb3J0
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VUcmFuc3BvcnRTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OmJ1bmRsZVBvbGljeUZyb21Db25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OmljZVRy
YW5zcG9ydFBvbGljeUZyb21Db25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRD
RXJyb3JEZXRhaWxUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2U6Cisg
ICAgICAgICogcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJHU3Ry
ZWFtZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1l
cjo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpBdWRp
b1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjp+QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpoYW5kbGVO
ZXdEZWludGVybGVhdmVQYWQpOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9H
U3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwOgorICAgICAgICAoV1RGOjphZG9w
dEdSZWYpOgorICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPik6Cisg
ICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4pOgorICAgICAgICAo
V1RGOjpyZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQ
dHI8R3N0V2ViUlRDUlRQU2VuZGVyPik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRD
UlRQVHJhbnNjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFRy
YW5zY2VpdmVyPik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+
KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPik6CisgICAg
ICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4pOgorICAgICAgICAoV1RG
OjpkZXJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4pOgorICAgICAgICAoV1RGOjpyZWZH
UHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0
V2ViUlRDSUNFVHJhbnNwb3J0Pik6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dSZWZQdHJHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNhcHNNZWRpYVR5
cGUpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0
cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUuY3BwOgorICAgICAgICAoV2ViQ29yZTo6TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU6
OmNyZWF0ZUF1ZGlvU291cmNlUHJvdmlkZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6Y3JlYXRlQ29udmVydGVyKToK
KyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVy
ZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyQ2FwdHVyZXI6OmNyZWF0ZVNvdXJj
ZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRU
TUZTZW5kZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJE
VE1GU2VuZGVyQmFja2VuZDo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6On5HU3RyZWFtZXJEVE1GU2VuZGVy
QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6
Y2FuSW5zZXJ0RFRNRik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFj
a2VuZDo6cGxheVRvbmUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJh
Y2tlbmQ6OnRvbmVzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5k
ZXJCYWNrZW5kOjpkdXJhdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJE
VE1GU2VuZGVyQmFja2VuZDo6aW50ZXJUb25lR2FwIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpvblRvbmVQbGF5ZWQpOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5o
OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwOgorICAgICAgICAod2Via2l0TWVkaWFTdHJlYW1TcmNB
ZGRUcmFjayk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclZpZGVvRW5jb2Rlci5jcHA6CisgICAgICAgICh3ZWJraXRfd2VicnRjX3ZpZGVvX2VuY29k
ZXJfY2xhc3NfaW5pdCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpSZWFsdGlt
ZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjp+UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c3RvcFByb2R1Y2luZ0RhdGEpOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpj
YXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlR1N0cmVhbWVyOjpzZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlR1N0cmVhbWVyOjpjcmVhdGUpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJl
YW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJj
ZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpsb2NrVmFsdmUgY29uc3Qp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVs
ZWFzZVZhbHZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3Vy
Y2VHU3RyZWFtZXI6OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmJpbik6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpkaXNw
YXRjaFNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzdGFydFByb2R1Y2luZ0RhdGEpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzdG9wUHJv
ZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXI6OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3NEaWRDaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVy
OjpkaXNwYXRjaFNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRl
KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpS
ZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzZXRQYXlsb2FkVHlwZSk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6On5SZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTb3VyY2UpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzdGFydCk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0b3ApOgor
ICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpz
b3VyY2VNdXRlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2VFbmFibGVkQ2hhbmdlZCk6CisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmluaXRpYWxpemVGcm9t
VHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyOjpsaW5rKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6c2V0U2lua1BhZCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1l
cjo6c291cmNlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6YWxsb3dlZENhcHMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6
UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpwYWQgY29uc3QpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZW5kZXIg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyOjpiaW4gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyOjpzZXRQYXlsb2FkVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
ci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXRQ
YXlsb2FkVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAgKiB0
ZXN0aW5nL0ludGVybmFscy5jcHA6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnJlc2V0
VG9Db25zaXN0ZW50U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRXZWJS
VENIMjY1U3VwcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFdlYlJUQ1ZQ
OVN1cHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRXZWJSVENWUDlWVEJT
dXBwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0RW5hYmxlV2ViUlRDRW5j
cnlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldFVzZURUTFMxMCk6CisK
IDIwMjItMDMtMTEgIFBlciBBcm5lIFZvbGxhbiAgPHB2b2xsYW5AYXBwbGUuY29tPgogCiAgICAg
ICAgIFttYWNPU10gSW1hZ2UgZGVjb2RlcnMgc2hvdWxkIGJlIHJlc3RyaWN0ZWQgZm9yIE1haWwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNl
cy55YW1sIGIvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWwKaW5kZXggNGFhNjdhMzEyOTgwNGRhOWZmOGU2YTQ0OTQ1OTZjNDY2MWZmOWUxNi4uYjY2Yzc0
MGU4MDcyY2M1OWM1YmEyN2M1ZWU0MzM2NDE2ZjlmMWNmZSAxMDA2NDQKLS0tIGEvU291cmNlL1dU
Ri9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlhbWwKKysrIGIvU291cmNlL1dU
Ri9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlhbWwKQEAgLTE3MjIsNyArMTcy
Miw5IEBAIFBlZXJDb25uZWN0aW9uRW5hYmxlZDoKICAgICBXZWJLaXRMZWdhY3k6CiAgICAgICBk
ZWZhdWx0OiB0cnVlCiAgICAgV2ViS2l0OgotICAgICAgZGVmYXVsdDogV2ViQ29yZTo6TGliV2Vi
UlRDUHJvdmlkZXI6OndlYlJUQ0F2YWlsYWJsZSgpCisgICAgICAiVVNFKExJQldFQlJUQykiOiBX
ZWJDb3JlOjpMaWJXZWJSVENQcm92aWRlcjo6d2ViUlRDQXZhaWxhYmxlKCkKKyAgICAgICJVU0Uo
R1NUUkVBTUVSX1dFQlJUQykiOiB0cnVlCisgICAgICBkZWZhdWx0OiBmYWxzZQogICAgIFdlYkNv
cmU6CiAgICAgICBkZWZhdWx0OiB0cnVlCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvU2NyaXB0
cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sIGIvU291cmNlL1dU
Ri9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKaW5k
ZXggZDBlZTk5Y2Y0YzM5Yzc3MDQ1NDcyZTA4OWUxMmZmZWQ3NDZjZWQ3ZS4uNzkzOGEwZGQyODE0
NmNkYzI3ZjlhMTkzMzgxYjI1MDEwY2VhNDRkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi9TY3Jp
cHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwKKysrIGIvU291
cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlh
bWwKQEAgLTE3MjMsOSArMTcyMywxMSBAQCBXZWJSVENFbmNvZGVkVHJhbnNmb3JtRW5hYmxlZDoK
ICAgICBXZWJLaXRMZWdhY3k6CiAgICAgICBkZWZhdWx0OiBmYWxzZQogICAgIFdlYktpdDoKLSAg
ICAgIGRlZmF1bHQ6IHRydWUKKyAgICAgICJVU0UoTElCV0VCUlRDKSI6IHRydWUKKyAgICAgIGRl
ZmF1bHQ6IGZhbHNlCiAgICAgV2ViQ29yZToKLSAgICAgIGRlZmF1bHQ6IHRydWUKKyAgICAgICJV
U0UoTElCV0VCUlRDKSI6IHRydWUKKyAgICAgIGRlZmF1bHQ6IGZhbHNlCiAKICMgRklYTUU6IElz
IHRoaXMgaW1wbGVtZW50ZWQgZm9yIFdlYktpdExlZ2FjeT8gSWYgbm90LCB0aGlzIHNob3VsZCBi
ZSBleGNsdWRlZCBmcm9tIFdlYktpdExlZ2FjeSBlbnRpcmVseS4KIFdlYlJUQ0gyNjRMb3dMYXRl
bmN5RW5jb2RlckVuYWJsZWQ6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQ
dHIuY3BwIGIvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNwcAppbmRleCAxYjlhZGUzZjkz
NmVlNTY0ZDM4MmMwN2VmOTY2NTc2YWI2NjE5YjQxLi45MzEyYTNlODk0YmQ4YTBkN2ExMWE2YTQ1
Y2NiZDM2ODczZjhjNTBmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIu
Y3BwCisrKyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAKQEAgLTIyMyw2ICsyMjMs
MjIgQEAgdGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHIoR1VyaSogcHRyKQogfQogI2VuZGlmCiAK
K3RlbXBsYXRlIDw+CitHQXJyYXkqIHJlZkdQdHIoR0FycmF5KiBwdHIpCit7CisgICAgaWYgKHB0
cikKKyAgICAgICAgZ19hcnJheV9yZWYocHRyKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3Rl
bXBsYXRlIDw+Cit2b2lkIGRlcmVmR1B0cihHQXJyYXkqIHB0cikKK3sKKyAgICBpZiAocHRyKQor
ICAgICAgICBnX2FycmF5X3VucmVmKHB0cik7Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAj
ZW5kaWYgLy8gVVNFKEdMSUIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQ
dHIuaCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCmluZGV4IGU3MjFmZDU1ZjQyYWMz
ZDc2YjQwMTc2MGUwYTE5Yjk5ZmUzZTBmOGIuLjY2NzM2MDc4N2FjNWY2NDk2MGJlMWQ1NDYyZGRl
NTlkNzM1NWY2YTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCisr
KyBiL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oCkBAIC0yNTAsNiArMjUwLDggQEAgdGVt
cGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdEYXRlVGltZSogcmVmR1B0cihHRGF0ZVRpbWUq
IHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIoR0Rh
dGVUaW1lKiBwdHIpOwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdEQnVzTm9kZUlu
Zm8qIHJlZkdQdHIoR0RCdXNOb2RlSW5mbyogcHRyKTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRf
UFJJVkFURSB2b2lkIGRlcmVmR1B0cihHREJ1c05vZGVJbmZvKiBwdHIpOwordGVtcGxhdGUgPD4g
V1RGX0VYUE9SVF9QUklWQVRFIEdBcnJheSogcmVmR1B0cihHQXJyYXkqKTsKK3RlbXBsYXRlIDw+
IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHQXJyYXkqKTsKIAogI2lmIEhBVkUo
R1VSSSkKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHVXJpKiByZWZHUHRyKEdVcmkq
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMv
TWVkaWFDYXBhYmlsaXRpZXMuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFi
aWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKaW5kZXggZGZiOWJkYWM1NjZiNzk2NWJhYWNm
ZTBjZmVlNzA2MTQzOGIxOTViMi4uOGM3NDRmY2QxMzc3MDA2ZmJiOTA3NjZlYmIzYmM0Yzg0ZThk
Y2NiZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGll
cy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YWNhcGFiaWxpdGllcy9NZWRpYUNhcGFiaWxpdGllcy5jcHAKQEAgLTE4MCw3ICsxODAsNyBAQCBz
dGF0aWMgdm9pZCBnYXRoZXJEZWNvZGluZ0luZm8oRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYURl
Y29kaW5nQ29uZmlndXJhdGlvbiYmCiAgICAgY29uZmlndXJhdGlvbi5jYW5FeHBvc2VWUDkgPSBk
b2N1bWVudC5zZXR0aW5ncygpLnZwOURlY29kZXJFbmFibGVkKCk7CiAjZW5kaWYKIAotI2lmIEVO
QUJMRShXRUJfUlRDKQorI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoTElCV0VCUlRDKQogICAg
IGlmIChjb25maWd1cmF0aW9uLnR5cGUgPT0gTWVkaWFEZWNvZGluZ1R5cGU6OldlYlJUQykgewog
ICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIHBh
Z2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuY3JlYXRlRGVjb2RpbmdDb25maWd1cmF0aW9uKFdURk1v
dmUoY29uZmlndXJhdGlvbiksIFdURk1vdmUoZGVjb2RpbmdDYWxsYmFjaykpOwpAQCAtMjAwLDcg
KzIwMCw3IEBAIHN0YXRpYyB2b2lkIGdhdGhlckVuY29kaW5nSW5mbyhEb2N1bWVudCYgZG9jdW1l
bnQsIE1lZGlhRW5jb2RpbmdDb25maWd1cmF0aW9uJiYKICAgICAgICAgY2FsbGJhY2soV1RGTW92
ZShyZXN1bHQpKTsKICAgICB9OwogCi0jaWYgRU5BQkxFKFdFQl9SVEMpCisjaWYgRU5BQkxFKFdF
Ql9SVEMpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGNvbmZpZ3VyYXRpb24udHlwZSA9PSBN
ZWRpYUVuY29kaW5nVHlwZTo6V2ViUlRDKSB7CiAgICAgICAgIGlmIChhdXRvKiBwYWdlID0gZG9j
dW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5jcmVh
dGVFbmNvZGluZ0NvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25maWd1cmF0aW9uKSwgV1RGTW92ZShl
bmNvZGluZ0NhbGxiYWNrKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKaW5kZXggMGZhYThiYjU1YTE5ODVlOTgwZjczNmI2MWRh
MGQ2MzBkNmNhZTNjZC4uYmZjNTY2OWVkNzdhNDNjZGI5OWEyMzcwMDEwYWM2MTFkMmNiYjkzNCAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmlj
ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZp
Y2VzLmNwcApAQCAtNDAsNiArNDAsNyBAQAogI2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAi
SlNET01Qcm9taXNlRGVmZXJyZWQuaCIKICNpbmNsdWRlICJKU01lZGlhRGV2aWNlSW5mby5oIgor
I2luY2x1ZGUgIkxvZ2dpbmcuaCIKICNpbmNsdWRlICJNZWRpYVRyYWNrU3VwcG9ydGVkQ29uc3Ry
YWludHMuaCIKICNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MuaCIKICNpbmNs
dWRlICJTZXR0aW5ncy5oIgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCmluZGV4IDg2ZDc1NzM5OTJm
NGQ1YmQ0YzM1M2RjYjYwOTcyNjRlOTg1ZDU3ZTguLjJmMzNmMmIwNzJmYTNmZWY1ZDNhYjdkZDNh
ZjlhMjhhNjRhYjEwY2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKQEAgLTUzLDkgKzUzLDE0
IEBACiAjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nQnVpbGRlci5oPgogI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ0NvbmNhdGVuYXRlTnVtYmVycy5oPgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNlbmRpZgorCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLSNpZiAhVVNFKExJQldFQlJUQykKKyNpZiAhVVNFKExJQldFQlJUQykg
JiYgIVVTRShHU1RSRUFNRVJfV0VCUlRDKQorCiBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFBlZXJD
b25uZWN0aW9uQmFja2VuZD4gY3JlYXRlTm9QZWVyQ29ubmVjdGlvbkJhY2tlbmQoUlRDUGVlckNv
bm5lY3Rpb24mKQogewogICAgIHJldHVybiBudWxscHRyOwpAQCAtMjE3LDE4ICsyMjIsOCBAQCB2
b2lkIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQo
c3RkOjpvcHRpb25hbDxEZXNjcmlwdAogICAgICAgICBpZiAoZGVzY3JpcHRpb25TdGF0ZXMpCiAg
ICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uLnVwZGF0ZURlc2NyaXB0aW9ucyhXVEZNb3ZlKCpk
ZXNjcmlwdGlvblN0YXRlcykpOwogCi0gICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHMp
IHsKLSAgICAgICAgICAgIGF1dG8mIHRyYWNrID0gZXZlbnQudHJhY2suZ2V0KCk7Ci0KLSAgICAg
ICAgICAgIG1fcGVlckNvbm5lY3Rpb24uZGlzcGF0Y2hFdmVudChSVENUcmFja0V2ZW50OjpjcmVh
dGUoZXZlbnROYW1lcygpLnRyYWNrRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6
SXNDYW5jZWxhYmxlOjpObywgV1RGTW92ZShldmVudC5yZWNlaXZlciksIFdURk1vdmUoZXZlbnQu
dHJhY2spLCBXVEZNb3ZlKGV2ZW50LnN0cmVhbXMpLCBXVEZNb3ZlKGV2ZW50LnRyYW5zY2VpdmVy
KSkpOwotICAgICAgICAgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiRGlzcGF0Y2hlZCBp
ZiBmZWFzaWJsZSB0cmFjayBvZiB0eXBlICIsIHRyYWNrLnNvdXJjZSgpLnR5cGUoKSk7Ci0KLSAg
ICAgICAgICAgIGlmIChtX3BlZXJDb25uZWN0aW9uLmlzQ2xvc2VkKCkpCi0gICAgICAgICAgICAg
ICAgcmV0dXJuOwotCi0gICAgICAgICAgICAvLyBGSVhNRTogQXMgcGVyIHNwZWMsIHdlIHNob3Vs
ZCBzZXQgbXV0ZWQgdG8gJ2ZhbHNlJyB3aGVuIHN0YXJ0aW5nIHRvIHJlY2VpdmUgdGhlIGNvbnRl
bnQgZnJvbSBuZXR3b3JrLgotICAgICAgICAgICAgdHJhY2suc291cmNlKCkuc2V0TXV0ZWQoZmFs
c2UpOwotICAgICAgICB9CisgICAgICAgIGZvciAoYXV0byYgZXZlbnQgOiBldmVudHMpCisgICAg
ICAgICAgICBkaXNwYXRjaFRyYWNrRXZlbnQoZXZlbnQpOwogCiAgICAgICAgIGlmIChtX3BlZXJD
b25uZWN0aW9uLmlzQ2xvc2VkKCkpCiAgICAgICAgICAgICByZXR1cm47CkBAIC0yNDAsNiArMjM1
LDIwIEBAIHZvaWQgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzZXRSZW1vdGVEZXNjcmlwdGlvblN1
Y2NlZWRlZChzdGQ6Om9wdGlvbmFsPERlc2NyaXB0CiAgICAgfSk7CiB9CiAKK3ZvaWQgUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpkaXNwYXRjaFRyYWNrRXZlbnQoUGVuZGluZ1RyYWNrRXZlbnQmIGV2
ZW50KQoreworICAgIGF1dG8mIHRyYWNrID0gZXZlbnQudHJhY2suZ2V0KCk7CisKKyAgICBtX3Bl
ZXJDb25uZWN0aW9uLmRpc3BhdGNoRXZlbnQoUlRDVHJhY2tFdmVudDo6Y3JlYXRlKGV2ZW50TmFt
ZXMoKS50cmFja0V2ZW50LCBFdmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJs
ZTo6Tm8sIFdURk1vdmUoZXZlbnQucmVjZWl2ZXIpLCBXVEZNb3ZlKGV2ZW50LnRyYWNrKSwgV1RG
TW92ZShldmVudC5zdHJlYW1zKSwgV1RGTW92ZShldmVudC50cmFuc2NlaXZlcikpKTsKKyAgICBB
TFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJEaXNwYXRjaGVkIGlmIGZlYXNpYmxlIHRyYWNrIG9m
IHR5cGUgIiwgdHJhY2suc291cmNlKCkudHlwZSgpKTsKKworICAgIGlmIChtX3BlZXJDb25uZWN0
aW9uLmlzQ2xvc2VkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJWE1FOiBBcyBwZXIg
c3BlYywgd2Ugc2hvdWxkIHNldCBtdXRlZCB0byAnZmFsc2UnIHdoZW4gc3RhcnRpbmcgdG8gcmVj
ZWl2ZSB0aGUgY29udGVudCBmcm9tIG5ldHdvcmsuCisgICAgdHJhY2suc291cmNlKCkuc2V0TXV0
ZWQoZmFsc2UpOworfQorCiB2b2lkIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0UmVtb3RlRGVz
Y3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uJiYgZXhjZXB0aW9uKQogewogICAgIEFTU0VSVChpc01h
aW5UaHJlYWQoKSk7CkBAIC00MzcsMTMgKzQ0NiwxOSBAQCB2b2lkIFBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZShEb2N1bWVudCYgZG9jdW1lbnQsIGNvbnN0IENlcnRp
ZgogICAgICAgICBwcm9taXNlLnJlamVjdChJbnZhbGlkU3RhdGVFcnJvcik7CiAgICAgICAgIHJl
dHVybjsKICAgICB9CisKICAgICBMaWJXZWJSVENDZXJ0aWZpY2F0ZUdlbmVyYXRvcjo6Z2VuZXJh
dGVDZXJ0aWZpY2F0ZShkb2N1bWVudC5zZWN1cml0eU9yaWdpbigpLCBwYWdlLT5saWJXZWJSVENQ
cm92aWRlcigpLCBpbmZvLCBbcHJvbWlzZSA9IFdURk1vdmUocHJvbWlzZSldKGF1dG8mJiByZXN1
bHQpIG11dGFibGUgewogICAgICAgICBwcm9taXNlLnNldHRsZShXVEZNb3ZlKHJlc3VsdCkpOwog
ICAgIH0pOworI2VsaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisgICAgYXV0byBjZXJ0aWZpY2F0
ZSA9IDo6V2ViQ29yZTo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZShkb2N1bWVudC5zZWN1cml0eU9yaWdp
bigpLCBpbmZvKTsKKyAgICBpZiAoY2VydGlmaWNhdGUuaGFzX3ZhbHVlKCkpCisgICAgICAgIHBy
b21pc2UucmVzb2x2ZSgqY2VydGlmaWNhdGUpOworICAgIGVsc2UKKyAgICAgICAgcHJvbWlzZS5y
ZWplY3QoTm90U3VwcG9ydGVkRXJyb3IpOwogI2Vsc2UKICAgICBVTlVTRURfUEFSQU0oZG9jdW1l
bnQpOwotICAgIFVOVVNFRF9QQVJBTShleHBpcmVzKTsKLSAgICBVTlVTRURfUEFSQU0odHlwZSk7
CisgICAgVU5VU0VEX1BBUkFNKGluZm8pOwogICAgIHByb21pc2UucmVqZWN0KE5vdFN1cHBvcnRl
ZEVycm9yKTsKICNlbmRpZgogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgKaW5kZXggMWUyM2I0YjJjMzZh
MzlhMzg0OTM2MmI0YWYwYmEyNDhhMDE4YjZiZS4uN2RmNzcyMDc4OWYyNmUwOGQ5MjU0YjE5Yzcy
NTA3MTRlY2U0NTllMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5oCkBAIC0yMjcsNiArMjI3LDggQEAg
cHJvdGVjdGVkOgogICAgIH07CiAgICAgdm9pZCBhZGRQZW5kaW5nVHJhY2tFdmVudChQZW5kaW5n
VHJhY2tFdmVudCYmKTsKIAorICAgIHZvaWQgZGlzcGF0Y2hUcmFja0V2ZW50KFBlbmRpbmdUcmFj
a0V2ZW50Jik7CisKIHByaXZhdGU6CiAgICAgdmlydHVhbCB2b2lkIGRvQ3JlYXRlT2ZmZXIoUlRD
T2ZmZXJPcHRpb25zJiYpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgZG9DcmVhdGVBbnN3ZXIoUlRD
QW5zd2VyT3B0aW9ucyYmKSA9IDA7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCmluZGV4IDViZGRmZWM3ZTRkZmM5
ZDljMDI5OWM5ZTI3Y2E5ZGMyMmRmNjQxMDQuLjkwZGU2Mzk5MzRlZDYxYzVjMGIxMDEyYzBhYTUz
OTdkZDBkOGIzMmEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwCkBAIC05NSw3ICs5NSw3IEBAIEV4Y2VwdGlv
bk9yPFJlZjxSVENQZWVyQ29ubmVjdGlvbj4+IFJUQ1BlZXJDb25uZWN0aW9uOjpjcmVhdGUoRG9j
dW1lbnQmIGRvY3VtZW50CiAgICAgaWYgKCFwZWVyQ29ubmVjdGlvbi0+aXNDbG9zZWQoKSkgewog
ICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkgewogICAgICAgICAgICAg
cGVlckNvbm5lY3Rpb24tPnJlZ2lzdGVyVG9Db250cm9sbGVyKHBhZ2UtPnJ0Y0NvbnRyb2xsZXIo
KSk7Ci0jaWYgIUxPR19ESVNBQkxFRCB8fCAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyNpZiBVU0Uo
TElCV0VCUlRDKSAmJiAoIUxPR19ESVNBQkxFRCB8fCAhUkVMRUFTRV9MT0dfRElTQUJMRUQpCiAg
ICAgICAgICAgICBpZiAoIXBhZ2UtPnNlc3Npb25JRCgpLmlzRXBoZW1lcmFsKCkpCiAgICAgICAg
ICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRMb2dnaW5nTGV2ZWwoTG9nV2Vi
UlRDLmxldmVsKTsKICNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYmE3YmE5YTAwNTk2ZDY1MGU0YzdiM2Y3ODNj
NzI3YjIxYTU1ZGQ2NgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5jcHAKQEAg
LTAsMCArMSwzMDkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKKwor
I2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWwu
aCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEV2ZW50LmgiCisjaW5jbHVkZSAiUlRDRXJyb3Iu
aCIKKyNpbmNsdWRlICJSVENQcmlvcml0eVR5cGUuaCIKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhy
ZWFkLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2lu
dF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50
X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+
IEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6ZnJvbVJUQ0RhdGFDaGFubmVsSW5pdChjb25z
dCBSVENEYXRhQ2hhbm5lbEluaXQmIG9wdGlvbnMpCit7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1
Y3R1cmU+IGluaXQoZ3N0X3N0cnVjdHVyZV9uZXcoIm9wdGlvbnMiLCAicHJvdG9jb2wiLCBHX1RZ
UEVfU1RSSU5HLCBvcHRpb25zLnByb3RvY29sLnV0ZjgoKS5kYXRhKCksIG51bGxwdHIpKTsKKwor
ICAgIGlmIChvcHRpb25zLm9yZGVyZWQpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQu
Z2V0KCksICJvcmRlcmVkIiwgR19UWVBFX0JPT0xFQU4sICpvcHRpb25zLm9yZGVyZWQsIG51bGxw
dHIpOworICAgIGlmIChvcHRpb25zLm1heFBhY2tldExpZmVUaW1lKQorICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChpbml0LmdldCgpLCAibWF4LXBhY2tldC1saWZldGltZSIsIEdfVFlQRV9JTlQs
ICpvcHRpb25zLm1heFBhY2tldExpZmVUaW1lLCBudWxscHRyKTsKKyAgICBpZiAob3B0aW9ucy5t
YXhSZXRyYW5zbWl0cykKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgIm1h
eC1yZXRyYW5zbWl0cyIsIEdfVFlQRV9JTlQsICpvcHRpb25zLm1heFJldHJhbnNtaXRzLCBudWxs
cHRyKTsKKyAgICBpZiAob3B0aW9ucy5uZWdvdGlhdGVkKQorICAgICAgICBnc3Rfc3RydWN0dXJl
X3NldChpbml0LmdldCgpLCAibmVnb3RpYXRlZCIsIEdfVFlQRV9CT09MRUFOLCAqb3B0aW9ucy5u
ZWdvdGlhdGVkLCBudWxscHRyKTsKKyAgICBpZiAob3B0aW9ucy5pZCkKKyAgICAgICAgZ3N0X3N0
cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgImlkIiwgR19UWVBFX0lOVCwgKm9wdGlvbnMuaWQsIG51
bGxwdHIpOworCisgICAgR3N0V2ViUlRDUHJpb3JpdHlUeXBlIHByaW9yaXR5VHlwZTsKKyAgICBz
d2l0Y2ggKG9wdGlvbnMucHJpb3JpdHkpIHsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6VmVy
eUxvdzoKKyAgICAgICAgcHJpb3JpdHlUeXBlID0gR1NUX1dFQlJUQ19QUklPUklUWV9UWVBFX1ZF
UllfTE9XOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6TG93Ogor
ICAgICAgICBwcmlvcml0eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfTE9XOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6TWVkaXVtOgorICAgICAgICBw
cmlvcml0eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfTUVESVVNOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6SGlnaDoKKyAgICAgICAgcHJpb3JpdHlU
eXBlID0gR1NUX1dFQlJUQ19QUklPUklUWV9UWVBFX0hJR0g7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAicHJpb3JpdHkiLCBHU1RfVFlQ
RV9XRUJSVENfUFJJT1JJVFlfVFlQRSwgcHJpb3JpdHlUeXBlLCBudWxscHRyKTsKKworICAgIHJl
dHVybiBpbml0OworfQorCitSZWY8UlRDRGF0YUNoYW5uZWxFdmVudD4gR1N0cmVhbWVyRGF0YUNo
YW5uZWxIYW5kbGVyOjpjcmVhdGVEYXRhQ2hhbm5lbEV2ZW50KERvY3VtZW50JiBkb2N1bWVudCwg
R1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4mJiBkYXRhQ2hhbm5lbCkKK3sKKyAgICBHVW5p
cXVlT3V0UHRyPGNoYXI+IGxhYmVsOworICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gcHJvdG9jb2w7
CisgICAgZ2Jvb2xlYW4gb3JkZXJlZCwgbmVnb3RpYXRlZDsKKyAgICBnaW50IG1heFBhY2tldExp
ZmVUaW1lLCBtYXhSZXRyYW5zbWl0cywgaWQ7CisgICAgZ19vYmplY3RfZ2V0KGRhdGFDaGFubmVs
LmdldCgpLCAib3JkZXJlZCIsICZvcmRlcmVkLCAibGFiZWwiLCAmbGFiZWwub3V0UHRyKCksCisg
ICAgICAgICJtYXgtcGFja2V0LWxpZmV0aW1lIiwgJm1heFBhY2tldExpZmVUaW1lLCAibWF4LXJl
dHJhbnNtaXRzIiwgJm1heFJldHJhbnNtaXRzLAorICAgICAgICAicHJvdG9jb2wiLCAmcHJvdG9j
b2wub3V0UHRyKCksICJuZWdvdGlhdGVkIiwgJm5lZ290aWF0ZWQsICJpZCIsICZpZCwgbnVsbHB0
cik7CisKKyAgICBSVENEYXRhQ2hhbm5lbEluaXQgaW5pdDsKKyAgICBpbml0Lm9yZGVyZWQgPSBv
cmRlcmVkOworICAgIGluaXQubWF4UGFja2V0TGlmZVRpbWUgPSBtYXhQYWNrZXRMaWZlVGltZTsK
KyAgICBpbml0Lm1heFJldHJhbnNtaXRzID0gbWF4UmV0cmFuc21pdHM7CisgICAgaW5pdC5wcm90
b2NvbCA9IFN0cmluZyhwcm90b2NvbC5nZXQoKSk7CisgICAgaW5pdC5uZWdvdGlhdGVkID0gbmVn
b3RpYXRlZDsKKyAgICBpbml0LmlkID0gaWQ7CisKKyAgICBhdXRvIGhhbmRsZXIgPSBXVEY6Om1h
a2VVbmlxdWU8R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyPihXVEZNb3ZlKGRhdGFDaGFubmVs
KSk7CisgICAgYXV0byBjaGFubmVsID0gUlRDRGF0YUNoYW5uZWw6OmNyZWF0ZShkb2N1bWVudCwg
V1RGTW92ZShoYW5kbGVyKSwgU3RyaW5nOjpmcm9tVVRGOChsYWJlbC5nZXQoKSksIFdURk1vdmUo
aW5pdCkpOworICAgIHJldHVybiBSVENEYXRhQ2hhbm5lbEV2ZW50OjpjcmVhdGUoZXZlbnROYW1l
cygpLmRhdGFjaGFubmVsRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5j
ZWxhYmxlOjpObywgV1RGTW92ZShjaGFubmVsKSk7Cit9CisKK0dTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlcjo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKEdSZWZQdHI8R3N0V2ViUlRDRGF0
YUNoYW5uZWw+JiYgY2hhbm5lbCkKKyAgICA6IG1fY2hhbm5lbChXVEZNb3ZlKGNoYW5uZWwpKQor
eworICAgIEFTU0VSVChtX2NoYW5uZWwpOworCisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fY2hhbm5lbC5nZXQoKSwgIm5vdGlmeTo6cmVhZHktc3RhdGUiLCBHX0NBTExCQUNLKCtbXShH
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIpIHsKKyAgICAgICAgaGFuZGxlci0+
cmVhZHlTdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVj
dF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLW1lc3NhZ2UtZGF0YSIsIEdfQ0FMTEJBQ0so
K1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlciwgR0J5dGVzKiBieXRlcykg
eworICAgICAgICBoYW5kbGVyLT5vbk1lc3NhZ2VEYXRhKGJ5dGVzKTsKKyAgICB9KSwgdGhpcyk7
CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLW1lc3Nh
Z2Utc3RyaW5nIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBo
YW5kbGVyLCBjb25zdCBjaGFyKiBtZXNzYWdlKSB7CisgICAgICAgIGhhbmRsZXItPm9uTWVzc2Fn
ZVN0cmluZyhtZXNzYWdlKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKG1fY2hhbm5lbC5nZXQoKSwgIm9uLWVycm9yIiwgR19DQUxMQkFDSygrW10oR1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBHRXJyb3IqIGVycm9yKSB7CisgICAgICAg
IGhhbmRsZXItPm9uRXJyb3IoZXJyb3IpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tYnVmZmVyZWQtYW1vdW50LWxvdyIs
IEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlcikgewor
ICAgICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIHBhc3MgdGhlIGFtb3VudCBkZWx0YSBmcm9tIHdl
YnJ0Y2JpbiB0byB0aGUgV2ViQ29yZSBoYW5kbGVyLgorICAgICAgICBoYW5kbGVyLT5vbkJ1ZmZl
cmVkQW1vdW50TG93KCk7CisgICAgfSksIHRoaXMpOworfQorCitHU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXI6On5HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoKQoreworICAgIGdfc2lnbmFs
X2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2NoYW5uZWwuZ2V0KCksIHRoaXMpOworfQor
Cit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2V0Q2xpZW50KFJUQ0RhdGFDaGFu
bmVsSGFuZGxlckNsaWVudCYgY2xpZW50LCBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmll
ciBjb250ZXh0SWRlbnRpZmllcikKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2Nr
IH07CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAg
bV9jb250ZXh0SWRlbnRpZmllciA9IGNvbnRleHRJZGVudGlmaWVyOworCisgICAgZm9yIChhdXRv
JiBtZXNzYWdlIDogbV9wZW5kaW5nTWVzc2FnZXMpIHsKKyAgICAgICAgc3dpdGNoT24obWVzc2Fn
ZSwgWyZdKFJlZjxGcmFnbWVudGVkU2hhcmVkQnVmZmVyPiYgZGF0YSkgeworICAgICAgICAgICAg
R1NUX0RFQlVHKCJOb3RpZnlpbmcgcXVldWVkIHJhdyBkYXRhIChzaXplOiAlenUpIiwgZGF0YS0+
c2l6ZSgpKTsKKyAgICAgICAgICAgIGNsaWVudC5kaWRSZWNlaXZlUmF3RGF0YShkYXRhLT5tYWtl
Q29udGlndW91cygpLT5kYXRhKCksIGRhdGEtPnNpemUoKSk7CisgICAgICAgIH0sIFsmXShTdHJp
bmcmIHRleHQpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiTm90aWZ5aW5nIHF1ZXVlZCBzdHJp
bmcgJXMiLCB0ZXh0LmFzY2lpKCkuZGF0YSgpKTsKKyAgICAgICAgICAgIGNsaWVudC5kaWRSZWNl
aXZlU3RyaW5nRGF0YSh0ZXh0KTsKKyAgICAgICAgfSwgWyZdKFN0YXRlQ2hhbmdlIHN0YXRlQ2hh
bmdlKSB7CisgICAgICAgICAgICBpZiAoc3RhdGVDaGFuZ2UuZXJyb3IpIHsKKyAgICAgICAgICAg
ICAgICBpZiAoYXV0byBydGNFcnJvciA9IHRvUlRDRXJyb3IoKnN0YXRlQ2hhbmdlLmVycm9yKSkK
KyAgICAgICAgICAgICAgICAgICAgY2xpZW50LmRpZERldGVjdEVycm9yKHJ0Y0Vycm9yLnJlbGVh
c2VOb25OdWxsKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgR1NUX0RFQlVHKCJEaXNw
YXRjaGluZyBzdGF0ZSBjaGFuZ2UgdG8gJWQiLCBzdGF0aWNfY2FzdDxpbnQ+KHN0YXRlQ2hhbmdl
LnN0YXRlKSk7CisgICAgICAgICAgICBjbGllbnQuZGlkQ2hhbmdlUmVhZHlTdGF0ZShzdGF0ZUNo
YW5nZS5zdGF0ZSk7CisgICAgICAgIH0pOworICAgIH0KKyAgICBtX3BlbmRpbmdNZXNzYWdlcy5j
bGVhcigpOworfQorCitib29sIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFN0cmlu
Z0RhdGEoY29uc3QgQ1N0cmluZyYgdGV4dCkKK3sKKyAgICBHU1RfREVCVUcoIlNlbmRpbmcgc3Ry
aW5nICVzIiwgdGV4dC5kYXRhKCkpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2NoYW5u
ZWwuZ2V0KCksICJzZW5kLXN0cmluZyIsIHRleHQuZGF0YSgpKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworYm9vbCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnNlbmRSYXdEYXRhKGNvbnN0
IHVpbnQ4X3QqIGRhdGEsIHNpemVfdCBsZW5ndGgpCit7CisgICAgYXV0byBieXRlcyA9IGFkb3B0
R1JlZihnX2J5dGVzX25ldyhkYXRhLCBsZW5ndGgpKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV9jaGFubmVsLmdldCgpLCAic2VuZC1kYXRhIiwgYnl0ZXMuZ2V0KCkpOworICAgIHJldHVy
biB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2xvc2UoKQor
eworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2NoYW5uZWwuZ2V0KCksICJjbG9zZSIpOwor
fQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2hlY2tTdGF0ZSgpCit7Cisg
ICAgQVNTRVJUKG1fY2xpZW50TG9jay5pc0hlbGQoKSk7CisKKyAgICBHc3RXZWJSVENEYXRhQ2hh
bm5lbFN0YXRlIGNoYW5uZWxTdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV9jaGFubmVsLmdldCgp
LCAicmVhZHktc3RhdGUiLCAmY2hhbm5lbFN0YXRlLCBudWxscHRyKTsKKworICAgIFJUQ0RhdGFD
aGFubmVsU3RhdGUgc3RhdGU7CisgICAgc3dpdGNoIChjaGFubmVsU3RhdGUpIHsKKyAgICBjYXNl
IEdTVF9XRUJSVENfREFUQV9DSEFOTkVMX1NUQVRFX05FVzoKKyAgICBjYXNlIEdTVF9XRUJSVENf
REFUQV9DSEFOTkVMX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgIHN0YXRlID0gUlRDRGF0YUNo
YW5uZWxTdGF0ZTo6Q29ubmVjdGluZzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9PUEVOOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFu
bmVsU3RhdGU6Ok9wZW47CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRB
X0NIQU5ORUxfU1RBVEVfQ0xPU0lORzoKKyAgICAgICAgc3RhdGUgPSBSVENEYXRhQ2hhbm5lbFN0
YXRlOjpDbG9zaW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9XRUJSVENfREFUQV9D
SEFOTkVMX1NUQVRFX0NMT1NFRDoKKyAgICAgICAgc3RhdGUgPSBSVENEYXRhQ2hhbm5lbFN0YXRl
OjpDbG9zZWQ7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIGlmICghbV9jbGllbnQpIHsK
KyAgICAgICAgR1NUX0RFQlVHKCJObyBjbGllbnQgeWV0LCBxdWV1ZWluZyBzdGF0ZSIpOworICAg
ICAgICBtX3BlbmRpbmdNZXNzYWdlcy5hcHBlbmQoU3RhdGVDaGFuZ2UgeyBzdGF0ZSwgeyB9IH0p
OworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCEqbV9jbGllbnQpCisgICAgICAg
IHJldHVybjsKKworICAgIEdTVF9ERUJVRygiRGlzcGF0Y2hpbmcgc3RhdGUgY2hhbmdlIHRvICVk
Iiwgc3RhdGljX2Nhc3Q8aW50PihzdGF0ZSkpOworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2Ns
aWVudCwgc3RhdGVdIHsKKyAgICAgICAgaWYgKCEqY2xpZW50KQorICAgICAgICAgICAgcmV0dXJu
OworICAgICAgICBjbGllbnQudmFsdWUoKS0+ZGlkQ2hhbmdlUmVhZHlTdGF0ZShzdGF0ZSk7Cisg
ICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpyZWFkeVN0YXRl
Q2hhbmdlZCgpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9OworICAgIGNo
ZWNrU3RhdGUoKTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uTWVz
c2FnZURhdGEoR0J5dGVzKiBieXRlcykKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRM
b2NrIH07CisKKyAgICBpZiAoIW1fY2xpZW50KSB7CisgICAgICAgIG1fcGVuZGluZ01lc3NhZ2Vz
LmFwcGVuZChGcmFnbWVudGVkU2hhcmVkQnVmZmVyOjpjcmVhdGUoYnl0ZXMpKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICghKm1fY2xpZW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBwb3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnQsIGJ5dGVzID0gR1JlZlB0cjxHQnl0ZXM+
KGJ5dGVzKV0geworICAgICAgICBpZiAoISpjbGllbnQpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGdzaXplIHNpemUgPSAwOworICAgICAgICBjb25zdCBhdXRvKiBkYXRhID0gcmVpbnRl
cnByZXRfY2FzdDxjb25zdCB1aW50OF90Kj4oZ19ieXRlc19nZXRfZGF0YShieXRlcy5nZXQoKSwg
JnNpemUpKTsKKyAgICAgICAgY2xpZW50LnZhbHVlKCktPmRpZFJlY2VpdmVSYXdEYXRhKGRhdGEs
IHNpemUpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6
b25NZXNzYWdlU3RyaW5nKGNvbnN0IGNoYXIqIG1lc3NhZ2UpCit7CisgICAgTG9ja2VyIGxvY2tl
ciB7IG1fY2xpZW50TG9jayB9OworCisgICAgR1NUX0RFQlVHKCJJbmNvbWluZyBzdHJpbmc6ICVz
IiwgbWVzc2FnZSk7CisgICAgaWYgKCFtX2NsaWVudCkgeworICAgICAgICBHU1RfREVCVUcoIk5v
IGNsaWVudCB5ZXQsIGtlZXBpbmcgYXMgYnVmZmVyZWQgbWVzc2FnZSIpOworICAgICAgICBtX3Bl
bmRpbmdNZXNzYWdlcy5hcHBlbmQoU3RyaW5nOjpmcm9tVVRGOChtZXNzYWdlKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoISptX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOwor
CisgICAgR1NUX0RFQlVHKCJEaXNwYXRjaGluZyBwYXlsb2FkIik7CisgICAgcG9zdFRhc2soW2Ns
aWVudCA9IG1fY2xpZW50LCBzdHJpbmcgPSBTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpXSB7Cisg
ICAgICAgIGlmICghKmNsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjbGll
bnQudmFsdWUoKS0+ZGlkUmVjZWl2ZVN0cmluZ0RhdGEoc3RyaW5nKTsKKyAgICAgICAgR1NUX0RF
QlVHKCJEb25lIik7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyOjpvbkVycm9yKEdFcnJvciogZXJyb3IpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xp
ZW50TG9jayB9OworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdT
VF9XQVJOSU5HKCJHb3QgZGF0YS1jaGFubmVsIGVycm9yICVzIiwgZXJyb3ItPm1lc3NhZ2UpOwor
ICAgIEdVbmlxdWVQdHI8R0Vycm9yPiBlcnJvckNvcHkoZ19lcnJvcl9jb3B5KGVycm9yKSk7Cisg
ICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50LCBlcnJvciA9IFdURk1vdmUoZXJyb3JDb3B5
KV0geworICAgICAgICBpZiAoIWNsaWVudCB8fCAhZXJyb3IpCisgICAgICAgICAgICByZXR1cm47
CisKKyAgICAgICAgYXV0byBydGNFcnJvciA9IHRvUlRDRXJyb3IoZXJyb3IuZ2V0KCkpOworICAg
ICAgICBpZiAoIXJ0Y0Vycm9yKQorICAgICAgICAgICAgcnRjRXJyb3IgPSBSVENFcnJvcjo6Y3Jl
YXRlKFJUQ0Vycm9yOjpJbml0IHsgUlRDRXJyb3JEZXRhaWxUeXBlOjpEYXRhQ2hhbm5lbEZhaWx1
cmUsIHsgfSwgeyB9LCB7IH0sIHsgfSB9LCB7IH0pOworICAgICAgICBjbGllbnQudmFsdWUoKS0+
ZGlkRGV0ZWN0RXJyb3IocnRjRXJyb3IucmVsZWFzZU5vbk51bGwoKSk7CisgICAgfSk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbkJ1ZmZlcmVkQW1vdW50TG93KCkK
K3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisgICAgaWYgKCFtX2NsaWVu
dCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50XSB7
CisgICAgICAgIGlmICghY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIC8v
IEZJWE1FOiBQYXNzIGFtb3VudCB0byBoYW5kbGVyIGluc3RlYWQgb2YgMC4KKyAgICAgICAgY2xp
ZW50LnZhbHVlKCktPmJ1ZmZlcmVkQW1vdW50SXNEZWNyZWFzaW5nKDApOworICAgIH0pOworfQor
Cit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6cG9zdFRhc2soRnVuY3Rpb248dm9p
ZCgpPiYmIGZ1bmN0aW9uKQoreworICAgIEFTU0VSVChtX2NsaWVudExvY2suaXNIZWxkKCkpOwor
CisgICAgaWYgKCFtX2NvbnRleHRJZGVudGlmaWVyKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJl
YWQoV1RGTW92ZShmdW5jdGlvbikpOworICAgICAgICByZXR1cm47CisgICAgfQorICAgIFNjcmlw
dEV4ZWN1dGlvbkNvbnRleHQ6OnBvc3RUYXNrVG8obV9jb250ZXh0SWRlbnRpZmllciwgV1RGTW92
ZShmdW5jdGlvbikpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNo
YW5uZWxIYW5kbGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOGYzMzJiZGUyNGNlZWM5MjFmZDQ2MTYyYzUwNjBl
YTAyNTkzY2UxZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oCkBAIC0wLDAg
KzEsODYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVy
LmgiCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ0RhdGFD
aGFubmVsSGFuZGxlci5oIgorI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsU3RhdGUuaCIKKyNpbmNs
dWRlICJTaGFyZWRCdWZmZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Db25kaXRpb24uaD4KKyNpbmNs
dWRlIDx3dGYvTG9jay5oPgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgRG9jdW1lbnQ7CitjbGFzcyBSVENEYXRhQ2hhbm5lbEV2ZW50Owor
Y2xhc3MgUlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50Oworc3RydWN0IFJUQ0RhdGFDaGFubmVs
SW5pdDsKKworY2xhc3MgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyIGZpbmFsIDogcHVibGlj
IFJUQ0RhdGFDaGFubmVsSGFuZGxlciB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKEdSZWZQdHI8
R3N0V2ViUlRDRGF0YUNoYW5uZWw+JiYpOworICAgIH5HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXIoKTsKKworICAgIHN0YXRpYyBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZnJvbVJUQ0RhdGFD
aGFubmVsSW5pdChjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKTsKKyAgICBzdGF0aWMgUmVmPFJU
Q0RhdGFDaGFubmVsRXZlbnQ+IGNyZWF0ZURhdGFDaGFubmVsRXZlbnQoRG9jdW1lbnQmLCBHUmVm
UHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENEYXRh
Q2hhbm5lbEhhbmRsZXIgQVBJCisgICAgdm9pZCBzZXRDbGllbnQoUlRDRGF0YUNoYW5uZWxIYW5k
bGVyQ2xpZW50JiwgU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIpIGZpbmFsOworICAg
IGJvb2wgc2VuZFN0cmluZ0RhdGEoY29uc3QgQ1N0cmluZyYpIGZpbmFsOworICAgIGJvb2wgc2Vu
ZFJhd0RhdGEoY29uc3QgdWludDhfdCosIHNpemVfdCkgZmluYWw7CisgICAgdm9pZCBjbG9zZSgp
IGZpbmFsOworCisgICAgdm9pZCBvbk1lc3NhZ2VEYXRhKEdCeXRlcyopOworICAgIHZvaWQgb25N
ZXNzYWdlU3RyaW5nKGNvbnN0IGNoYXIqKTsKKyAgICB2b2lkIG9uRXJyb3IoR0Vycm9yKik7Cisg
ICAgdm9pZCBvbkJ1ZmZlcmVkQW1vdW50TG93KCk7CisgICAgdm9pZCByZWFkeVN0YXRlQ2hhbmdl
ZCgpOworCisgICAgdm9pZCBjaGVja1N0YXRlKCk7CisgICAgdm9pZCBwb3N0VGFzayhGdW5jdGlv
bjx2b2lkKCk+JiYpOworCisgICAgc3RydWN0IFN0YXRlQ2hhbmdlIHsKKyAgICAgICAgUlRDRGF0
YUNoYW5uZWxTdGF0ZSBzdGF0ZTsKKyAgICAgICAgc3RkOjpvcHRpb25hbDxHRXJyb3IqPiBlcnJv
cjsKKyAgICB9OworICAgIHVzaW5nIE1lc3NhZ2UgPSBzdGQ6OnZhcmlhbnQ8U3RhdGVDaGFuZ2Us
IFN0cmluZywgUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+PjsKKyAgICB1c2luZyBQZW5kaW5n
TWVzc2FnZXMgPSBWZWN0b3I8TWVzc2FnZT47CisKKyAgICBMb2NrIG1fY2xpZW50TG9jazsKKyAg
ICBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBtX2NoYW5uZWw7CisgICAgc3RkOjpvcHRp
b25hbDxXZWFrUHRyPFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudD4+IG1fY2xpZW50IFdURl9H
VUFSREVEX0JZX0xPQ0sobV9jbGllbnRMb2NrKTsKKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0
SWRlbnRpZmllciBtX2NvbnRleHRJZGVudGlmaWVyOworICAgIHN0ZDo6b3B0aW9uYWw8dWludDY0
X3Q+IG1fcHJldmlvdXNCdWZmZXJlZEFtb3VudDsKKyAgICBQZW5kaW5nTWVzc2FnZXMgbV9wZW5k
aW5nTWVzc2FnZXMgV1RGX0dVQVJERURfQllfTE9DSyhtX2NsaWVudExvY2spOworCisgICAgTG9j
ayBtX29wZW5Mb2NrOworICAgIENvbmRpdGlvbiBtX29wZW5Db25kaXRpb24gV1RGX0dVQVJERURf
QllfTE9DSyhtX29wZW5Mb2NrKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRkMTQ0OTIwZmNkNDAw
MWQ1ZjVmZWFjMzJlYjM2ZTIwYWIzNWZjNjEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0
QmFja2VuZC5jcHAKQEAgLTAsMCArMSw5NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEt
MjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BcnJh
eUJ1ZmZlci5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiYg
dHJhbnNwb3J0KQorICAgIDogbV9iYWNrZW5kKHRyYW5zcG9ydCkKK3sKKyAgICBBU1NFUlQobV9i
YWNrZW5kKTsKKyAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworfQorCitHU3RyZWFtZXJEdGxz
VHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAg
ICB1bnJlZ2lzdGVyQ2xpZW50KCk7Cit9CisKK1VuaXF1ZVJlZjxSVENJY2VUcmFuc3BvcnRCYWNr
ZW5kPiBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0QmFja2VuZCgp
Cit7CisgICAgcmV0dXJuIG1ha2VVbmlxdWVSZWY8R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZD4obV9iYWNrZW5kKTsKK30KKwordm9pZCBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6
cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7
CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1f
YmFja2VuZC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5kLT5zdGF0ZUNo
YW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfYnlfZGF0YShtX2JhY2tlbmQuZ2V0KCksIHRoaXMpOworICAgIG1fY2xpZW50LmNs
ZWFyKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hh
bmdlZCgpIGNvbnN0Cit7CisgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3dlYWtUaGlzID0g
V2Vha1B0ciB7IHRoaXMgfV0geworICAgICAgICBpZiAoIXdlYWtUaGlzKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBpZiAoIXdlYWtUaGlzLT5tX2NsaWVudCkKKyAgICAgICAgICAgIHJl
dHVybjsKKworICAgICAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IHJlbW90ZUNlcnRpZmljYXRlOwor
ICAgICAgICBHVW5pcXVlT3V0UHRyPGNoYXI+IGNlcnRpZmljYXRlOworICAgICAgICBHc3RXZWJS
VENEVExTVHJhbnNwb3J0U3RhdGUgc3RhdGU7CisgICAgICAgIGdfb2JqZWN0X2dldCh3ZWFrVGhp
cy0+bV9iYWNrZW5kLmdldCgpLCAic3RhdGUiLCAmc3RhdGUsICJyZW1vdGUtY2VydGlmaWNhdGUi
LCAmcmVtb3RlQ2VydGlmaWNhdGUub3V0UHRyKCksICJjZXJ0aWZpY2F0ZSIsICZjZXJ0aWZpY2F0
ZS5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICAgICAgVmVjdG9yPFJlZjxKU0M6OkFycmF5QnVm
ZmVyPj4gY2VydGlmaWNhdGVzOworICAgICAgICBjZXJ0aWZpY2F0ZXMucmVzZXJ2ZUluaXRpYWxD
YXBhY2l0eSgyKTsKKyAgICAgICAgaWYgKHJlbW90ZUNlcnRpZmljYXRlKSB7CisgICAgICAgICAg
ICBhdXRvIHJlbW90ZUNlcnRpZmljYXRlU3RyaW5nID0gbWFrZVN0cmluZyhyZW1vdGVDZXJ0aWZp
Y2F0ZS5nZXQoKSk7CisgICAgICAgICAgICBhdXRvIGpzUmVtb3RlQ2VydGlmaWNhdGUgPSBKU0M6
OkFycmF5QnVmZmVyOjpjcmVhdGUocmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcuY2hhcmFjdGVyczgo
KSwgcmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcuc2l6ZUluQnl0ZXMoKSk7CisgICAgICAgICAgICBj
ZXJ0aWZpY2F0ZXMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoanNSZW1vdGVDZXJ0aWZpY2F0ZSkp
OworCisgICAgICAgICAgICBhdXRvIGNlcnRpZmljYXRlU3RyaW5nID0gbWFrZVN0cmluZyhjZXJ0
aWZpY2F0ZS5nZXQoKSk7CisgICAgICAgICAgICBhdXRvIGpzQ2VydGlmaWNhdGUgPSBKU0M6OkFy
cmF5QnVmZmVyOjpjcmVhdGUoY2VydGlmaWNhdGVTdHJpbmcuY2hhcmFjdGVyczgoKSwgY2VydGlm
aWNhdGVTdHJpbmcuc2l6ZUluQnl0ZXMoKSk7CisgICAgICAgICAgICBjZXJ0aWZpY2F0ZXMudW5j
aGVja2VkQXBwZW5kKFdURk1vdmUoanNDZXJ0aWZpY2F0ZSkpOworICAgICAgICB9CisgICAgICAg
IHdlYWtUaGlzLT5tX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENEdGxzVHJhbnNwb3J0U3Rh
dGUoc3RhdGUpLCBXVEZNb3ZlKGNlcnRpZmljYXRlcykpOworICAgIH0pOworfQorCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9y
dEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yYzFkYzg4NDA4Mjc3NmIzMGIwMGEyOTJhMTk2MDc1MDhl
MDQ0MWRjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaApAQCAtMCwwICsx
LDUzIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKwor
I2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUg
IkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJSVENEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUg
PHd0Zi9XZWFrUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVy
RHRsc1RyYW5zcG9ydEJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDRHRsc1RyYW5zcG9ydEJhY2tl
bmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCwg
V2Vha1B0ckZhY3RvcnlJbml0aWFsaXphdGlvbjo6RWFnZXI+IHsKKyAgICBXVEZfTUFLRV9GQVNU
X0FMTE9DQVRFRDsKKworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mKTsKKyAgICB+
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENE
dGxzVHJhbnNwb3J0QmFja2VuZAorICAgIGNvbnN0IHZvaWQqIGJhY2tlbmQoKSBjb25zdCBmaW5h
bCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0KKyAgICBVbmlxdWVSZWY8UlRDSWNlVHJhbnNw
b3J0QmFja2VuZD4gaWNlVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworICAgIHZvaWQgcmVnaXN0
ZXJDbGllbnQoQ2xpZW50JikgZmluYWw7CisgICAgdm9pZCB1bnJlZ2lzdGVyQ2xpZW50KCkgZmlu
YWw7CisKKyAgICB2b2lkIHN0YXRlQ2hhbmdlZCgpIGNvbnN0OworCisgICAgR1JlZlB0cjxHc3RX
ZWJSVENEVExTVHJhbnNwb3J0PiBtX2JhY2tlbmQ7CisgICAgV2Vha1B0cjxDbGllbnQ+IG1fY2xp
ZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdF
Ql9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNjBiY2ZlZTBmODM4
NWMzM2U3NTk1ZTViY2JlNTgxNzJjYjE5YjdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0
QmFja2VuZC5jcHAKQEAgLTAsMCArMSwxMjIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIx
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJJY2VUcmFuc3Bv
cnRCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPEphdmFT
Y3JpcHRDb3JlL0FycmF5QnVmZmVyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6
OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENEVExT
VHJhbnNwb3J0PiYgdHJhbnNwb3J0KQorICAgIDogbV9iYWNrZW5kKHRyYW5zcG9ydCkKK3sKKyAg
ICBBU1NFUlQobV9iYWNrZW5kKTsKKworICAgIGljZVRyYW5zcG9ydENoYW5nZWQoKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9iYWNrZW5kLmdldCgpLCAibm90aWZ5Ojp0cmFuc3Bv
cnQiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKiBiYWNrZW5k
KSB7CisgICAgICAgIGJhY2tlbmQtPmljZVRyYW5zcG9ydENoYW5nZWQoKTsKKyAgICB9KSwgdGhp
cyk7Cit9CisKK0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFtZXJJY2VUcmFu
c3BvcnRCYWNrZW5kKCkKK3sKKyAgICBpZiAoR19JU19PQkpFQ1QobV9pY2VUcmFuc3BvcnQuZ2V0
KCkpKQorICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9pY2VU
cmFuc3BvcnQuZ2V0KCksIHRoaXMpOworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZGF0YShtX2JhY2tlbmQuZ2V0KCksIHRoaXMpOworfQorCit2b2lkIEdTdHJlYW1lckljZVRy
YW5zcG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydENoYW5nZWQoKQoreworICAgIGlmIChHX0lTX09C
SkVDVChtX2ljZVRyYW5zcG9ydC5nZXQoKSkpCisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rp
c2Nvbm5lY3RfYnlfZGF0YShtX2ljZVRyYW5zcG9ydC5nZXQoKSwgdGhpcyk7CisKKyAgICBnX29i
amVjdF9nZXQobV9iYWNrZW5kLmdldCgpLCAidHJhbnNwb3J0IiwgJm1faWNlVHJhbnNwb3J0Lm91
dFB0cigpLCBudWxscHRyKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2ljZVRy
YW5zcG9ydC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kKiBiYWNrZW5kKSB7CisgICAgICAgIGJhY2tlbmQtPnN0YXRlQ2hh
bmdlZCgpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9p
Y2VUcmFuc3BvcnQuZ2V0KCksICJub3RpZnk6OmdhdGhlcmluZy1zdGF0ZSIsIEdfQ0FMTEJBQ0so
K1tdKEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFj
a2VuZC0+Z2F0aGVyaW5nU3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworfQorCit2b2lk
IEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KENsaWVudCYgY2xp
ZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0gY2xpZW50Owor
CisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHRyYW5zcG9ydFN0YXRlOworICAgIEdz
dFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIGdhdGhlcmluZ1N0YXRlOworICAgIGdfb2JqZWN0X2dl
dChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0YXRlLCAiZ2F0aGVy
aW5nLXN0YXRlIiwgJmdhdGhlcmluZ1N0YXRlLCBudWxscHRyKTsKKworICAgIGNhbGxPbk1haW5U
aHJlYWQoW3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH0sIHRyYW5zcG9ydFN0YXRlLCBnYXRo
ZXJpbmdTdGF0ZV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV9jbGll
bnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gV2Ugc3RhcnQgb2JzZXJ2aW5n
IGEgYml0IGxhdGUgYW5kIG1pZ2h0IG1pc3MgdGhlIGNoZWNraW5nIHN0YXRlLiBTeW50aGVzaXpl
IGl0IGFzIG5lZWRlZC4KKyAgICAgICAgaWYgKHRyYW5zcG9ydFN0YXRlID4gR1NUX1dFQlJUQ19J
Q0VfQ09OTkVDVElPTl9TVEFURV9DSEVDS0lORyAmJiB0cmFuc3BvcnRTdGF0ZSAhPSBHU1RfV0VC
UlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NMT1NFRCkKKyAgICAgICAgICAgIHdlYWtUaGlzLT5t
X2NsaWVudC0+b25TdGF0ZUNoYW5nZWQoUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5nKTsK
KworICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDSWNlVHJh
bnNwb3J0U3RhdGUodHJhbnNwb3J0U3RhdGUpKTsKKyAgICAgICAgd2Vha1RoaXMtPm1fY2xpZW50
LT5vbkdhdGhlcmluZ1N0YXRlQ2hhbmdlZCh0b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKGdhdGhlcmlu
Z1N0YXRlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZDo6dW5yZWdpc3RlckNsaWVudCgpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2Ns
aWVudC5jbGVhcigpOworfQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnN0
YXRlQ2hhbmdlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHRyYW5zcG9ydFN0YXRlOworICAg
IGdfb2JqZWN0X2dldChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0
YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIg
eyAqdGhpcyB9LCB0cmFuc3BvcnRTdGF0ZV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3
ZWFrVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdlYWtUaGlz
LT5tX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENJY2VUcmFuc3BvcnRTdGF0ZSh0cmFuc3Bv
cnRTdGF0ZSkpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tl
bmQ6OmdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NsaWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgZ2F0aGVy
aW5nU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1faWNlVHJhbnNwb3J0LmdldCgpLCAiZ2F0aGVy
aW5nLXN0YXRlIiwgJmdhdGhlcmluZ1N0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCBnYXRoZXJpbmdTdGF0ZV0geworICAg
ICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5tX2NsaWVudC0+b25HYXRoZXJpbmdTdGF0ZUNoYW5n
ZWQodG9SVENJY2VHYXRoZXJpbmdTdGF0ZShnYXRoZXJpbmdTdGF0ZSkpOworICAgIH0pOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VU
cmFuc3BvcnRCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTk3YTM5NTdlMzJlMWExYTFhMzE1NTRmMDlk
MGY2NjZlOTE1MmJkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaApAQCAt
MCwwICsxLDU1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2lu
Y2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRCYWNr
ZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0lj
ZVRyYW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJJY2VUcmFu
c3BvcnRCYWNrZW5kPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKGNvbnN0IEdSZWZQdHI8
R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mKTsKKyAgICB+R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQKKyAgICBj
b25zdCB2b2lkKiBiYWNrZW5kKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgp
OyB9CisKKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAgIHZvaWQg
dW5yZWdpc3RlckNsaWVudCgpIGZpbmFsOworCisgICAgdm9pZCBzdGF0ZUNoYW5nZWQoKSBjb25z
dDsKKyAgICB2b2lkIGdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpIGNvbnN0OworICAgIHZvaWQgaWNl
VHJhbnNwb3J0Q2hhbmdlZCgpOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0
PiBtX2JhY2tlbmQ7CisgICAgR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IG1faWNlVHJh
bnNwb3J0OworICAgIFdlYWtQdHI8Q2xpZW50PiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uZGQ0YmQ0MTg3N2M0YWEzZjFmMWM3YTE1NjkyZDg3Y2NiMjQ1YjA1OAotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuY3BwCkBAIC0wLDAgKzEsMTI2NSBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJS
dHBSZWNlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVm
ZXJyZWQuaCIKKyNpbmNsdWRlICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbC5oIgorI2luY2x1ZGUg
IlJUQ0RhdGFDaGFubmVsRXZlbnQuaCIKKyNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGUuaCIKKyNp
bmNsdWRlICJSVENPZmZlck9wdGlvbnMuaCIKKyNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIlJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiUlRDU3RhdHNSZXBvcnQuaCIKKyNpbmNsdWRl
ICJSVENUcmFja0V2ZW50LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
R1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisKKyNp
bmNsdWRlIDxnc3Qvc2RwL3NkcC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5j
bHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJjZVByaW9y
aXR5Lmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJr
aXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtp
dF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50KEdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZCYgcGVlckNvbm5lY3Rpb24pCisgICAgOiBtX3BlZXJDb25uZWN0aW9uQmFj
a2VuZChwZWVyQ29ubmVjdGlvbikKKyAgICAsIG1fc3RhdHNDb2xsZWN0b3IoR1N0cmVhbWVyU3Rh
dHNDb2xsZWN0b3I6OmNyZWF0ZSgpKQorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICwg
bV9zdGF0c0xvZ1RpbWVyKCp0aGlzLCAmR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyU3Rh
dHNGb3JMb2dnaW5nKQorICAgICwgbV9sb2dnZXIocGVlckNvbm5lY3Rpb24ubG9nZ2VyKCkpCisg
ICAgLCBtX2xvZ0lkZW50aWZpZXIocGVlckNvbm5lY3Rpb24ubG9nSWRlbnRpZmllcigpKQorI2Vu
ZGlmCit7CisgICAgZW5zdXJlR1N0cmVhbWVySW5pdGlhbGl6ZWQoKTsKKworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGRl
YnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQo
d2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZywgIndlYmtpdHdlYnJ0Y2VuZHBvaW50IiwgMCwg
IldlYktpdCBXZWJSVEMgZW5kLXBvaW50Iik7CisgICAgfSk7Cit9CisKK2Jvb2wgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6aW5pdGlhbGl6ZVBpcGVsaW5lKCkKK3sKKyAgICBzdGF0aWMgdWludDMy
X3QgblBpcGVsaW5lID0gMDsKKyAgICBhdXRvIHBpcGVsaW5lTmFtZSA9IG1ha2VTdHJpbmcoIndl
YmtpdC13ZWJydC1waXBlbGluZS0iLCBuUGlwZWxpbmUpOworICAgIG1fcGlwZWxpbmUgPSBnc3Rf
cGlwZWxpbmVfbmV3KHBpcGVsaW5lTmFtZS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBjb25uZWN0
U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCksIFt0aGlzXShHc3RNZXNz
YWdlKiBtZXNzYWdlKSB7CisgICAgICAgIGhhbmRsZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgfSk7
CisKKyAgICBhdXRvIGJpbk5hbWUgPSBtYWtlU3RyaW5nKCJ3ZWJraXQtd2VicnRjYmluLSIsIG5Q
aXBlbGluZSsrKTsKKyAgICBtX3dlYnJ0Y0JpbiA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJ3ZWJy
dGNiaW4iLCBiaW5OYW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBpZiAoIW1fd2VicnRjQmluKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3N0YXRzQ29sbGVjdG9yLT5zZXRFbGVtZW50
KG1fd2VicnRjQmluLmdldCgpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJy
dGNCaW4uZ2V0KCksICJub3RpZnk6OmljZS1jb25uZWN0aW9uLXN0YXRlIiwgR19DQUxMQkFDSygr
W10oR1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQpIHsKKyAgICAgICAgZW5kUG9pbnQt
Pm9uSWNlQ29ubmVjdGlvbkNoYW5nZSgpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJub3RpZnk6OmljZS1nYXRoZXJpbmct
c3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCkg
eworICAgICAgICBlbmRQb2ludC0+b25JY2VHYXRoZXJpbmdDaGFuZ2UoKTsKKyAgICB9KSwgdGhp
cyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAib24t
bmVnb3RpYXRpb24tbmVlZGVkIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dCogZW5kUG9pbnQpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uTmVnb3RpYXRpb25OZWVkZWQoKTsK
KyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmlu
LmdldCgpLCAib24taWNlLWNhbmRpZGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQqIGVuZFBvaW50LCBndWludCBzZHBNTGluZUluZGV4LCBnY2hhcmFycmF5IGNhbmRp
ZGF0ZSkgeworICAgICAgICBlbmRQb2ludC0+b25JY2VDYW5kaWRhdGUoc2RwTUxpbmVJbmRleCwg
Y2FuZGlkYXRlKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fd2VicnRjQmluLmdldCgpLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVy
TWVkaWFFbmRwb2ludCogZW5kUG9pbnQsIEdzdFBhZCogcGFkKSB7CisgICAgICAgIC8vIElnbm9y
ZSBvdXRnb2luZyBwYWQgbm90aWZpY2F0aW9ucy4KKyAgICAgICAgaWYgKEdTVF9QQURfRElSRUNU
SU9OKHBhZCkgIT0gR1NUX1BBRF9TUkMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Y2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKmVuZFBvaW50KSwg
cGFkXSB7CisgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5hZGRSZW1v
dGVTdHJlYW0ocGFkKTsKKyAgICAgICAgfSk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInBhZC1yZW1vdmVkIiwgR19DQUxM
QkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQsIEdzdFBhZCogcGFkKSB7
CisgICAgICAgIC8vIElnbm9yZSBvdXRnb2luZyBwYWQgbm90aWZpY2F0aW9ucy4KKyAgICAgICAg
aWYgKEdTVF9QQURfRElSRUNUSU9OKHBhZCkgIT0gR1NUX1BBRF9TUkMpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3Byb3RlY3RlZFRoaXMg
PSBSZWYoKmVuZFBvaW50KSwgcGFkXSB7CisgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+
aXNTdG9wcGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5yZW1vdmVSZW1vdGVTdHJlYW0ocGFkKTsKKyAgICAgICAgfSk7CisgICAgfSks
IHRoaXMpOworCisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgp
LCAib24tZGF0YS1jaGFubmVsIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dCogZW5kUG9pbnQsIEdzdFdlYlJUQ0RhdGFDaGFubmVsKiBjaGFubmVsKSB7CisgICAgICAgIGVu
ZFBvaW50LT5vbkRhdGFDaGFubmVsKGNoYW5uZWwpOworICAgIH0pLCB0aGlzKTsKKworICAgIGdz
dF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgbV93ZWJydGNCaW4uZ2V0
KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp+R1N0
cmVhbWVyTWVkaWFFbmRwb2ludCgpCit7CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIHRl
YXJkb3duUGlwZWxpbmUoKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp0ZWFy
ZG93blBpcGVsaW5lKCkKK3sKKyAgICBSRUxFQVNFX0FTU0VSVChtX3BpcGVsaW5lKTsKKyNpZiAh
UkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKKyAg
ICBtX3N0YXRzQ29sbGVjdG9yLT5zZXRFbGVtZW50KG51bGxwdHIpOworCisgICAgZ19zaWduYWxf
aGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fd2VicnRjQmluLmdldCgpLCB0aGlzKTsKKyAg
ICBkaXNjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCkpOwor
ICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfTlVM
TCk7CisKKyAgICBtX3NvdXJjZXMuY2xlYXIoKTsKKyAgICBtX3JlbW90ZU1MaW5lSW5mb3MuY2xl
YXIoKTsKKyAgICBtX3JlbW90ZVN0cmVhbXNCeUlkLmNsZWFyKCk7CisgICAgbV93ZWJydGNCaW4g
PSBudWxscHRyOworICAgIG1fcGlwZWxpbmUgPSBudWxscHRyOworfQorCitib29sIEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAg
ICBzd2l0Y2ggKEdTVF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdTVF9NRVNT
QUdFX0VPUzoKKyAgICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9C
SU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCAiZW9z
Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX01FU1NBR0VfRUxFTUVOVDogeworICAg
ICAgICBjb25zdCBhdXRvKiBkYXRhID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdl
KTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShkYXRhKSwg
IkdzdEJpbkZvcndhcmRlZCIpKSB7CisgICAgICAgICAgICBHUmVmUHRyPEdzdE1lc3NhZ2U+IHN1
Yk1lc3NhZ2U7CisgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldChkYXRhLCAibWVzc2FnZSIs
IEdTVF9UWVBFX01FU1NBR0UsICZzdWJNZXNzYWdlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAg
ICAgICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKHN1Yk1lc3NhZ2UuZ2V0KCkpID09IEdTVF9NRVNT
QUdFX0VPUykKKyAgICAgICAgICAgICAgICBkaXNwb3NlRWxlbWVudENoYWluKEdTVF9FTEVNRU5U
X0NBU1QoR1NUX01FU1NBR0VfU1JDKHN1Yk1lc3NhZ2UuZ2V0KCkpKSk7CisgICAgICAgIH0KKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpkaXNw
b3NlRWxlbWVudENoYWluKEdzdEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiR290IGVsZW1lbnQgRU9TIG1lc3NhZ2UgZnJvbSAlIiBH
U1RfUFRSX0ZPUk1BVCwgZWxlbWVudCk7CisKKyAgICBhdXRvIHBhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9nZXRfc3RhdGljX3BhZChlbGVtZW50LCAic2luayIpKTsKKyAgICBhdXRvIHBlZXIg
PSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihwYWQuZ2V0KCkpKTsKKworICAgIGdzdF9lbGVt
ZW50X3NldF9sb2NrZWRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgVFJVRSk7CisgICAgZ3N0X3Bh
ZF91bmxpbmsocGVlci5nZXQoKSwgcGFkLmdldCgpKTsKKyAgICBnc3RfYmluX3JlbW92ZShHU1Rf
QklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIGVsZW1lbnQpOworICAgIGdzdF9lbGVtZW50X3Jl
bGVhc2VfcmVxdWVzdF9wYWQobV93ZWJydGNCaW4uZ2V0KCksIHBlZXIuZ2V0KCkpOworICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShlbGVtZW50LCBHU1RfU1RBVEVfTlVMTCk7CisgICAgZ3N0X2Vs
ZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBGQUxTRSk7Cit9CisKK2Jv
b2wgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50
Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKK3sKKyAgICBpZiAobV9waXBlbGluZSkKKyAg
ICAgICAgdGVhcmRvd25QaXBlbGluZSgpOworCisgICAgaWYgKCFpbml0aWFsaXplUGlwZWxpbmUo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgYXV0byBidW5kbGVQb2xpY3kgPSBidW5k
bGVQb2xpY3lGcm9tQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKKyAgICBhdXRvIGljZVRy
YW5zcG9ydFBvbGljeSA9IGljZVRyYW5zcG9ydFBvbGljeUZyb21Db25maWd1cmF0aW9uKGNvbmZp
Z3VyYXRpb24pOworICAgIGdfb2JqZWN0X3NldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImJ1bmRsZS1w
b2xpY3kiLCBidW5kbGVQb2xpY3ksICJpY2UtdHJhbnNwb3J0LXBvbGljeSIsIGljZVRyYW5zcG9y
dFBvbGljeSwgbnVsbHB0cik7CisKKyAgICBmb3IgKGF1dG8mIHNlcnZlciA6IGNvbmZpZ3VyYXRp
b24uaWNlU2VydmVycykgeworICAgICAgICBib29sIHN0dW5TZXQgPSBmYWxzZTsKKyAgICAgICAg
Zm9yIChhdXRvJiB1cmwgOiBzZXJ2ZXIudXJscykgeworICAgICAgICAgICAgaWYgKHVybC5wcm90
b2NvbCgpLnN0YXJ0c1dpdGgoInR1cm4iKSkgeworICAgICAgICAgICAgICAgIGF1dG8gdmFsaWQg
PSB1cmwuc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCkucmVwbGFjZSgidHVybjoiLCAidHVybjovLyIp
LnJlcGxhY2UoInR1cm5zOiIsICJ0dXJuczovLyIpOworICAgICAgICAgICAgICAgIFVSTCB2YWxp
ZFVSTChVUkwoKSwgdmFsaWQpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBsaWJuaWNlIGN1
cnJlbnRseSBkb2Vzbid0IHNlZW0gdG8gaGFuZGxlIElQdjYgYWRkcmVzc2VzIHZlcnkgd2VsbC4K
KyAgICAgICAgICAgICAgICBpZiAodmFsaWRVUkwuaG9zdCgpLnN0YXJ0c1dpdGgoJ1snKSkKKyAg
ICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdmFsaWRVUkwuc2V0
VXNlcihzZXJ2ZXIudXNlcm5hbWUpOworICAgICAgICAgICAgICAgIHZhbGlkVVJMLnNldFBhc3N3
b3JkKHNlcnZlci5jcmVkZW50aWFsKTsKKyAgICAgICAgICAgICAgICBib29sIHJlc3VsdCA9IGZh
bHNlOworICAgICAgICAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5n
ZXQoKSwgImFkZC10dXJuLXNlcnZlciIsIHZhbGlkVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCks
ICZyZXN1bHQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0KQorICAgICAgICAgICAgICAg
ICAgICBHU1RfV0FSTklORygiVW5hYmxlIHRvIHVzZSBUVVJOIHNlcnZlcjogJXMiLCB2YWxpZFVS
TC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
ICghc3R1blNldCAmJiB1cmwucHJvdG9jb2woKS5zdGFydHNXaXRoKCJzdHVuIikpIHsKKyAgICAg
ICAgICAgICAgICBhdXRvIHZhbGlkID0gdXJsLnN0cmluZygpLmlzb2xhdGVkQ29weSgpLnJlcGxh
Y2UoInN0dW46IiwgInN0dW46Ly8iKTsKKyAgICAgICAgICAgICAgICBVUkwgdmFsaWRVUkwoVVJM
KCksIHZhbGlkKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogbGlibmljZSBjdXJyZW50bHkg
ZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBJUHY2IGFkZHJlc3NlcyB2ZXJ5IHdlbGwuCisgICAgICAg
ICAgICAgICAgaWYgKHZhbGlkVVJMLmhvc3QoKS5zdGFydHNXaXRoKCdbJykpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHZhbGlkVVJMLnNldFVzZXIoc2Vy
dmVyLnVzZXJuYW1lKTsKKyAgICAgICAgICAgICAgICB2YWxpZFVSTC5zZXRQYXNzd29yZChzZXJ2
ZXIuY3JlZGVudGlhbCk7CisgICAgICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fd2VicnRjQmlu
LmdldCgpLCAic3R1bi1zZXJ2ZXIiLCB2YWxpZFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCBu
dWxscHRyKTsKKyAgICAgICAgICAgICAgICBzdHVuU2V0ID0gdHJ1ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdJUDogaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0
b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvLS9tZXJnZV9yZXF1ZXN0cy8zMDIKKyAg
ICBHU1RfRklYTUUoIiV6dSBjdXN0b20gY2VydGlmaWNhdGVzIG5vdCBwcm9wYWdhdGVkIHRvIHdl
YnJ0Y2JpbiIsIGNvbmZpZ3VyYXRpb24uY2VydGlmaWNhdGVzLnNpemUoKSk7CisKKyAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BMQVlJTkcpOwor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkVuZC1wb2ludCByZWFkeSIp
OworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJl
c3RhcnRJY2UoKQoreworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgInJl
c3RhcnRpbmcgSUNFIik7CisgICAgLy8gV0lQIGluIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9w
Lm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTg3NworICAg
IGluaXRpYXRlKHRydWUsIGdzdF9zdHJ1Y3R1cmVfbmV3KCJ3ZWJydGNiaW4tb2ZmZXItb3B0aW9u
cyIsICJpY2UtcmVzdGFydCIsIEdfVFlQRV9CT09MRUFOLCBUUlVFLCBudWxscHRyKSk7Cit9CisK
K3N0YXRpYyBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxSVENTZHBUeXBlLCBTdHJpbmc+PiBmZXRj
aERlc2NyaXB0aW9uKEdzdEVsZW1lbnQqIHdlYnJ0Y0JpbiwgY29uc3QgY2hhciogbmFtZSkKK3sK
KyAgICBpZiAoIXdlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEdVbmlxdWVP
dXRQdHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbjsKKyAgICBnX29i
amVjdF9nZXQod2VicnRjQmluLCBtYWtlU3RyaW5nKG5hbWUsICItZGVzY3JpcHRpb24iKS51dGY4
KCkuZGF0YSgpLCAmZGVzY3JpcHRpb24ub3V0UHRyKCksIG51bGxwdHIpOworICAgIGlmICghZGVz
Y3JpcHRpb24pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHNk
cFN0cmluZyhnc3Rfc2RwX21lc3NhZ2VfYXNfdGV4dChkZXNjcmlwdGlvbi0+c2RwKSk7CisgICAg
R1NUX1RSQUNFX09CSkVDVCh3ZWJydGNCaW4sICIlcy1kZXNjcmlwdGlvbiBTRFA6ICVzIiwgbmFt
ZSwgc2RwU3RyaW5nLmdldCgpKTsKKyAgICByZXR1cm4geyB7IGZyb21TZXNzaW9uRGVzY3JpcHRp
b25UeXBlKCpkZXNjcmlwdGlvbi5nZXQoKSksIHNkcFN0cmluZy5nZXQoKSB9IH07Cit9CisKK3N0
YXRpYyBHc3RXZWJSVENTaWduYWxpbmdTdGF0ZSBmZXRjaFNpZ25hbGluZ1N0YXRlKEdzdEVsZW1l
bnQqIHdlYnJ0Y0JpbikKK3sKKyAgICBHc3RXZWJSVENTaWduYWxpbmdTdGF0ZSBzdGF0ZTsKKyAg
ICBnX29iamVjdF9nZXQod2VicnRjQmluLCAic2lnbmFsaW5nLXN0YXRlIiwgJnN0YXRlLCBudWxs
cHRyKTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisgICAgR1VuaXF1ZVB0cjxjaGFy
PiBkZXNjKGdfZW51bV90b19zdHJpbmcoR1NUX1RZUEVfV0VCUlRDX1NJR05BTElOR19TVEFURSwg
c3RhdGUpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHdlYnJ0Y0JpbiwgIlNpZ25hbGluZyBzdGF0
ZSBzZXQgdG8gJXMiLCBkZXNjLmdldCgpKTsKKyNlbmRpZgorICAgIHJldHVybiBzdGF0ZTsKK30K
KworZW51bSBjbGFzcyBHYXRoZXJTaWduYWxpbmdTdGF0ZSB7IE5vLCBZZXMgfTsKK3N0YXRpYyBz
dGQ6Om9wdGlvbmFsPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6RGVzY3JpcHRpb25TdGF0ZXM+IGRl
c2NyaXB0aW9uc0Zyb21XZWJSVENCaW4oR3N0RWxlbWVudCogd2VicnRjQmluLCBHYXRoZXJTaWdu
YWxpbmdTdGF0ZSBnYXRoZXJTaWduYWxpbmdTdGF0ZSA9IEdhdGhlclNpZ25hbGluZ1N0YXRlOjpO
bykKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJUQ1NkcFR5cGU+IGN1cnJlbnRMb2NhbERlc2NyaXB0
aW9uU2RwVHlwZSwgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHBUeXBlLCBjdXJyZW50UmVtb3Rl
RGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlOworICAg
IFN0cmluZyBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcCwgcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b25TZHAsIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvblNkcCwgcGVuZGluZ1JlbW90ZURlc2NyaXB0
aW9uU2RwOworICAgIGlmIChhdXRvIGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uID0gZmV0Y2hEZXNj
cmlwdGlvbih3ZWJydGNCaW4sICJjdXJyZW50LWxvY2FsIikpIHsKKyAgICAgICAgYXV0byBbc2Rw
VHlwZSwgZGVzY3JpcHRpb25dID0gKmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uOworICAgICAgICBj
dXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcFR5cGUgPSBzZHBUeXBlOworICAgICAgICBjdXJyZW50
TG9jYWxEZXNjcmlwdGlvblNkcCA9IFdURk1vdmUoZGVzY3JpcHRpb24pOworICAgIH0KKyAgICBp
ZiAoYXV0byBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRj
QmluLCAicGVuZGluZy1sb2NhbCIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5cGUsIGRlc2NyaXB0
aW9uXSA9ICpwZW5kaW5nTG9jYWxEZXNjcmlwdGlvbjsKKyAgICAgICAgcGVuZGluZ0xvY2FsRGVz
Y3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgcGVuZGluZ0xvY2FsRGVzY3JpcHRp
b25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAgaWYgKGF1dG8gY3VycmVu
dFJlbW90ZURlc2NyaXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3ZWJydGNCaW4sICJjdXJyZW50
LXJlbW90ZSIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5cGUsIGRlc2NyaXB0aW9uXSA9ICpjdXJy
ZW50UmVtb3RlRGVzY3JpcHRpb247CisgICAgICAgIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvblNk
cFR5cGUgPSBzZHBUeXBlOworICAgICAgICBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHAgPSBX
VEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAgaWYgKGF1dG8gcGVuZGluZ1JlbW90ZURl
c2NyaXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3ZWJydGNCaW4sICJwZW5kaW5nLXJlbW90ZSIp
KSB7CisgICAgICAgIGF1dG8gW3NkcFR5cGUsIGRlc2NyaXB0aW9uXSA9ICpwZW5kaW5nUmVtb3Rl
RGVzY3JpcHRpb247CisgICAgICAgIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvblNkcFR5cGUgPSBz
ZHBUeXBlOworICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRl
c2NyaXB0aW9uKTsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFsPFJUQ1NpZ25hbGluZ1N0YXRl
PiBzaWduYWxpbmdTdGF0ZTsKKyAgICBpZiAoZ2F0aGVyU2lnbmFsaW5nU3RhdGUgPT0gR2F0aGVy
U2lnbmFsaW5nU3RhdGU6OlllcykKKyAgICAgICAgc2lnbmFsaW5nU3RhdGUgPSB0b1NpZ25hbGlu
Z1N0YXRlKGZldGNoU2lnbmFsaW5nU3RhdGUod2VicnRjQmluKSk7CisKKyAgICByZXR1cm4gUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpEZXNjcmlwdGlvblN0YXRlcyB7CisgICAgICAgIHNpZ25hbGlu
Z1N0YXRlLAorICAgICAgICBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcFR5cGUsIGN1cnJlbnRM
b2NhbERlc2NyaXB0aW9uU2RwLAorICAgICAgICBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvblNkcFR5
cGUsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwLAorICAgICAgICBjdXJyZW50UmVtb3RlRGVz
Y3JpcHRpb25TZHBUeXBlLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHAsCisgICAgICAgIHBl
bmRpbmdSZW1vdGVEZXNjcmlwdGlvblNkcFR5cGUsIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvblNk
cAorICAgIH07Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9TZXRMb2NhbERl
c2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiogZGVzY3JpcHRpb24pCit7Cisg
ICAgc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb24sIHRydWUsIFtwcm90ZWN0ZWRUaGlzID0gUmVm
KCp0aGlzKSwgdGhpc10geworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gZGVzY3JpcHRpb25zID0gZGVzY3Jp
cHRpb25zRnJvbVdlYlJUQ0JpbihtX3dlYnJ0Y0Jpbi5nZXQoKSwgR2F0aGVyU2lnbmFsaW5nU3Rh
dGU6Olllcyk7CisgICAgICAgIEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4gdHJhbnNw
b3J0OworICAgICAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCksICJzY3RwLXRyYW5z
cG9ydCIsICZ0cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5zZXRMb2NhbERlc2NyaXB0aW9uU3VjY2VlZGVkKFdURk1vdmUoZGVzY3Jp
cHRpb25zKSwgdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFj
a2VuZD4oV1RGTW92ZSh0cmFuc3BvcnQpKSA6IG51bGxwdHIpOworICAgIH0sIFtwcm90ZWN0ZWRU
aGlzID0gUmVmKCp0aGlzKSwgdGhpc10oY29uc3QgR0Vycm9yKiBlcnJvcikgeworICAgICAgICBp
ZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGlmIChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHU1RfV0VCUlRDX0VSUk9SX0lOVkFMSURf
U1RBVEUpCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRMb2NhbERlc2Ny
aXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVkIHRvIHNl
dCBsb2NhbCBhbnN3ZXIgc2RwOiBubyBwZW5kaW5nIHJlbW90ZSBkZXNjcmlwdGlvbi4iX3MgfSk7
CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldExv
Y2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUg
dG8gYXBwbHkgc2Vzc2lvbiBsb2NhbCBkZXNjcmlwdGlvbiJfcyB9KTsKKyAgICB9KTsKK30KKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb1NldFJlbW90ZURlc2NyaXB0aW9uKGNvbnN0
IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgc2V0RGVzY3JpcHRp
b24oJmRlc2NyaXB0aW9uLCBmYWxzZSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCB0aGlz
XSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWNr
aW5nIHJlbW90ZSBkZXNjcmlwdGlvbiIpOworICAgICAgICBhdXRvIGRlc2NyaXB0aW9ucyA9IGRl
c2NyaXB0aW9uc0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCksIEdhdGhlclNpZ25hbGlu
Z1N0YXRlOjpZZXMpOworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ+IHRy
YW5zcG9ydDsKKyAgICAgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAic2N0cC10
cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgbV9wZWVy
Q29ubmVjdGlvbkJhY2tlbmQuc2V0UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQoV1RGTW92ZShk
ZXNjcmlwdGlvbnMpLCB0cmFuc3BvcnQgPyBtYWtlVW5pcXVlPEdTdHJlYW1lclNjdHBUcmFuc3Bv
cnRCYWNrZW5kPihXVEZNb3ZlKHRyYW5zcG9ydCkpIDogbnVsbHB0cik7CisgICAgfSwgW3Byb3Rl
Y3RlZFRoaXMgPSBSZWYoKnRoaXMpLCB0aGlzXShjb25zdCBHRXJyb3IqIGVycm9yKSB7CisgICAg
ICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsK
KyAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLT5jb2RlID09IEdTVF9XRUJSVENfRVJST1JfSU5W
QUxJRF9TVEFURSkKKyAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldFJlbW90
ZURlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVycm9yLCAiRmFpbGVk
IHRvIHNldCByZW1vdGUgYW5zd2VyIHNkcCJfcyB9KTsKKyAgICAgICAgZWxzZQorICAgICAgICAg
ICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuc2V0UmVtb3RlRGVzY3JpcHRpb25GYWlsZWQoRXhj
ZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiByZW1vdGUg
ZGVzY3JpcHRpb24iX3MgfSk7CisgICAgfSk7CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisg
ICAgc3RhcnRMb2dnaW5nU3RhdHMoKTsKKyNlbmRpZgorfQorCitzdHJ1Y3QgU2V0RGVzY3JpcHRp
b25DYWxsRGF0YSB7CisgICAgRnVuY3Rpb248dm9pZCgpPiBzdWNjZXNzQ2FsbGJhY2s7CisgICAg
RnVuY3Rpb248dm9pZChjb25zdCBHRXJyb3IqKT4gZmFpbHVyZUNhbGxiYWNrOworfTsKKworV0VC
S0lUX0RFRklORV9BU1lOQ19EQVRBX1NUUlVDVChTZXREZXNjcmlwdGlvbkNhbGxEYXRhKTsKKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXREZXNjcmlwdGlvbihjb25zdCBSVENTZXNz
aW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uLCBib29sIGlzTG9jYWwsIEZ1bmN0aW9uPHZvaWQo
KT4mJiBzdWNjZXNzQ2FsbGJhY2ssIEZ1bmN0aW9uPHZvaWQoY29uc3QgR0Vycm9yKik+JiYgZmFp
bHVyZUNhbGxiYWNrKQoreworICAgIEdzdFNEUE1lc3NhZ2UqIG1lc3NhZ2U7CisgICAgYXV0byBz
ZHBUeXBlID0gUlRDU2RwVHlwZTo6T2ZmZXI7CisKKyAgICBpZiAoZGVzY3JpcHRpb24pIHsKKyAg
ICAgICAgaWYgKGdzdF9zZHBfbWVzc2FnZV9uZXdfZnJvbV90ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8
Y29uc3QgY2hhcio+KGRlc2NyaXB0aW9uLT5zZHAoKS5jaGFyYWN0ZXJzOCgpKSwgJm1lc3NhZ2Up
ICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjayhudWxscHRyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZHBUeXBlID0gZGVzY3Jp
cHRpb24tPnR5cGUoKTsKKyAgICB9IGVsc2UgaWYgKGdzdF9zZHBfbWVzc2FnZV9uZXcoJm1lc3Nh
Z2UpICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAgZmFpbHVyZUNhbGxiYWNrKG51bGxwdHIpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc0xvY2FsKQorICAgICAgICBzdG9y
ZVJlbW90ZU1MaW5lSW5mbyhtZXNzYWdlKTsKKworICAgIGF1dG8gdHlwZSA9IHRvU2Vzc2lvbkRl
c2NyaXB0aW9uVHlwZShzZHBUeXBlKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJDcmVhdGluZyAlcyBzZXNzaW9uIGZvciBTRFAgJXMiLCBpc0xvY2FsID8gImxvY2Fs
IiA6ICJyZW1vdGUiLCBnc3Rfd2VicnRjX3NkcF90eXBlX3RvX3N0cmluZyh0eXBlKSk7CisKKyAg
ICBHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gc2Vzc2lvbkRlc2NyaXB0
aW9uKGdzdF93ZWJydGNfc2Vzc2lvbl9kZXNjcmlwdGlvbl9uZXcodHlwZSwgbWVzc2FnZSkpOwor
ICAgIGF1dG8gc2lnbmFsTmFtZSA9IG1ha2VTdHJpbmcoInNldC0iLCBpc0xvY2FsID8gImxvY2Fs
IiA6ICJyZW1vdGUiLCAiLWRlc2NyaXB0aW9uIik7CisgICAgYXV0byogZGF0YSA9IGNyZWF0ZVNl
dERlc2NyaXB0aW9uQ2FsbERhdGEoKTsKKyAgICBkYXRhLT5zdWNjZXNzQ2FsbGJhY2sgPSBXVEZN
b3ZlKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgZGF0YS0+ZmFpbHVyZUNhbGxiYWNrID0gV1RGTW92
ZShmYWlsdXJlQ2FsbGJhY2spOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jp
bi5nZXQoKSwgc2lnbmFsTmFtZS5hc2NpaSgpLmRhdGEoKSwgc2Vzc2lvbkRlc2NyaXB0aW9uLmdl
dCgpLCBnc3RfcHJvbWlzZV9uZXdfd2l0aF9jaGFuZ2VfZnVuYyhbXShHc3RQcm9taXNlKiByYXdQ
cm9taXNlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvKiBkYXRhID0gc3RhdGlj
X2Nhc3Q8U2V0RGVzY3JpcHRpb25DYWxsRGF0YSo+KHVzZXJEYXRhKTsKKyAgICAgICAgYXV0byBw
cm9taXNlID0gYWRvcHRHUmVmKHJhd1Byb21pc2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGdz
dF9wcm9taXNlX3dhaXQocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIGNvbnN0IGF1dG8qIHJlcGx5
ID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UuZ2V0KCkpOworICAgICAgICBpZiAocmVz
dWx0ICE9IEdTVF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEIHx8IChyZXBseSAmJiBnc3Rfc3RydWN0
dXJlX2hhc19maWVsZChyZXBseSwgImVycm9yIikpKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlv
bmFsPEdVbmlxdWVQdHI8R0Vycm9yPj4gZXJyb3JIb2xkZXI7CisgICAgICAgICAgICBpZiAocmVw
bHkpIHsKKyAgICAgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAg
ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksICJlcnJvciIsIEdfVFlQRV9FUlJP
UiwgJmVycm9yLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBHU1RfRVJST1Io
IlVuYWJsZSB0byBzZXQgZGVzY3JpcHRpb24sIGVycm9yOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsK
KyAgICAgICAgICAgICAgICBlcnJvckhvbGRlci5lbXBsYWNlKGdfZXJyb3JfY29weShlcnJvci5n
ZXQoKSkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZXJy
b3IgPSBXVEZNb3ZlKGVycm9ySG9sZGVyKSwgZmFpbHVyZUNhbGxiYWNrID0gV1RGTW92ZShkYXRh
LT5mYWlsdXJlQ2FsbGJhY2spXSB7CisgICAgICAgICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKGVy
cm9yID8gZXJyb3ItPmdldCgpIDogbnVsbHB0cik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtzdWNjZXNz
Q2FsbGJhY2sgPSBXVEZNb3ZlKGRhdGEtPnN1Y2Nlc3NDYWxsYmFjayldIHsKKyAgICAgICAgICAg
IHN1Y2Nlc3NDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICB9LCBkYXRhLCByZWludGVycHJl
dF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZXN0cm95U2V0RGVzY3JpcHRpb25DYWxsRGF0YSkpKTsK
K30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9yZVJlbW90ZU1MaW5lSW5mbyhH
c3RTRFBNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5jbGVhcigp
OworICAgIHVuc2lnbmVkIHRvdGFsTWVkaWFzID0gZ3N0X3NkcF9tZXNzYWdlX21lZGlhc19sZW4o
bWVzc2FnZSk7CisgICAgbV9yZW1vdGVNTGluZUluZm9zLnJlc2VydmVDYXBhY2l0eSh0b3RhbE1l
ZGlhcyk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU3RvcmluZyAl
dSByZW1vdGUgcGVuZGluZyBtbGluZXMiLCB0b3RhbE1lZGlhcyk7CisgICAgZm9yICh1bnNpZ25l
ZCBtZWRpYUluZGV4ID0gMDsgbWVkaWFJbmRleCA8IHRvdGFsTWVkaWFzOyBtZWRpYUluZGV4Kysp
IHsKKyAgICAgICAgY29uc3QgYXV0byogbWVkaWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0X21lZGlh
KG1lc3NhZ2UsIG1lZGlhSW5kZXgpOworICAgICAgICBjb25zdCBjaGFyKiBtZWRpYVR5cGUgPSBn
c3Rfc2RwX21lZGlhX2dldF9tZWRpYShtZWRpYSk7CisgICAgICAgIGlmICghZ19zdHJfZXF1YWwo
bWVkaWFUeXBlLCAiYXVkaW8iKSAmJiAhZ19zdHJfZXF1YWwobWVkaWFUeXBlLCAidmlkZW8iKSkK
KyAgICAgICAgICAgIGNvbnRpbnVlOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRwor
ICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IG1lZGlhUmVwcmVzZW50YXRpb24oZ3N0X3NkcF9tZWRp
YV9hc190ZXh0KG1lZGlhKSk7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0
KCksICJQcm9jZXNzaW5nIG1lZGlhOlxuJXMiLCBtZWRpYVJlcHJlc2VudGF0aW9uLmdldCgpKTsK
KyNlbmRpZgorICAgICAgICBjb25zdCBjaGFyKiBtaWQgPSBnc3Rfc2RwX21lZGlhX2dldF9hdHRy
aWJ1dGVfdmFsKG1lZGlhLCAibWlkIik7CisgICAgICAgIGlmICghbWlkKQorICAgICAgICAgICAg
Y29udGludWU7CisKKyAgICAgICAgYm9vbCBpc0luYWN0aXZlID0gZmFsc2U7CisgICAgICAgIHVu
c2lnbmVkIHRvdGFsQXR0cmlidXRlcyA9IGdzdF9zZHBfbWVkaWFfYXR0cmlidXRlc19sZW4obWVk
aWEpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRl
SW5kZXggPCB0b3RhbEF0dHJpYnV0ZXM7IGF0dHJpYnV0ZUluZGV4KyspIHsKKyAgICAgICAgICAg
IGNvbnN0IGF1dG8qIGF0dHJpYnV0ZSA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZShtZWRp
YSwgYXR0cmlidXRlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXR0cmlidXRl
LT5rZXksICJpbmFjdGl2ZSIpKSB7CisgICAgICAgICAgICAgICAgaXNJbmFjdGl2ZSA9IHRydWU7
CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAg
ICAgaWYgKGlzSW5hY3RpdmUpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBl
bGluZS5nZXQoKSwgIlNraXBwaW5nIGluYWN0aXZlIG1lZGlhIik7CisgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fbWVkaWFGb3JNaWQuc2V0KHsgbWlkIH0sIGdf
c3RyX2VxdWFsKG1lZGlhVHlwZSwgImF1ZGlvIikgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBl
OjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKTsKKworICAgICAgICAv
LyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJh
ZC8tL21lcmdlX3JlcXVlc3RzLzE5MDcKKyAgICAgICAgaWYgKHNkcE1lZGlhSGFzQXR0cmlidXRl
S2V5KG1lZGlhLCAiaWNlLWxpdGUiKSkgeworICAgICAgICAgICAgR1JlZlB0cjxHT2JqZWN0PiBp
Y2U7CisgICAgICAgICAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCksICJpY2UtYWdl
bnQiLCAmaWNlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChp
Y2UuZ2V0KCksICJpY2UtbGl0ZSIsIFRSVUUsIG51bGxwdHIpOworICAgICAgICB9CisKKyAgICAg
ICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICAgICAg
VmVjdG9yPGludD4gcGF5bG9hZFR5cGVzOworICAgICAgICB1bnNpZ25lZCB0b3RhbEZvcm1hdHMg
PSBnc3Rfc2RwX21lZGlhX2Zvcm1hdHNfbGVuKG1lZGlhKTsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTWVkaWEgJXMgaGFzICV1IGZvcm1hdHMiLCBtZWRpYVR5
cGUsIHRvdGFsRm9ybWF0cyk7CisgICAgICAgIGZvciAodW5zaWduZWQgZm9ybWF0SW5kZXggPSAw
OyBmb3JtYXRJbmRleCA8IHRvdGFsRm9ybWF0czsgZm9ybWF0SW5kZXgrKykgeworICAgICAgICAg
ICAgYXV0byBmb3JtYXQgPSBtYWtlU3RyaW5nKGdzdF9zZHBfbWVkaWFfZ2V0X2Zvcm1hdChtZWRp
YSwgZm9ybWF0SW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gcGF5bG9hZFR5cGUgPSBwYXJzZUlu
dGVnZXI8aW50Pihmb3JtYXQpOworICAgICAgICAgICAgaWYgKCFwYXlsb2FkVHlwZSB8fCAhKnBh
eWxvYWRUeXBlKSB7CisgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxp
bmUuZ2V0KCksICJJbnZhbGlkIHBheWxvYWQgdHlwZTogJXMiLCBmb3JtYXQudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBhdXRvIGZvcm1hdENhcHMgPSBhZG9wdEdSZWYoZ3N0X3NkcF9tZWRpYV9nZXRfY2Fwc19mcm9t
X21lZGlhKG1lZGlhLCAqcGF5bG9hZFR5cGUpKTsKKyAgICAgICAgICAgIGlmICghZm9ybWF0Q2Fw
cykgeworICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChtX3BpcGVsaW5lLmdldCgp
LCAiTm8gY2FwcyBmb3VuZCBmb3IgcGF5bG9hZCB0eXBlICVkIiwgKnBheWxvYWRUeXBlKTsKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8g
UmVsYXkgU0RQIGF0dHJpYnV0ZXMgdG8gdGhlIGNhcHMsIHRoaXMgaXMgc3BlY2lhbGx5IHVzZWZ1
bCBzbyB0aGF0IGVsZW1lbnRzIGluCisgICAgICAgICAgICAvLyB3ZWJydGNiaW4gd2lsbCBiZSBh
YmxlIHRvIGVuYWJsZSBSVFAgaGVhZGVyIGV4dGVuc2lvbnMuCisgICAgICAgICAgICBnc3Rfc2Rw
X21lZGlhX2F0dHJpYnV0ZXNfdG9fY2FwcyhtZWRpYSwgZm9ybWF0Q2Fwcy5nZXQoKSk7CisKKyAg
ICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZChjYXBzLmdldCgpLCBmb3JtYXRDYXBzLmxlYWtSZWYo
KSk7CisgICAgICAgICAgICBtX3B0Q291bnRlciA9IHN0ZDo6bWF4KG1fcHRDb3VudGVyLCAqcGF5
bG9hZFR5cGUgKyAxKTsKKyAgICAgICAgICAgIHBheWxvYWRUeXBlcy5hcHBlbmQoKnBheWxvYWRU
eXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRvdGFsQ2FwcyA9IGdzdF9jYXBz
X2dldF9zaXplKGNhcHMuZ2V0KCkpOworICAgICAgICBpZiAodG90YWxDYXBzKSB7CisgICAgICAg
ICAgICBmb3IgKHVuc2lnbmVkIGNhcHNJbmRleCA9IDA7IGNhcHNJbmRleCA8IHRvdGFsQ2Fwczsg
Y2Fwc0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9
IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgY2Fwc0luZGV4KTsKKyAgICAgICAg
ICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gt
cnRwIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJDYWNoaW5nIHBheWxvYWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNh
cHMuZ2V0KCkpOworICAgICAgICAgICAgbV9yZW1vdGVNTGluZUluZm9zLnVuY2hlY2tlZEFwcGVu
ZCh7IFdURk1vdmUoY2FwcyksIGZhbHNlLCBXVEZNb3ZlKHBheWxvYWRUeXBlcykgfSk7CisgICAg
ICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y29uZmlndXJl
QW5kTGlua1NvdXJjZShSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXImIHNvdXJj
ZSkKK3sKKyAgICBhdXRvIGNhcHMgPSBzb3VyY2UuYWxsb3dlZENhcHMoKTsKKyAgICBzdGQ6Om9w
dGlvbmFsPHN0ZDo6cGFpcjxQZW5kaW5nTUxpbmVJbmZvLCBHUmVmUHRyPEdzdENhcHM+Pj4gZm91
bmQ7CisgICAgZm9yIChhdXRvJiBtTGluZUluZm8gOiBtX3JlbW90ZU1MaW5lSW5mb3MpIHsKKyAg
ICAgICAgaWYgKG1MaW5lSW5mby5pc1VzZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAg
ICAgICB1bnNpZ25lZCB0b3RhbENhcHMgPSBnc3RfY2Fwc19nZXRfc2l6ZShtTGluZUluZm8uY2Fw
cy5nZXQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgY2Fwc0luZGV4ID0gMDsgY2Fwc0luZGV4
IDwgdG90YWxDYXBzOyBjYXBzSW5kZXgrKykgeworICAgICAgICAgICAgYXV0byogc3RydWN0dXJl
ID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShtTGluZUluZm8uY2Fwcy5nZXQoKSwgY2Fwc0luZGV4
KTsKKyAgICAgICAgICAgIGF1dG8gY2FwczIgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwo
Z3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSksIG51bGxwdHIpKTsKKyAgICAgICAgICAgIGF1
dG8gaW50ZXJzZWN0ZWQgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfaW50ZXJzZWN0KGNhcHMuZ2V0KCks
IGNhcHMyLmdldCgpKSk7CisgICAgICAgICAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5KGludGVy
c2VjdGVkLmdldCgpKSkgeworICAgICAgICAgICAgICAgIGZvdW5kID0gc3RkOjptYWtlX3BhaXIo
bUxpbmVJbmZvLCBXVEZNb3ZlKGludGVyc2VjdGVkKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvdW5kLmhhc192YWx1ZSgp
KQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYm9vbCBwYXlsb2FkVHlwZVdhc1Nl
dCA9IGZhbHNlOworICAgIGlmIChmb3VuZCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJVbnVzZWQgYW5kIGNvbXBhdGlibGUgY2FwcyBmb3VuZCBmb3IgJSIg
R1NUX1BUUl9GT1JNQVQgIi4uLiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSwgZm91bmQt
PnNlY29uZC5nZXQoKSk7CisgICAgICAgIHBheWxvYWRUeXBlV2FzU2V0ID0gc291cmNlLnNldFBh
eWxvYWRUeXBlKGZvdW5kLT5zZWNvbmQpOworICAgICAgICBmb3VuZC0+Zmlyc3QuaXNVc2VkID0g
dHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGF5bG9hZFR5cGVXYXNTZXQgPSBzb3VyY2Uuc2V0
UGF5bG9hZFR5cGUoY2Fwcyk7CisKKyAgICBpZiAoIXBheWxvYWRUeXBlV2FzU2V0KQorICAgICAg
ICByZXR1cm47CisKKyAgICBpZiAoIXNvdXJjZS5wYWQoKSkgeworICAgICAgICBzb3VyY2Uuc2V0
U2lua1BhZChyZXF1ZXN0UGFkKG1fcmVxdWVzdFBhZENvdW50ZXIsIHNvdXJjZS5hbGxvd2VkQ2Fw
cygpKSk7CisgICAgICAgIG1fcmVxdWVzdFBhZENvdW50ZXIrKzsKKyAgICB9CisKKyAgICBhdXRv
JiBzaW5rUGFkID0gc291cmNlLnBhZCgpOworICAgIFJFTEVBU0VfQVNTRVJUKCFnc3RfcGFkX2lz
X2xpbmtlZChzaW5rUGFkLmdldCgpKSk7CisgICAgYXV0byBzb3VyY2VCaW4gPSBzb3VyY2UuYmlu
KCk7CisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBzb3Vy
Y2VCaW4uZ2V0KCkpOworICAgIHNvdXJjZS5saW5rKCk7CisKKyAgICBHVW5pcXVlUHRyPGNoYXI+
IHBhZElkKGdzdF9wYWRfZ2V0X25hbWUoc2lua1BhZC5nZXQoKSkpOworICAgIGF1dG8gZG90Rmls
ZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwgIi5v
dXRnb2luZy0iLCBwYWRJZC5nZXQoKSk7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9X
SVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FM
TCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK0dSZWZQdHI8R3N0UGFkPiBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpyZXF1ZXN0UGFkKHVuc2lnbmVkIG1saW5lSW5kZXgsIGNvbnN0
IEdSZWZQdHI8R3N0Q2Fwcz4mIGFsbG93ZWRDYXBzKQoreworICAgIGF1dG8gcGFkSWQgPSBtYWtl
U3RyaW5nKCJzaW5rXyIsIG1saW5lSW5kZXgpOworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19jb3B5KGFsbG93ZWRDYXBzLmdldCgpKSk7CisKKyAgICBnc3RfY2Fwc19tYXBfaW5f
cGxhY2UoY2Fwcy5nZXQoKSwgW10oR3N0Q2Fwc0ZlYXR1cmVzKiwgR3N0U3RydWN0dXJlKiBzdHJ1
Y3R1cmUsIGdwb2ludGVyIHVzZXJEYXRhKSAtPiBnYm9vbGVhbiB7CisgICAgICAgIGF1dG8qIGVu
ZFBvaW50ID0gcmVpbnRlcnByZXRfY2FzdDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50Kj4odXNlckRh
dGEpOworICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChzdHJ1Y3R1cmUsICJwYXlsb2FkIiwgR19U
WVBFX0lOVCwgZW5kUG9pbnQtPm1fcHRDb3VudGVyKyssIG51bGxwdHIpOworICAgICAgICByZXR1
cm4gVFJVRTsKKyAgICB9LCB0aGlzKTsKKworICAgIC8vIEZJWE1FOiBSZXN0cmljdGluZyBjYXBz
IGFuZCBjb2RlYy1wcmVmZXJlbmNlcyBicmVha3MgY2FwcyBuZWdvdGlhdGlvbiBvZiBvdXRnb2lu
ZyBzb3VyY2VzIGluCisgICAgLy8gc29tZSBjYXNlIChqaXRzaSkuCisgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVxdWVzdGluZyBwYWQgJXMgcmVzdHJpY3RlZCB0byAl
IiBHU1RfUFRSX0ZPUk1BVCwgcGFkSWQudXRmOCgpLmRhdGEoKSwgY2Fwcy5nZXQoKSk7CisgICAg
YXV0byogcGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9nZXRfcGFkX3RlbXBsYXRlKG1fd2VicnRj
QmluLmdldCgpLCAic2lua18ldSIpOworICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3Rf
ZWxlbWVudF9yZXF1ZXN0X3BhZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgcGFkVGVtcGxhdGUsIHBhZElk
LnV0ZjgoKS5kYXRhKCksIGNhcHMuZ2V0KCkpKTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRy
YW5zY2VpdmVyPiB0cmFuc2NlaXZlcjsKKyAgICBnX29iamVjdF9nZXQoc2lua1BhZC5nZXQoKSwg
InRyYW5zY2VpdmVyIiwgJnRyYW5zY2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBnX29i
amVjdF9zZXQodHJhbnNjZWl2ZXIuZ2V0KCksICJjb2RlYy1wcmVmZXJlbmNlcyIsIGNhcHMuZ2V0
KCksIG51bGxwdHIpOworICAgIHJldHVybiBzaW5rUGFkOworfQorCitib29sIEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmFkZFRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIHNlbmRlciwg
TWVkaWFTdHJlYW1UcmFjayYgdHJhY2ssIGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKQorewor
ICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSBzb3VyY2U7CisgICAgR1JlZlB0
cjxHc3RXZWJSVENSVFBTZW5kZXI+IHJ0Y1NlbmRlcjsKKworICAgIGlmICh0cmFjay5wcml2YXRl
VHJhY2soKS5oYXNBdWRpbygpKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGlu
ZS5nZXQoKSwgIkFkZGluZyBvdXRnb2luZyBhdWRpbyBzb3VyY2UiKTsKKyAgICAgICAgYXV0byBh
dWRpb1NvdXJjZSA9IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRl
KHRyYWNrLnByaXZhdGVUcmFjaygpKTsKKyAgICAgICAgY29uZmlndXJlQW5kTGlua1NvdXJjZShh
dWRpb1NvdXJjZSk7CisKKyAgICAgICAgcnRjU2VuZGVyID0gYXVkaW9Tb3VyY2UtPnNlbmRlcigp
OworICAgICAgICBzb3VyY2UgPSBXVEZNb3ZlKGF1ZGlvU291cmNlKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgICBSRUxFQVNFX0FTU0VSVCh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNWaWRlbygpKTsK
KyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIG91dGdv
aW5nIHZpZGVvIHNvdXJjZSIpOworICAgICAgICBhdXRvIHZpZGVvU291cmNlID0gUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJhY2sucHJpdmF0ZVRyYWNrKCkp
OworICAgICAgICBjb25maWd1cmVBbmRMaW5rU291cmNlKHZpZGVvU291cmNlKTsKKworICAgICAg
ICBydGNTZW5kZXIgPSB2aWRlb1NvdXJjZS0+c2VuZGVyKCk7CisgICAgICAgIHNvdXJjZSA9IFdU
Rk1vdmUodmlkZW9Tb3VyY2UpOworICAgIH0KKworICAgIHNlbmRlci5zZXRTb3VyY2UoV1RGTW92
ZShzb3VyY2UpKTsKKworICAgIGlmIChhdXRvIHJ0cFNlbmRlciA9IHNlbmRlci5ydGNTZW5kZXIo
KSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBbHJlYWR5
IGhhcyBhIHNlbmRlci4iKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc2Vu
ZGVyLnNldFJUQ1NlbmRlcihXVEZNb3ZlKHJ0Y1NlbmRlcikpOworCisgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU2VuZGVyIGNvbmZpZ3VyZWQiKTsKKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVUcmFjayhHU3Ry
ZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiUmVtb3ZpbmcgdHJhY2siKTsKKyAgICBpZiAoYXV0byBiaW4gPSBz
ZW5kZXIuc3RvcFNvdXJjZSgpKQorICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NBU1Qo
bV9waXBlbGluZS5nZXQoKSksIGJpbi5nZXQoKSk7CisgICAgc2VuZGVyLmNsZWFyU291cmNlKCk7
CisgICAgb25OZWdvdGlhdGlvbk5lZWRlZCgpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OmRvQ3JlYXRlT2ZmZXIoY29uc3QgUlRDT2ZmZXJPcHRpb25zJiBvcHRpb25zKQorewor
ICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdp
bnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTg3NworICAgIC8vIEZJWE1FOiBQbHVtYiBvcHRpb25z
LnZvaWNlQWN0aXZpdHlEZXRlY3Rpb24uCisgICAgaW5pdGlhdGUodHJ1ZSwgZ3N0X3N0cnVjdHVy
ZV9uZXcoIndlYnJ0Y2Jpbi1vZmZlci1vcHRpb25zIiwgImljZS1yZXN0YXJ0IiwgR19UWVBFX0JP
T0xFQU4sIG9wdGlvbnMuaWNlUmVzdGFydCwgbnVsbHB0cikpOworfQorCit2b2lkIEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlQW5zd2VyKCkKK3sKKyAgICBpbml0aWF0ZShmYWxzZSwg
bnVsbHB0cik7Cit9CisKK3N0cnVjdCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50SG9sZGVyIHsKKyAg
ICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgZXhwbGljaXQgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludEhvbGRlcihHU3RyZWFtZXJNZWRpYUVuZHBvaW50JiBlbmRQb2ludCkKKyAg
ICAgICAgOiBlbmRQb2ludChlbmRQb2ludCkKKyAgICB7IH0KKworICAgIFJlZjxHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50PiBlbmRQb2ludDsKK307CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6aW5pdGlhdGUoYm9vbCBpc0luaXRpYXRvciwgR3N0U3RydWN0dXJlKiByYXdPcHRpb25zKQor
eworICAgIG1faXNJbml0aWF0b3IgPSBpc0luaXRpYXRvcjsKKyAgICBjb25zdCBjaGFyKiB0eXBl
ID0gaXNJbml0aWF0b3IgPyAib2ZmZXIiIDogImFuc3dlciI7CisgICAgR1NUX0RFQlVHX09CSkVD
VChtX3BpcGVsaW5lLmdldCgpLCAiQ3JlYXRpbmcgJXMiLCB0eXBlKTsKKyAgICBhdXRvIHNpZ25h
bE5hbWUgPSBtYWtlU3RyaW5nKCJjcmVhdGUtIiwgdHlwZSk7CisgICAgR1VuaXF1ZVB0cjxHc3RT
dHJ1Y3R1cmU+IG9wdGlvbnMocmF3T3B0aW9ucyk7CisgICAgYXV0byBkYXRhID0gbWFrZVVuaXF1
ZTxHU3RyZWFtZXJNZWRpYUVuZHBvaW50SG9sZGVyPigqdGhpcyk7CisgICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCBzaWduYWxOYW1lLmFzY2lpKCkuZGF0YSgpLCBv
cHRpb25zLmdldCgpLCBnc3RfcHJvbWlzZV9uZXdfd2l0aF9jaGFuZ2VfZnVuYyhbXShHc3RQcm9t
aXNlKiByYXdQcm9taXNlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBzdGQ6OnVuaXF1
ZV9wdHI8R1N0cmVhbWVyTWVkaWFFbmRwb2ludEhvbGRlcj4gZGF0YShzdGF0aWNfY2FzdDxHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50SG9sZGVyKj4odXNlckRhdGEpKTsKKyAgICAgICAgYXV0byBwcm9t
aXNlID0gYWRvcHRHUmVmKHJhd1Byb21pc2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGdzdF9w
cm9taXNlX3dhaXQocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BS
T01JU0VfUkVTVUxUX1JFUExJRUQpIHsKKyAgICAgICAgICAgIGRhdGEtPmVuZFBvaW50LT5jcmVh
dGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoeyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGNvbnN0IGF1dG8qIHJlcGx5ID0gZ3N0X3Byb21pc2VfZ2V0X3Jl
cGx5KHByb21pc2UuZ2V0KCkpOworICAgICAgICBSRUxFQVNFX0FTU0VSVChyZXBseSk7CisgICAg
ICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZChyZXBseSwgImVycm9yIikpIHsKKyAgICAg
ICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBwcm9taXNlRXJyb3I7CisgICAgICAgICAgICBn
c3Rfc3RydWN0dXJlX2dldChyZXBseSwgImVycm9yIiwgR19UWVBFX0VSUk9SLCAmcHJvbWlzZUVy
cm9yLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIEdVbmlxdWVQdHI8R0Vycm9yPiBl
cnJvcihwcm9taXNlRXJyb3IucmVsZWFzZSgpKTsKKyAgICAgICAgICAgIGRhdGEtPmVuZFBvaW50
LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoV1RGTW92ZShlcnJvcikpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY29uc3QgY2hhciogdHlwZSA9IGRh
dGEtPmVuZFBvaW50LT5tX2lzSW5pdGlhdG9yID8gIm9mZmVyIiA6ICJhbnN3ZXIiOworICAgICAg
ICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gc2Vzc2lvbkRlc2Ny
aXB0aW9uOworICAgICAgICBnc3Rfc3RydWN0dXJlX2dldChyZXBseSwgdHlwZSwgR1NUX1RZUEVf
V0VCUlRDX1NFU1NJT05fREVTQ1JJUFRJT04sICZzZXNzaW9uRGVzY3JpcHRpb24ub3V0UHRyKCks
IG51bGxwdHIpOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgICAgICBHVW5p
cXVlUHRyPGNoYXI+IHNkcChnc3Rfc2RwX21lc3NhZ2VfYXNfdGV4dChzZXNzaW9uRGVzY3JpcHRp
b24tPnNkcCkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKGRhdGEtPmVuZFBvaW50LT5waXBl
bGluZSgpLCAiQ3JlYXRlZCAlczogJXMiLCB0eXBlLCBzZHAuZ2V0KCkpOworI2VuZGlmCisgICAg
ICAgIEdVbmlxdWVQdHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbihz
ZXNzaW9uRGVzY3JpcHRpb24ucmVsZWFzZSgpKTsKKyAgICAgICAgZGF0YS0+ZW5kUG9pbnQtPmNy
ZWF0ZVNlc3Npb25EZXNjcmlwdGlvblN1Y2NlZWRlZChXVEZNb3ZlKGRlc2NyaXB0aW9uKSk7Cisg
ICAgfSwgZGF0YS5yZWxlYXNlKCksIG51bGxwdHIpKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpnZXRTdGF0cyhHc3RQYWQqIHBhZCwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBw
cm9taXNlKQoreworICAgIG1fc3RhdHNDb2xsZWN0b3ItPmdldFN0YXRzKFtwcm9taXNlID0gV1RG
TW92ZShwcm9taXNlKSwgcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyldKGF1dG8mJiByZXBvcnQp
IG11dGFibGUgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAo
cHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkgfHwgIXJlcG9ydCkKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxSVENTdGF0c1JlcG9y
dD4+KHJlcG9ydC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9LCBwYWQpOworfQorCitNZWRpYVN0
cmVhbSYgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6bWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFtKFN0
cmluZyBsYWJlbCkKK3sKKyAgICBhdXRvIG1lZGlhU3RyZWFtID0gbV9yZW1vdGVTdHJlYW1zQnlJ
ZC5lbnN1cmUobGFiZWwsIFtsYWJlbCwgdGhpc10oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byYg
ZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNv
bm5lY3Rpb24oKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICByZXR1cm4gTWVk
aWFTdHJlYW06OmNyZWF0ZShkb2N1bWVudCwgTWVkaWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoZG9j
dW1lbnQubG9nZ2VyKCksIHsgfSwgV1RGTW92ZShsYWJlbCkpKTsKKyAgICB9KTsKKyAgICByZXR1
cm4gKm1lZGlhU3RyZWFtLml0ZXJhdG9yLT52YWx1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjphZGRSZW1vdGVTdHJlYW0oR3N0UGFkKiBwYWQpCit7CisgICAgbV9wZW5kaW5n
SW5jb21pbmdTdHJlYW1zKys7CisKKyAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9n
ZXRfY3VycmVudF9jYXBzKHBhZCkpOworICAgIGlmICghY2FwcykKKyAgICAgICAgY2FwcyA9IGFk
b3B0R1JlZihnc3RfcGFkX3F1ZXJ5X2NhcHMocGFkLCBudWxscHRyKSk7CisKKyAgICBjb25zdCBj
aGFyKiBtZWRpYVR5cGUgPSBjYXBzTWVkaWFUeXBlKGNhcHMuZ2V0KCkpOworICAgIEdTVF9ERUJV
R19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyByZW1vdGUgJXMgc3RyZWFtIHRvICUi
IEdTVF9QVFJfRk9STUFUICIgJXUgcGVuZGluZyBpbmNvbWluZyBzdHJlYW1zLCBjYXBzOiAlIiBH
U1RfUFRSX0ZPUk1BVCwgbWVkaWFUeXBlLCBwYWQsIG1fcGVuZGluZ0luY29taW5nU3RyZWFtcywg
Y2Fwcy5nZXQoKSk7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBydGNU
cmFuc2NlaXZlcjsKKyAgICBnX29iamVjdF9nZXQocGFkLCAidHJhbnNjZWl2ZXIiLCAmcnRjVHJh
bnNjZWl2ZXIub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBt
X3BlZXJDb25uZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0cmFu
c2NlaXZlckJhY2tlbmQpIHsKKyAgICAgICAgcmV0dXJuIHJ0Y1RyYW5zY2VpdmVyLmdldCgpID09
IHRyYW5zY2VpdmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgIH0pOworICAgIGlmICgh
dHJhbnNjZWl2ZXIpIHsKKyAgICAgICAgYXV0byB0eXBlID0gZG9DYXBzSGF2ZVR5cGUoY2Fwcy5n
ZXQoKSwgImF1ZGlvIikgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0
aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOworICAgICAgICB0cmFuc2NlaXZlciA9ICZtX3Bl
ZXJDb25uZWN0aW9uQmFja2VuZC5uZXdSZW1vdGVUcmFuc2NlaXZlcihtYWtlVW5pcXVlPEdTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4oV1RGTW92ZShydGNUcmFuc2NlaXZlcikpLCB0eXBl
KTsKKyAgICB9CisKKyAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlv
bj4gZGVzY3JpcHRpb247CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAicmVt
b3RlLWRlc2NyaXB0aW9uIiwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKworICAg
IHVuc2lnbmVkIG1MaW5lSW5kZXg7CisgICAgZ19vYmplY3RfZ2V0KHJ0Y1RyYW5zY2VpdmVyLmdl
dCgpLCAibWxpbmVpbmRleCIsICZtTGluZUluZGV4LCBudWxscHRyKTsKKyAgICBjb25zdCBhdXRv
KiBtZWRpYSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEoZGVzY3JpcHRpb24tPnNkcCwgbUxp
bmVJbmRleCk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHAoZ3N0X3NkcF9tZWRpYV9hc190ZXh0
KG1lZGlhKSk7CisgICAgYXV0byBzZHBTdHJpbmcgPSBtYWtlU3RyaW5nKHNkcC5nZXQoKSk7CisK
KyAgICBHVW5pcXVlUHRyPGdjaGFyPiBuYW1lKGdzdF9wYWRfZ2V0X25hbWUocGFkKSk7CisgICAg
U3RyaW5nIGxhYmVsKG5hbWUuZ2V0KCkpOworICAgIGF1dG8ga2V5ID0gbWFrZVN0cmluZygibXNp
ZDoiKTsKKyAgICBhdXRvIGxpbmVzID0gc2RwU3RyaW5nLnNwbGl0KCdcbicpOworICAgIGZvciAo
YXV0byYgbGluZSA6IGxpbmVzKSB7CisgICAgICAgIGF1dG8gaSA9IGxpbmUuZmluZChrZXkpOwor
ICAgICAgICBpZiAoaSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgYXV0byB0bXAgPSBsaW5l
LnN1YnN0cmluZyhpICsga2V5LmFzY2lpKCkubGVuZ3RoKCkpOworICAgICAgICAgICAgbGFiZWwg
PSB0bXAuc3Vic3RyaW5nKDAsIHRtcC5maW5kKCcgJykpOworICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJtc2lkOiAlcyIsIGxhYmVsLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIEdzdEVsZW1lbnQqIGJp
biA9IG51bGxwdHI7CisgICAgYXV0byYgdHJhY2sgPSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKS50
cmFjaygpOworICAgIGF1dG8mIHNvdXJjZSA9IHRyYWNrLnByaXZhdGVUcmFjaygpLnNvdXJjZSgp
OworICAgIGlmIChzb3VyY2UuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpCisgICAgICAgIGJpbiA9
IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJj
ZSkuYmluKCk7CisgICAgZWxzZSBpZiAoc291cmNlLmlzSW5jb21pbmdWaWRlb1NvdXJjZSgpKQor
ICAgICAgICBiaW4gPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXImPihzb3VyY2UpLmJpbigpOworICAgIGVsc2UKKyAgICAgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5l
LmdldCgpKSwgYmluKTsKKyAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQoYmluLCAic2luayIpKTsKKyAgICBnc3RfcGFkX2xpbmsocGFkLCBzaW5r
UGFkLmdldCgpKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KGJpbik7
CisKKyAgICB0cmFjay5zZXRFbmFibGVkKHRydWUpOworICAgIHNvdXJjZS5zZXRNdXRlZChmYWxz
ZSk7CisKKyAgICBhdXRvJiBtZWRpYVN0cmVhbSA9IG1lZGlhU3RyZWFtRnJvbVJUQ1N0cmVhbShs
YWJlbCk7CisgICAgbWVkaWFTdHJlYW0uYWRkVHJhY2tGcm9tUGxhdGZvcm0odHJhY2spOworCisg
ICAgVmVjdG9yPFJlZlB0cjxNZWRpYVN0cmVhbT4+IHBlbmRpbmdTdHJlYW1zOworICAgIHBlbmRp
bmdTdHJlYW1zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMSk7CisgICAgcGVuZGluZ1N0cmVhbXMu
dW5jaGVja2VkQXBwZW5kKCZtZWRpYVN0cmVhbSk7CisKKyAgICBtX3BlZXJDb25uZWN0aW9uQmFj
a2VuZC5hZGRQZW5kaW5nVHJhY2tFdmVudCh7IFJlZih0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKSks
IFJlZih0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKS50cmFjaygpKSwgV1RGTW92ZShwZW5kaW5nU3Ry
ZWFtcyksIFJlZigqdHJhbnNjZWl2ZXIpIH0pOworCisgICAgaWYgKG1fcGVuZGluZ0luY29taW5n
U3RyZWFtcyA9PSBnc3Rfc2RwX21lc3NhZ2VfbWVkaWFzX2xlbihkZXNjcmlwdGlvbi0+c2RwKSkg
eworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJJbmNvbWluZyBz
dHJlYW1zIGdhdGhlcmVkLCBub3cgZmlyaW5nIHRyYWNrIGV2ZW50cyIpOworICAgICAgICBtX3Bl
bmRpbmdJbmNvbWluZ1N0cmVhbXMgPSAwOworICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2Vu
ZC5kaXNwYXRjaFBlbmRpbmdUcmFja0V2ZW50cygpOworICAgIH0KKworICAgIGF1dG8gZG90Rmls
ZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwgIi5p
bmNvbWluZy0iLCBtZWRpYVR5cGUsICctJywgR1NUX09CSkVDVF9OQU1FKHBhZCkpOworICAgIEdT
VF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkp
LCBHU1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOwor
fQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVJlbW90ZVN0cmVhbShHc3RQ
YWQqKQoreworICAgIEdTVF9GSVhNRV9PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgInJlbW92ZVJl
bW90ZVN0cmVhbSIpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHMoY29uc3QgU3RyaW5nJiBraW5kLCBjb25zdCBSVENS
dHBUcmFuc2NlaXZlckluaXQmIGluaXQsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJj
ZSYmIHNvdXJjZSkKK3sKKyAgICBpZiAoIW1fd2VicnRjQmluKQorICAgICAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiJXp1
IHN0cmVhbXMgaW4gaW5pdCBkYXRhIiwgaW5pdC5zdHJlYW1zLnNpemUoKSk7CisKKyAgICAvLyBG
SVhNRTogU2hvdWxkIHdlIGJ1aWxkIHRoZSBjYXBzIGZyb20gdGhlIGluaXQuc2VuZEVuY29kaW5n
cz8gUHJvYmxlbSBpcyB0aGVyZSBpcyBubworICAgIC8vIGVuY29kaW5nTmFtZSBvciBjbG9ja1Jh
dGUgaW4gUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzLgorICAgIFZlY3RvcjxzdGQ6OnBhaXI8Y29u
c3QgY2hhciosIGludD4+IGVuY29kaW5nczsKKyAgICBjb25zdCBjaGFyKiBtZWRpYSA9IGtpbmQu
dXRmOCgpLmRhdGEoKTsKKyAgICBpZiAoa2luZCA9PSAidmlkZW8iX3MpIHsKKyAgICAgICAgZW5j
b2RpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMyk7CisgICAgICAgIGVuY29kaW5ncy51bmNo
ZWNrZWRBcHBlbmQoeyAiVlA4IiwgOTAwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy51bmNoZWNr
ZWRBcHBlbmQoeyAiVlA5IiwgOTAwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy51bmNoZWNrZWRB
cHBlbmQoeyAiSDI2NCIsIDkwMDAwIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGVuY29kaW5n
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDQpOworICAgICAgICBlbmNvZGluZ3MudW5jaGVja2Vk
QXBwZW5kKHsgIk9QVVMiLCA0ODAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFw
cGVuZCh7ICJHNzIyIiwgODAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVu
ZCh7ICJQQ01BIiwgODAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVuZCh7
ICJQQ01VIiwgODAwMCB9KTsKKyAgICB9CisKKyAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0
X2NhcHNfbmV3X2VtcHR5KCkpOworICAgIGZvciAoYXV0byYgW2VuY29kaW5nTmFtZSwgY2xvY2tS
YXRlXSA6IGVuY29kaW5ncykgeworICAgICAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlKGNh
cHMuZ2V0KCksIGdzdF9zdHJ1Y3R1cmVfbmV3KCJhcHBsaWNhdGlvbi94LXJ0cCIsICJtZWRpYSIs
IEdfVFlQRV9TVFJJTkcsIG1lZGlhLCAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGVu
Y29kaW5nTmFtZSwKKyAgICAgICAgICAgICJwYXlsb2FkIiwgR19UWVBFX0lOVCwgbV9wdENvdW50
ZXIrKywgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCBjbG9ja1JhdGUsIG51bGxwdHIpKTsKKyAg
ICB9CisKKyAgICBhdXRvIGRpcmVjdGlvbiA9IGZyb21SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlv
bihpbml0LmRpcmVjdGlvbik7CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIEdV
bmlxdWVQdHI8Y2hhcj4gZGVzYyhnX2VudW1fdG9fc3RyaW5nKEdTVF9UWVBFX1dFQlJUQ19SVFBf
VFJBTlNDRUlWRVJfRElSRUNUSU9OLCBkaXJlY3Rpb24pKTsKKyAgICBHU1RfREVCVUdfT0JKRUNU
KG1fcGlwZWxpbmUuZ2V0KCksICJBZGRpbmcgJXMgdHJhbnNjZWl2ZXIgZm9yIHBheWxvYWQgJSIg
R1NUX1BUUl9GT1JNQVQsIGRlc2MuZ2V0KCksIGNhcHMuZ2V0KCkpOworI2VuZGlmCisKKyAgICAv
LyBGSVhNRTogTm9uZSBvZiB0aGlzIChleGNlcHRlZCBkaXJlY3Rpb24pIGlzIHBhc3NlZCB0byB3
ZWJydGNiaW4geWV0LgorICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBpbml0RGF0YShnc3Rf
c3RydWN0dXJlX25ldygidHJhbnNjZWl2ZXItaW5pdC1kYXRhIiwgImRpcmVjdGlvbiIsIEdTVF9U
WVBFX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OLCBkaXJlY3Rpb24sIG51bGxwdHIp
KTsKKworICAgIEdWYWx1ZSBzdHJlYW1JZHNWYWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICBnX3Zh
bHVlX2luaXQoJnN0cmVhbUlkc1ZhbHVlLCBHU1RfVFlQRV9MSVNUKTsKKyAgICBmb3IgKGF1dG8m
IHN0cmVhbSA6IGluaXQuc3RyZWFtcykgeworICAgICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVF
X0lOSVQ7CisgICAgICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdfVFlQRV9TVFJJTkcpOworICAg
ICAgICBnX3ZhbHVlX3NldF9zdHJpbmcoJnZhbHVlLCBzdHJlYW0tPmlkKCkudXRmOCgpLmRhdGEo
KSk7CisgICAgICAgIGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSgmc3RyZWFtSWRzVmFsdWUs
ICZ2YWx1ZSk7CisgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKKyAgICB9CisgICAgZ3N0
X3N0cnVjdHVyZV90YWtlX3ZhbHVlKGluaXREYXRhLmdldCgpLCAic3RyZWFtLWlkcyIsICZzdHJl
YW1JZHNWYWx1ZSk7CisKKyAgICBHVmFsdWUgZW5jb2RpbmdzVmFsdWUgPSBHX1ZBTFVFX0lOSVQ7
CisgICAgZ192YWx1ZV9pbml0KCZlbmNvZGluZ3NWYWx1ZSwgR1NUX1RZUEVfTElTVCk7CisgICAg
aWYgKGtpbmQgPT0gImF1ZGlvIikgeworICAgICAgICBpZiAoIWluaXQuc2VuZEVuY29kaW5ncy5p
c0VtcHR5KCkpIHsKKyAgICAgICAgICAgIGF1dG8gZW5jb2RpbmdEYXRhID0gZnJvbVJUQ0VuY29k
aW5nUGFyYW1ldGVycyhpbml0LnNlbmRFbmNvZGluZ3NbMF0pOworICAgICAgICAgICAgR1ZhbHVl
IHZhbHVlID0gR19WQUxVRV9JTklUOworICAgICAgICAgICAgZ192YWx1ZV9pbml0KCZ2YWx1ZSwg
R1NUX1RZUEVfU1RSVUNUVVJFKTsKKyAgICAgICAgICAgIGdzdF92YWx1ZV9zZXRfc3RydWN0dXJl
KCZ2YWx1ZSwgZW5jb2RpbmdEYXRhLmdldCgpKTsKKyAgICAgICAgICAgIGdzdF92YWx1ZV9saXN0
X2FwcGVuZF92YWx1ZSgmZW5jb2RpbmdzVmFsdWUsICZ2YWx1ZSk7CisgICAgICAgICAgICBnX3Zh
bHVlX3Vuc2V0KCZ2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBmb3Ig
KGF1dG8mIGVuY29kaW5nIDogaW5pdC5zZW5kRW5jb2RpbmdzKSB7CisgICAgICAgICAgICBhdXRv
IGVuY29kaW5nRGF0YSA9IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoZW5jb2RpbmcpOworICAg
ICAgICAgICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklUOworICAgICAgICAgICAgZ192YWx1
ZV9pbml0KCZ2YWx1ZSwgR1NUX1RZUEVfU1RSVUNUVVJFKTsKKyAgICAgICAgICAgIGdzdF92YWx1
ZV9zZXRfc3RydWN0dXJlKCZ2YWx1ZSwgZW5jb2RpbmdEYXRhLmdldCgpKTsKKyAgICAgICAgICAg
IGdzdF92YWx1ZV9saXN0X2FwcGVuZF92YWx1ZSgmZW5jb2RpbmdzVmFsdWUsICZ2YWx1ZSk7Cisg
ICAgICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZ2YWx1ZSk7CisgICAgICAgIH0KKyAgICB9CisgICAg
Z3N0X3N0cnVjdHVyZV90YWtlX3ZhbHVlKGluaXREYXRhLmdldCgpLCAiZW5jb2RpbmdzIiwgJmVu
Y29kaW5nc1ZhbHVlKTsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHJ0
Y1RyYW5zY2VpdmVyOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQo
KSwgImFkZC10cmFuc2NlaXZlciIsIGRpcmVjdGlvbiwgY2Fwcy5nZXQoKSwgJnJ0Y1RyYW5zY2Vp
dmVyLm91dFB0cigpKTsKKyAgICBpZiAoIXJ0Y1RyYW5zY2VpdmVyKQorICAgICAgICByZXR1cm4g
c3RkOjpudWxsb3B0OworCisgICAgYXV0byB0cmFuc2NlaXZlciA9IG1ha2VVbmlxdWU8R1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJ0Y1RyYW5zY2VpdmVyKSk7CisgICAg
cmV0dXJuIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkJhY2tlbmRzIHsgdHJhbnNjZWl2ZXItPmNy
ZWF0ZVNlbmRlckJhY2tlbmQobV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQsIFdURk1vdmUoc291cmNl
KSwgV1RGTW92ZShpbml0RGF0YSkpLCB0cmFuc2NlaXZlci0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5k
KCksIFdURk1vdmUodHJhbnNjZWl2ZXIpIH07Cit9CisKK3N0ZDo6b3B0aW9uYWw8R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6QmFja2VuZHM+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYW5z
Y2VpdmVyKGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlcklu
aXQmIGluaXQpCit7CisgICAgcmV0dXJuIGNyZWF0ZVRyYW5zY2VpdmVyQmFja2VuZHModHJhY2tL
aW5kLCBpbml0LCBudWxscHRyKTsKK30KKworR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291
cmNlIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNvdXJjZUZvclRyYWNrKE1lZGlhU3Ry
ZWFtVHJhY2smIHRyYWNrKQoreworICAgIGlmICh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNBdWRp
bygpKQorICAgICAgICByZXR1cm4gUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVy
OjpjcmVhdGUodHJhY2sucHJpdmF0ZVRyYWNrKCkpOworCisgICAgUkVMRUFTRV9BU1NFUlQodHJh
Y2sucHJpdmF0ZVRyYWNrKCkuaGFzVmlkZW8oKSk7CisgICAgcmV0dXJuIFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsKK30K
Kworc3RkOjpvcHRpb25hbDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6YWRkVHJhbnNjZWl2ZXIoTWVkaWFTdHJlYW1UcmFjayYgdHJhY2ss
IGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gY3JlYXRl
VHJhbnNjZWl2ZXJCYWNrZW5kcyh0cmFjay5raW5kKCksIGluaXQsIGNyZWF0ZVNvdXJjZUZvclRy
YWNrKHRyYWNrKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0U2VuZGVy
U291cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRy
YWNrJikKK3sKKyAgICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJzZXRTZW5k
ZXJTb3VyY2VGcm9tVHJhY2siKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6OnVu
aXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50Ojp0cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKEdTdHJlYW1lclJ0cFNlbmRlckJh
Y2tlbmQmIGJhY2tlbmQpCit7CisgICAgR1JlZlB0cjxHQXJyYXk+IHRyYW5zY2VpdmVyczsKKyAg
ICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJnZXQtdHJhbnNjZWl2
ZXJzIiwgJnRyYW5zY2VpdmVycy5vdXRQdHIoKSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1f
cGlwZWxpbmUuZ2V0KCksICJMb29raW5nIGZvciBzZW5kZXIgJXAgaW4gJXUgZXhpc3RpbmcgdHJh
bnNjZWl2ZXJzIiwgYmFja2VuZC5ydGNTZW5kZXIoKSwgdHJhbnNjZWl2ZXJzLT5sZW4pOworICAg
IGZvciAodW5zaWduZWQgdHJhbnNjZWl2ZXJJbmRleCA9IDA7IHRyYW5zY2VpdmVySW5kZXggPCB0
cmFuc2NlaXZlcnMtPmxlbjsgdHJhbnNjZWl2ZXJJbmRleCsrKSB7CisgICAgICAgIEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyKiBjdXJyZW50ID0gZ19hcnJheV9pbmRleCh0cmFuc2NlaXZlcnMuZ2V0
KCksIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiwgdHJhbnNjZWl2ZXJJbmRleCk7CisgICAgICAg
IEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXI7CisgICAgICAgIGdfb2JqZWN0X2dl
dChjdXJyZW50LCAic2VuZGVyIiwgJnNlbmRlci5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICAg
ICAgaWYgKCFzZW5kZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHNlbmRl
ci5nZXQoKSA9PSBiYWNrZW5kLnJ0Y1NlbmRlcigpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6
bWFrZVVuaXF1ZTxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KGN1cnJlbnQpOworICAg
IH0KKworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmFkZEljZUNhbmRpZGF0ZShHU3RyZWFtZXJJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQor
eworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyBJQ0UgY2Fu
ZGlkYXRlICVzIiwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlm
ICghY2FuZGlkYXRlLmNhbmRpZGF0ZS5zdGFydHNXaXRoKCJjYW5kaWRhdGU6IikpIHsKKyAgICAg
ICAgY2FsbE9uTWFpblRocmVhZChbdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxi
YWNrKSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICB0YXNrLT5ydW4oRXhjZXB0aW9uIHsgT3Bl
cmF0aW9uRXJyb3IsICJFeHBlY3QgbGluZTogY2FuZGlkYXRlOjxjYW5kaWRhdGUtc3RyPiIgfSk7
CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBwYXJzZWRD
YW5kaWRhdGUgPSBwYXJzZUljZUNhbmRpZGF0ZVNEUChjYW5kaWRhdGUuY2FuZGlkYXRlKTsKKyAg
ICBpZiAoIXBhcnNlZENhbmRpZGF0ZSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNr
ID0gY3JlYXRlU2hhcmVkVGFzazxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0
ZUNhbGxiYWNrRnVuY3Rpb24+KFdURk1vdmUoY2FsbGJhY2spKV0oKSBtdXRhYmxlIHsKKyAgICAg
ICAgICAgIHRhc2stPnJ1bihFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgIkVycm9yIHByb2Nl
c3NpbmcgSUNFIGNhbmRpZGF0ZSIgfSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gRklYTUU6IGludmFsaWQgc2RwTUxpbmVJbmRleCBleGNlcHRpb24gbm90
IHJlbGF5ZWQgZnJvbSB3ZWJydGNiaW4uCisgICAgLy8gRklYTUU6IElkZWFsbHkgdGhpcyBzaG91
bGQgcGFzcyB0aGUgcmVzdWx0L2Vycm9yIHRvIGEgR3N0UHJvbWlzZSBvYmplY3QuCisgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiYWRkLWljZS1jYW5kaWRhdGUi
LCBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0
YSgpKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gY3JlYXRlU2hhcmVkVGFzazxQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrRnVuY3Rpb24+KFdURk1v
dmUoY2FsbGJhY2spKSwgZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0Jpbiht
X3dlYnJ0Y0Jpbi5nZXQoKSldKCkgbXV0YWJsZSB7CisgICAgICAgIHRhc2stPnJ1bihXVEZNb3Zl
KGRlc2NyaXB0aW9ucykpOworICAgIH0pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNo
YW5uZWxIYW5kbGVyPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbChj
b25zdCBTdHJpbmcmIGxhYmVsLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmIG9wdGlvbnMpCit7
CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBh
dXRvIGluaXQgPSBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmZyb21SVENEYXRhQ2hhbm5l
bEluaXQob3B0aW9ucyk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAi
Q3JlYXRpbmcgZGF0YSBjaGFubmVsIGZvciBpbml0IG9wdGlvbnMgJSIgR1NUX1BUUl9GT1JNQVQs
IGluaXQuZ2V0KCkpOworICAgIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGNoYW5uZWw7
CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiY3JlYXRlLWRh
dGEtY2hhbm5lbCIsIGxhYmVsLnV0ZjgoKS5kYXRhKCksIGluaXQuZ2V0KCksICZjaGFubmVsLm91
dFB0cigpKTsKKyAgICBpZiAoIWNoYW5uZWwpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisg
ICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI+KFdU
Rk1vdmUoY2hhbm5lbCkpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uRGF0
YUNoYW5uZWwoR3N0V2ViUlRDRGF0YUNoYW5uZWwqIGRhdGFDaGFubmVsKQoreworICAgIEdSZWZQ
dHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGNoYW5uZWwgPSBkYXRhQ2hhbm5lbDsKKyAgICBjYWxs
T25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywgZGF0YUNoYW5u
ZWwgPSBXVEZNb3ZlKGNoYW5uZWwpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoaXNTdG9wcGVk
KCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBl
bGluZS5nZXQoKSwgIkluY29taW5nIGRhdGEgY2hhbm5lbCIpOworICAgICAgICBhdXRvJiBjb25u
ZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29ubmVjdGlvbigpOworICAgICAgICBj
b25uZWN0aW9uLmRpc3BhdGNoRXZlbnQoR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjcmVh
dGVEYXRhQ2hhbm5lbEV2ZW50KCpjb25uZWN0aW9uLmRvY3VtZW50KCksIFdURk1vdmUoZGF0YUNo
YW5uZWwpKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y2xv
c2UoKQoreworICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIv
Z3N0LXBsdWdpbnMtYmFkLy0vaXNzdWVzLzExODEKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJDbG9zaW5nIik7CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIGdz
dF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUkVBRFkpOwor
CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3RvcExvZ2dpbmdTdGF0cygpOworI2Vu
ZGlmCit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcCgpCit7CisjaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3RvcExvZ2dpbmdTdGF0cygpOworI2VuZGlmCisKKyAg
ICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVR19PQkpF
Q1QobV9waXBlbGluZS5nZXQoKSwgIlN0b3BwaW5nIik7CisgICAgdGVhcmRvd25QaXBlbGluZSgp
OworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN1c3BlbmQoKQoreworICAgIGlm
IChpc1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiU3VzcGVuZGluZyIpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0
ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUEFVU0VEKTsKK30KKwordm9pZCBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpyZXN1bWUoKQoreworICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVz
dW1pbmciKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NU
X1NUQVRFX1BMQVlJTkcpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uTmVn
b3RpYXRpb25OZWVkZWQoKQoreworICAgIG1faXNOZWdvdGlhdGlvbk5lZWRlZCA9IHRydWU7CisK
KyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpc10g
eworICAgICAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIk5lZ290aWF0aW9uIG5lZWRlZCEi
KTsKKyAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQubWFya0FzTmVlZGluZ05lZ290aWF0
aW9uKDApOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNl
Q29ubmVjdGlvbkNoYW5nZSgpCit7CisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHN0
YXRlOworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImljZS1jb25uZWN0aW9u
LXN0YXRlIiwgJnN0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0
ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywgY29ubmVjdGlvblN0YXRlID0gdG9SVENJY2VDb25u
ZWN0aW9uU3RhdGUoc3RhdGUpXSB7CisgICAgICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgYXV0byYgY29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25C
YWNrZW5kLmNvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24uaWNlQ29ubmVjdGlv
blN0YXRlKCkgIT0gY29ubmVjdGlvblN0YXRlKQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRh
dGVJY2VDb25uZWN0aW9uU3RhdGUoY29ubmVjdGlvblN0YXRlKTsKKyAgICB9KTsKK30KKwordm9p
ZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUdhdGhlcmluZ0NoYW5nZSgpCit7CisgICAg
R3N0V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgc3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1fd2Vi
cnRjQmluLmdldCgpLCAiaWNlLWdhdGhlcmluZy1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0cik7Cisg
ICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRoaXMsIHN0
YXRlXSB7CisgICAgICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgYXV0byYgY29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNvbm5lY3Rp
b24oKTsKKyAgICAgICAgaWYgKHN0YXRlID09IEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFU
RV9DT01QTEVURSkKKyAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmRvbmVHYXRo
ZXJpbmdDYW5kaWRhdGVzKCk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlID09IEdTVF9XRUJSVENf
SUNFX0dBVEhFUklOR19TVEFURV9HQVRIRVJJTkcpCisgICAgICAgICAgICBjb25uZWN0aW9uLnVw
ZGF0ZUljZUdhdGhlcmluZ1N0YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpHYXRoZXJpbmcpOwor
ICAgICAgICBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVf
TkVXKQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShSVENJ
Y2VHYXRoZXJpbmdTdGF0ZTo6TmV3KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpvbkljZUNhbmRpZGF0ZShndWludCBzZHBNTGluZUluZGV4LCBnY2hhcmFycmF5
IGNhbmRpZGF0ZSkKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKwor
ICAgIC8vIEZJWE1FOiBHZXQgbWlkIGZyb20gY2FuZGlkYXRlPworICAgIEdVbmlxdWVPdXRQdHI8
R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbjsKKyAgICBnX29iamVjdF9n
ZXQobV93ZWJydGNCaW4uZ2V0KCksICJsb2NhbC1kZXNjcmlwdGlvbiIsICZkZXNjcmlwdGlvbi5v
dXRQdHIoKSwgbnVsbHB0cik7CisgICAgaWYgKCFkZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJu
OworCisgICAgY29uc3QgYXV0byogbWVkaWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0X21lZGlhKGRl
c2NyaXB0aW9uLT5zZHAsIHNkcE1MaW5lSW5kZXgpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3By
b3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCB0aGlzLCBtaWQgPSBtYWtlU3RyaW5nKGdzdF9zZHBf
bWVkaWFfZ2V0X2F0dHJpYnV0ZV92YWwobWVkaWEsICJtaWQiKSksIHNkcCA9IG1ha2VTdHJpbmco
Y2FuZGlkYXRlKSwgc2RwTUxpbmVJbmRleF0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKGlzU3Rv
cHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGRlc2NyaXB0aW9ucyA9
IGRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCkpOworICAgICAgICBt
X3BlZXJDb25uZWN0aW9uQmFja2VuZC5uZXdJQ0VDYW5kaWRhdGUoV1RGTW92ZShzZHApLCBXVEZN
b3ZlKG1pZCksIHNkcE1MaW5lSW5kZXgsIHsgfSwgV1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAg
ICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVz
Y3JpcHRpb25TdWNjZWVkZWQoR1VuaXF1ZVB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+
JiYgZGVzY3JpcHRpb24pCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9
IFJlZigqdGhpcyksIHRoaXMsIGRlc2NyaXB0aW9uID0gV1RGTW92ZShkZXNjcmlwdGlvbildIHsK
KyAgICAgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IEdVbmlxdWVQdHI8Y2hhcj4gc2RwKGdzdF9zZHBfbWVzc2FnZV9hc190ZXh0KGRlc2NyaXB0aW9u
LT5zZHApKTsKKyAgICAgICAgaWYgKG1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBtX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlclN1Y2NlZWRlZChzZHAuZ2V0KCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJT
dWNjZWVkZWQoc2RwLmdldCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1ZVB0cjxHRXJyb3I+
JiYgZXJyb3IpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigq
dGhpcyksIHRoaXMsIGVycm9yID0gV1RGTW92ZShlcnJvcildIHsKKyAgICAgICAgaWYgKGlzU3Rv
cHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gZXhjID0gRXhjZXB0
aW9uIHsgT3BlcmF0aW9uRXJyb3IsIGVycm9yID8gZXJyb3ItPm1lc3NhZ2UgOiAiVW5rbm93biBF
cnJvciIgfTsKKyAgICAgICAgaWYgKG1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBtX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlckZhaWxlZChXVEZNb3ZlKGV4YykpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJG
YWlsZWQoV1RGTW92ZShleGMpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50Ojpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAgICBHUmVmUHRyPEdBcnJheT4gdHJh
bnNjZWl2ZXJzOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwg
ImdldC10cmFuc2NlaXZlcnMiLCAmdHJhbnNjZWl2ZXJzLm91dFB0cigpKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgdHJhbnNjZWl2ZXJzLT5sZW47IGkrKykgeworICAgICAgICBHc3RX
ZWJSVENSVFBUcmFuc2NlaXZlciogY3VycmVudCA9IGdfYXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJz
LmdldCgpLCBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciosIGkpOworCisgICAgICAgIGF1dG8qIGV4
aXN0aW5nVHJhbnNjZWl2ZXIgPSBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5z
Y2VpdmVyKFsmXShhdXRvJiB0cmFuc2NlaXZlckJhY2tlbmQpIHsKKyAgICAgICAgICAgIHJldHVy
biBjdXJyZW50ID09IHRyYW5zY2VpdmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgICAg
ICB9KTsKKyAgICAgICAgaWYgKGV4aXN0aW5nVHJhbnNjZWl2ZXIpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiByZWNlaXZlcjsK
KyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBtaWQ7CisgICAgICAgIGdfb2JqZWN0X2dldChj
dXJyZW50LCAicmVjZWl2ZXIiLCAmcmVjZWl2ZXIub3V0UHRyKCksICJtaWQiLCAmbWlkLm91dFB0
cigpLCBudWxscHRyKTsKKworICAgICAgICBpZiAoIXJlY2VpdmVyIHx8ICFtaWQpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5uZXdSZW1v
dGVUcmFuc2NlaXZlcihXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kPihXVEZNb3ZlKGN1cnJlbnQpKSwgbV9tZWRpYUZvck1pZC5nZXQobWlkLmdldCgpKSk7Cisg
ICAgfQorfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZygpCit7CisgICAgYXV0byBkYXRhID0gbWFr
ZVVuaXF1ZTxHU3RyZWFtZXJNZWRpYUVuZHBvaW50SG9sZGVyPigqdGhpcyk7CisgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiZ2V0LXN0YXRzIiwgbnVsbHB0ciwg
Z3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlz
ZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9taXNlID0gYWRvcHRHUmVm
KHJhd1Byb21pc2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9taXNlX3dhaXQocHJv
bWlzZS5nZXQoKSk7CisgICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JF
UExJRUQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3QgYXV0byogcmVwbHkg
PSBnc3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIFJFTEVBU0Vf
QVNTRVJUKHJlcGx5KTsKKyAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfaGFzX2ZpZWxkKHJlcGx5
LCAiZXJyb3IiKSkKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBzdGQ6OnVuaXF1ZV9w
dHI8R1N0cmVhbWVyTWVkaWFFbmRwb2ludEhvbGRlcj4gZGF0YShzdGF0aWNfY2FzdDxHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50SG9sZGVyKj4odXNlckRhdGEpKTsKKyAgICAgICAgZGF0YS0+ZW5kUG9p
bnQtPm9uU3RhdHNEZWxpdmVyZWQocmVwbHkpOworICAgIH0sIGRhdGEucmVsZWFzZSgpLCBudWxs
cHRyKSk7Cit9CisKK2NsYXNzIFJUQ1N0YXRzTG9nZ2VyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNp
dCBSVENTdGF0c0xvZ2dlcihjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0YXRzKQorICAgICAgICA6IG1f
c3RhdHMoc3RhdHMpCisgICAgeyB9CisKKyAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gZ3N0U3RydWN0dXJlVG9KU09OU3RyaW5nKG1fc3RhdHMpOyB9CisKK3ByaXZhdGU6
CisgICAgY29uc3QgR3N0U3RydWN0dXJlKiBtX3N0YXRzOworfTsKKwordm9pZCBHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50Ojpwcm9jZXNzU3RhdHMoY29uc3QgR1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBp
ZiAoIUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUodmFsdWUpKQorICAgICAgICByZXR1cm47CisK
KyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF92YWx1ZV9nZXRfc3RydWN0
dXJlKHZhbHVlKTsKKyAgICBHc3RXZWJSVENTdGF0c1R5cGUgc3RhdHNUeXBlOworICAgIGlmICgh
Z3N0X3N0cnVjdHVyZV9nZXQoc3RydWN0dXJlLCAidHlwZSIsIEdTVF9UWVBFX1dFQlJUQ19TVEFU
U19UWVBFLCAmc3RhdHNUeXBlLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8g
SnVzdCBjaGVjayBhIHNpbmdsZSB0aW1lc3RhbXAsIGluYm91bmQgUlRQIGZvciBpbnN0YW5jZS4K
KyAgICBpZiAoIW1fc3RhdHNGaXJzdERlbGl2ZXJlZFRpbWVzdGFtcCAmJiBzdGF0c1R5cGUgPT0g
R1NUX1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUCkgeworICAgICAgICBkb3VibGUgdGltZXN0YW1w
OworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHN0cnVjdHVyZSwgInRpbWVz
dGFtcCIsICZ0aW1lc3RhbXApKSB7CisgICAgICAgICAgICBhdXRvIHRzID0gU2Vjb25kczo6ZnJv
bU1pbGxpc2Vjb25kcyh0aW1lc3RhbXApOworICAgICAgICAgICAgbV9zdGF0c0ZpcnN0RGVsaXZl
cmVkVGltZXN0YW1wID0gdHM7CisKKyAgICAgICAgICAgIGlmICghaXNTdG9wcGVkKCkgJiYgbV9z
dGF0c0xvZ1RpbWVyLnJlcGVhdEludGVydmFsKCkgIT0gc3RhdHNMb2dJbnRlcnZhbCh0cykpIHsK
KyAgICAgICAgICAgICAgICBtX3N0YXRzTG9nVGltZXIuc3RvcCgpOworICAgICAgICAgICAgICAg
IG1fc3RhdHNMb2dUaW1lci5zdGFydFJlcGVhdGluZyhzdGF0c0xvZ0ludGVydmFsKHRzKSk7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAobG9nZ2VyKCkud2lsbExv
Zyhsb2dDaGFubmVsKCksIFdURkxvZ0xldmVsOjpEZWJ1ZykpIHsKKyAgICAgICAgLy8gU3RhdHMg
YXJlIHZlcnkgdmVyYm9zZSwgbGV0J3Mgb25seSBkaXNwbGF5IHRoZW0gaW4gaW5zcGVjdG9yIGNv
bnNvbGUgaW4gdmVyYm9zZSBtb2RlLgorICAgICAgICBsb2dnZXIoKS5kZWJ1ZyhMb2dXZWJSVEMs
CisgICAgICAgICAgICBMb2dnZXI6OkxvZ1NpdGVJZGVudGlmaWVyKCJHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50IiwgIm9uU3RhdHNEZWxpdmVyZWQiLCBsb2dJZGVudGlmaWVyKCkpLAorICAgICAgICAg
ICAgUlRDU3RhdHNMb2dnZXIgeyBzdHJ1Y3R1cmUgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAg
bG9nZ2VyKCkubG9nQWx3YXlzKExvZ1dlYlJUQ1N0YXRzLAorICAgICAgICAgICAgTG9nZ2VyOjpM
b2dTaXRlSWRlbnRpZmllcigiR1N0cmVhbWVyTWVkaWFFbmRwb2ludCIsICJvblN0YXRzRGVsaXZl
cmVkIiwgbG9nSWRlbnRpZmllcigpKSwKKyAgICAgICAgICAgIFJUQ1N0YXRzTG9nZ2VyIHsgc3Ry
dWN0dXJlIH0pOworICAgIH0KK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvblN0
YXRzRGVsaXZlcmVkKGNvbnN0IEdzdFN0cnVjdHVyZSogc3RhdHMpCit7CisgICAgR1VuaXF1ZVB0
cjxHc3RTdHJ1Y3R1cmU+IHN0YXRzQ29weShnc3Rfc3RydWN0dXJlX2NvcHkoc3RhdHMpKTsKKyAg
ICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywgc3Rh
dHMgPSBXVEZNb3ZlKHN0YXRzQ29weSldIHsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNo
KHN0YXRzLmdldCgpLCBzdGF0aWNfY2FzdDxHc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYz4oW10oR1F1
YXJrLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4g
eworICAgICAgICAgICAgYXV0byogZW5kUG9pbnQgPSByZWludGVycHJldF9jYXN0PEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQqPih1c2VyRGF0YSk7CisgICAgICAgICAgICBlbmRQb2ludC0+cHJvY2Vz
c1N0YXRzKHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9KSwgdGhp
cyk7CisgICAgfSk7Cit9CisjZW5kaWYKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAordm9p
ZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdGFydExvZ2dpbmdTdGF0cygpCit7CisgICAgaWYg
KG1fc3RhdHNMb2dUaW1lci5pc0FjdGl2ZSgpKQorICAgICAgICBtX3N0YXRzTG9nVGltZXIuc3Rv
cCgpOworICAgIG1fc3RhdHNMb2dUaW1lci5zdGFydFJlcGVhdGluZyhzdGF0c0xvZ0ludGVydmFs
KFNlY29uZHM6Om5hbigpKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3Rv
cExvZ2dpbmdTdGF0cygpCit7CisgICAgbV9zdGF0c0xvZ1RpbWVyLnN0b3AoKTsKK30KKworV1RG
TG9nQ2hhbm5lbCYgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6bG9nQ2hhbm5lbCgpIGNvbnN0Cit7
CisgICAgcmV0dXJuIExvZ1dlYlJUQzsKK30KKworU2Vjb25kcyBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpzdGF0c0xvZ0ludGVydmFsKFNlY29uZHMgcmVwb3J0VGltZXN0YW1wKSBjb25zdAorewor
ICAgIGlmIChsb2dnZXIoKS53aWxsTG9nKGxvZ0NoYW5uZWwoKSwgV1RGTG9nTGV2ZWw6OkluZm8p
KQorICAgICAgICByZXR1cm4gMl9zOworCisgICAgaWYgKHJlcG9ydFRpbWVzdGFtcCAtIG1fc3Rh
dHNGaXJzdERlbGl2ZXJlZFRpbWVzdGFtcCA+IDE1X3MpCisgICAgICAgIHJldHVybiAxMF9zOwor
CisgICAgcmV0dXJuIDRfczsKK30KKyNlbmRpZgorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUoRnVuY3Rpb248dm9pZChTdHJpbmcm
Jik+JiYgY2FsbGJhY2spCit7CisgICAgLy8gVE9ETzogY29sbGVjdCBzdGF0cyBhbmQgbG9va3Vw
IEluYm91bmRSdHAgImRlY29kZXJfaW1wbGVtZW50YXRpb24iIGZpZWxkLgorICAgIGNhbGxiYWNr
KHsgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2lmICFSRUxFQVNFX0xPR19E
SVNBQkxFRAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CitzdHJ1
Y3QgTG9nQXJndW1lbnQ7CisKK3RlbXBsYXRlIDw+CitzdHJ1Y3QgTG9nQXJndW1lbnQ8V2ViQ29y
ZTo6UlRDU3RhdHNMb2dnZXI+IHsKKyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFdl
YkNvcmU6OlJUQ1N0YXRzTG9nZ2VyJiBsb2dnZXIpCisgICAgeworICAgICAgICByZXR1cm4gU3Ry
aW5nKGxvZ2dlci50b0pTT05TdHJpbmcoKSk7CisgICAgfQorfTsKKworfTsgLy8gbmFtZXNwYWNl
IFdURgorI2VuZGlmIC8vICFSRUxFQVNFX0xPR19ESVNBQkxFRAorCisjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZjg2NWIzNDlhZWEyYWM5Yjk3MjQ1Njk1MTI2NGEyODk4NTFmODRhOQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCIKKyNpbmNs
dWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRDUnRwUmVjZWl2ZXIuaCIK
KworI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOworY2xh
c3MgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOworY2xhc3MgTWVkaWFTdHJlYW1UcmFj
azsKK2NsYXNzIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbjsKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lcjsKKworY2xhc3MgR1N0cmVhbWVyTWVkaWFFbmRwb2ludCA6IHB1
YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50LCBXVEY6OkRl
c3RydWN0aW9uVGhyZWFkOjpNYWluPgorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICwg
cHJpdmF0ZSBMb2dnZXJIZWxwZXIKKyNlbmRpZgoreworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gY3JlYXRlKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZCYgcGVlckNvbm5lY3Rpb24pIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludChwZWVyQ29ubmVjdGlvbikpOyB9CisgICAgdmlydHVhbCB+R1N0cmVhbWVyTWVk
aWFFbmRwb2ludCgpOworCisgICAgYm9vbCBzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRD
b25maWd1cmF0aW9uJik7CisgICAgdm9pZCByZXN0YXJ0SWNlKCk7CisKKyAgICB2b2lkIGRvU2V0
TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qKTsKKyAgICB2b2lk
IGRvU2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJik7Cisg
ICAgdm9pZCBkb0NyZWF0ZU9mZmVyKGNvbnN0IFJUQ09mZmVyT3B0aW9ucyYpOworICAgIHZvaWQg
ZG9DcmVhdGVBbnN3ZXIoKTsKKworICAgIHZvaWQgZ2V0U3RhdHMoR3N0UGFkKiwgUmVmPERlZmVy
cmVkUHJvbWlzZT4mJik7CisKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5k
bGVyPiBjcmVhdGVEYXRhQ2hhbm5lbChjb25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hhbm5l
bEluaXQmKTsKKyAgICB2b2lkIG9uRGF0YUNoYW5uZWwoR3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsK
KworICAgIHZvaWQgYWRkSWNlQ2FuZGlkYXRlKEdTdHJlYW1lckljZUNhbmRpZGF0ZSYsIFBlZXJD
b25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRlQ2FsbGJhY2smJik7CisKKyAgICB2b2lk
IGNsb3NlKCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAgYm9vbCBpc1N0b3BwZWQoKSBjb25zdCB7
IHJldHVybiAhbV9waXBlbGluZTsgfQorCisgICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCBy
ZXN1bWUoKTsKKworICAgIHZvaWQgZ2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5j
dGlvbjx2b2lkKFN0cmluZyYmKT4mJik7CisgICAgYm9vbCBpc05lZ290aWF0aW9uTmVlZGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9pc05lZ290aWF0aW9uTmVlZGVkOyB9CisKKyAgICB2b2lkIGNvbmZp
Z3VyZUFuZExpbmtTb3VyY2UoUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyJik7
CisKKyAgICBib29sIGFkZFRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0
cmVhbVRyYWNrJiwgY29uc3QgRml4ZWRWZWN0b3I8U3RyaW5nPiYpOworICAgIHZvaWQgcmVtb3Zl
VHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYpOworCisgICAgc3RydWN0IEJhY2tlbmRz
IHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+IHNl
bmRlckJhY2tlbmQ7CisgICAgICAgIHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZl
ckJhY2tlbmQ+IHJlY2VpdmVyQmFja2VuZDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4gdHJhbnNjZWl2ZXJCYWNrZW5kOworICAgIH07Cisg
ICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gYWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0
cmFja0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpOworICAgIHN0ZDo6b3B0aW9u
YWw8QmFja2VuZHM+IGFkZFRyYW5zY2VpdmVyKE1lZGlhU3RyZWFtVHJhY2smLCBjb25zdCBSVENS
dHBUcmFuc2NlaXZlckluaXQmKTsKKyAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJh
bnNjZWl2ZXJCYWNrZW5kPiB0cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKEdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQmKTsKKworICAgIHZvaWQgc2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKEdT
dHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICB2b2lk
IGNvbGxlY3RUcmFuc2NlaXZlcnMoKTsKKworICAgIHZvaWQgY3JlYXRlU2Vzc2lvbkRlc2NyaXB0
aW9uU3VjY2VlZGVkKEdVbmlxdWVQdHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmKTsK
KyAgICB2b2lkIGNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbkZhaWxlZChHVW5pcXVlUHRyPEdFcnJv
cj4mJik7CisKKyAgICBHc3RFbGVtZW50KiBwaXBlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGlw
ZWxpbmUuZ2V0KCk7IH0KKyAgICBib29sIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOworCisj
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9pZCBwcm9jZXNzU3RhdHMoY29uc3QgR1Zh
bHVlKik7CisjZW5kaWYKKworcHJvdGVjdGVkOgorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAor
ICAgIHZvaWQgb25TdGF0c0RlbGl2ZXJlZChjb25zdCBHc3RTdHJ1Y3R1cmUqKTsKKyNlbmRpZgor
Citwcml2YXRlOgorICAgIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQoR1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kJik7CisKKyAgICBib29sIGluaXRpYWxpemVQaXBlbGluZSgpOworICAgIHZv
aWQgdGVhcmRvd25QaXBlbGluZSgpOworICAgIHZvaWQgZGlzcG9zZUVsZW1lbnRDaGFpbihHc3RF
bGVtZW50Kik7CisKKyAgICB2b2lkIHNldERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNj
cmlwdGlvbiosIGJvb2wgaXNMb2NhbCwgRnVuY3Rpb248dm9pZCgpPiYmIHN1Y2Nlc3NDYWxsYmFj
aywgRnVuY3Rpb248dm9pZChjb25zdCBHRXJyb3IqKT4mJiBmYWlsdXJlQ2FsbGJhY2spOworICAg
IHZvaWQgaW5pdGlhdGUoYm9vbCBpc0luaXRpYXRvciwgR3N0U3RydWN0dXJlKik7CisKKyAgICB2
b2lkIG9uTmVnb3RpYXRpb25OZWVkZWQoKTsKKyAgICB2b2lkIG9uSWNlQ29ubmVjdGlvbkNoYW5n
ZSgpOworICAgIHZvaWQgb25JY2VHYXRoZXJpbmdDaGFuZ2UoKTsKKyAgICB2b2lkIG9uSWNlQ2Fu
ZGlkYXRlKGd1aW50IHNkcE1MaW5lSW5kZXgsIGdjaGFyYXJyYXkgY2FuZGlkYXRlKTsKKworICAg
IE1lZGlhU3RyZWFtJiBtZWRpYVN0cmVhbUZyb21SVENTdHJlYW0oU3RyaW5nIGxhYmVsKTsKKwor
ICAgIHZvaWQgYWRkUmVtb3RlU3RyZWFtKEdzdFBhZCopOworICAgIHZvaWQgcmVtb3ZlUmVtb3Rl
U3RyZWFtKEdzdFBhZCopOworCisgICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gY3JlYXRlVHJh
bnNjZWl2ZXJCYWNrZW5kcyhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2Vp
dmVySW5pdCYsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYmKTsKKyAgICBHU3Ry
ZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UgY3JlYXRlU291cmNlRm9yVHJhY2soTWVkaWFT
dHJlYW1UcmFjayYpOworCisgICAgdm9pZCBzdG9yZVJlbW90ZU1MaW5lSW5mbyhHc3RTRFBNZXNz
YWdlKik7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gcmVxdWVzdFBhZCh1bnNpZ25lZCBtbGluZUlu
ZGV4LCBjb25zdCBHUmVmUHRyPEdzdENhcHM+Jik7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJM
RUQKKyAgICB2b2lkIGdhdGhlclN0YXRzRm9yTG9nZ2luZygpOworICAgIHZvaWQgc3RhcnRMb2dn
aW5nU3RhdHMoKTsKKyAgICB2b2lkIHN0b3BMb2dnaW5nU3RhdHMoKTsKKworICAgIGNvbnN0IExv
Z2dlciYgbG9nZ2VyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAg
ICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJ
ZGVudGlmaWVyOyB9CisgICAgY29uc3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gIkdTdHJlYW1lck1lZGlhRW5kcG9pbnQiOyB9CisgICAgV1RGTG9nQ2hhbm5lbCYg
bG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsOworCisgICAgU2Vjb25kcyBzdGF0c0xvZ0ludGVydmFs
KFNlY29uZHMpIGNvbnN0OworI2VuZGlmCisKKyAgICBIYXNoTWFwPFN0cmluZywgUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZT4gbV9tZWRpYUZvck1pZDsKKyAgICBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlIG1lZGlhVHlwZUZvck1pZChjb25zdCBjaGFyKiBtaWQpOworCisgICAgR1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kJiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZDsKKyAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IG1fd2VicnRjQmluOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9w
aXBlbGluZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiBtX3Jl
bW90ZVN0cmVhbXNCeUlkOworCisgICAgc3RydWN0IFBlbmRpbmdNTGluZUluZm8geworICAgICAg
ICBHUmVmUHRyPEdzdENhcHM+IGNhcHM7CisgICAgICAgIGJvb2wgaXNVc2VkOworICAgICAgICBW
ZWN0b3I8aW50PiBwYXlsb2FkVHlwZXM7CisgICAgfTsKKyAgICBWZWN0b3I8UGVuZGluZ01MaW5l
SW5mbz4gbV9yZW1vdGVNTGluZUluZm9zOworCisgICAgUmVmPEdTdHJlYW1lclN0YXRzQ29sbGVj
dG9yPiBtX3N0YXRzQ29sbGVjdG9yOworCisgICAgdW5zaWduZWQgbV9yZXF1ZXN0UGFkQ291bnRl
ciB7IDAgfTsKKyAgICBpbnQgbV9wdENvdW50ZXIgeyA5NiB9OworICAgIHVuc2lnbmVkIG1fbWxp
bmVJbmRleCB7IDAgfTsKKyAgICBWZWN0b3I8UmVmPFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJj
ZUdTdHJlYW1lcj4+IG1fc291cmNlczsKKyAgICB1bnNpZ25lZCBtX3BlbmRpbmdJbmNvbWluZ1N0
cmVhbXMgeyAwIH07CisgICAgYm9vbCBtX2lzSW5pdGlhdG9yIHsgZmFsc2UgfTsKKyAgICBib29s
IG1faXNOZWdvdGlhdGlvbk5lZWRlZCB7IGZhbHNlIH07CisKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICBUaW1lciBtX3N0YXRzTG9nVGltZXI7CisgICAgU2Vjb25kcyBtX3N0YXRzRmly
c3REZWxpdmVyZWRUaW1lc3RhbXA7CisgICAgUmVmPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7Cisg
ICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjI1NjRlOWE0NjQ4MDhiYjA4Y2I0MDYzY2FhYzYxMjQwMmJkZmQ1YzIKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzgxIEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29t
bW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oIgorI2luY2x1ZGUgIkdT
dHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCIK
KyNpbmNsdWRlICJJY2VDYW5kaWRhdGUuaCIKKyNpbmNsdWRlICJKU1JUQ1N0YXRzUmVwb3J0Lmgi
CisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJUQ0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJU
Q1BlZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRDUnRwQ2FwYWJpbGl0aWVzLmgiCisjaW5j
bHVkZSAiUlRDUnRwUmVjZWl2ZXIuaCIKKyNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24u
aCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3JlYXRl
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKFJUQ1BlZXJDb25uZWN0aW9uJiBwZWVyQ29u
bmVjdGlvbikKK3sKKyAgICBlbnN1cmVHU3RyZWFtZXJJbml0aWFsaXplZCgpOworICAgIGlmICgh
aXNHU3RyZWFtZXJQbHVnaW5BdmFpbGFibGUoIndlYnJ0YyIpKSB7CisgICAgICAgIFdURkxvZ0Fs
d2F5cygiR3N0V2ViUlRDIHBsdWdpbiBub3QgZm91bmQuIE1ha2Ugc3VyZSB0byBpbnN0YWxsIGdz
dC1wbHVnaW5zLWJhZCA+PSAxLjIwIHdpdGggdGhlIHdlYnJ0YyBwbHVnaW4gZW5hYmxlZC4iKTsK
KyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorICAgIHJldHVybiBXVEY6Om1ha2VVbmlx
dWU8R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kPihwZWVyQ29ubmVjdGlvbik7Cit9CisK
K0NyZWF0ZVBlZXJDb25uZWN0aW9uQmFja2VuZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0
ZSA9IGNyZWF0ZUdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDsKKworc3RhdGljIFJUQ1J0
cENhcGFiaWxpdGllcyBnc3RyZWFtZXJSdHBDYXBhdGlibGl0aWVzKGNvbnN0IFN0cmluZyYga2lu
ZCkKK3sKKyAgICBSVENSdHBDYXBhYmlsaXRpZXMgY2FwYWJpbGl0aWVzOworICAgIGNhcGFiaWxp
dGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJodHRwOi8vd3d3LmlldGYub3JnL2lkL2Ry
YWZ0LWhvbG1lci1ybWNhdC10cmFuc3BvcnQtd2lkZS1jYy1leHRlbnNpb25zLTAxIiB9KTsKKyAg
ICBpZiAoa2luZCA9PSAiYXVkaW8iX3MpIHsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5y
ZXNlcnZlQ2FwYWNpdHkoNCk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MudW5jaGVja2Vk
QXBwZW5kKHsgLm1pbWVUeXBlID0gImF1ZGlvL09QVVMiLAorICAgICAgICAgICAgLmNsb2NrUmF0
ZSA9IDQ4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMiwKKyAgICAgICAgICAgIC5zZHBG
bXRwTGluZSA9ICIiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFw
cGVuZCh7IC5taW1lVHlwZSA9ICJhdWRpby9HNzIyIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUg
PSA4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMSwKKyAgICAgICAgICAgIC5zZHBGbXRw
TGluZSA9ICIiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVu
ZCh7IC5taW1lVHlwZSA9ICJhdWRpby9QQ01BIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4
MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGlu
ZSA9ICIiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7
IC5taW1lVHlwZSA9ICJhdWRpby9QQ01VIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4MDAw
LAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9
ICIiIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNp
b25zLmFwcGVuZCh7ICJ1cm46M2dwcDp2aWRlby1vcmllbnRhdGlvbiIgfSk7CisgICAgICAgIGNh
cGFiaWxpdGllcy5jb2RlY3MucmVzZXJ2ZUNhcGFjaXR5KDQpOworICAgICAgICBjYXBhYmlsaXRp
ZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDgiLAorICAg
ICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0g
IiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MudW5jaGVja2VkQXBwZW5kKHsgLm1p
bWVUeXBlID0gInZpZGVvL1ZQOSIsCisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisg
ICAgICAgICAgICAuc2RwRm10cExpbmUgPSAicHJvZmlsZS1pZD0wIiB9KTsKKyAgICAgICAgY2Fw
YWJpbGl0aWVzLmNvZGVjcy51bmNoZWNrZWRBcHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vVlA5
IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRw
TGluZSA9ICJwcm9maWxlLWlkPTEiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVu
Y2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9IMjY0IiwKKyAgICAgICAgICAgIC5j
bG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwYWNrZXRpemF0
aW9uLW1vZGU9MTtwcm9maWxlLWxldmVsLWlkPTQyZTAxZiIgfSk7CisgICAgfQorICAgIHJldHVy
biBjYXBhYmlsaXRpZXM7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlY2VpdmVyQ2FwYWJpbGl0aWVzKFNjcmlwdEV4ZWN1dGlv
bkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIGtpbmQpCit7CisgICAgcmV0dXJuIGdzdHJlYW1lclJ0
cENhcGF0aWJsaXRpZXMoa2luZCk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0
aWVzPiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRlckNhcGFiaWxpdGllcyhTY3JpcHRFeGVj
dXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBraW5kKQoreworICAgIHJldHVybiBnc3RyZWFt
ZXJSdHBDYXBhdGlibGl0aWVzKGtpbmQpOworfQorCitHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYg
cGVlckNvbm5lY3Rpb24pCisgICAgOiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rp
b24pCisgICAgLCBtX2VuZHBvaW50KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSgqdGhp
cykpCit7CisgICAgZGlzYWJsZUlDRUNhbmRpZGF0ZUZpbHRlcmluZygpOworfQorCitHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6On5HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQo
KSA9IGRlZmF1bHQ7CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzdXNw
ZW5kKCkKK3sKKyAgICBtX2VuZHBvaW50LT5zdXNwZW5kKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN1bWUoKQoreworICAgIG1fZW5kcG9pbnQtPnJlc3Vt
ZSgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVzdGFydElj
ZSgpCit7CisgICAgbV9lbmRwb2ludC0+cmVzdGFydEljZSgpOworfQorCitib29sIEdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29u
ZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24pCit7CisgICAgcmV0dXJuIG1fZW5kcG9pbnQtPnNl
dENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2Up
Cit7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7
Cit9CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgYmFja2VuZEZy
b21SVFBTZW5kZXIoUlRDUnRwU2VuZGVyJiBzZW5kZXIpCit7CisgICAgQVNTRVJUKCFzZW5kZXIu
aXNTdG9wcGVkKCkpOworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kJj4oKnNlbmRlci5iYWNrZW5kKCkpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwU2VuZGVyJiBzZW5kZXIsIFJlZjxEZWZlcnJl
ZFByb21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBpZiAoIXNlbmRlci5iYWNrZW5kKCkpIHsKKyAg
ICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvJiBiYWNrZW5kID0gYmFja2VuZEZyb21S
VFBTZW5kZXIoc2VuZGVyKTsKKyAgICBHUmVmUHRyPEdzdFBhZD4gcGFkOworICAgIGlmIChSZWFs
dGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQuYXVkaW9T
b3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5wYWQoKTsKKyAgICBlbHNlIGlmIChSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQudmlkZW9T
b3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5wYWQoKTsKKyAgICBtX2VuZHBvaW50LT5n
ZXRTdGF0cyhwYWQuZ2V0KCksIFdURk1vdmUocHJvbWlzZSkpOworfQorCit2b2lkIEdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwUmVjZWl2ZXImIHJlY2VpdmVy
LCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7CisgICAgaWYgKCFyZWNlaXZlci5i
YWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92
ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBHc3RFbGVtZW50KiBi
aW4gPSBudWxscHRyOworICAgIGF1dG8mIHNvdXJjZSA9IHJlY2VpdmVyLnRyYWNrKCkucHJpdmF0
ZVRyYWNrKCkuc291cmNlKCk7CisgICAgaWYgKHNvdXJjZS5pc0luY29taW5nQXVkaW9Tb3VyY2Uo
KSkKKyAgICAgICAgYmluID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
R1N0cmVhbWVyJj4oc291cmNlKS5iaW4oKTsKKyAgICBlbHNlIGlmIChzb3VyY2UuaXNJbmNvbWlu
Z1ZpZGVvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZQorICAgICAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworCisgICAgYXV0byBzaW5rUGFkID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGJpbiwgInNpbmsiKSk7CisgICAgYXV0
byBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfcGVlcihzaW5rUGFkLmdldCgpKSk7Cisg
ICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMoc3JjUGFkLmdldCgpLCBXVEZNb3ZlKHByb21pc2UpKTsK
K30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0TG9jYWxEZXNj
cmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQoreworICAg
IG1fZW5kcG9pbnQtPmRvU2V0TG9jYWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7CisgICAgbV9p
c0xvY2FsRGVzY3JpcHRpb25TZXQgPSB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVz
Y3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0UmVtb3RlRGVz
Y3JpcHRpb24oZGVzY3JpcHRpb24pOworICAgIG1faXNSZW1vdGVEZXNjcmlwdGlvblNldCA9IHRy
dWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0ZU9m
ZmVyKFJUQ09mZmVyT3B0aW9ucyYmIG9wdGlvbnMpCit7CisgICAgbV9lbmRwb2ludC0+ZG9DcmVh
dGVPZmZlcihvcHRpb25zKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6OmRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlvbnMmJikKK3sKKyAgICBpZiAoIW1faXNS
ZW1vdGVEZXNjcmlwdGlvblNldCkgeworICAgICAgICBjcmVhdGVBbnN3ZXJGYWlsZWQoRXhjZXB0
aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJObyByZW1vdGUgZGVzY3JpcHRpb24gc2V0IiB9KTsK
KyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2VuZHBvaW50LT5kb0NyZWF0ZUFuc3dlcigp
OworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y2xvc2UoKQorewor
ICAgIG1fZW5kcG9pbnQtPmNsb3NlKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpkb1N0b3AoKQoreworICAgIG1fZW5kcG9pbnQtPnN0b3AoKTsKKyAgICBtX3Bl
bmRpbmdSZWNlaXZlcnMuY2xlYXIoKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBB
ZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIHVuc2lnbmVkIHNkcE1M
aW5lSW5kZXggPSBjYW5kaWRhdGUuc2RwTUxpbmVJbmRleCgpID8gY2FuZGlkYXRlLnNkcE1MaW5l
SW5kZXgoKS52YWx1ZSgpIDogMDsKKyAgICBhdXRvIHJ0Y0NhbmRpZGF0ZSA9IFdURjo6bWFrZVVu
aXF1ZTxHU3RyZWFtZXJJY2VDYW5kaWRhdGU+KCpuZXcgR1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsg
c2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0ZSgpIH0pOworICAgIG1fZW5kcG9pbnQt
PmFkZEljZUNhbmRpZGF0ZSgqcnRjQ2FuZGlkYXRlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisK
K1JlZjxSVENSdHBSZWNlaXZlcj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVh
dGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiYm
IGJhY2tlbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQp
Cit7CisgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcGVlckNvbm5l
Y3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsKKworICAgIGF1dG8gc291cmNlID0gYmFj
a2VuZC0+Y3JlYXRlU291cmNlKHRyYWNrS2luZCwgdHJhY2tJZCk7CisgICAgLy8gUmVtb3RlIHNv
dXJjZSBpcyBpbml0aWFsbHkgbXV0ZWQgYW5kIHdpbGwgYmUgdW5tdXRlZCB3aGVuIHJlY2Vpdmlu
ZyB0aGUgZmlyc3QgcGFja2V0LgorICAgIHNvdXJjZS0+c2V0TXV0ZWQodHJ1ZSk7CisgICAgYXV0
byB0cmFja0lEID0gc291cmNlLT5wZXJzaXN0ZW50SUQoKTsKKyAgICBhdXRvIHJlbW90ZVRyYWNr
UHJpdmF0ZSA9IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGUoZG9jdW1lbnQubG9nZ2Vy
KCksIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZSh0cmFja0lEKSk7CisgICAgYXV0byByZW1vdGVU
cmFjayA9IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShkb2N1bWVudCwgV1RGTW92ZShyZW1vdGVU
cmFja1ByaXZhdGUpKTsKKworICAgIHJldHVybiBSVENSdHBSZWNlaXZlcjo6Y3JlYXRlKCp0aGlz
LCBXVEZNb3ZlKHJlbW90ZVRyYWNrKSwgV1RGTW92ZShiYWNrZW5kKSk7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0
IFJUQ0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykKK3sKKyAgICByZXR1cm4gbV9lbmRwb2ludC0+
Y3JlYXRlRGF0YUNoYW5uZWwobGFiZWwsIG9wdGlvbnMpOworfQorCitzdGF0aWMgaW5saW5lIFJl
ZlB0cjxSVENSdHBTZW5kZXI+IGZpbmRFeGlzdGluZ1NlbmRlcihjb25zdCBWZWN0b3I8UmVmUHRy
PFJUQ1J0cFRyYW5zY2VpdmVyPj4mIHRyYW5zY2VpdmVycywgR1N0cmVhbWVyUnRwU2VuZGVyQmFj
a2VuZCYgc2VuZGVyQmFja2VuZCkKK3sKKyAgICBBU1NFUlQoc2VuZGVyQmFja2VuZC5ydGNTZW5k
ZXIoKSk7CisgICAgZm9yIChhdXRvJiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgeworICAg
ICAgICBhdXRvJiBzZW5kZXIgPSB0cmFuc2NlaXZlci0+c2VuZGVyKCk7CisgICAgICAgIGlmICgh
c2VuZGVyLmlzU3RvcHBlZCgpICYmIHNlbmRlckJhY2tlbmQucnRjU2VuZGVyKCkgPT0gYmFja2Vu
ZEZyb21SVFBTZW5kZXIoc2VuZGVyKS5ydGNTZW5kZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBS
ZWYoc2VuZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0V4Y2VwdGlvbk9y
PFJlZjxSVENSdHBTZW5kZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRy
YWNrKE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBGaXhlZFZlY3RvcjxTdHJpbmc+JiYgbWVkaWFT
dHJlYW1JZHMpCit7CisgICAgYXV0byBzZW5kZXJCYWNrZW5kID0gV1RGOjptYWtlVW5pcXVlPEdT
dHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+KCp0aGlzLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBp
ZiAoIW1fZW5kcG9pbnQtPmFkZFRyYWNrKCpzZW5kZXJCYWNrZW5kLCB0cmFjaywgbWVkaWFTdHJl
YW1JZHMpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAiVW5hYmxlIHRv
IGFkZCB0cmFjayJfcyB9OworCisgICAgaWYgKGF1dG8gc2VuZGVyID0gZmluZEV4aXN0aW5nU2Vu
ZGVyKG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5zY2VpdmVycygpLCAqc2VuZGVyQmFja2Vu
ZCkpIHsKKyAgICAgICAgYmFja2VuZEZyb21SVFBTZW5kZXIoKnNlbmRlcikudGFrZVNvdXJjZSgq
c2VuZGVyQmFja2VuZCk7CisgICAgICAgIHNlbmRlci0+c2V0VHJhY2soUmVmKHRyYWNrKSk7Cisg
ICAgICAgIHNlbmRlci0+c2V0TWVkaWFTdHJlYW1JZHMoV1RGTW92ZShtZWRpYVN0cmVhbUlkcykp
OworICAgICAgICByZXR1cm4gc2VuZGVyLnJlbGVhc2VOb25OdWxsKCk7CisgICAgfQorCisgICAg
YXV0byB0cmFuc2NlaXZlckJhY2tlbmQgPSBtX2VuZHBvaW50LT50cmFuc2NlaXZlckJhY2tlbmRG
cm9tU2VuZGVyKCpzZW5kZXJCYWNrZW5kKTsKKworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2Vu
ZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgUmVmKHRyYWNrKSwgV1RGTW92ZShzZW5kZXJC
YWNrZW5kKSk7CisgICAgc2VuZGVyLT5zZXRNZWRpYVN0cmVhbUlkcyhXVEZNb3ZlKG1lZGlhU3Ry
ZWFtSWRzKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKHRyYW5zY2VpdmVy
QmFja2VuZC0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCksIHRyYWNrLmtpbmQoKSwgdHJhY2suaWQo
KSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoc2Vu
ZGVyLmNvcHlSZWYoKSwgV1RGTW92ZShyZWNlaXZlciksIFdURk1vdmUodHJhbnNjZWl2ZXJCYWNr
ZW5kKSk7CisgICAgbV9wZWVyQ29ubmVjdGlvbi5hZGRJbnRlcm5hbFRyYW5zY2VpdmVyKFdURk1v
dmUodHJhbnNjZWl2ZXIpKTsKKyAgICByZXR1cm4gc2VuZGVyOworfQorCit0ZW1wbGF0ZTx0eXBl
bmFtZSBUPgorRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChUJiYgdHJh
Y2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICBhdXRv
IGJhY2tlbmRzID0gbV9lbmRwb2ludC0+YWRkVHJhbnNjZWl2ZXIodHJhY2tPcktpbmQsIGluaXQp
OworICAgIGlmICghYmFja2VuZHMpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
QWNjZXNzRXJyb3IsICJVbmFibGUgdG8gYWRkIHRyYW5zY2VpdmVyIl9zIH07CisKKyAgICBhdXRv
IHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKG1fcGVlckNvbm5lY3Rpb24sIFdURk1vdmUo
dHJhY2tPcktpbmQpLCBXVEZNb3ZlKGJhY2tlbmRzLT5zZW5kZXJCYWNrZW5kKSk7CisgICAgYXV0
byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKFdURk1vdmUoYmFja2VuZHMtPnJlY2VpdmVyQmFj
a2VuZCksIHNlbmRlci0+dHJhY2tLaW5kKCksIHNlbmRlci0+dHJhY2tJZCgpKTsKKyAgICBhdXRv
IHRyYW5zY2VpdmVyID0gUlRDUnRwVHJhbnNjZWl2ZXI6OmNyZWF0ZShXVEZNb3ZlKHNlbmRlciks
IFdURk1vdmUocmVjZWl2ZXIpLCBXVEZNb3ZlKGJhY2tlbmRzLT50cmFuc2NlaXZlckJhY2tlbmQp
KTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2
ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2ZXI7Cit9CisKK0V4Y2VwdGlvbk9y
PFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
YWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5z
Y2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gYWRkVHJhbnNjZWl2ZXJGcm9tVHJhY2tP
cktpbmQoU3RyaW5nIHsgdHJhY2tLaW5kIH0sIGluaXQpOworfQorCitFeGNlcHRpb25PcjxSZWY8
UlRDUnRwVHJhbnNjZWl2ZXI+PiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRy
YW5zY2VpdmVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYmIHRyYWNrLCBjb25zdCBSVENSdHBUcmFu
c2NlaXZlckluaXQmIGluaXQpCit7CisgICAgcmV0dXJuIGFkZFRyYW5zY2VpdmVyRnJvbVRyYWNr
T3JLaW5kKFdURk1vdmUodHJhY2spLCBpbml0KTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrKQoreworICAgIG1fZW5k
cG9pbnQtPnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhzZW5kZXIsIHRyYWNrKTsKK30KKworc3Rh
dGljIGlubGluZSBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmIGJhY2tlbmRGcm9tUlRQ
VHJhbnNjZWl2ZXIoUlRDUnRwVHJhbnNjZWl2ZXImIHRyYW5zY2VpdmVyKQoreworICAgIHJldHVy
biBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmPigqdHJhbnNjZWl2
ZXIuYmFja2VuZCgpKTsKK30KKworUlRDUnRwVHJhbnNjZWl2ZXIqIEdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6ZXhpc3RpbmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJvb2woR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJik+JiYgbWF0Y2hpbmdGdW5jdGlvbikKK3sKKyAg
ICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV9wZWVyQ29ubmVjdGlvbi5jdXJyZW50VHJhbnNj
ZWl2ZXJzKCkpIHsKKyAgICAgICAgaWYgKG1hdGNoaW5nRnVuY3Rpb24oYmFja2VuZEZyb21SVFBU
cmFuc2NlaXZlcigqdHJhbnNjZWl2ZXIpKSkKKyAgICAgICAgICAgIHJldHVybiB0cmFuc2NlaXZl
ci5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK1JUQ1J0cFRyYW5zY2Vp
dmVyJiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6Om5ld1JlbW90ZVRyYW5zY2VpdmVy
KHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+JiYgdHJhbnNj
ZWl2ZXJCYWNrZW5kLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIHR5cGUpCit7CisgICAgYXV0
byB0cmFja0tpbmQgPSB0eXBlID09IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8g
ImF1ZGlvIl9zIDogInZpZGVvIl9zOworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpj
cmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgdHJhY2tLaW5kLCB0cmFuc2NlaXZlckJhY2tlbmQtPmNy
ZWF0ZVNlbmRlckJhY2tlbmQoKnRoaXMsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBhdXRvIHJl
Y2VpdmVyID0gY3JlYXRlUmVjZWl2ZXIodHJhbnNjZWl2ZXJCYWNrZW5kLT5jcmVhdGVSZWNlaXZl
ckJhY2tlbmQoKSwgdHJhY2tLaW5kLCBzZW5kZXItPnRyYWNrSWQoKSk7CisgICAgYXV0byB0cmFu
c2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoV1RGTW92ZShzZW5kZXIpLCBXVEZN
b3ZlKHJlY2VpdmVyKSwgV1RGTW92ZSh0cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJD
b25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJlZigpKTsK
KyAgICByZXR1cm4gdHJhbnNjZWl2ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAgICBtX2VuZHBvaW50
LT5jb2xsZWN0VHJhbnNjZWl2ZXJzKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjphZGRQZW5kaW5nVHJhY2tFdmVudChQZW5kaW5nVHJhY2tFdmVudCYmIGV2ZW50
KQoreworICAgIG1fcGVuZGluZ1RyYWNrRXZlbnRzLmFwcGVuZChXVEZNb3ZlKGV2ZW50KSk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkaXNwYXRjaFBlbmRpbmdU
cmFja0V2ZW50cygpCit7CisgICAgYXV0byBldmVudHMgPSBXVEZNb3ZlKG1fcGVuZGluZ1RyYWNr
RXZlbnRzKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNwYXRj
aFRyYWNrRXZlbnQoZXZlbnQpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6cmVtb3ZlVHJhY2soUlRDUnRwU2VuZGVyJiBzZW5kZXIpCit7CisgICAgbV9lbmRwb2lu
dC0+cmVtb3ZlVHJhY2soYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKSk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdW
aWRlb1NvdXJjZXMoKQoreworICAgIGZvciAoYXV0byYgdHJhbnNjZWl2ZXIgOiBtX3BlZXJDb25u
ZWN0aW9uLmN1cnJlbnRUcmFuc2NlaXZlcnMoKSkgeworICAgICAgICBpZiAoIXRyYW5zY2VpdmVy
LT5zZW5kZXIoKS5pc1N0b3BwZWQoKSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHZpZGVvU291
cmNlID0gYmFja2VuZEZyb21SVFBTZW5kZXIodHJhbnNjZWl2ZXItPnNlbmRlcigpKS52aWRlb1Nv
dXJjZSgpKQorICAgICAgICAgICAgICAgIHZpZGVvU291cmNlLT5zZXRBcHBseVJvdGF0aW9uKHRy
dWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZDo6Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0
cmluZyYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBtX2VuZHBvaW50LT5nYXRoZXJEZWNvZGVySW1w
bGVtZW50YXRpb25OYW1lKFdURk1vdmUoY2FsbGJhY2spKTsKK30KKworYm9vbCBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmlzTmVnb3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0
Cit7CisgICAgcmV0dXJuIG1fZW5kcG9pbnQtPmlzTmVnb3RpYXRpb25OZWVkZWQoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmUzODgzMzhjMDU4YTM3ODM3YTYwNmY3ZGY2NDE4N2FlMWY5YTA3M2IKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaApAQCAtMCwwICsxLDEyNCBAQAor
LyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJl
c2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1
dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVl
IFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWws
CisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQg
d2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNl
bnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBh
IGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25n
IHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisg
KiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9z
dG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgor
I2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+Cisj
aW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5k
OworY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDsKK2NsYXNzIEdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZDsKK2NsYXNzIFJUQ1J0cFJlY2VpdmVyOworY2xhc3MgUlRDUnRwUmVj
ZWl2ZXJCYWNrZW5kOworY2xhc3MgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uOworY2xhc3MgUlRDU3Rh
dHNSZXBvcnQ7CitjbGFzcyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI7Citj
bGFzcyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGlt
ZU1lZGlhU291cmNlR1N0cmVhbWVyOworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNl
R1N0cmVhbWVyOworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOwor
CitzdHJ1Y3QgR1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFT
VF9BTExPQ0FURUQ7CisgICAgdW5zaWduZWQgc2RwTUxpbmVJbmRleDsKKyAgICBTdHJpbmcgY2Fu
ZGlkYXRlOworfTsKKworY2xhc3MgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kIGZpbmFs
IDogcHVibGljIFBlZXJDb25uZWN0aW9uQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kKFJUQ1BlZXJDb25uZWN0aW9uJik7CisgICAgfkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIGRv
Q3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYpIGZpbmFsOworICAgIHZvaWQgZG9DcmVhdGVB
bnN3ZXIoUlRDQW5zd2VyT3B0aW9ucyYmKSBmaW5hbDsKKyAgICB2b2lkIGRvU2V0TG9jYWxEZXNj
cmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qKSBmaW5hbDsKKyAgICB2b2lkIGRv
U2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikgZmluYWw7
CisgICAgdm9pZCBkb0FkZEljZUNhbmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmLCBBZGRJY2VDYW5k
aWRhdGVDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lkIGRvU3RvcCgpIGZpbmFsOworICAgIHN0
ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFDaGFubmVsSGFu
ZGxlcihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKSBmaW5hbDsKKyAg
ICB2b2lkIHJlc3RhcnRJY2UoKSBmaW5hbDsKKyAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVk
aWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikgZmluYWw7CisgICAgdm9pZCBnZXRTdGF0cyhSZWY8
RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKKyAgICB2b2lkIGdldFN0YXRzKFJUQ1J0cFNlbmRl
ciYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFsOworICAgIHZvaWQgZ2V0U3RhdHMoUlRD
UnRwUmVjZWl2ZXImLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKKworICAgIHZvaWQg
ZW11bGF0ZVBsYXRmb3JtRXZlbnQoY29uc3QgU3RyaW5nJikgZmluYWwgeyB9CisgICAgdm9pZCBh
cHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKSBmaW5hbDsKKworICAgIHZvaWQg
Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4m
JikgZmluYWw7CisKKyAgICBib29sIGlzTmVnb3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0
IGZpbmFsOworCisgICAgc3RkOjpvcHRpb25hbDxib29sPiBjYW5Ucmlja2xlSWNlQ2FuZGlkYXRl
cygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH07CisKKyAgICBmcmllbmQgY2xhc3MgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDsKKyAgICBmcmllbmQgY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZDsKKyAgICBSVENQZWVyQ29ubmVjdGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fcGVlckNv
bm5lY3Rpb247IH0KKworICAgIHZvaWQgZ2V0U3RhdHNTdWNjZWVkZWQoY29uc3QgRGVmZXJyZWRQ
cm9taXNlJiwgUmVmPFJUQ1N0YXRzUmVwb3J0PiYmKTsKKworICAgIEV4Y2VwdGlvbk9yPFJlZjxS
VENSdHBTZW5kZXI+PiBhZGRUcmFjayhNZWRpYVN0cmVhbVRyYWNrJiwgRml4ZWRWZWN0b3I8U3Ry
aW5nPiYmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZVRyYWNrKFJUQ1J0cFNlbmRlciYpIGZpbmFs
OworCisgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2
ZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JikgZmluYWw7Cisg
ICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIoUmVm
PE1lZGlhU3RyZWFtVHJhY2s+JiYsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpIGZpbmFs
OworICAgIHZvaWQgc2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJh
Y2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICBSVENSdHBUcmFuc2NlaXZlciogZXhp
c3RpbmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2
ZXJCYWNrZW5kJik+JiYpOworICAgIFJUQ1J0cFRyYW5zY2VpdmVyJiBuZXdSZW1vdGVUcmFuc2Nl
aXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiYmLCBS
ZWFsdGltZU1lZGlhU291cmNlOjpUeXBlKTsKKworICAgIHZvaWQgY29sbGVjdFRyYW5zY2VpdmVy
cygpIGZpbmFsOworCisgICAgdm9pZCBhZGRQZW5kaW5nVHJhY2tFdmVudChQZW5kaW5nVHJhY2tF
dmVudCYmKTsKKyAgICB2b2lkIGRpc3BhdGNoUGVuZGluZ1RyYWNrRXZlbnRzKCk7CisKK3ByaXZh
dGU6CisgICAgYm9vbCBpc0xvY2FsRGVzY3JpcHRpb25TZXQoKSBjb25zdCBmaW5hbCB7IHJldHVy
biBtX2lzTG9jYWxEZXNjcmlwdGlvblNldDsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4K
KyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlckZy
b21UcmFja09yS2luZChUJiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5p
dCYpOworCisgICAgUmVmPFJUQ1J0cFJlY2VpdmVyPiBjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1
ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiYmLCBjb25zdCBTdHJpbmcmIHRyYWNr
S2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKTsKKworICAgIHZvaWQgc3VzcGVuZCgpIGZpbmFs
OworICAgIHZvaWQgcmVzdW1lKCkgZmluYWw7CisKKyAgICBSZWY8R1N0cmVhbWVyTWVkaWFFbmRw
b2ludD4gbV9lbmRwb2ludDsKKyAgICBib29sIG1faXNMb2NhbERlc2NyaXB0aW9uU2V0IHsgZmFs
c2UgfTsKKyAgICBib29sIG1faXNSZW1vdGVEZXNjcmlwdGlvblNldCB7IGZhbHNlIH07CisKKyAg
ICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lckljZUNhbmRpZGF0ZT4+IG1fcGVuZGlu
Z0NhbmRpZGF0ZXM7CisgICAgVmVjdG9yPFJlZjxSVENSdHBSZWNlaXZlcj4+IG1fcGVuZGluZ1Jl
Y2VpdmVyczsKKyAgICBWZWN0b3I8UGVuZGluZ1RyYWNrRXZlbnQ+IG1fcGVuZGluZ1RyYWNrRXZl
bnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzEzNDNiMTM5ZjViYTkyZjQxNTVmM2QwNTA1MDVkMmNm
YWZjZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsx
LDc2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91
cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJl
ZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkg
dGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRo
ZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAq
ICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJl
IHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUg
aW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBB
IFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVi
bGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJl
Y2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29m
dHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZs
b29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFC
TEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFt
ZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVy
VHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisj
aW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworUlRDUnRwUGFyYW1ldGVycyBHU3RyZWFtZXJSdHBSZWNlaXZlckJh
Y2tlbmQ6OmdldFBhcmFtZXRlcnMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0
dXJuIHsgfTsKK30KKworVmVjdG9yPFJUQ1J0cENvbnRyaWJ1dGluZ1NvdXJjZT4gR1N0cmVhbWVy
UnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRDb250cmlidXRpbmdTb3VyY2VzKCkgY29uc3QKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxSVENSdHBT
eW5jaHJvbml6YXRpb25Tb3VyY2U+IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0U3lu
Y2hyb25pemF0aW9uU291cmNlcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4geyB9OworfQorCitSZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gR1N0cmVhbWVyUnRw
UmVjZWl2ZXJCYWNrZW5kOjpjcmVhdGVTb3VyY2UoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNv
bnN0IFN0cmluZyYgdHJhY2tJZCkKK3sKKyAgICBpZiAodHJhY2tLaW5kID09ICJ2aWRlbyJfcykK
KyAgICAgICAgcmV0dXJuIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3Jl
YXRlKHRyYWNrSWQuaXNvbGF0ZWRDb3B5KCkpOworCisgICAgUkVMRUFTRV9BU1NFUlQodHJhY2tL
aW5kID09ICJhdWRpbyJfcyk7CisgICAgcmV0dXJuIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrSWQuaXNvbGF0ZWRDb3B5KCkpOworfQorCitSZWY8UlRD
UnRwVHJhbnNmb3JtQmFja2VuZD4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpydGNSdHBU
cmFuc2Zvcm1CYWNrZW5kKCkKK3sKKyAgICByZXR1cm4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFu
c2Zvcm1CYWNrZW5kOjpjcmVhdGUobV9ydGNSZWNlaXZlcik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0
cjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpk
dGxzVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNw
b3J0PiB0cmFuc3BvcnQ7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjUmVjZWl2ZXIuZ2V0KCksICJ0
cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJh
bnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNw
b3J0KSA6IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJl
Y2VpdmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjYzYTc1OTdi
OTgyNzY3NmRlMDMzYTE5YmM0M2ZjZGEyZjgxMzMwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2Vp
dmVyQmFja2VuZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJU
Q1J0cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tl
bmQgZmluYWwgOiBwdWJsaWMgUlRDUnRwUmVjZWl2ZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9G
QVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJSdHBSZWNlaXZl
ckJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4mJiBydGNSZWNlaXZlcikKKyAg
ICAgICAgOiBtX3J0Y1JlY2VpdmVyKFdURk1vdmUocnRjUmVjZWl2ZXIpKQorICAgIHsKKyAgICB9
CisKKyAgICBHc3RXZWJSVENSVFBSZWNlaXZlciogcnRjUmVjZWl2ZXIoKSB7IHJldHVybiBtX3J0
Y1JlY2VpdmVyLmdldCgpOyB9CisgICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZVNv
dXJjZShjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKTsKKwor
cHJpdmF0ZToKKyAgICBSVENSdHBQYXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMoKSBmaW5hbDsKKyAg
ICBWZWN0b3I8UlRDUnRwQ29udHJpYnV0aW5nU291cmNlPiBnZXRDb250cmlidXRpbmdTb3VyY2Vz
KCkgY29uc3QgZmluYWw7CisgICAgVmVjdG9yPFJUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZT4g
Z2V0U3luY2hyb25pemF0aW9uU291cmNlcygpIGNvbnN0IGZpbmFsOworICAgIFJlZjxSVENSdHBU
cmFuc2Zvcm1CYWNrZW5kPiBydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkgZmluYWw7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBkdGxzVHJhbnNwb3J0QmFja2Vu
ZCgpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gbV9ydGNSZWNl
aXZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShX
RUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJh
bnNmb3JtQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmUyOTA4MmZlY2E0ZDQ4YTgzNzAzNjk3OTE3NjdkYmFkYWUzM2Y5MGIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJM
RShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxl
bWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBHU3RyZWFt
ZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZSBtZWRpYVR5cGVGcm9tUmVj
ZWl2ZXIoY29uc3QgR3N0V2ViUlRDUlRQUmVjZWl2ZXImKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7CisgICAgcmV0dXJuIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZTo6VmlkZW87
Cit9CisKK0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRw
UmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2
ZXI+JiBydGNSZWNlaXZlcikKKyAgICA6IEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQobWVk
aWFUeXBlRnJvbVJlY2VpdmVyKCpydGNSZWNlaXZlciksIFNpZGU6OlJlY2VpdmVyKQorICAgICwg
bV9ydGNSZWNlaXZlcihydGNSZWNlaXZlcikKK3sKK30KKworR1N0cmVhbWVyUnRwUmVjZWl2ZXJU
cmFuc2Zvcm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKCkK
K3sKK30KKwordm9pZCBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRy
YW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgc2V0
SW5wdXRDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RL
ZXlGcmFtZSgpCit7CisgICAgQVNTRVJUKG1lZGlhVHlwZSgpID09IE1lZGlhVHlwZTo6VmlkZW8p
OworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKwor
I2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNr
ZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uODU4NjY3NmEwNmI3YWI5ZWIwYjMyZTdkZjdjNjM0ODE1YThjOTc5
ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAg
KzEsNDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVk
ZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPHd0
Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRw
UmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kIGZpbmFsIDogcHVibGljIEdTdHJlYW1lclJ0cFRyYW5z
Zm9ybUJhY2tlbmQgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyUnRwUmVjZWl2
ZXJUcmFuc2Zvcm1CYWNrZW5kPiBjcmVhdGUoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNl
aXZlcj4mIHJlY2VpdmVyKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lclJ0cFJlY2Vp
dmVyVHJhbnNmb3JtQmFja2VuZChyZWNlaXZlcikpOyB9CisgICAgfkdTdHJlYW1lclJ0cFJlY2Vp
dmVyVHJhbnNmb3JtQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEdTdHJlYW1l
clJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJl
Y2VpdmVyPiYpOworCisgICAgLy8gUlRDUnRwVHJhbnNmb3JtQmFja2VuZAorICAgIHZvaWQgc2V0
VHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soQ2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCBy
ZXF1ZXN0S2V5RnJhbWUoKSBmaW5hbDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2
ZXI+IG1fcnRjUmVjZWl2ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5NmJj
YmE5MjVmZTlkZmY3ZjZlNTZhNTUxNjUyZDg1ZTJiODMwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNl
bmRlckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJUcmFu
c2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNs
dWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisjaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSVENSdHBTZW5kZXIu
aCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRl
ICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29u
dGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNvdXJj
ZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCB1cGRhdGVUcmFja1NvdXJjZShTb3VyY2UmIHNvdXJjZSwg
TWVkaWFTdHJlYW1UcmFjayogdHJhY2spCit7CisgICAgaWYgKCF0cmFjaykgeworICAgICAgICBz
b3VyY2Uuc3RvcCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHNv
dXJjZS5zZXRUcmFjayh0cmFjay0+cHJpdmF0ZVRyYWNrKCkpOworfQorCit2b2lkIEdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ6OnN0YXJ0U291cmNlKCkKK3sKKyAgICBzd2l0Y2hPbihtX3NvdXJj
ZSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkg
eworICAgICAgICBzb3VyY2UtPnN0YXJ0KCk7CisgICAgfSwgW10oUmVmPFJlYWx0aW1lT3V0Z29p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0YXJ0
KCk7CisgICAgfSwgW10oc3RkOjpudWxscHRyX3QmKSB7CisgICAgfSk7Cit9CisKK1dBUk5fVU5V
U0VEX1JFVFVSTiBHUmVmUHRyPEdzdEVsZW1lbnQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6
OnN0b3BTb3VyY2UoKQoreworICAgIHN3aXRjaE9uKG1fc291cmNlLCBbXShSZWY8UmVhbHRpbWVP
dXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7CisgICAgICAgIHNvdXJjZS0+
c3RvcCgpOworICAgICAgICByZXR1cm4gR1JlZlB0cjxHc3RFbGVtZW50Pihzb3VyY2UtPmJpbigp
KTsKKyAgICB9LCBbXShSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiYg
c291cmNlKSB7CisgICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAgICByZXR1cm4gR1JlZlB0
cjxHc3RFbGVtZW50Pihzb3VyY2UtPmJpbigpKTsKKyAgICB9LCBbXShzdGQ6Om51bGxwdHJfdCYp
IHsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8R3N0RWxlbWVudD4obnVsbHB0cik7CisgICAgfSk7
CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZDo6cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2VuZGVyLCBNZWRpYVN0cmVhbVRyYWNrKiB0
cmFjaykKK3sKKyAgICBpZiAoIXRyYWNrKSB7CisgICAgICAgIGF1dG8gc3RvcHBlZFNvdXJjZSA9
IHN0b3BTb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHNl
bmRlci50cmFjaygpKSB7CisgICAgICAgIHN3aXRjaE9uKG1fc291cmNlLCBbJl0oUmVmPFJlYWx0
aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICAgICAg
QVNTRVJUKHRyYWNrLT5zb3VyY2UoKS50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlw
ZTo6QXVkaW8pOworICAgICAgICAgICAgc291cmNlLT5zdG9wKCk7CisgICAgICAgICAgICBzb3Vy
Y2UtPnNldFNvdXJjZSh0cmFjay0+cHJpdmF0ZVRyYWNrKCkpOworICAgICAgICAgICAgc291cmNl
LT5zdGFydCgpOworICAgICAgICB9LCBbJl0oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICAgICAgQVNTRVJUKHRyYWNrLT5zb3VyY2Uo
KS50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pOworICAgICAgICAg
ICAgc291cmNlLT5zdG9wKCk7CisgICAgICAgICAgICBzb3VyY2UtPnNldFNvdXJjZSh0cmFjay0+
cHJpdmF0ZVRyYWNrKCkpOworICAgICAgICAgICAgc291cmNlLT5zdGFydCgpOworICAgICAgICB9
LCBbXShzdGQ6Om51bGxwdHJfdCYpIHsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgbV9wZWVy
Q29ubmVjdGlvbkJhY2tlbmQtPnNldFNlbmRlclNvdXJjZUZyb21UcmFjaygqdGhpcywgKnRyYWNr
KTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUlRDUnRwU2VuZFBhcmFtZXRlcnMgR1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZDo6Z2V0UGFyYW1ldGVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRv
UlRDUnRwU2VuZFBhcmFtZXRlcnMobV9pbml0RGF0YS5nZXQoKSk7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyUnRwU2VuZGVyQmFja2VuZDo6c2V0UGFyYW1ldGVycyhjb25zdCBSVENSdHBTZW5kUGFyYW1l
dGVycyYsIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYmIHByb21pc2UpCit7CisgICAgaWYgKCFt
X3J0Y1NlbmRlcikgeworICAgICAgICBwcm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHBy
b21pc2UucmVzb2x2ZSgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRFRNRlNlbmRlckJhY2tl
bmQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmNyZWF0ZURUTUZCYWNrZW5kKCkKK3sKKyAg
ICByZXR1cm4gbWFrZVVuaXF1ZTxHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZD4oKTsKK30KKwor
UmVmPFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJ0
Y1J0cFRyYW5zZm9ybUJhY2tlbmQoKQoreworICAgIHJldHVybiBHU3RyZWFtZXJSdHBTZW5kZXJU
cmFuc2Zvcm1CYWNrZW5kOjpjcmVhdGUobV9ydGNTZW5kZXIpOworfQorCit2b2lkIEdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ6OnNldE1lZGlhU3RyZWFtSWRzKGNvbnN0IEZpeGVkVmVjdG9yPFN0
cmluZz4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxS
VENEdGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6ZHRsc1Ry
YW5zcG9ydEJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4g
dHJhbnNwb3J0OworICAgIGdfb2JqZWN0X2dldChtX3J0Y1NlbmRlci5nZXQoKSwgInRyYW5zcG9y
dCIsICZ0cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworICAgIHJldHVybiB0cmFuc3BvcnQg
PyBtYWtlVW5pcXVlPEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kPih0cmFuc3BvcnQpIDog
bnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFj
a2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMzEwODFjZjdiMjI0YWI1NjU1
Y2MzNjg5NTgxM2EwYjMyNjZlZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgK
QEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlh
IFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
CisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAi
R1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFNlbmRlckJhY2tlbmQuaCIK
KyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3
dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDsKKworY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCBm
aW5hbCA6IHB1YmxpYyBSVENSdHBTZW5kZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FM
TE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kKEdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZCYgYmFja2VuZCwgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5k
ZXI+JiYgcnRjU2VuZGVyLCBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBpbml0RGF0YSkKKyAg
ICAgICAgOiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZChXZWFrUHRyIHsgJmJhY2tlbmQgfSkKKyAg
ICAgICAgLCBtX3J0Y1NlbmRlcihXVEZNb3ZlKHJ0Y1NlbmRlcikpCisgICAgICAgICwgbV9pbml0
RGF0YShXVEZNb3ZlKGluaXREYXRhKSkKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgU291cmNl
ID0gc3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0cl90LCBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlR1N0cmVhbWVyPiwgUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cj4+OworICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kJiBiYWNrZW5kLCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mJiBydGNTZW5k
ZXIsIFNvdXJjZSYmIHNvdXJjZSwgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEp
CisgICAgICAgIDogbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQoV2Vha1B0ciB7ICZiYWNrZW5kIH0p
CisgICAgICAgICwgbV9ydGNTZW5kZXIoV1RGTW92ZShydGNTZW5kZXIpKQorICAgICAgICAsIG1f
c291cmNlKFdURk1vdmUoc291cmNlKSkKKyAgICAgICAgLCBtX2luaXREYXRhKFdURk1vdmUoaW5p
dERhdGEpKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lkIHNldFJUQ1NlbmRlcihHUmVmUHRyPEdz
dFdlYlJUQ1JUUFNlbmRlcj4mJiBydGNTZW5kZXIpIHsgbV9ydGNTZW5kZXIgPSBXVEZNb3ZlKHJ0
Y1NlbmRlcik7IH0KKyAgICBHc3RXZWJSVENSVFBTZW5kZXIqIHJ0Y1NlbmRlcigpIHsgcmV0dXJu
IG1fcnRjU2VuZGVyLmdldCgpOyB9CisKKyAgICBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXIqIGF1ZGlvU291cmNlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fc291cmNlLAorICAgICAgICAgICAgW10gKFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsgcmV0dXJuIHNvdXJjZS5wdHIoKTsgfSwKKyAgICAg
ICAgICAgIFtdIChjb25zdCBhdXRvJikgLT4gUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0
cmVhbWVyKiB7IHJldHVybiBudWxscHRyOyB9CisgICAgICAgICk7CisgICAgfQorCisgICAgUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKiB2aWRlb1NvdXJjZSgpCisgICAgewor
ICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChS
ZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7IHJldHVy
biBzb3VyY2UucHRyKCk7IH0sCisgICAgICAgICAgICBbXSAoY29uc3QgYXV0byYpIC0+IFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciogeyByZXR1cm4gbnVsbHB0cjsgfQorICAg
ICAgICApOworICAgIH0KKworICAgIGJvb2wgaGFzU291cmNlKCkgY29uc3QKKyAgICB7CisgICAg
ICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLAorICAgICAgICAgICAgW10gKGNvbnN0
IHN0ZDo6bnVsbHB0cl90JikgeyByZXR1cm4gZmFsc2U7IH0sCisgICAgICAgICAgICBbXSAoY29u
c3QgYXV0byYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAgICAgKTsKKyAgICB9CisKKyAgICB2b2lk
IGNsZWFyU291cmNlKCkKKyAgICB7CisgICAgICAgIEFTU0VSVChoYXNTb3VyY2UoKSk7CisgICAg
ICAgIG1fc291cmNlID0gbnVsbHB0cjsKKyAgICB9CisKKyAgICB2b2lkIHNldFNvdXJjZShTb3Vy
Y2UmJiBzb3VyY2UpCisgICAgeworICAgICAgICBBU1NFUlQoIWhhc1NvdXJjZSgpKTsKKyAgICAg
ICAgbV9zb3VyY2UgPSBXVEZNb3ZlKHNvdXJjZSk7CisgICAgICAgIEFTU0VSVChoYXNTb3VyY2Uo
KSk7CisgICAgfQorCisgICAgdm9pZCB0YWtlU291cmNlKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQmIGJhY2tlbmQpCisgICAgeworICAgICAgICBBU1NFUlQoYmFja2VuZC5oYXNTb3VyY2UoKSk7
CisgICAgICAgIHNldFNvdXJjZShXVEZNb3ZlKGJhY2tlbmQubV9zb3VyY2UpKTsKKyAgICB9CisK
KyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gR1JlZlB0cjxHc3RFbGVtZW50PiBzdG9wU291cmNlKCk7
CisKK3ByaXZhdGU6CisgICAgYm9vbCByZXBsYWNlVHJhY2soUlRDUnRwU2VuZGVyJiwgTWVkaWFT
dHJlYW1UcmFjayopIGZpbmFsOworICAgIFJUQ1J0cFNlbmRQYXJhbWV0ZXJzIGdldFBhcmFtZXRl
cnMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgUlRDUnRwU2Vu
ZFBhcmFtZXRlcnMmLCBET01Qcm9taXNlRGVmZXJyZWQ8dm9pZD4mJikgZmluYWw7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJUQ0RUTUZTZW5kZXJCYWNrZW5kPiBjcmVhdGVEVE1GQmFja2VuZCgpIGZp
bmFsOworICAgIFJlZjxSVENSdHBUcmFuc2Zvcm1CYWNrZW5kPiBydGNSdHBUcmFuc2Zvcm1CYWNr
ZW5kKCkgZmluYWw7CisgICAgdm9pZCBzZXRNZWRpYVN0cmVhbUlkcyhjb25zdCBGaXhlZFZlY3Rv
cjxTdHJpbmc+JikgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRC
YWNrZW5kPiBkdGxzVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworCisgICAgdm9pZCBzdGFydFNv
dXJjZSgpOworCisgICAgV2Vha1B0cjxHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IG1f
cGVlckNvbm5lY3Rpb25CYWNrZW5kOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBt
X3J0Y1NlbmRlcjsKKyAgICBTb3VyY2UgbV9zb3VyY2U7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1
Y3R1cmU+IG1faW5pdERhdGE7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuY3Bw
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmY2NmM0ZGVjMWJiMDNhMzI3N2Q5MmIwNjU0MjljNjQwNzJiZTE0M2UKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApAQCAtMCwwICsxLDU5
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oIgorCisjaWYg
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIEdT
dHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZSBtZWRpYVR5cGVGcm9t
U2VuZGVyKGNvbnN0IEdzdFdlYlJUQ1JUUFNlbmRlciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNmb3JtQmFja2VuZDo6TWVkaWFUeXBlOjpWaWRlbzsK
K30KKworR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwU2Vu
ZGVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mIHJ0
Y1NlbmRlcikKKyAgICA6IEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQobWVkaWFUeXBlRnJv
bVNlbmRlcigqcnRjU2VuZGVyKSwgU2lkZTo6U2VuZGVyKQorICAgICwgbV9ydGNTZW5kZXIocnRj
U2VuZGVyKQoreworfQorCitHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0
cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCgpCit7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
UnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6c2V0VHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2so
Q2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBzZXRJbnB1dENhbGxiYWNrKFdURk1vdmUoY2Fs
bGJhY2spKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNl
bmRlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSgpCit7CisgICAgQVNTRVJUKG1l
ZGlhVHlwZSgpID09IE1lZGlhVHlwZTo6VmlkZW8pOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tl
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjBhNTc2ZGIxMjY4
M2U3NTg5Nzg0MmQxNGE3OTU4YTQ5MGU5MjZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJh
bnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEsNTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJS
VENVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR1N0cmVhbWVyU2VuZGVyVHJhbnNmb3JtZXI7CisKK2NsYXNzIEdTdHJlYW1l
clJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQgZmluYWwgOiBwdWJsaWMgR1N0cmVhbWVyUnRwVHJh
bnNmb3JtQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kPiBjcmVhdGUo
Y29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiBzZW5kZXIpIHsgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZChzZW5kZXIpKTsgfQor
ICAgIH5HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKCk7CisKK3ByaXZhdGU6Cisg
ICAgZXhwbGljaXQgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVm
UHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mKTsKKworICAgIC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tl
bmQKKyAgICB2b2lkIHNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxiYWNrJiYpIGZp
bmFsOworICAgIHZvaWQgcmVxdWVzdEtleUZyYW1lKCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdz
dFdlYlJUQ1JUUFNlbmRlcj4gbV9ydGNTZW5kZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4yNDQ5YWU4NWYxNmRkNDFiMWEzOWEyMDgwYjQ2M2E1ODY3MDA4NDlj
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEy
OSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oIgorCisjaWYgRU5B
QkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVh
bWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFj
a2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiTm90
SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENSdHBDb2RlY0NhcGFiaWxpdHkuaCIKKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4o
d2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3
ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQoR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4mJiBydGNUcmFuc2NlaXZlcikKKyAg
ICA6IG1fcnRjVHJhbnNjZWl2ZXIoV1RGTW92ZShydGNUcmFuc2NlaXZlcikpCit7CisgICAgZ19v
YmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJkby1uYWNrIiwgVFJVRSwgImZlYy10
eXBlIiwgR1NUX1dFQlJUQ19GRUNfVFlQRV9VTFBfUkVELCBudWxscHRyKTsKK30KKworc3RkOjp1
bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4gR1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kOjpjcmVhdGVSZWNlaXZlckJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0
V2ViUlRDUlRQUmVjZWl2ZXI+IHJlY2VpdmVyOworICAgIGdfb2JqZWN0X2dldChtX3J0Y1RyYW5z
Y2VpdmVyLmdldCgpLCAicmVjZWl2ZXIiLCAmcmVjZWl2ZXIub3V0UHRyKCksIG51bGxwdHIpOwor
ICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPihX
VEZNb3ZlKHJlY2VpdmVyKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVNlbmRlckJh
Y2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBiYWNrZW5kLCBHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmJiBzb3VyY2UsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJl
PiYmIGluaXREYXRhKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXI7
CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJzZW5kZXIiLCAmc2Vu
ZGVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJl
YW1lclJ0cFNlbmRlckJhY2tlbmQ+KGJhY2tlbmQsIFdURk1vdmUoc2VuZGVyKSwgV1RGTW92ZShz
b3VyY2UpLCBXVEZNb3ZlKGluaXREYXRhKSk7Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0
aW9uIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6ZGlyZWN0aW9uKCkgY29uc3QKK3sK
KyAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlvbiBnc3REaXJlY3Rpb247CisgICAg
Z19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJkaXJlY3Rpb24iLCAmZ3N0RGly
ZWN0aW9uLCBudWxscHRyKTsKKyAgICByZXR1cm4gdG9SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlv
bihnc3REaXJlY3Rpb24pOworfQorCitzdGQ6Om9wdGlvbmFsPFJUQ1J0cFRyYW5zY2VpdmVyRGly
ZWN0aW9uPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmN1cnJlbnREaXJlY3Rpb24o
KSBjb25zdAoreworICAgIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyRGlyZWN0aW9uIGdzdERpcmVj
dGlvbjsKKyAgICBnX29iamVjdF9nZXQobV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgImN1cnJlbnQt
ZGlyZWN0aW9uIiwgJmdzdERpcmVjdGlvbiwgbnVsbHB0cik7CisgICAgaWYgKCFnc3REaXJlY3Rp
b24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHRvUlRDUnRwVHJh
bnNjZWl2ZXJEaXJlY3Rpb24oZ3N0RGlyZWN0aW9uKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQ6OnNldERpcmVjdGlvbihSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlv
biBkaXJlY3Rpb24pCit7CisgICAgZ19vYmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCks
ICJkaXJlY3Rpb24iLCBmcm9tUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZGlyZWN0aW9uKSwg
bnVsbHB0cik7Cit9CisKK1N0cmluZyBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6Om1p
ZCgpCit7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBtaWQ7CisgICAgZ19vYmplY3RfZ2V0KG1f
cnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJtaWQiLCAmbWlkLm91dFB0cigpLCBudWxscHRyKTsKKyAg
ICByZXR1cm4gbWlkLmdldCgpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZDo6c3RvcCgpCit7CisgICAgLy8gRklYTUU6IHdlYnJ0Y2JpbiB0cmFuc2NlaXZlcnMgY2Fu
J3QgYmUgc3RvcHBlZCB5ZXQuCisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBHU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnN0b3BwZWQoKSBjb25zdAoreworICAgIC8vIEZJ
WE1FOiB3ZWJydGNiaW4gdHJhbnNjZWl2ZXJzIGNhbid0IGJlIHN0b3BwZWQgeWV0LgorICAgIHJl
dHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBXQVJOX1VOVVNFRF9SRVRVUk4gRXhjZXB0
aW9uT3I8R3N0Q2Fwcyo+IHRvUnRwQ29kZWNDYXBhYmlsaXR5KGNvbnN0IFJUQ1J0cENvZGVjQ2Fw
YWJpbGl0eSYgY29kZWMpCit7CisgICAgaWYgKCFjb2RlYy5taW1lVHlwZS5zdGFydHNXaXRoKCJ2
aWRlby8iKSAmJiAhY29kZWMubWltZVR5cGUuc3RhcnRzV2l0aCgiYXVkaW8vIikpCisgICAgICAg
IHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTW9kaWZpY2F0aW9uRXJyb3IsICJSVENSdHBDb2Rl
Y0NhcGFiaWxpdHkgYmFkIG1pbWVUeXBlIiB9OworCisgICAgYXV0byBjb21wb25lbnRzID0gY29k
ZWMubWltZVR5cGUuc3BsaXQoJy8nKTsKKyAgICBhdXRvKiBjYXBzID0gZ3N0X2NhcHNfbmV3X3Np
bXBsZSgiYXBwbGljYXRpb24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCBjb21wb25l
bnRzWzBdLmFzY2lpKCkuZGF0YSgpLCAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGNv
bXBvbmVudHNbMV0uYXNjaWkoKS5kYXRhKCksIG51bGxwdHIpOworICAgIGdzdF9jYXBzX3NldF9z
aW1wbGUoY2FwcywgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCBjb2RlYy5jbG9ja1JhdGUsIG51
bGxwdHIpOworICAgIGlmIChjb2RlYy5jaGFubmVscykKKyAgICAgICAgZ3N0X2NhcHNfc2V0X3Np
bXBsZShjYXBzLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5ULCAqY29kZWMuY2hhbm5lbHMsIG51bGxw
dHIpOworCisgICAgaWYgKCFjb2RlYy5zZHBGbXRwTGluZS5pc0VtcHR5KCkpCisgICAgICAgIEdT
VF9GSVhNRSgiVW5wcm9jZXNzZWQgU0RQIEZtdHBMaW5lOiAlcyIsIGNvZGVjLnNkcEZtdHBMaW5l
LnV0ZjgoKS5kYXRhKCkpOworICAgIEdTVF9ERUJVRygiQ29kZWMgY2FwYWJpbGl0eTogJSIgR1NU
X1BUUl9GT1JNQVQsIGNhcHMpOworICAgIHJldHVybiBjYXBzOworfQorCitFeGNlcHRpb25Pcjx2
b2lkPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNldENvZGVjUHJlZmVyZW5jZXMo
Y29uc3QgVmVjdG9yPFJUQ1J0cENvZGVjQ2FwYWJpbGl0eT4mIGNvZGVjcykKK3sKKyAgICBhdXRv
IGdzdENvZGVjcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZm9yIChh
dXRvJiBjb2RlYyA6IGNvZGVjcykgeworICAgICAgICBhdXRvIHJlc3VsdCA9IHRvUnRwQ29kZWND
YXBhYmlsaXR5KGNvZGVjKTsKKyAgICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAg
ICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICBnc3Rf
Y2Fwc19hcHBlbmQoZ3N0Q29kZWNzLmdldCgpLCByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkp
OworICAgIH0KKyAgICBnX29iamVjdF9zZXQobV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgImNvZGVj
LXByZWZlcmVuY2VzIiwgZ3N0Q29kZWNzLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4geyB9
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRlYTc3MzA0YjA2ZTQxODBm
YzcwNzE0N2Y1NDg4Njk4NTg4MTZhNjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJh
Y2tlbmQuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFt
ZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgor
I2luY2x1ZGUgIlJUQ1J0cFRyYW5zY2VpdmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDsKKworY2xhc3MgR1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ1J0cFRyYW5zY2VpdmVy
QmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2
ZXI+JiYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2Vu
ZD4gY3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ+IGNyZWF0ZVNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kJiwgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiYsIEdVbmlx
dWVQdHI8R3N0U3RydWN0dXJlPiYmKTsKKworICAgIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBy
dGNUcmFuc2NlaXZlcigpIHsgcmV0dXJuIG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCk7IH0KKworcHJp
dmF0ZToKKyAgICBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCBm
aW5hbDsKKyAgICBzdGQ6Om9wdGlvbmFsPFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uPiBjdXJy
ZW50RGlyZWN0aW9uKCkgY29uc3QgZmluYWw7CisgICAgdm9pZCBzZXREaXJlY3Rpb24oUlRDUnRw
VHJhbnNjZWl2ZXJEaXJlY3Rpb24pIGZpbmFsOworICAgIFN0cmluZyBtaWQoKSBmaW5hbDsKKyAg
ICB2b2lkIHN0b3AoKSBmaW5hbDsKKyAgICBib29sIHN0b3BwZWQoKSBjb25zdCBmaW5hbDsKKyAg
ICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRDb2RlY1ByZWZlcmVuY2VzKGNvbnN0IFZlY3RvcjxSVENS
dHBDb2RlY0NhcGFiaWxpdHk+JikgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRy
YW5zY2VpdmVyPiBtX3J0Y1RyYW5zY2VpdmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45OWI0YTZhMzdlNWZiMDNjZTk4MzYzMDZjYmVmY2RmZDlhNWEwZjUzCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRD
KSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgi
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNr
ZW5kOjpzZXRJbnB1dENhbGxiYWNrKENhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgTG9ja2Vy
IGhvbGRMb2NrIHsgbV9pbnB1dENhbGxiYWNrTG9jayB9OworICAgIG1faW5wdXRDYWxsYmFjayA9
IFdURk1vdmUoY2FsbGJhY2spOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tl
bmQ6OmNsZWFyVHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soKQoreworICAgIHNldElucHV0Q2Fs
bGJhY2soeyB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpwcm9j
ZXNzVHJhbnNmb3JtZWRGcmFtZShSVENSdHBUcmFuc2Zvcm1hYmxlRnJhbWUmKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRy
YW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTU0NDhm
YzdkMzI2MThmNzhlN2U4MTVmYzE1ZTE0OTYxMWIyYjNiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJh
bnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUlRDUnRwVHJhbnNmb3JtQmFja2VuZC5oIgorI2lu
Y2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVh
bWVyUnRwVHJhbnNmb3JtQmFja2VuZCA6IHB1YmxpYyBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kIHsK
K3Byb3RlY3RlZDoKKyAgICBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKE1lZGlhVHlwZSwg
U2lkZSk7CisgICAgdm9pZCBzZXRJbnB1dENhbGxiYWNrKENhbGxiYWNrJiYpOworCitwcm90ZWN0
ZWQ6CisgICAgTWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbWVk
aWFUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgLy8gUlRDUnRwVHJhbnNmb3JtQmFja2VuZAorICAg
IHZvaWQgcHJvY2Vzc1RyYW5zZm9ybWVkRnJhbWUoUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lJikg
ZmluYWw7CisgICAgdm9pZCBjbGVhclRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKCkgZmluYWw7
CisgICAgU2lkZSBzaWRlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9zaWRlOyB9CisKKyAgICBN
ZWRpYVR5cGUgbV9tZWRpYVR5cGU7CisgICAgU2lkZSBtX3NpZGU7CisKKyAgICBMb2NrIG1faW5w
dXRDYWxsYmFja0xvY2s7CisgICAgQ2FsbGJhY2sgbV9pbnB1dENhbGxiYWNrOworCisgICAgTG9j
ayBtX291dHB1dENhbGxiYWNrTG9jazsKK307CisKK2lubGluZSBHU3RyZWFtZXJSdHBUcmFuc2Zv
cm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKE1lZGlhVHlwZSBtZWRpYVR5
cGUsIFNpZGUgc2lkZSkKKyAgICA6IG1fbWVkaWFUeXBlKG1lZGlhVHlwZSkKKyAgICAsIG1fc2lk
ZShzaWRlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY3OTIx
M2QxNzhkZGI1MDliZmEyY2JkNmY2YzZiYjgzOTBjMjQxNAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBU
cmFuc3BvcnRCYWNrZW5kLmNwcApAQCAtMCwwICsxLDk3IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitzdGF0aWMgaW5saW5lIFJUQ1NjdHBUcmFuc3BvcnRTdGF0ZSB0b1JUQ1NjdHBUcmFuc3Bv
cnRTdGF0ZShHc3RXZWJSVENTQ1RQVHJhbnNwb3J0U3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNo
IChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9ORVc6
CisgICAgY2FzZSBHU1RfV0VCUlRDX1NDVFBfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RJTkc6Cisg
ICAgICAgIHJldHVybiBSVENTY3RwVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgY2Fz
ZSBHU1RfV0VCUlRDX1NDVFBfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0
dXJuIFJUQ1NjdHBUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJU
Q19TQ1RQX1RSQU5TUE9SVF9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENTY3RwVHJh
bnNwb3J0U3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVB
Q0hFRCgpOworfQorCitHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiYmIHRyYW5z
cG9ydCkKKyAgICA6IG1fYmFja2VuZChXVEZNb3ZlKHRyYW5zcG9ydCkpCit7CisgICAgQVNTRVJU
KG1fYmFja2VuZCk7Cit9CisKK0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVh
bWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIHVucmVnaXN0ZXJDbGllbnQoKTsKK30K
KworVW5pcXVlUmVmPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBHU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2Vi
UlRDRFRMU1RyYW5zcG9ydD4gdHJhbnNwb3J0OworICAgIGdfb2JqZWN0X2dldChtX2JhY2tlbmQu
Z2V0KCksICJ0cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICBy
ZXR1cm4gbWFrZVVuaXF1ZVJlZjxHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNw
b3J0KTsKK30KKwordm9pZCBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJD
bGllbnQoQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9j
bGllbnQgPSBjbGllbnQ7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fYmFja2VuZC5n
ZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5kLT5zdGF0ZUNoYW5nZWQoKTsK
KyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6
OnVucmVnaXN0ZXJDbGllbnQoKQoreworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3Rf
YnlfZGF0YShtX2JhY2tlbmQuZ2V0KCksIHRoaXMpOworICAgIG1fY2xpZW50LmNsZWFyKCk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCgpCit7
CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDU0NU
UFRyYW5zcG9ydFN0YXRlIHRyYW5zcG9ydFN0YXRlOworICAgIGd1aW50MTYgbWF4Q2hhbm5lbHM7
CisgICAgdWludDY0X3QgbWF4TWVzc2FnZVNpemU7CisgICAgZ19vYmplY3RfZ2V0KG1fYmFja2Vu
ZC5nZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0YXRlLCAibWF4LW1lc3NhZ2Utc2l6ZSIsICZt
YXhNZXNzYWdlU2l6ZSwgIm1heC1jaGFubmVscyIsICZtYXhDaGFubmVscywgbnVsbHB0cik7Cisg
ICAgY2FsbE9uTWFpblRocmVhZChbY2xpZW50ID0gbV9jbGllbnQsIHRyYW5zcG9ydFN0YXRlLCBt
YXhDaGFubmVscywgbWF4TWVzc2FnZVNpemVdIHsKKyAgICAgICAgaWYgKCFjbGllbnQpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2xpZW50LT5vblN0YXRlQ2hhbmdlZCh0b1JUQ1Nj
dHBUcmFuc3BvcnRTdGF0ZSh0cmFuc3BvcnRTdGF0ZSksIG1heE1lc3NhZ2VTaXplLCBtYXhDaGFu
bmVscyk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBU
cmFuc3BvcnRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ODBm
Yzg0OThjMDVjMzk3ZGNiMDZjNzBjNDMzMDhiMDI5MGYwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3Rw
VHJhbnNwb3J0QmFja2VuZC5oCkBAIC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1
ZGUgIlJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4K
KwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1NDVFBUcmFuc3BvcnQgR3N0V2ViUlRDU0NUUFRy
YW5zcG9ydDsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJTY3RwVHJh
bnNwb3J0QmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENTY3RwVHJhbnNwb3J0QmFja2VuZCwgcHVi
bGljIENhbk1ha2VXZWFrUHRyPEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kPiB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVy
U2N0cFRyYW5zcG9ydEJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiYmKTsK
KyAgICB+R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoKTsKKworcHJvdGVjdGVkOgorICAg
IHZvaWQgc3RhdGVDaGFuZ2VkKCk7CisKK3ByaXZhdGUgOgorICAgIC8vIFJUQ1NjdHBUcmFuc3Bv
cnRCYWNrZW5kCisgICAgY29uc3Qgdm9pZCogYmFja2VuZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IG1fYmFja2VuZC5nZXQoKTsgfQorICAgIFVuaXF1ZVJlZjxSVENEdGxzVHJhbnNwb3J0QmFja2Vu
ZD4gZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBmaW5hbDsKKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50
KENsaWVudCYpIGZpbmFsOworICAgIHZvaWQgdW5yZWdpc3RlckNsaWVudCgpIGZpbmFsOworCisg
ICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiBtX2JhY2tlbmQ7CisgICAgV2Vha1B0
cjxDbGllbnQ+IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
U3RhdHNDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2YjAwN2Ix
NTYzY2EwYjgyOWI1ODYwZjkzYTI3ODI3ODM0NmJmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0Nv
bGxlY3Rvci5jcHAKQEAgLTAsMCArMSwyODYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJTdGF0c0NvbGxl
Y3Rvci5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
CisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkpTRE9NTWFwTGlr
ZS5oIgorI2luY2x1ZGUgIkpTUlRDU3RhdHNSZXBvcnQuaCIKKworI2RlZmluZSBHU1RfVVNFX1VO
U1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VT
RV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8
d3RmL2dsaWIvV1RGR1R5cGUuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRf
d2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93
ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5s
aW5lIHZvaWQgZmlsbFJUQ1N0YXRzKFJUQ1N0YXRzUmVwb3J0OjpTdGF0cyYgc3RhdHMsIGNvbnN0
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAgIGRvdWJsZSB0aW1lc3RhbXA7CisgICAg
aWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShzdHJ1Y3R1cmUsICJ0aW1lc3RhbXAiLCAmdGlt
ZXN0YW1wKSkKKyAgICAgICAgc3RhdHMudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIHN0YXRz
LmlkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImlkIik7Cit9CisKK3N0
YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDUlRQU3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlJ0
cFN0cmVhbVN0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7Cisg
ICAgZmlsbFJUQ1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworCisgICAgc3RhdHMudHJhbnNwb3J0
SWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAidHJhbnNwb3J0LWlkIik7
CisgICAgc3RhdHMuY29kZWNJZCA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUs
ICJjb2RlYy1pZCIpOworCisgICAgdW5zaWduZWQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1
cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAic3NyYyIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnNz
cmMgPSB2YWx1ZTsKKworICAgIC8vIEZJWE1FOgorICAgIC8vIHN0YXRzLnRyYW5zcG9ydElkCisg
ICAgLy8gc3RhdHMuY29kZWNJZAorICAgIC8vIHN0YXRzLm1lZGlhVHlwZQorICAgIC8vIHN0YXRz
LmtpbmQKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENDb2RlY1N0YXRzKFJUQ1N0YXRz
UmVwb3J0OjpDb2RlY1N0YXRzJiBzdGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUp
Cit7CisgICAgZmlsbFJUQ1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworCisgICAgdW5zaWduZWQg
dmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAicGF5bG9h
ZC10eXBlIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMucGF5bG9hZFR5cGUgPSB2YWx1ZTsKKyAg
ICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJnZh
bHVlKSkKKyAgICAgICAgc3RhdHMuY2xvY2tSYXRlID0gdmFsdWU7CisKKyAgICAvLyBGSVhNRToK
KyAgICAvLyBzdGF0cy5taW1lVHlwZSA9CisgICAgLy8gc3RhdHMuY2hhbm5lbHMgPQorICAgIC8v
IHN0YXRzLnNkcEZtdHBMaW5lID0KKyAgICAvLyBzdGF0cy5pbXBsZW1lbnRhdGlvbiA9Cit9CisK
K3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRzKFJUQ1N0YXRzUmVw
b3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7
CisKKyAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0
KHN0cnVjdHVyZSwgInBhY2tldHMtcmVjZWl2ZWQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5w
YWNrZXRzUmVjZWl2ZWQgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0
KHN0cnVjdHVyZSwgImJ5dGVzLXJlY2VpdmVkIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuYnl0
ZXNSZWNlaXZlZCA9IHZhbHVlOworCisgICAgdW5zaWduZWQgcGFja2V0c0xvc3Q7CisgICAgaWYg
KGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAicGFja2V0cy1sb3N0IiwgJnBhY2tl
dHNMb3N0KSkKKyAgICAgICAgc3RhdHMucGFja2V0c0xvc3QgPSBwYWNrZXRzTG9zdDsKKworICAg
IGRvdWJsZSBqaXR0ZXI7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShzdHJ1Y3R1
cmUsICJqaXR0ZXIiLCAmaml0dGVyKSkKKyAgICAgICAgc3RhdHMuaml0dGVyID0gaml0dGVyOwor
CisgICAgLy8gRklYTUU6CisgICAgLy8gc3RhdHMuZnJhY3Rpb25Mb3N0ID0KKyAgICAvLyBzdGF0
cy5wYWNrZXRzRGlzY2FyZGVkID0KKyAgICAvLyBzdGF0cy5wYWNrZXRzUmVwYWlyZWQgPQorICAg
IC8vIHN0YXRzLmJ1cnN0UGFja2V0c0xvc3QgPQorICAgIC8vIHN0YXRzLmJ1cnN0UGFja2V0c0Rp
c2NhcmRlZCA9CisgICAgLy8gc3RhdHMuYnVyc3RMb3NzQ291bnQgPQorICAgIC8vIHN0YXRzLmJ1
cnN0RGlzY2FyZENvdW50ID0KKyAgICAvLyBzdGF0cy5idXJzdExvc3NSYXRlID0KKyAgICAvLyBz
dGF0cy5idXJzdERpc2NhcmRSYXRlID0KKyAgICAvLyBzdGF0cy5nYXBMb3NzUmF0ZSA9CisgICAg
Ly8gc3RhdHMuZ2FwRGlzY2FyZFJhdGUgPQorICAgIC8vIHN0YXRzLmZyYW1lc0RlY29kZWQgPQor
fQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbE91dGJvdW5kUlRQU3RyZWFtU3RhdHMoUlRDU3Rh
dHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVj
dHVyZSk7CisKKyAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRf
dWludDY0KHN0cnVjdHVyZSwgInBhY2tldHMtc2VudCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRz
LnBhY2tldHNTZW50ID0gdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChz
dHJ1Y3R1cmUsICJieXRlcy1zZW50IiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuYnl0ZXNTZW50
ID0gdmFsdWU7CisKKyAgICAvLyBGSVhNRQorICAgIC8vIHN0YXRzLnRhcmdldEJpdHJhdGUgPQor
ICAgIC8vIHN0YXRzLmZyYW1lc0VuY29kZWQgPQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmls
bFJUQ1BlZXJDb25uZWN0aW9uU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3Rh
dHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRD
U3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICBpbnQgdmFsdWU7CisgICAgaWYgKGdzdF9z
dHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJkYXRhLWNoYW5uZWxzLW9wZW5lZCIsICZ2YWx1
ZSkpCisgICAgICAgIHN0YXRzLmRhdGFDaGFubmVsc09wZW5lZCA9IHZhbHVlOworICAgIGlmIChn
c3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAiZGF0YS1jaGFubmVscy1jbG9zZWQiLCAm
dmFsdWUpKQorICAgICAgICBzdGF0cy5kYXRhQ2hhbm5lbHNDbG9zZWQgPSB2YWx1ZTsKK30KKwor
c3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENUcmFuc3BvcnRTdGF0cyhSVENTdGF0c1JlcG9ydDo6
VHJhbnNwb3J0U3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sK
KyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICAvLyBGSVhNRQorICAg
IC8vIHN0YXRzLmJ5dGVzU2VudCA9CisgICAgLy8gc3RhdHMuYnl0ZXNSZWNlaXZlZCA9CisgICAg
Ly8gc3RhdHMucnRjcFRyYW5zcG9ydFN0YXRzSWQgPQorICAgIC8vIHN0YXRzLnNlbGVjdGVkQ2Fu
ZGlkYXRlUGFpcklkID0KKyAgICAvLyBzdGF0cy5sb2NhbENlcnRpZmljYXRlSWQgPQorICAgIC8v
IHN0YXRzLnJlbW90ZUNlcnRpZmljYXRlSWQgPQorICAgIC8vIHN0YXRzLmR0bHNTdGF0ZSA9Cisg
ICAgLy8gc3RhdHMudGxzVmVyc2lvbiA9CisgICAgLy8gc3RhdHMuZHRsc0NpcGhlciA9CisgICAg
Ly8gc3RhdHMuc3J0cENpcGhlciA9Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBmaWxsUmVwb3J0Q2Fs
bGJhY2soR1F1YXJrLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sK
KyAgICBpZiAoIUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUodmFsdWUpKQorICAgICAgICByZXR1
cm4gVFJVRTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVl
X2dldF9zdHJ1Y3R1cmUodmFsdWUpOworICAgIEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7
CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVf
V0VCUlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4g
VFJVRTsKKworICAgIERPTU1hcEFkYXB0ZXImIHJlcG9ydCA9ICpyZWludGVycHJldF9jYXN0PERP
TU1hcEFkYXB0ZXIqPih1c2VyRGF0YSk7CisKKyAgICBzd2l0Y2ggKHN0YXRzVHlwZSkgeworICAg
IGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DT0RFQzogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6
Q29kZWNTdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJUQ0NvZGVjU3RhdHMoc3RhdHMsIHN0cnVj
dHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJU
Q1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19JTkJPVU5EX1JU
UDogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzIHN0YXRz
OworICAgICAgICBmaWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOwor
ICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1Jl
cG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsK
KyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19PVVRCT1VO
RF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMg
c3RhdHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1
cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENT
dGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0
YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNf
UkVNT1RFX0lOQk9VTkRfUlRQOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRw
U3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoc3Rh
dHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0
aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0cy5pZCwg
V1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VC
UlRDX1NUQVRTX1JFTU9URV9PVVRCT1VORF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6
Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0
cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0
cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0
cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfQ1NSQzoKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNh
dGVkIHN0YXRzOiBjc3JjIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19T
VEFUU19QRUVSX0NPTk5FQ1RJT046IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25u
ZWN0aW9uU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKHN0
YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGlj
dGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5lY3Rpb25TdGF0cz4+KHN0YXRzLmlkLCBX
VEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJS
VENfU1RBVFNfVFJBTlNQT1JUOiB7CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRT
dGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdHJ1Y3R1
cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENT
dGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1NUUkVBTToK
KyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0YXRzOiBzdHJlYW0iKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX0RBVEFfQ0hBTk5FTDoKKyAgICAgICAg
R1NUX0ZJWE1FKCJNaXNzaW5nIGRhdGEtY2hhbm5lbCBzdGF0cyBzdXBwb3J0Iik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DQU5ESURBVEVfUEFJUjoKKyAgICBj
YXNlIEdTVF9XRUJSVENfU1RBVFNfTE9DQUxfQ0FORElEQVRFOgorICAgIGNhc2UgR1NUX1dFQlJU
Q19TVEFUU19SRU1PVEVfQ0FORElEQVRFOgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2Fu
ZGlkYXRlIHN0YXRzIHN1cHBvcnQiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VC
UlRDX1NUQVRTX0NFUlRJRklDQVRFOgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2VydGlm
aWNhdGUgc3RhdHMgc3VwcG9ydCIpOworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1
cm4gVFJVRTsKK30KKworc3RydWN0IENhbGxiYWNrSG9sZGVyIHsKKyAgICBHU3RyZWFtZXJTdGF0
c0NvbGxlY3Rvcjo6Q29sbGVjdG9yQ2FsbGJhY2sgY2FsbGJhY2s7Cit9OworCitXRUJLSVRfREVG
SU5FX0FTWU5DX0RBVEFfU1RSVUNUKENhbGxiYWNrSG9sZGVyKTsKKwordm9pZCBHU3RyZWFtZXJT
dGF0c0NvbGxlY3Rvcjo6Z2V0U3RhdHMoQ29sbGVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgR3N0
UGFkKiBwYWQpCit7CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikgeworICAgICAgICBjYWxsYmFjayhu
dWxscHRyKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGF1dG8qIGhvbGRlciA9IGNy
ZWF0ZUNhbGxiYWNrSG9sZGVyKCk7CisgICAgaG9sZGVyLT5jYWxsYmFjayA9IFdURk1vdmUoY2Fs
bGJhY2spOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdl
dC1zdGF0cyIsIHBhZCwgZ3N0X3Byb21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJv
bWlzZSogcmF3UHJvbWlzZSwgZ3BvaW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9t
aXNlID0gYWRvcHRHUmVmKHJhd1Byb21pc2UpOworICAgICAgICBhdXRvKiBob2xkZXIgPSBzdGF0
aWNfY2FzdDxDYWxsYmFja0hvbGRlcio+KHVzZXJEYXRhKTsKKyAgICAgICAgaWYgKGdzdF9wcm9t
aXNlX3dhaXQocHJvbWlzZS5nZXQoKSkgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpIHsK
KyAgICAgICAgICAgIGhvbGRlci0+Y2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBhdXRvKiBzdGF0cyA9IGdzdF9wcm9taXNl
X2dldF9yZXBseShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgaWYgKCFzdGF0cykgeworICAgICAg
ICAgICAgaG9sZGVyLT5jYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAg
ICAgICAgfQorCisgICAgICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZChzdGF0cywgImVy
cm9yIikpIHsKKyAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAg
ICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0YXRzLCAiZXJyb3IiLCBHX1RZUEVfRVJST1IsICZl
cnJvci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBHU1RfV0FSTklORygiVW5hYmxl
IHRvIGdldCBzdGF0cywgZXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICAgICAg
aG9sZGVyLT5jYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
fQorCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFtwcm9taXNlID0gV1RGTW92ZShw
cm9taXNlKSwgaG9sZGVyXSB7CisgICAgICAgICAgICAvLyBIb2xkIGFuIGFkZGl0aW9uYWwgcmVm
IHRvIHRoZSBwcm9taXNlIGJlY2F1c2UgaXQgaXMgYXN5bmNocm9ub3VzbHkgdXNlZCBmcm9tIHRo
ZSBKUyBiaW5kaW5ncy4KKyAgICAgICAgICAgIGhvbGRlci0+Y2FsbGJhY2soUlRDU3RhdHNSZXBv
cnQ6OmNyZWF0ZShbcHJvbWlzZSA9IEdSZWZQdHI8R3N0UHJvbWlzZT4ocHJvbWlzZS5nZXQoKSld
KGF1dG8mIG1hcEFkYXB0ZXIpIHsKKyAgICAgICAgICAgICAgICBjb25zdCBhdXRvKiBzdGF0cyA9
IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBn
c3Rfc3RydWN0dXJlX2ZvcmVhY2goc3RhdHMsIGZpbGxSZXBvcnRDYWxsYmFjaywgJm1hcEFkYXB0
ZXIpOworICAgICAgICAgICAgfSkpOworICAgICAgICB9KTsKKyAgICB9LCBob2xkZXIsIHJlaW50
ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lDYWxsYmFja0hvbGRlcikpKTsKK30K
KworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0Nv
bGxlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0MjczNTUzZjgyNTEzNzI2MWZhOTQ3NmJmZTBhZTE3MmJk
MDgxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oCkBAIC0wLDAgKzEsNDggQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0
ckdTdHJlYW1lci5oIgorCisjaW5jbHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5j
bHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5o
PgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJUQ1N0YXRzUmVwb3J0OworCitjbGFz
cyBHU3RyZWFtZXJTdGF0c0NvbGxlY3RvciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxH
U3RyZWFtZXJTdGF0c0NvbGxlY3RvciwgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4gewor
cHVibGljOgorICAgIHVzaW5nIENvbGxlY3RvckNhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8
dm9pZChSZWZQdHI8UlRDU3RhdHNSZXBvcnQ+JiYpPjsKKyAgICBzdGF0aWMgUmVmPEdTdHJlYW1l
clN0YXRzQ29sbGVjdG9yPiBjcmVhdGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1l
clN0YXRzQ29sbGVjdG9yKCkpOyB9CisKKyAgICB2b2lkIHNldEVsZW1lbnQoR3N0RWxlbWVudCog
ZWxlbWVudCkgeyBtX3dlYnJ0Y0JpbiA9IGVsZW1lbnQ7IH0KKyAgICB2b2lkIGdldFN0YXRzKENv
bGxlY3RvckNhbGxiYWNrJiYsIEdzdFBhZCopOworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gbV93ZWJydGNCaW47Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJXZWJSVENVdGlscy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYWZjMTQ5YTNhOGNj
YWFhMzc4YzNhNTk3YTkyMmRlYzAyZTZlYTBhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxz
LmNwcApAQCAtMCwwICsxLDQ0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJ
Z2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisKKyNpbmNsdWRl
ICJSVENJY2VDYW5kaWRhdGUuaCIKKyNpbmNsdWRlICJSVENJY2VQcm90b2NvbC5oIgorCisjaW5j
bHVkZSA8b3BlbnNzbC9ibi5oPgorI2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjaW5jbHVkZSA8
b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1i
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4K
KyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdU
b0ludGVnZXJDb252ZXJzaW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0
X3dlYnJ0Y191dGlsc19kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2Vi
cnRjX3V0aWxzX2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBS
VENJY2VDb21wb25lbnQgdG9SVENJY2VDb21wb25lbnQoaW50IGNvbXBvbmVudCkKK3sKKyAgICBy
ZXR1cm4gY29tcG9uZW50ID09IDEgPyBSVENJY2VDb21wb25lbnQ6OlJ0cCA6IFJUQ0ljZUNvbXBv
bmVudDo6UnRjcDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0ljZVByb3Rv
Y29sPiB0b1JUQ0ljZVByb3RvY29sKGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCit7CisgICAgaWYg
KHByb3RvY29sLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAocHJvdG9j
b2wgPT0gInVkcCIpCisgICAgICAgIHJldHVybiBSVENJY2VQcm90b2NvbDo6VWRwOworICAgIEFT
U0VSVChwcm90b2NvbCA9PSAidGNwIik7CisgICAgcmV0dXJuIFJUQ0ljZVByb3RvY29sOjpUY3A7
Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpvcHRpb25hbDxSVENJY2VUY3BDYW5kaWRhdGVUeXBl
PiB0b1JUQ0ljZVRjcENhbmRpZGF0ZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGlm
ICh0eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAodHlwZSA9PSAi
YWN0aXZlIikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU6OkFjdGl2ZTsK
KyAgICBpZiAodHlwZSA9PSAicGFzc2l2ZSIpCisgICAgICAgIHJldHVybiBSVENJY2VUY3BDYW5k
aWRhdGVUeXBlOjpQYXNzaXZlOworICAgIEFTU0VSVCh0eXBlID09ICJzbyIpOworICAgIHJldHVy
biBSVENJY2VUY3BDYW5kaWRhdGVUeXBlOjpTbzsKK30KKworc3RhdGljIGlubGluZSBzdGQ6Om9w
dGlvbmFsPFJUQ0ljZUNhbmRpZGF0ZVR5cGU+IHRvUlRDSWNlQ2FuZGlkYXRlVHlwZShjb25zdCBT
dHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
eyB9OworICAgIGlmICh0eXBlID09ICJob3N0IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNhbmRp
ZGF0ZVR5cGU6Okhvc3Q7CisgICAgaWYgKHR5cGUgPT0gInNyZmx4IikKKyAgICAgICAgcmV0dXJu
IFJUQ0ljZUNhbmRpZGF0ZVR5cGU6OlNyZmx4OworICAgIGlmICh0eXBlID09ICJwcmZseCIpCisg
ICAgICAgIHJldHVybiBSVENJY2VDYW5kaWRhdGVUeXBlOjpQcmZseDsKKyAgICBBU1NFUlQodHlw
ZSA9PSAicmVsYXkiKTsKKyAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6UmVsYXk7Cit9
CisKK1JlZlB0cjxSVENFcnJvcj4gdG9SVENFcnJvcihHRXJyb3IqIHJ0Y0Vycm9yKQoreworICAg
IGF1dG8gZGV0YWlsID0gdG9SVENFcnJvckRldGFpbFR5cGUoc3RhdGljX2Nhc3Q8R3N0V2ViUlRD
RXJyb3I+KHJ0Y0Vycm9yLT5jb2RlKSk7CisgICAgaWYgKCFkZXRhaWwpCisgICAgICAgIHJldHVy
biBudWxscHRyOworICAgIHJldHVybiBSVENFcnJvcjo6Y3JlYXRlKCpkZXRhaWwsIHJ0Y0Vycm9y
LT5tZXNzYWdlKTsKK30KKworc3RhdGljIGlubGluZSBkb3VibGUgdG9XZWJSVENCaXRSYXRlUHJp
b3JpdHkoUlRDUHJpb3JpdHlUeXBlIHByaW9yaXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkp
IHsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6VmVyeUxvdzoKKyAgICAgICAgcmV0dXJuIDAu
NTsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6TG93OgorICAgICAgICByZXR1cm4gMTsKKyAg
ICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6TWVkaXVtOgorICAgICAgICByZXR1cm4gMjsKKyAgICBj
YXNlIFJUQ1ByaW9yaXR5VHlwZTo6SGlnaDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworR1VuaXF1ZVB0cjxHc3RTdHJ1
Y3R1cmU+IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3QgUlRDUnRwRW5jb2RpbmdQYXJh
bWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBydGNQ
YXJhbWV0ZXJzKGdzdF9zdHJ1Y3R1cmVfbmV3KCJlbmNvZGluZy1wYXJhbWV0ZXJzIiwgImFjdGl2
ZSIsIEdfVFlQRV9CT09MRUFOLCBwYXJhbWV0ZXJzLmFjdGl2ZSwKKyAgICAgICAgInJpZCIsIEdf
VFlQRV9TVFJJTkcsIHBhcmFtZXRlcnMucmlkLnV0ZjgoKS5kYXRhKCksICJiaXRyYXRlLXByaW9y
aXR5IiwgR19UWVBFX0RPVUJMRSwgdG9XZWJSVENCaXRSYXRlUHJpb3JpdHkocGFyYW1ldGVycy5w
cmlvcml0eSksIG51bGxwdHIpKTsKKworICAgIGlmIChwYXJhbWV0ZXJzLnNzcmMpCisgICAgICAg
IGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJzc3JjIiwgR19UWVBFX1VM
T05HLCBwYXJhbWV0ZXJzLnNzcmMsIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMubWF4
Qml0cmF0ZSkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwg
Im1heC1iaXRyYXRlIiwgR19UWVBFX1VMT05HLCBwYXJhbWV0ZXJzLm1heEJpdHJhdGUsIG51bGxw
dHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMubWF4RnJhbWVyYXRlKQorICAgICAgICBnc3Rfc3Ry
dWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAibWF4LWZyYW1lcmF0ZSIsIEdfVFlQRV9V
TE9ORywgcGFyYW1ldGVycy5tYXhGcmFtZXJhdGUsIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFt
ZXRlcnMuc2NhbGVSZXNvbHV0aW9uRG93bkJ5KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChy
dGNQYXJhbWV0ZXJzLmdldCgpLCAic2NhbGUtcmVzb2x1dGlvbi1kb3duLWJ5IiwgR19UWVBFX0RP
VUJMRSwgcGFyYW1ldGVycy5zY2FsZVJlc29sdXRpb25Eb3duQnksIG51bGxwdHIpOworCisgICAg
aWYgKHBhcmFtZXRlcnMubmV0d29ya1ByaW9yaXR5KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3Nl
dChydGNQYXJhbWV0ZXJzLmdldCgpLCAibmV0d29yay1wcmlvcml0eSIsIEdfVFlQRV9JTlQsICpw
YXJhbWV0ZXJzLm5ldHdvcmtQcmlvcml0eSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gcnRjUGFy
YW1ldGVyczsKK30KKworc3RhdGljIGlubGluZSBSVENQcmlvcml0eVR5cGUgZnJvbVdlYlJUQ0Jp
dFJhdGVQcmlvcml0eShkb3VibGUgcHJpb3JpdHkpCit7CisgICAgaWYgKHByaW9yaXR5IDwgMC43
KQorICAgICAgICByZXR1cm4gUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93OworICAgIGlmIChwcmlv
cml0eSA8IDEuNSkKKyAgICAgICAgcmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6TG93OworICAgIGlm
IChwcmlvcml0eSA8IDIuNSkKKyAgICAgICAgcmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6TWVkaXVt
OworICAgIHJldHVybiBSVENQcmlvcml0eVR5cGU6OkhpZ2g7Cit9CisKK3N0YXRpYyBpbmxpbmUg
UlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzIHRvUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0IEdz
dFN0cnVjdHVyZSogcnRjUGFyYW1ldGVycykKK3sKKyAgICBSVENSdHBFbmNvZGluZ1BhcmFtZXRl
cnMgcGFyYW1ldGVyczsKKworICAgIHVuc2lnbmVkIHNzcmM7CisgICAgaWYgKGdzdF9zdHJ1Y3R1
cmVfZ2V0X3VpbnQocnRjUGFyYW1ldGVycywgInNzcmMiLCAmc3NyYykpCisgICAgICAgIHBhcmFt
ZXRlcnMuc3NyYyA9IHNzcmM7CisKKyAgICBnc3Rfc3RydWN0dXJlX2dldChydGNQYXJhbWV0ZXJz
LCAiYWN0aXZlIiwgR19UWVBFX0JPT0xFQU4sICYocGFyYW1ldGVycy5hY3RpdmUpLCBudWxscHRy
KTsKKworICAgIHVpbnQ2NF90IG1heEJpdHJhdGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0
X3VpbnQ2NChydGNQYXJhbWV0ZXJzLCAibWF4LWJpdHJhdGUiLCAmbWF4Qml0cmF0ZSkpCisgICAg
ICAgIHBhcmFtZXRlcnMubWF4Qml0cmF0ZSA9IG1heEJpdHJhdGU7CisKKyAgICB1aW50NjRfdCBt
YXhGcmFtZXJhdGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChydGNQYXJhbWV0
ZXJzLCAibWF4LWZyYW1lcmF0ZSIsICZtYXhGcmFtZXJhdGUpKQorICAgICAgICBwYXJhbWV0ZXJz
Lm1heEZyYW1lcmF0ZSA9IG1heEZyYW1lcmF0ZTsKKworICAgIHBhcmFtZXRlcnMucmlkID0gZ3N0
X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHJ0Y1BhcmFtZXRlcnMsICJyaWQiKTsKKworICAgIGRvdWJs
ZSBzY2FsZVJlc29sdXRpb25Eb3duQnk7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJs
ZShydGNQYXJhbWV0ZXJzLCAic2NhbGUtcmVzb2x1dGlvbi1kb3duLWJ5IiwgJnNjYWxlUmVzb2x1
dGlvbkRvd25CeSkpCisgICAgICAgIHBhcmFtZXRlcnMuc2NhbGVSZXNvbHV0aW9uRG93bkJ5ID0g
c2NhbGVSZXNvbHV0aW9uRG93bkJ5OworCisgICAgZG91YmxlIGJpdHJhdGVQcmlvcml0eTsKKyAg
ICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHJ0Y1BhcmFtZXRlcnMsICJiaXRyYXRlLXBy
aW9yaXR5IiwgJmJpdHJhdGVQcmlvcml0eSkpCisgICAgICAgIHBhcmFtZXRlcnMucHJpb3JpdHkg
PSBmcm9tV2ViUlRDQml0UmF0ZVByaW9yaXR5KGJpdHJhdGVQcmlvcml0eSk7CisKKyAgICBpbnQg
bmV0d29ya1ByaW9yaXR5OworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQocnRjUGFyYW1l
dGVycywgIm5ldHdvcmstcHJpb3JpdHkiLCAmbmV0d29ya1ByaW9yaXR5KSkKKyAgICAgICAgcGFy
YW1ldGVycy5uZXR3b3JrUHJpb3JpdHkgPSBzdGF0aWNfY2FzdDxSVENQcmlvcml0eVR5cGU+KG5l
dHdvcmtQcmlvcml0eSk7CisKKyAgICByZXR1cm4gcGFyYW1ldGVyczsKK30KKworUlRDUnRwU2Vu
ZFBhcmFtZXRlcnMgdG9SVENSdHBTZW5kUGFyYW1ldGVycyhjb25zdCBHc3RTdHJ1Y3R1cmUqIHJ0
Y1BhcmFtZXRlcnMpCit7CisgICAgaWYgKCFydGNQYXJhbWV0ZXJzKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgUlRDUnRwU2VuZFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBhdXRvKiBl
bmNvZGluZ3MgPSBnc3Rfc3RydWN0dXJlX2dldF92YWx1ZShydGNQYXJhbWV0ZXJzLCAiZW5jb2Rp
bmdzIik7CisgICAgdW5zaWduZWQgc2l6ZSA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplKGVuY29k
aW5ncyk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAg
ICBjb25zdCBhdXRvKiB2YWx1ZSA9IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZShlbmNvZGluZ3Ms
IGkpOworICAgICAgICBwYXJhbWV0ZXJzLmVuY29kaW5ncy5hcHBlbmQodG9SVENFbmNvZGluZ1Bh
cmFtZXRlcnMoR1NUX1NUUlVDVFVSRV9DQVNUKHZhbHVlKSkpOworICAgIH0KKworICAgIC8vIEZJ
WE1FOiBIYW5kbGUgcnRjUGFyYW1ldGVycy5kZWdyYWRhdGlvbl9wcmVmZXJlbmNlLgorICAgIHJl
dHVybiBwYXJhbWV0ZXJzOworfQorCisKK3N0YXRpYyB2b2lkIGVuc3VyZURlYnVnQ2F0ZWdvcnlJ
bml0aWFsaXplZCgpCit7CisgICAgc3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAg
IHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBbXSB7CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09S
WV9JTklUKHdlYmtpdF93ZWJydGNfdXRpbHNfZGVidWcsICJ3ZWJraXR3ZWJydGN1dGlscyIsIDAs
ICJXZWJLaXQgV2ViUlRDIHV0aWxpdGllcyIpOworICAgIH0pOworfQorCitzdGQ6Om9wdGlvbmFs
PFJUQ0ljZUNhbmRpZGF0ZTo6RmllbGRzPiBwYXJzZUljZUNhbmRpZGF0ZVNEUChjb25zdCBTdHJp
bmcmIHNkcCkKK3sKKyAgICBlbnN1cmVEZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQoKTsKKyAgICBH
U1RfREVCVUcoIlBhcnNpbmcgSUNFIENhbmRpZGF0ZTogJXMiLCBzZHAudXRmOCgpLmRhdGEoKSk7
CisgICAgaWYgKCFzZHAuc3RhcnRzV2l0aCgiY2FuZGlkYXRlOiIpKQorICAgICAgICByZXR1cm4g
eyB9OworCisgICAgU3RyaW5nIGZvdW5kYXRpb247CisgICAgdW5zaWduZWQgY29tcG9uZW50SWQg
PSAwOworICAgIFN0cmluZyB0cmFuc3BvcnQ7CisgICAgdW5zaWduZWQgcHJpb3JpdHkgPSAwOwor
ICAgIFN0cmluZyBhZGRyZXNzOworICAgIHVpbnQzMl90IHBvcnQgPSAwOworICAgIFN0cmluZyB0
eXBlOworICAgIFN0cmluZyB0Y3B0eXBlOworICAgIFN0cmluZyByZWxhdGVkQWRkcmVzczsKKyAg
ICBndWludDE2IHJlbGF0ZWRQb3J0ID0gMDsKKyAgICBTdHJpbmcgdXNlcm5hbWVGcmFnbWVudDsK
KyAgICBhdXRvIHRva2VucyA9IHNkcC5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnN1YnN0cmlu
ZygxMCkuc3BsaXQoJyAnKTsKKworICAgIGZvciAoYXV0byBpdCA9IHRva2Vucy5iZWdpbigpOyBp
dCAhPSB0b2tlbnMuZW5kKCk7ICsraXQpIHsKKyAgICAgICAgYXV0byBpID0gc3RkOjpkaXN0YW5j
ZSh0b2tlbnMuYmVnaW4oKSwgaXQpOworICAgICAgICBhdXRvIHRva2VuID0gKml0OworICAgICAg
ICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2FzZSAwOgorICAgICAgICAgICAgZm91bmRhdGlvbiA9
IHRva2VuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAg
IGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVkPih0b2tlbikpCisgICAgICAg
ICAgICAgICAgY29tcG9uZW50SWQgPSAqdmFsdWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAg
ICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6
CisgICAgICAgICAgICB0cmFuc3BvcnQgPSB0b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICBjYXNlIDM6CisgICAgICAgICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlcjx1
bnNpZ25lZD4odG9rZW4pKQorICAgICAgICAgICAgICAgIHByaW9yaXR5ID0gKnZhbHVlOworICAg
ICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgY2FzZSA0OgorICAgICAgICAgICAgYWRkcmVzcyA9IHRva2VuOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgNToKKyAgICAgICAgICAgIGlmIChhdXRvIHZh
bHVlID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVkPih0b2tlbikpCisgICAgICAgICAgICAgICAgcG9y
dCA9ICp2YWx1ZTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAo
aXQgKyAxID09IHRva2Vucy5lbmQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworCisg
ICAgICAgICAgICBpdCsrOworICAgICAgICAgICAgaWYgKHRva2VuID09ICJ0eXAiKQorICAgICAg
ICAgICAgICAgIHR5cGUgPSAqaXQ7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAicmFk
ZHIiKQorICAgICAgICAgICAgICAgIHJlbGF0ZWRBZGRyZXNzID0gKml0OworICAgICAgICAgICAg
ZWxzZSBpZiAodG9rZW4gPT0gInJwb3J0IikKKyAgICAgICAgICAgICAgICByZWxhdGVkUG9ydCA9
IHBhcnNlSW50ZWdlcjx1bnNpZ25lZD4oKml0KS52YWx1ZV9vcigwKTsKKyAgICAgICAgICAgIGVs
c2UgaWYgKHRva2VuID09ICJ0Y3B0eXBlIikKKyAgICAgICAgICAgICAgICB0Y3B0eXBlID0gKml0
OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gPT0gInVmcmFnIikKKyAgICAgICAgICAgICAg
ICB1c2VybmFtZUZyYWdtZW50ID0gKml0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBSVENJY2VDYW5kaWRhdGU6OkZpZWxkcyBmaWVsZHM7CisgICAgZmllbGRzLmZvdW5kYXRp
b24gPSBmb3VuZGF0aW9uOworICAgIGZpZWxkcy5jb21wb25lbnQgPSB0b1JUQ0ljZUNvbXBvbmVu
dChjb21wb25lbnRJZCk7CisgICAgZmllbGRzLnByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgZmll
bGRzLnByb3RvY29sID0gdG9SVENJY2VQcm90b2NvbCh0cmFuc3BvcnQpOworICAgIGlmICghYWRk
cmVzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZmllbGRzLmFkZHJlc3MgPSBhZGRyZXNzOworICAg
ICAgICBmaWVsZHMucG9ydCA9IHBvcnQ7CisgICAgfQorICAgIGZpZWxkcy50eXBlID0gdG9SVENJ
Y2VDYW5kaWRhdGVUeXBlKHR5cGUpOworICAgIGZpZWxkcy50Y3BUeXBlID0gdG9SVENJY2VUY3BD
YW5kaWRhdGVUeXBlKHRjcHR5cGUpOworICAgIGlmICghcmVsYXRlZEFkZHJlc3MuaXNFbXB0eSgp
KSB7CisgICAgICAgIGZpZWxkcy5yZWxhdGVkQWRkcmVzcyA9IHJlbGF0ZWRBZGRyZXNzOworICAg
ICAgICBmaWVsZHMucmVsYXRlZFBvcnQgPSByZWxhdGVkUG9ydDsKKyAgICB9CisgICAgZmllbGRz
LnVzZXJuYW1lRnJhZ21lbnQgPSB1c2VybmFtZUZyYWdtZW50OworICAgIHJldHVybiBmaWVsZHM7
Cit9CisKK3N0YXRpYyBTdHJpbmcgeDUwOVNlcmlhbGl6ZShYNTA5KiB4NTA5KQoreworICAgIEJJ
TyogYmlvID0gQklPX25ldyhCSU9fc19tZW0oKSk7CisgICAgaWYgKCFiaW8pCisgICAgICAgIHJl
dHVybiB7IH07CisKKyAgICBhdXRvIHNjb3BlRXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0g
eworICAgICAgICBCSU9fZnJlZShiaW8pOworICAgIH0pOworCisgICAgaWYgKCFQRU1fd3JpdGVf
YmlvX1g1MDkoYmlvLCB4NTA5KSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3Rvcjxj
aGFyPiBidWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eSg0MDk2KTsKKyAgICBpbnQg
bGVuZ3RoID0gQklPX3JlYWQoYmlvLCBidWZmZXIuZGF0YSgpLCA0MDk2KTsKKyAgICBpZiAoIWxl
bmd0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLmRh
dGEoKSwgbGVuZ3RoKTsKK30KKworc3RhdGljIFN0cmluZyBwcml2YXRlS2V5U2VyaWFsaXplKEVW
UF9QS0VZKiBwcml2YXRlS2V5KQoreworICAgIEJJTyogYmlvID0gQklPX25ldyhCSU9fc19tZW0o
KSk7CisgICAgaWYgKCFiaW8pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHNjb3Bl
RXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBCSU9fZnJlZShiaW8pOwor
ICAgIH0pOworCisgICAgaWYgKCFQRU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkoYmlvLCBwcml2YXRl
S2V5LCBudWxscHRyLCBudWxscHRyLCAwLCBudWxscHRyLCBudWxscHRyKSkKKyAgICAgICAgcmV0
dXJuIHsgfTsKKworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVD
YXBhY2l0eSg0MDk2KTsKKyAgICBpbnQgbGVuZ3RoID0gQklPX3JlYWQoYmlvLCBidWZmZXIuZGF0
YSgpLCA0MDk2KTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IHJldHVybiBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKK30KKworc3RkOjpvcHRpb25h
bDxSZWY8UlRDQ2VydGlmaWNhdGU+PiBnZW5lcmF0ZUNlcnRpZmljYXRlKFJlZjxTZWN1cml0eU9y
aWdpbj4mJiBvcmlnaW4sIGNvbnN0IFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJ
bmZvcm1hdGlvbiYgaW5mbykKK3sKKyAgICBlbnN1cmVEZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQo
KTsKKyAgICBFVlBfUEtFWSogcHJpdmF0ZUtleSA9IEVWUF9QS0VZX25ldygpOworICAgIGlmICgh
cHJpdmF0ZUtleSkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBwcml2
YXRlIGtleSIpOworICAgICAgICByZXR1cm4geyB9OworICAgIH0KKworICAgIGF1dG8gc2NvcGVF
eGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIEVWUF9QS0VZX2ZyZWUocHJp
dmF0ZUtleSk7CisgICAgfSk7CisKKyAgICBzd2l0Y2ggKGluZm8udHlwZSkgeworICAgIGNhc2Ug
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uOjpUeXBlOjpFQ0RT
QVAyNTY6IHsKKyAgICAgICAgRUNfS0VZKiBlY0tleSA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFt
ZShOSURfWDlfNjJfcHJpbWUyNTZ2MSk7CisgICAgICAgIC8vIEVuc3VyZSBjdXJ2ZSBuYW1lIGlz
IGluY2x1ZGVkIHdoZW4gRUMga2V5IGlzIHNlcmlhbGl6ZWQuCisgICAgICAgIC8vIFdpdGhvdXQg
dGhpcyBjYWxsLCBPcGVuU1NMIHZlcnNpb25zIGJlZm9yZSAxLjEuMCB3aWxsIGNyZWF0ZQorICAg
ICAgICAvLyBjZXJ0aWZpY2F0ZXMgdGhhdCBkb24ndCB3b3JrIGZvciBUTFMuCisgICAgICAgIC8v
IFRoaXMgaXMgYSBuby1vcCBmb3IgQm9yaW5nU1NMIGFuZCBPcGVuU1NMIDEuMS4wKworICAgICAg
ICBFQ19LRVlfc2V0X2FzbjFfZmxhZyhlY0tleSwgT1BFTlNTTF9FQ19OQU1FRF9DVVJWRSk7Cisg
ICAgICAgIGlmICghcHJpdmF0ZUtleSB8fCAhZWNLZXkgfHwgIUVDX0tFWV9nZW5lcmF0ZV9rZXko
ZWNLZXkpIHx8ICFFVlBfUEtFWV9hc3NpZ25fRUNfS0VZKHByaXZhdGVLZXksIGVjS2V5KSkgewor
ICAgICAgICAgICAgRUNfS0VZX2ZyZWUoZWNLZXkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb246OlR5cGU6OlJTQVNTQVBLQ1MxdjE1OiB7
CisgICAgICAgIFJTQSogcnNhID0gUlNBX25ldygpOworICAgICAgICBpZiAoIXJzYSkKKyAgICAg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgQklHTlVNKiBleHBvbmVudCA9IEJOX25ldygp
OworICAgICAgICBpbnQgcHVibGljRXhwb25lbnQgPSBpbmZvLnJzYVBhcmFtZXRlcnMgPyBpbmZv
LnJzYVBhcmFtZXRlcnMtPnB1YmxpY0V4cG9uZW50IDogNjU1Mzc7CisgICAgICAgIGF1dG8gbW9k
dWx1c0xlbmd0aCA9IGluZm8ucnNhUGFyYW1ldGVycyA/IGluZm8ucnNhUGFyYW1ldGVycy0+bW9k
dWx1c0xlbmd0aCA6IDIwNDg7CisgICAgICAgIGlmICghQk5fc2V0X3dvcmQoZXhwb25lbnQsIHB1
YmxpY0V4cG9uZW50KSB8fCAhUlNBX2dlbmVyYXRlX2tleV9leChyc2EsIG1vZHVsdXNMZW5ndGgs
IGV4cG9uZW50LCBudWxscHRyKQorICAgICAgICAgICAgfHwgIUVWUF9QS0VZX2Fzc2lnbl9SU0Eo
cHJpdmF0ZUtleSwgcnNhKSkgeworICAgICAgICAgICAgUlNBX2ZyZWUocnNhKTsKKyAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgIH0KKyAgICAgICAgQk5fZnJlZShleHBvbmVudCk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9CisKKyAgICBYNTA5KiB4NTA5ID0gWDUwOV9uZXco
KTsKKyAgICBpZiAoIXg1MDkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBjcmVh
dGUgY2VydGlmaWNhdGUiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRv
IGNlcnRTY29wZUV4aXQgPSBXVEY6Om1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgWDUwOV9m
cmVlKHg1MDkpOworICAgIH0pOworCisgICAgWDUwOV9zZXRfdmVyc2lvbih4NTA5LCAyKTsKKwor
ICAgIC8vIFNldCBhIHJhbmRvbSA2NCBiaXQgaW50ZWdlciBhcyBzZXJpYWwgbnVtYmVyLgorICAg
IEJJR05VTSogc2VyaWFsTnVtYmVyID0gQk5fbmV3KCk7CisgICAgQk5fcHNldWRvX3JhbmQoc2Vy
aWFsTnVtYmVyLCA2NCwgMCwgMCk7CisgICAgQVNOMV9JTlRFR0VSKiBhc24xU2VyaWFsTnVtYmVy
ID0gWDUwOV9nZXRfc2VyaWFsTnVtYmVyKHg1MDkpOworICAgIEJOX3RvX0FTTjFfSU5URUdFUihz
ZXJpYWxOdW1iZXIsIGFzbjFTZXJpYWxOdW1iZXIpOworICAgIEJOX2ZyZWUoc2VyaWFsTnVtYmVy
KTsKKworICAgIC8vIFNldCBhIHJhbmRvbSA4IGJ5dGUgYmFzZTY0IHN0cmluZyBhcyBpc3N1ZXIv
c3ViamVjdC4KKyAgICBYNTA5X05BTUUqIG5hbWUgPSBYNTA5X05BTUVfbmV3KCk7CisgICAgVmVj
dG9yPHVpbnQ4X3Q+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSg4
KTsKKyAgICBXVEY6OmNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKGJ1ZmZlci5kYXRhKCks
IDgpOworICAgIGF1dG8gY29tbW9uTmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1ZmZlcik7
CisgICAgWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9OSUQobmFtZSwgTklEX2NvbW1vbk5hbWUsIE1C
U1RSSU5HX0FTQywgKGNvbnN0IGd1Y2hhciopY29tbW9uTmFtZS5hc2NpaSgpLmRhdGEoKSwgLTEs
IC0xLCAwKTsKKyAgICBYNTA5X3NldF9zdWJqZWN0X25hbWUoeDUwOSwgbmFtZSk7CisgICAgWDUw
OV9zZXRfaXNzdWVyX25hbWUoeDUwOSwgbmFtZSk7CisgICAgWDUwOV9OQU1FX2ZyZWUobmFtZSk7
CisKKyAgICAvLyBGYWxsYmFjayB0byAzMCBkYXlzLCBtYXggb3V0IGF0IG9uZSB5ZWFyLgorICAg
IHVpbnQ2NF90IGV4cGlyZXMgPSBpbmZvLmV4cGlyZXMudmFsdWVfb3IoMjU5MjAwMCk7CisgICAg
ZXhwaXJlcyA9IHN0ZDo6bWluPHVpbnQ2NF90PihleHBpcmVzLCAzMTUzNjAwMDAwMCk7CisgICAg
WDUwOV9nbXRpbWVfYWRqKFg1MDlfZ2V0bV9ub3RCZWZvcmUoeDUwOSksIDApOworICAgIFg1MDlf
Z210aW1lX2FkaihYNTA5X2dldG1fbm90QWZ0ZXIoeDUwOSksIGV4cGlyZXMpOworICAgIFg1MDlf
c2V0X3B1YmtleSh4NTA5LCBwcml2YXRlS2V5KTsKKworICAgIGlmICghWDUwOV9zaWduKHg1MDks
IHByaXZhdGVLZXksIEVWUF9zaGEyNTYoKSkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxl
ZCB0byBzaWduIGNlcnRpZmljYXRlIik7CisgICAgICAgIHJldHVybiB7IH07CisgICAgfQorCisg
ICAgYXV0byBwZW0gPSB4NTA5U2VyaWFsaXplKHg1MDkpOworICAgIEdTVF9ERUJVRygiR2VuZXJh
dGVkIGNlcnRpZmljYXRlIFBFTTogJXMiLCBwZW0uYXNjaWkoKS5kYXRhKCkpOworICAgIGF1dG8g
c2VyaWFsaXplZFByaXZhdGVLZXkgPSBwcml2YXRlS2V5U2VyaWFsaXplKHByaXZhdGVLZXkpOwor
ICAgIFZlY3RvcjxSVENDZXJ0aWZpY2F0ZTo6RHRsc0ZpbmdlcnByaW50PiBmaW5nZXJwcmludHM7
CisgICAgLy8gRklYTUU6IEZpbGwgZmluZ2VycHJpbnRzLgorICAgIGF1dG8gZXhwaXJhdGlvblRp
bWUgPSBXVEY6OldhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpICsgV1RGOjpTZWNv
bmRzKGV4cGlyZXMpOworICAgIHJldHVybiBSVENDZXJ0aWZpY2F0ZTo6Y3JlYXRlKFdURk1vdmUo
b3JpZ2luKSwgZXhwaXJhdGlvblRpbWUubWlsbGlzZWNvbmRzKCksIFdURk1vdmUoZmluZ2VycHJp
bnRzKSwgV1RGTW92ZShwZW0pLCBXVEZNb3ZlKHNlcmlhbGl6ZWRQcml2YXRlS2V5KSk7Cit9CisK
K2Jvb2wgc2RwTWVkaWFIYXNBdHRyaWJ1dGVLZXkoY29uc3QgR3N0U0RQTWVkaWEqIG1lZGlhLCBj
b25zdCBjaGFyKiBrZXkpCit7CisgICAgdW5zaWduZWQgbGVuID0gZ3N0X3NkcF9tZWRpYV9hdHRy
aWJ1dGVzX2xlbihtZWRpYSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxlbjsgaSsr
KSB7CisgICAgICAgIGNvbnN0IGF1dG8qIGF0dHJpYnV0ZSA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0
dHJpYnV0ZShtZWRpYSwgaSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKGF0dHJpYnV0ZS0+a2V5
LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0dXJuIGZh
bHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2Vi
UlRDVXRpbHMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lcldlYlJUQ1V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI4OGZhNGRiMDQ3YWZmOGFkYWI4
ZDkyOTljNTdiOWVjYzVkYTE4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmgKQEAgLTAs
MCArMSwyNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5j
bHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25m
aWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVk
ZSAiUlRDQnVuZGxlUG9saWN5LmgiCisjaW5jbHVkZSAiUlRDQ2VydGlmaWNhdGUuaCIKKyNpbmNs
dWRlICJSVENEdGxzVHJhbnNwb3J0LmgiCisjaW5jbHVkZSAiUlRDRXJyb3IuaCIKKyNpbmNsdWRl
ICJSVENJY2VDb25uZWN0aW9uU3RhdGUuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRQb2xp
Y3kuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRTdGF0ZS5oIgorI2luY2x1ZGUgIlJUQ1J0
cFNlbmRQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24u
aCIKKyNpbmNsdWRlICJSVENTZHBUeXBlLmgiCisjaW5jbHVkZSAiUlRDU2lnbmFsaW5nU3RhdGUu
aCIKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJydGMv
d2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitpbmxpbmUgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gdG9SVENSdHBUcmFuc2Nl
aXZlckRpcmVjdGlvbihHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24p
Cit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfUlRQX1RS
QU5TQ0VJVkVSX0RJUkVDVElPTl9OT05FOgorICAgICAgICAvLyDCr1xfKOODhClfL8KvCisgICAg
ICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6SW5hY3RpdmU7CisgICAgY2Fz
ZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fSU5BQ1RJVkU6CisgICAgICAg
IHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6SW5hY3RpdmU7CisgICAgY2FzZSBH
U1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fU0VORE9OTFk6CisgICAgICAgIHJl
dHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6U2VuZG9ubHk7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fUkVDVk9OTFk6CisgICAgICAgIHJldHVy
biBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6UmVjdm9ubHk7CisgICAgY2FzZSBHU1RfV0VC
UlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fU0VORFJFQ1Y6CisgICAgICAgIHJldHVybiBS
VENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6U2VuZHJlY3Y7CisgICAgfQorICAgIFJFTEVBU0Vf
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0
aW9uOjpJbmFjdGl2ZTsKK30KKworaW5saW5lIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyRGlyZWN0
aW9uIGZyb21SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihSVENSdHBUcmFuc2NlaXZlckRpcmVj
dGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIFJU
Q1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZToKKyAgICAgICAgcmV0dXJuIEdTVF9X
RUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9JTkFDVElWRTsKKyAgICBjYXNlIFJUQ1J0
cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kb25seToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJS
VENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5ET05MWTsKKyAgICBjYXNlIFJUQ1J0cFRy
YW5zY2VpdmVyRGlyZWN0aW9uOjpSZWN2b25seToKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENf
UlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9SRUNWT05MWTsKKyAgICBjYXNlIFJUQ1J0cFRyYW5z
Y2VpdmVyRGlyZWN0aW9uOjpTZW5kcmVjdjoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfUlRQ
X1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5EUkVDVjsKKyAgICB9CisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlNDRUlWRVJf
RElSRUNUSU9OX05PTkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgR3N0V2ViUlRDU0RQVHlwZSB0b1Nl
c3Npb25EZXNjcmlwdGlvblR5cGUoUlRDU2RwVHlwZSBzZHBUeXBlKQoreworICAgIHN3aXRjaCAo
c2RwVHlwZSkgeworICAgIGNhc2UgUlRDU2RwVHlwZTo6T2ZmZXI6CisgICAgICAgIHJldHVybiBH
U1RfV0VCUlRDX1NEUF9UWVBFX09GRkVSOworICAgIGNhc2UgUlRDU2RwVHlwZTo6UHJhbnN3ZXI6
CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX1BSQU5TV0VSOworICAgIGNhc2Ug
UlRDU2RwVHlwZTo6QW5zd2VyOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19TRFBfVFlQRV9B
TlNXRVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpSb2xsYmFjazoKKyAgICAgICAgcmV0dXJuIEdT
VF9XRUJSVENfU0RQX1RZUEVfUk9MTEJBQ0s7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJUQ19TRFBfVFlQRV9PRkZFUjsKK30K
Kworc3RhdGljIGlubGluZSBSVENTZHBUeXBlIGZyb21TZXNzaW9uRGVzY3JpcHRpb25UeXBlKGNv
bnN0IEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7CisgICAgYXV0
byB0eXBlID0gZGVzY3JpcHRpb24udHlwZTsKKyAgICBpZiAodHlwZSA9PSBHU1RfV0VCUlRDX1NE
UF9UWVBFX09GRkVSKQorICAgICAgICByZXR1cm4gUlRDU2RwVHlwZTo6T2ZmZXI7CisgICAgaWYg
KHR5cGUgPT0gR1NUX1dFQlJUQ19TRFBfVFlQRV9BTlNXRVIpCisgICAgICAgIHJldHVybiBSVENT
ZHBUeXBlOjpBbnN3ZXI7CisgICAgQVNTRVJUKHR5cGUgPT0gR1NUX1dFQlJUQ19TRFBfVFlQRV9Q
UkFOU1dFUik7CisgICAgcmV0dXJuIFJUQ1NkcFR5cGU6OlByYW5zd2VyOworfQorCitzdGF0aWMg
aW5saW5lIFJUQ1NpZ25hbGluZ1N0YXRlIHRvU2lnbmFsaW5nU3RhdGUoR3N0V2ViUlRDU2lnbmFs
aW5nU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dF
QlJUQ19TSUdOQUxJTkdfU1RBVEVfU1RBQkxFOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5n
U3RhdGU6OlN0YWJsZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NUQVRFX0hBVkVf
TE9DQUxfT0ZGRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2Fs
T2ZmZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX0xPQ0FMX1BS
QU5TV0VSOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5nU3RhdGU6OkhhdmVMb2NhbFByYW5z
d2VyOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9SRU1PVEVfT0ZG
RVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90ZU9mZmVyOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9SRU1PVEVfUFJBTlNXRVI6
CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90ZVByYW5zd2VyOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1
cm4gUlRDU2lnbmFsaW5nU3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6U3RhYmxlOwor
fQorCitzdGF0aWMgaW5saW5lIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB0b1JUQ0ljZUNvbm5lY3Rp
b25TdGF0ZShHc3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNo
IChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ORVc6
CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsKKyAgICBjYXNlIEdT
VF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkc6CisgICAgICAgIHJldHVybiBS
VENJY2VDb25uZWN0aW9uU3RhdGU6OkNoZWNraW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0Vf
Q09OTkVDVElPTl9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0
aW9uU3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05f
U1RBVEVfQ09NUExFVEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpD
b21wbGV0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0ZBSUxF
RDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6RmFpbGVkOworICAgIGNh
c2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNURUQ6CisgICAgICAg
IHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkRpc2Nvbm5lY3RlZDsKKyAgICBjYXNlIEdT
VF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRD
SWNlQ29ubmVjdGlvblN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpOZXc7Cit9
CisKK3N0YXRpYyBpbmxpbmUgUlRDRHRsc1RyYW5zcG9ydFN0YXRlIHRvUlRDRHRsc1RyYW5zcG9y
dFN0YXRlKEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnRTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2gg
KHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX05FVzoK
KyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6TmV3OworICAgIGNhc2UgR1NU
X1dFQlJUQ19EVExTX1RSQU5TUE9SVF9TVEFURV9DT05ORUNUSU5HOgorICAgICAgICByZXR1cm4g
UlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpDb25uZWN0aW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19E
VExTX1RSQU5TUE9SVF9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJh
bnNwb3J0U3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BP
UlRfU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpD
bG9zZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0ZBSUxFRDoK
KyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6RmFpbGVkOworICAgIH0KKwor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRD
SWNlVHJhbnNwb3J0U3RhdGUgdG9SVENJY2VUcmFuc3BvcnRTdGF0ZShHc3RXZWJSVENJQ0VDb25u
ZWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgLy8gRklYTUU6IE5vIEdzdFdlYlJUQ0lDRVRyYW5z
cG9ydFN0YXRlID8KKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lD
RV9DT05ORUNUSU9OX1NUQVRFX05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0
YXRlOjpOZXc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NIRUNL
SU5HOgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5nOworICAg
IGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT05ORUNURUQ6CisgICAgICAg
IHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dF
QlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT01QTEVURUQ6CisgICAgICAgIHJldHVybiBSVENJ
Y2VUcmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09O
TkVDVElPTl9TVEFURV9GQUlMRUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0
ZTo6RmFpbGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ESVND
T05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RGlzY29ubmVj
dGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DTE9TRUQ6Cisg
ICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOworICAgIH0KKworICAg
IFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9y
dFN0YXRlOjpOZXc7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlR2F0aGVyaW5nU3RhdGUgdG9S
VENJY2VHYXRoZXJpbmdTdGF0ZShHc3RXZWJSVENJQ0VHYXRoZXJpbmdTdGF0ZSBzdGF0ZSkKK3sK
KyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdf
U1RBVEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5ldzsKKyAg
ICBjYXNlIEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9HQVRIRVJJTkc6CisgICAgICAg
IHJldHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5nOworICAgIGNhc2UgR1NUX1dF
QlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX0NPTVBMRVRFOgorICAgICAgICByZXR1cm4gUlRDSWNl
R2F0aGVyaW5nU3RhdGU6OkNvbXBsZXRlOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05P
VF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR3N0V2ViUlRDQnVuZGxlUG9saWN5IGJ1
bmRsZVBvbGljeUZyb21Db25maWd1cmF0aW9uKGNvbnN0IE1lZGlhRW5kcG9pbnRDb25maWd1cmF0
aW9uJiBjb25maWd1cmF0aW9uKQoreworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbi5idW5kbGVQ
b2xpY3kpIHsKKyAgICBjYXNlIFJUQ0J1bmRsZVBvbGljeTo6QmFsYW5jZWQ6CisgICAgICAgIHJl
dHVybiBHU1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfQkFMQU5DRUQ7CisgICAgY2FzZSBSVENCdW5k
bGVQb2xpY3k6Ok1heENvbXBhdDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BP
TElDWV9NQVhfQ09NUEFUOworICAgIGNhc2UgUlRDQnVuZGxlUG9saWN5OjpNYXhCdW5kbGU6Cisg
ICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfTUFYX0JVTkRMRTsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBHU1RfV0VC
UlRDX0JVTkRMRV9QT0xJQ1lfTk9ORTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENJQ0VU
cmFuc3BvcnRQb2xpY3kgaWNlVHJhbnNwb3J0UG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oY29uc3Qg
TWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgc3dpdGNo
IChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkgeworICAgIGNhc2UgUlRDSWNlVHJh
bnNwb3J0UG9saWN5OjpBbGw6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0lDRV9UUkFOU1BP
UlRfUE9MSUNZX0FMTDsKKyAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFBvbGljeTo6UmVsYXk6Cisg
ICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0lDRV9UUkFOU1BPUlRfUE9MSUNZX1JFTEFZOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9X
RUJSVENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lfQUxMOworfQorCitzdGF0aWMgaW5saW5lIHN0ZDo6
b3B0aW9uYWw8UlRDRXJyb3JEZXRhaWxUeXBlPiB0b1JUQ0Vycm9yRGV0YWlsVHlwZShHc3RXZWJS
VENFcnJvciBjb2RlKQoreworICAgIHN3aXRjaCAoY29kZSkgeworICAgIGNhc2UgR1NUX1dFQlJU
Q19FUlJPUl9EQVRBX0NIQU5ORUxfRkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0
YWlsVHlwZTo6RGF0YUNoYW5uZWxGYWlsdXJlOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9E
VExTX0ZBSUxVUkU6CisgICAgICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OkR0bHNGYWls
dXJlOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9GSU5HRVJQUklOVF9GQUlMVVJFOgorICAg
ICAgICByZXR1cm4gUlRDRXJyb3JEZXRhaWxUeXBlOjpGaW5nZXJwcmludEZhaWx1cmU7CisgICAg
Y2FzZSBHU1RfV0VCUlRDX0VSUk9SX1NDVFBfRkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vy
cm9yRGV0YWlsVHlwZTo6U2N0cEZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX1NE
UF9TWU5UQVhfRVJST1I6CisgICAgICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OlNkcFN5
bnRheEVycm9yOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9IQVJEV0FSRV9FTkNPREVSX05P
VF9BVkFJTEFCTEU6CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0VOQ09ERVJfRVJST1I6Cisg
ICAgICAgIC8vIEZJWE1FCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9
OworfQorCitSZWZQdHI8UlRDRXJyb3I+IHRvUlRDRXJyb3IoR0Vycm9yKik7CisKK0dVbmlxdWVQ
dHI8R3N0U3RydWN0dXJlPiBmcm9tUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0IFJUQ1J0cEVu
Y29kaW5nUGFyYW1ldGVycyYpOworUlRDUnRwU2VuZFBhcmFtZXRlcnMgdG9SVENSdHBTZW5kUGFy
YW1ldGVycyhjb25zdCBHc3RTdHJ1Y3R1cmUqKTsKKworc3RkOjpvcHRpb25hbDxSZWY8UlRDQ2Vy
dGlmaWNhdGU+PiBnZW5lcmF0ZUNlcnRpZmljYXRlKFJlZjxTZWN1cml0eU9yaWdpbj4mJiwgY29u
c3QgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uJik7CisKK2Jv
b2wgc2RwTWVkaWFIYXNBdHRyaWJ1dGVLZXkoY29uc3QgR3N0U0RQTWVkaWEqLCBjb25zdCBjaGFy
KiBrZXkpOworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L0dTdHJlYW1lci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFr
ZQppbmRleCAyNDEzMDYxZDhmMzUyYzc4YTM2MzNmNzkwMTdiM2ExZTc0ODdlMGIzLi5jODVjZTZk
MzdjNGNmZTIzZWRlYjg2MmY0MWU2MTE3MmJkNmY3N2YwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0xLDUgKzEsNiBAQAogaWYgKEVOQUJMRV9WSURFTyBPUiBF
TkFCTEVfV0VCX0FVRElPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9JTkNMVURF
X0RJUkVDVE9SSUVTCisgICAgICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lciIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lciIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9tc2UiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvZW1lIgpAQCAtNyw3ICs4LDIzIEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dF
Ql9BVURJTykKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMKKyAgICAg
ICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKKyAgICAgICAg
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBSZWNlaXZlckJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHAK
KyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVy
VHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcAorICAg
ICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyU3RhdHNDb2xsZWN0b3IuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcAorCiAgICAgICAgIE1vZHVsZXMvd2ViYXVkaW8v
TWVkaWFTdHJlYW1BdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKwogICAgICAgICBwbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCiAgICAgICAg
IHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtHU3RyZWFtZXIuY3Bw
CiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dTdHJlYW1l
ci5jcHAKQEAgLTY0LDYgKzgxLDcgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FV
RElPKQogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVk
aW9DYXB0dXJlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAKICAgICAg
ICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRpc3BsYXlDYXB0dXJl
RGV2aWNlTWFuYWdlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcApAQCAtNzEsNyAr
ODksMTMgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgICAgICBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcAog
ICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1lQXVkaW9T
b3VyY2VHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
ci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5j
b21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCiAgICAgICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNlQ2VudGVy
R1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
LmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcAogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdl
YkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwpAQCAtMTYxLDcgKzE4NSw3IEBAIGlmIChF
TkFCTEVfVklERU8pCiAgICAgICAgICkKICAgICBlbmRpZiAoKQogCi0gICAgaWYgKEVOQUJMRV9N
RURJQV9TVFJFQU0gT1IgRU5BQkxFX1dFQl9SVEMpCisgICAgaWYgKFVTRV9MSUJXRUJSVEMpCiAg
ICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKICAg
ICAgICAgICAgICR7R1NUUkVBTUVSX0NPREVDUEFSU0VSU19JTkNMVURFX0RJUlN9CiAgICAgICAg
ICkKQEAgLTE3MCw2ICsxOTQsMjEgQEAgaWYgKEVOQUJMRV9WSURFTykKICAgICAgICAgICAgICAg
ICAke0dTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfTElCUkFSSUVTfQogICAgICAgICAgICAgKQogICAg
ICAgICBlbmRpZiAoKQorICAgIGVsc2VpZiAoVVNFX0dTVFJFQU1FUl9XRUJSVEMpCisgICAgICAg
IGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAgICAgICAg
ICAgICR7R1NUUkVBTUVSX1JUUF9JTkNMVURFX0RJUlN9CisgICAgICAgICAgICAke0dTVFJFQU1F
Ul9TRFBfSU5DTFVERV9ESVJTfQorICAgICAgICAgICAgJHtHU1RSRUFNRVJfV0VCUlRDX0lOQ0xV
REVfRElSU30KKyAgICAgICAgKQorICAgICAgICBpZiAoTk9UIFVTRV9HU1RSRUFNRVJfRlVMTCkK
KyAgICAgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCisgICAgICAgICAgICAg
ICAgJHtHU1RSRUFNRVJfUlRQX0xJQlJBUklFU30KKyAgICAgICAgICAgICAgICAke0dTVFJFQU1F
Ul9TRFBfTElCUkFSSUVTfQorICAgICAgICAgICAgICAgICR7R1NUUkVBTUVSX1dFQlJUQ19MSUJS
QVJJRVN9CisgICAgICAgICAgICApCisgICAgICAgIGVuZGlmICgpCisKKyAgICAgICAgbGlzdChB
UFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgT3BlblNTTDo6Q3J5cHRvKQogICAgIGVuZGlmICgpCiBl
bmRpZiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3Ry
ZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHAK
aW5kZXggYjRkNWY2NzAzZTkyOWVkZjE3ZjEwOWVmNjQ4MTMwYWNlMDM4Y2FjNC4uYTFhY2U5NzYx
ZGEyY2UyYWFkNDY0MjFiOWJlNmRmOGQzYTllNTQ5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb1Nv
dXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcApAQCAtMTAwLDEwICsxMDAsNTggQEAgQXVkaW9Tb3Vy
Y2VQcm92aWRlckdTdHJlYW1lcjo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcihNZWRpYVN0
cmVhbVRyYWNrUHJpdmEKIAogICAgIG1fYXVkaW9TaW5rQmluID0gZ3N0X3BhcnNlX2Jpbl9mcm9t
X2Rlc2NyaXB0aW9uKCJ0ZWUgbmFtZT1hdWRpb1RlZSIsIHRydWUsIG51bGxwdHIpOwogCi0gICAg
Z3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIHNyYywgbV9h
dWRpb1NpbmtCaW4uZ2V0KCksIG51bGxwdHIpOwotICAgIGdzdF9lbGVtZW50X2xpbmsoc3JjLCBt
X2F1ZGlvU2lua0Jpbi5nZXQoKSk7CisgICAgYXV0byogZGVjb2RlYmluID0gbWFrZUdTdHJlYW1l
ckVsZW1lbnQoImRlY29kZWJpbjMiLCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQoZGVjb2RlYmluLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSygrW10oQXVkaW9Tb3VyY2VQ
cm92aWRlckdTdHJlYW1lciogcHJvdmlkZXIsIEdzdFBhZCogcGFkKSB7CisgICAgICAgIGF1dG8g
cGFkQ2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX3F1ZXJ5X2NhcHMocGFkLCBudWxscHRyKSk7Cisg
ICAgICAgIGJvb2wgaXNBdWRpbyA9IGRvQ2Fwc0hhdmVUeXBlKHBhZENhcHMuZ2V0KCksICJhdWRp
byIpOworICAgICAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE4LCAwKSkKKyAgICAg
ICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQXVkaW8pOworICAgICAgICBlbHNlIGlmICghaXNBdWRp
bykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJvdmlkZXItPm1fYXVkaW9TaW5rQmluLmdl
dCgpLCAic2luayIpKTsKKyAgICAgICAgZ3N0X3BhZF9saW5rKHBhZCwgc2lua1BhZC5nZXQoKSk7
CisgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocHJvdmlkZXItPm1f
YXVkaW9TaW5rQmluLmdldCgpKTsKKyAgICB9KSwgdGhpcyk7CisKKyAgICBnc3RfYmluX2FkZF9t
YW55KEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgc3JjLCBkZWNvZGViaW4sIG1fYXVk
aW9TaW5rQmluLmdldCgpLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9saW5rKHNyYywgZGVj
b2RlYmluKTsKKworICAgIGF1dG8gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9nZXRfYnVz
KEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOworICAgIEFTU0VSVChidXMpOworCisg
ICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgW10oR3N0QnVzKiwgR3N0TWVz
c2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IEdzdEJ1c1N5bmNSZXBseSB7Cisg
ICAgICAgIGF1dG8qIGRlY29kZWJpbiA9IEdTVF9FTEVNRU5UX0NBU1QodXNlckRhdGEpOworICAg
ICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSAhPSBHU1RfTUVTU0FHRV9TVFJFQU1f
Q09MTEVDVElPTiB8fCBHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkgIT0gR1NUX09CSkVDVF9DQVNU
KGRlY29kZWJpbikpIHsKKyAgICAgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOwor
ICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAgICAgICAgfQorCisgICAgICAgIEdS
ZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKKyAgICAgICAgZ3N0X21lc3Nh
Z2VfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb24obWVzc2FnZSwgJmNvbGxlY3Rpb24ub3V0UHRyKCkp
OworICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAgIGdzdF9tZXNzYWdlX3Vu
cmVmKG1lc3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAgICAgICAg
fQorCisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3Np
emUoY29sbGVjdGlvbi5nZXQoKSk7CisgICAgICAgIEdMaXN0KiBzdHJlYW1zID0gbnVsbHB0cjsK
KyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICAg
ICAgYXV0byogc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0oY29sbGVj
dGlvbi5nZXQoKSwgaSk7CisgICAgICAgICAgICBhdXRvIHN0cmVhbVR5cGUgPSBnc3Rfc3RyZWFt
X2dldF9zdHJlYW1fdHlwZShzdHJlYW0pOworICAgICAgICAgICAgaWYgKHN0cmVhbVR5cGUgPT0g
R1NUX1NUUkVBTV9UWVBFX0FVRElPKSB7CisgICAgICAgICAgICAgICAgc3RyZWFtcyA9IGdfbGlz
dF9hcHBlbmQoc3RyZWFtcywgY29uc3RfY2FzdDxjaGFyKj4oZ3N0X3N0cmVhbV9nZXRfc3RyZWFt
X2lkKHN0cmVhbSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgfQorICAgICAgICBpZiAoc3RyZWFtcykgeworICAgICAgICAgICAgZ3N0X2VsZW1lbnRf
c2VuZF9ldmVudChkZWNvZGViaW4sIGdzdF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXMoc3RyZWFt
cykpOworICAgICAgICAgICAgZ19saXN0X2ZyZWUoc3RyZWFtcyk7CisgICAgICAgIH0KIAotICAg
IGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5nZXQoKSk7CisgICAg
ICAgIGdzdF9tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgICAgICByZXR1cm4gR1NUX0JVU19E
Uk9QOworICAgIH0sIGdzdF9vYmplY3RfcmVmKGRlY29kZWJpbiksIGdzdF9vYmplY3RfdW5yZWYp
OwogfQogI2VuZGlmCiAKQEAgLTEyMCwxMCArMTY4LDggQEAgQXVkaW9Tb3VyY2VQcm92aWRlckdT
dHJlYW1lcjo6fkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIoKQogCiAgICAgc2V0Q2xpZW50
KG51bGxwdHIpOwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgaWYgKG1fcGlwZWxpbmUp
IHsKLSAgICAgICAgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5l
LmdldCgpKTsKKyAgICBpZiAobV9waXBlbGluZSkKICAgICAgICAgZ3N0X2VsZW1lbnRfc2V0X3N0
YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICB9CiAjZW5kaWYKIH0K
IApAQCAtMzQ1LDcgKzM5MSw2IEBAIHZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6
aGFuZGxlTmV3RGVpbnRlcmxlYXZlUGFkKEdzdFBhZCogcGFkKQogCiAgICAgR1F1YXJrIHF1YXJr
ID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoInBlZXIiKTsKICAgICBnX29iamVjdF9zZXRf
cWRhdGEoR19PQkpFQ1QocGFkKSwgcXVhcmssIHNpbmtQYWQuZ2V0KCkpOwotCiAgICAgbV9kZWlu
dGVybGVhdmVTb3VyY2VQYWRzKys7CiAgICAgR1F1YXJrIGNoYW5uZWxJZFF1YXJrID0gZ19xdWFy
a19mcm9tX3N0YXRpY19zdHJpbmcoImNoYW5uZWwtaWQiKTsKICAgICBnX29iamVjdF9zZXRfcWRh
dGEoR19PQkpFQ1Qoc2luayksIGNoYW5uZWxJZFF1YXJrLCBHSU5UX1RPX1BPSU5URVIobV9kZWlu
dGVybGVhdmVTb3VyY2VQYWRzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24uaAppbmRleCA2ZjI4ODcyYWZiMTE3NmU1MTNkMmJkZjU1YTYyMjFkNGY2ZmIw
YWU3Li5kZDMxM2IzMTQyNDA2Y2FmNTc5NGVhYzdjYzJhZjhkNjRlNTQ1YWEyIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9T
dHJlYW1EZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dz
dHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKQEAgLTMyLDE5ICszMiwx
NiBAQCBjbGFzcyBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGZpbmFsOiBwdWJsaWMg
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7CiBwdWJsaWM6CiAgICAgR1N0cmVhbWVyQXVkaW9TdHJl
YW1EZXNjcmlwdGlvbihHc3RBdWRpb0luZm8mJiBpbmZvKQogICAgICAgICA6IG1faW5mbyhXVEZN
b3ZlKGluZm8pKQotICAgICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9f
Y2FwcygmbV9pbmZvKSkpCiAgICAgewogICAgIH0KIAogICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24oY29uc3QgR3N0QXVkaW9JbmZvJiBpbmZvKQogICAgICAgICA6IG1faW5mbyhp
bmZvKQotICAgICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2Fwcygm
bV9pbmZvKSkpCiAgICAgewogICAgIH0KIAogICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24oR3N0QXVkaW9JbmZvKiBpbmZvKQogICAgICAgICA6IG1faW5mbygqaW5mbykKLSAgICAg
ICAgLCBtX2NhcHMoYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5mbykpKQog
ICAgIHsKICAgICB9CiAKQEAgLTk5LDcgKzk2LDEyIEBAIHB1YmxpYzoKICAgICBib29sIG9wZXJh
dG9yPT0oY29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIpIHsgcmV0
dXJuIGdzdF9hdWRpb19pbmZvX2lzX2VxdWFsKCZtX2luZm8sICZvdGhlci5tX2luZm8pOyB9CiAg
ICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24m
IG90aGVyKSB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsgfQogCi0gICAgY29uc3QgR1Jl
ZlB0cjxHc3RDYXBzPiYgY2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwczsgfQorICAgIGNvbnN0
IEdSZWZQdHI8R3N0Q2Fwcz4mIGNhcHMoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2NhcHMpCisg
ICAgICAgICAgICBtX2NhcHMgPSBhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcygmbV9p
bmZvKSk7CisgICAgICAgIHJldHVybiBtX2NhcHM7CisgICAgfQogICAgIGNvbnN0IEdzdEF1ZGlv
SW5mbyYgZ2V0SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQogCiBwcml2YXRlOgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQ
dHJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCmluZGV4IDMxMGJlYWQ3MmE0OGNiZGIzMzBiNDUzN2Vl
MDEwNjJhYTdiMmQwMDguLmQxNmI3YzBiMDU5NTRhZTZmMDdlNzM5M2M2MWVkZmMxZWE1MzgzMmYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9H
UmVmUHRyR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKQEAgLTI3LDYgKzI3LDEyIEBACiAjaW5j
bHVkZSA8Z3N0L2dsL2VnbC9nc3RlZ2xpbWFnZS5oPgogI2VuZGlmCiAKKyNpZiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRlIDxnc3Qv
d2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjZW5kaWYKKwog
bmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RNaW5pT2JqZWN0PiBhZG9w
dEdSZWYoR3N0TWluaU9iamVjdCogcHRyKQpAQCAtNTg0LDEzICs1OTAsMTUwIEBAIEdzdEVuY29k
aW5nUHJvZmlsZSogcmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmls
ZSogcHRyKQogICAgIHJldHVybiBwdHI7CiB9CiAKLXRlbXBsYXRlIDw+Cit0ZW1wbGF0ZTw+CiB2
b2lkIGRlcmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmlsZSogcHRy
KQogewogICAgIGlmIChwdHIpCiAgICAgICAgIGdzdF9lbmNvZGluZ19wcm9maWxlX3VucmVmKHB0
cik7CiB9CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwordGVtcGxhdGUgPD4gR1JlZlB0
cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBw
dHIpCit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KHB0ciwgR1Jl
ZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHJlZkdQ
dHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIpCit7Cisg
ICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKwor
ICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJU
Q1JUUFJlY2VpdmVyPihHc3RXZWJSVENSVFBSZWNlaXZlciogcHRyKQoreworICAgIGlmIChwdHIp
CisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KKwordGVtcGxhdGUgPD4gR1JlZlB0
cjxHc3RXZWJSVENSVFBTZW5kZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikK
K3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+KHB0ciwgR1JlZlB0ckFk
b3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQU2VuZGVyKiByZWZHUHRyPEdzdFdl
YlJUQ1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7CisgICAgaWYgKHB0cikK
KyAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBw
dHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4o
R3N0V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29i
amVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRy
YW5zY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sKKyAg
ICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4ocHRyLCBHUmVmUHRyQWRv
cHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcmVmR1B0cjxH
c3RXZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sK
KyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOwor
CisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2Vi
UlRDUlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBwdHIpCit7CisgICAg
aWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8
PiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBhZG9wdEdSZWYoR3N0V2ViUlRDRGF0YUNo
YW5uZWwqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4o
cHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEYXRhQ2hhbm5l
bCogcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHB0
cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX29iamVjdF9yZWYoR19PQkpFQ1QocHRyKSk7
CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RX
ZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHB0cikKK3sKKyAgICBpZiAo
cHRyKQorICAgICAgICBnX29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVm
UHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJSVENEVExTVHJhbnNw
b3J0KiBwdHIpCit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4o
cHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEVExTVHJhbnNw
b3J0KiByZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JK
RUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCogcHRy
KQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KKwor
dGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RX
ZWJSVENJQ0VUcmFuc3BvcnQqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENJ
Q0VUcmFuc3BvcnQ+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2Vi
UlRDSUNFVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRD
SUNFVHJhbnNwb3J0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9y
ZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+
IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRDSUNFVHJhbnNw
b3J0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIp
OworfQorCit0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0UHJvbWlzZT4gYWRvcHRHUmVmKEdzdFByb21p
c2UqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RQcm9taXNlPihwdHIsIEdSZWZQdHJB
ZG9wdCk7Cit9CisKK3RlbXBsYXRlPD4gR3N0UHJvbWlzZSogcmVmR1B0cjxHc3RQcm9taXNlPihH
c3RQcm9taXNlKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X3Byb21pc2VfcmVm
KHB0cik7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgZGVyZWZHUHRy
PEdzdFByb21pc2U+KEdzdFByb21pc2UqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBn
c3RfcHJvbWlzZV91bnJlZihwdHIpOworfQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUikKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVm
UHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1JlZlB0ckdTdHJlYW1lci5oCmluZGV4IDdhMGI1YTExZGRmYTgxNjcwOTY4OGU4MTM2NmRi
N2I1YjM1ZDNhNDEuLmY5ZGVhZWRmNTBmZWI5NTM4OGQyNWY3MzBkYmRjNjgyZmM0ZWFhMWQgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVm
UHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaApAQCAtMzQsNiArMzQsMTYgQEAgdHlwZWRlZiBzdHJ1
Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7CiB0eXBlZGVmIHN0cnVjdCBfR3N0RUdMSW1h
Z2UgR3N0RUdMSW1hZ2U7CiAjZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQordHlw
ZWRlZiBzdHJ1Y3QgX0dzdFByb21pc2UgR3N0UHJvbWlzZTsKK3R5cGVkZWYgc3RydWN0IF9Hc3RX
ZWJSVENEVExTVHJhbnNwb3J0IEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ7Cit0eXBlZGVmIHN0cnVj
dCBfR3N0V2ViUlRDRGF0YUNoYW5uZWwgR3N0V2ViUlRDRGF0YUNoYW5uZWw7Cit0eXBlZGVmIHN0
cnVjdCBfR3N0V2ViUlRDSUNFVHJhbnNwb3J0IEdzdFdlYlJUQ0lDRVRyYW5zcG9ydDsKK3R5cGVk
ZWYgc3RydWN0IF9Hc3RXZWJSVENSVFBSZWNlaXZlciBHc3RXZWJSVENSVFBSZWNlaXZlcjsKK3R5
cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENSVFBTZW5kZXIgR3N0V2ViUlRDUlRQU2VuZGVyOwordHlw
ZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyIEdzdFdlYlJUQ1JUUFRyYW5zY2Vp
dmVyOworI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0
UGx1Z2luPiBhZG9wdEdSZWYoR3N0UGx1Z2luKiBwdHIpOwpAQCAtMTUxLDYgKzE2MSwzNiBAQCB0
ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0RW5jb2RpbmdQcm9maWxlPiBhZG9wdEdSZWYoR3N0RW5jb2Rp
bmdQcm9maWxlKik7CiB0ZW1wbGF0ZTw+IEdzdEVuY29kaW5nUHJvZmlsZSogcmVmR1B0cjxHc3RF
bmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmlsZSopOwogdGVtcGxhdGU8PiB2b2lkIGRl
cmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmlsZSopOwogCisjaWYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJl
Y2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQUmVjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+IEdz
dFdlYlJUQ1JUUFJlY2VpdmVyKiByZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPihHc3RXZWJS
VENSVFBSZWNlaXZlciopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQ
UmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8
R3N0V2ViUlRDUlRQU2VuZGVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQU2VuZGVyKik7Cit0ZW1w
bGF0ZSA8PiBHc3RXZWJSVENSVFBTZW5kZXIqIHJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPihH
c3RXZWJSVENSVFBTZW5kZXIqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJU
Q1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8
R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBUcmFuc2NlaXZl
ciopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHJlZkdQdHI8R3N0V2Vi
UlRDUlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKik7Cit0ZW1wbGF0ZSA8
PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJh
bnNjZWl2ZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4g
YWRvcHRHUmVmKEdzdFdlYlJUQ0RhdGFDaGFubmVsKik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENE
YXRhQ2hhbm5lbCogcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNo
YW5uZWwqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVs
PihHc3RXZWJSVENEYXRhQ2hhbm5lbCopOworCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJU
Q0RUTFNUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJSVENEVExTVHJhbnNwb3J0Kik7Cit0ZW1w
bGF0ZSA8PiBHc3RXZWJSVENEVExTVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFu
c3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZH
UHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqKTsKKwor
dGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RX
ZWJSVENJQ0VUcmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCog
cmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KEdzdFdlYlJUQ0lDRVRyYW5zcG9ydCopOwor
dGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJS
VENJQ0VUcmFuc3BvcnQqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RQcm9taXNlPiBhZG9w
dEdSZWYoR3N0UHJvbWlzZSopOwordGVtcGxhdGUgPD4gR3N0UHJvbWlzZSogcmVmR1B0cjxHc3RQ
cm9taXNlPihHc3RQcm9taXNlKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RQcm9t
aXNlPihHc3RQcm9taXNlKik7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAppbmRleCBlMGE2
ZjkwZDdjN2YzMzA5MjJjYjNmZGE1ZmI1YTc3OGUyNThiZjk4Li45Y2ExYzU4MmI5OWYwNGNmN2Y4
ZGM2NjQ5NGNiYjZjNzg0MTAwZWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcApAQCAt
MTg4LDYgKzE4OCw5IEBAIGNvbnN0IGNoYXIqIGNhcHNNZWRpYVR5cGUoY29uc3QgR3N0Q2Fwcyog
Y2FwcykKICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBsaWNh
dGlvbi94LWNlbmMiKSB8fCBnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxp
Y2F0aW9uL3gtY2JjcyIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiYXBw
bGljYXRpb24veC13ZWJtLWVuYyIpKQogICAgICAgICByZXR1cm4gZ3N0X3N0cnVjdHVyZV9nZXRf
c3RyaW5nKHN0cnVjdHVyZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKTsKICNlbmRpZgorICAgIGlm
IChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtcnRwIikp
CisgICAgICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAibWVk
aWEiKTsKKwogICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0cnVjdHVyZSk7CiB9
CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HVW5pcXVlUHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oCmluZGV4IGJmNzRlY2YwMmNjMjJmNjA2
ZWJjYjlmZTg1YzAzNGIyNmM0MDY0NDEuLmU1MjQ3MWNhN2VhNjJhMzE1OGM1MjMzMzYwNjM1MmVj
NjMxNTJhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaApAQCAtMzAsNiArMzAs
MTIgQEAKICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNsdWRlIDx3dGYvZ2xpYi9H
VW5pcXVlUHRyLmg+CiAKKyNpZiBkZWZpbmVkKEJVSUxESU5HX1dlYkNvcmUpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdz
dC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNlbmRpZgor
CiAjaWYgVVNFKFdQRV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRikKICNpbmNsdWRlIDx3cGUv
ZXh0ZW5zaW9ucy92aWRlby1wbGFuZS1kaXNwbGF5LWRtYWJ1Zi5oPgogI2VuZGlmCkBAIC00OSw2
ICs1NSwxMCBAQCBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RCeXRlUmVhZGVyLCBnc3RfYnl0
ZV9yZWFkZXJfZnJlZSkKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdFZpZGVvQ29udmVydGVy
LCBnc3RfdmlkZW9fY29udmVydGVyX2ZyZWUpCiBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RB
dWRpb0NvbnZlcnRlciwgZ3N0X2F1ZGlvX2NvbnZlcnRlcl9mcmVlKQogCisjaWYgZGVmaW5lZChC
VUlMRElOR19XZWJDb3JlKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKK1dURl9ERUZJTkVfR1BU
Ul9ERUxFVEVSKEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiwgZ3N0X3dlYnJ0Y19zZXNzaW9u
X2Rlc2NyaXB0aW9uX2ZyZWUpCisjZW5kaWYKKwogI2lmIFVTRShXUEVfVklERU9fUExBTkVfRElT
UExBWV9ETUFCVUYpCiBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihzdHJ1Y3Qgd3BlX3ZpZGVvX3Bs
YW5lX2Rpc3BsYXlfZG1hYnVmX3NvdXJjZSwgd3BlX3ZpZGVvX3BsYW5lX2Rpc3BsYXlfZG1hYnVm
X3NvdXJjZV9kZXN0cm95KQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKaW5k
ZXggZWMzMmJhODVjY2Y4NDcyNTM4MzUyNjgxODU5YzQwNzdlYmQ0OTkyZC4uMTgyNjZmMTIyYzRi
MTg2NzRhMWY3OWJhYjkxZjA1NDk2N2ZjYjcwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRl
LmNwcApAQCAtMzgsNyArMzgsNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5jbHVkZSAi
TWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5oIgotI2VsaWYgRU5BQkxF
KFdFQl9BVURJTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJUQykgJiYg
VVNFKEdTVFJFQU1FUikKKyNlbGlmIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShNRURJQV9T
VFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92aWRlckdT
dHJlYW1lci5oIgogI2Vsc2UKICNpbmNsdWRlICJXZWJBdWRpb1NvdXJjZVByb3ZpZGVyLmgiCkBA
IC0xOTksNyArMTk5LDcgQEAgUmVmUHRyPFdlYkF1ZGlvU291cmNlUHJvdmlkZXI+IE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlOjpjcmVhdGVBdWRpb1NvdXJjZVByb3ZpZGUKIAogI2lmIFBMQVRGT1JN
KENPQ09BKQogICAgIHJldHVybiBNZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VQcm92aWRlckNv
Y29hOjpjcmVhdGUoKnRoaXMpOwotI2VsaWYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdTVFJFQU1F
UikKKyNlbGlmIFVTRShHU1RSRUFNRVIpCiAgICAgcmV0dXJuIEF1ZGlvU291cmNlUHJvdmlkZXJH
U3RyZWFtZXI6OmNyZWF0ZSgqdGhpcyk7CiAjZWxzZQogICAgIHJldHVybiBudWxscHRyOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCmluZGV4IDI2ZWU0MjYz
YjlkYjg3ODFkYmFlNjFlMWEzMDEyZWY3ZGM3MDk3MjUuLjM1ZTY1YzBlYjBiZDQ4MWQzZjg1YTlk
ZDA1YjY2YmY5NTY5MGU3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9D
YXB0dXJlci5jcHAKQEAgLTI5LDI5ICsyOSw0NiBAQAogI2luY2x1ZGUgIkxpYldlYlJUQ0F1ZGlv
Rm9ybWF0LmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5oPgotCiBu
YW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoTElCV0VCUlRDKQotc3RhdGljIGNvbnN0ZXhw
ciBzaXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IExpYldlYlJUQ0F1ZGlvRm9ybWF0Ojpz
YW1wbGVSYXRlOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19hdWRpb0NhcHR1cmVTYW1wbGVS
YXRlID0gTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGU7CiAjZWxzZQotc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IDQ4MDAwOworc3RhdGljIGNv
bnN0ZXhwciBzaXplX3Qgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gNDgwMDA7CiAjZW5kaWYK
IAogR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcihHU3RyZWFt
ZXJDYXB0dXJlRGV2aWNlIGRldmljZSkKLSAgICA6IEdTdHJlYW1lckNhcHR1cmVyKGRldmljZSwg
YWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZ
UEVfSU5ULCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSkpCisgICAgOiBHU3RyZWFt
ZXJDYXB0dXJlcihkZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94
LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxs
cHRyKSkpCiB7CiB9CiAKIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIoKQotICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIsIGFkb3B0R1JlZihnc3Rf
Y2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgQXVkaW9D
YXB0dXJlU2FtcGxlUmF0ZSwgbnVsbHB0cikpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VUeXBlOjpN
aWNyb3Bob25lKQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIsIGFkb3B0R1JlZihn
c3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgc19h
dWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5
cGU6Ok1pY3JvcGhvbmUpCiB7CiB9CiAKIEdzdEVsZW1lbnQqIEdTdHJlYW1lckF1ZGlvQ2FwdHVy
ZXI6OmNyZWF0ZUNvbnZlcnRlcigpCiB7Ci0gICAgcmV0dXJuIG1ha2VHU3RyZWFtZXJCaW4oImF1
ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUiLCB0cnVlKTsKKyAgICBhdXRvKiBiaW4gPSBnc3Rf
YmluX25ldyhudWxscHRyKTsKKyAgICBhdXRvKiBhdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9m
YWN0b3J5X21ha2UoImF1ZGlvY29udmVydCIsIG51bGxwdHIpOworICAgIGF1dG8qIGF1ZGlvcmVz
YW1wbGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvcmVzYW1wbGUiLCBudWxscHRy
KTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChiaW4pLCBhdWRpb2NvbnZlcnQs
IGF1ZGlvcmVzYW1wbGUsIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmsoYXVkaW9jb252
ZXJ0LCBhdWRpb3Jlc2FtcGxlKTsKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorICAgIGlm
IChhdXRvKiB3ZWJydGNkc3AgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgid2VicnRjZHNwIiwgbnVs
bHB0cikpIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0KHdlYnJ0Y2RzcCwgImVjaG8tY2FuY2VsIiwg
ZmFsc2UsICJ2b2ljZS1kZXRlY3Rpb24iLCB0cnVlLCBudWxscHRyKTsKKyAgICAgICAgZ3N0X2Jp
bl9hZGQoR1NUX0JJTl9DQVNUKGJpbiksIHdlYnJ0Y2RzcCk7CisgICAgICAgIGdzdF9lbGVtZW50
X2xpbmsod2VicnRjZHNwLCBhdWRpb2NvbnZlcnQpOworICAgIH0KKyNlbmRpZgorCisgICAgaWYg
KGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQoR1NUX0JJTl9D
QVNUKGJpbiksIEdTVF9QQURfU1JDKSkpCisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9wYWQoR1NU
X0VMRU1FTlRfQ0FTVChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgcGFkLmdldCgpKSk7
CisgICAgaWYgKGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQo
R1NUX0JJTl9DQVNUKGJpbiksIEdTVF9QQURfU0lOSykpKQorICAgICAgICBnc3RfZWxlbWVudF9h
ZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1QoYmluKSwgZ3N0X2dob3N0X3BhZF9uZXcoInNpbmsiLCBw
YWQuZ2V0KCkpKTsKKworICAgIHJldHVybiBiaW47CiB9CiAKIGJvb2wgR1N0cmVhbWVyQXVkaW9D
YXB0dXJlcjo6c2V0U2FtcGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJl
ci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyQ2FwdHVyZXIuY3BwCmluZGV4IGM5ZTBkNWViNjBlMmJjMzhlZjNhOWE1ZDUzMmM0Mzg4
MDEwOTZmNGUuLjE5NjE2NjcxOGQ4MjU2ZjM0MDJlOWJlMmY2MTE4NDE0MjRkYWExY2QgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDYXB0dXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcApAQCAtMTAwLDcgKzEwMCw3IEBAIEdz
dEVsZW1lbnQqIEdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UoKQogICAgICAgICBtX3Ny
YyA9IG1ha2VFbGVtZW50KG1fc291cmNlRmFjdG9yeSk7CiAgICAgICAgIEFTU0VSVChtX3NyYyk7
CiAgICAgICAgIGlmIChHU1RfSVNfQVBQX1NSQyhtX3NyYy5nZXQoKSkpCi0gICAgICAgICAgICBn
X29iamVjdF9zZXQobV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9G
T1JNQVRfVElNRSwgbnVsbHB0cik7CisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9zcmMuZ2V0
KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgImRvLXRpbWVz
dGFtcCIsIHRydWUsIG51bGxwdHIpOwogCiAgICAgICAgIGF1dG8gc3JjUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fc3JjLmdldCgpLCAic3JjIikpOwogICAgICAg
ICBpZiAobV9kZXZpY2VUeXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNhbWVyYSkg
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uZmExZGU1MmJkNTgxOTRjNzM3NmE2YTFhNGYzZmZlNGRlZGMxYTcyYQotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NiBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgor
I2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0
cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6
fkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCitib29sIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpjYW5JbnNlcnREVE1GKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6cGxheVRvbmUoY29uc3QgU3RyaW5nJiwgc2l6ZV90LCBz
aXplX3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEdTdHJlYW1lckRU
TUZTZW5kZXJCYWNrZW5kOjp0b25lcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4geyB9OworfQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6
OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAw
OworfQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmludGVyVG9uZUdhcCgp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30KKwordm9p
ZCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6b25Ub25lUGxheWVkKEZ1bmN0aW9uPHZvaWQo
Y29uc3QgU3RyaW5nJik+JiYgb25Ub25lUGxheWVkKQoreworICAgIG1fb25Ub25lUGxheWVkID0g
V1RGTW92ZShvblRvbmVQbGF5ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyRFRNRlNlbmRlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM1
Nzk3MDUwY2VjOWI0YjBhYTZkOWVmZTk4MDhhZTVjOTA4OGZiMzMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
RFRNRlNlbmRlckJhY2tlbmQuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJUQ0RUTUZTZW5kZXJCYWNrZW5kLmgiCisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisvLyBVc2Ug
ZWFnZXIgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBzaW5jZSB3ZSBjYWxs
IG1ha2VXZWFrUHRyKCkgZnJvbSBhbm90aGVyIHRocmVhZC4KK2NsYXNzIEdTdHJlYW1lckRUTUZT
ZW5kZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0RUTUZTZW5kZXJCYWNrZW5kLCBwdWJsaWMg
Q2FuTWFrZVdlYWtQdHI8R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQsIFdlYWtQdHJGYWN0b3J5
SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKTsKKyAgICB+
R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENEVE1G
U2VuZGVyQmFja2VuZAorICAgIGJvb2wgY2FuSW5zZXJ0RFRNRigpIGZpbmFsOworICAgIHZvaWQg
cGxheVRvbmUoY29uc3QgU3RyaW5nJiB0b25lLCBzaXplX3QgZHVyYXRpb24sIHNpemVfdCBpbnRl
clRvbmVHYXApIGZpbmFsOworICAgIHZvaWQgb25Ub25lUGxheWVkKEZ1bmN0aW9uPHZvaWQoY29u
c3QgU3RyaW5nJik+JiYpIGZpbmFsOworICAgIFN0cmluZyB0b25lcygpIGNvbnN0IGZpbmFsOwor
ICAgIHNpemVfdCBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHNpemVfdCBpbnRlclRvbmVH
YXAoKSBjb25zdCBmaW5hbDsKKworICAgIEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+IG1f
b25Ub25lUGxheWVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlh
U3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKaW5kZXggNGE4N2QyYTgyMzBh
ZTFhMWQ0MWNkYzA2YTE4NjQ1ZTE1Y2I3NjdjMS4uOTVlN2MwZDRkNWY0NjU0ZDc0MmNjZmQ1NGM0
N2E2NjM1MDJkMzJlYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFT
dHJlYW1Tb3VyY2UuY3BwCkBAIC0zNCwxNyArMzQsMjMgQEAKICNpbmNsdWRlICJWaWRlb0ZyYW1l
TWV0YWRhdGFHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZU1lZGlhU3Ry
ZWFtLmgiCiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJSZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8Z3N0L2FwcC9nc3Rh
cHBzcmMuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaD4KICNpbmNsdWRl
IDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCiBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdmlkZW9TcmNU
ZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJ2aWRlb19zcmMldSIsIEdTVF9QQURf
U1JDLCBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMoInZpZGVvL3gtcmF3
O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwOCIpKTsKKyAgICBHU1RfU1RBVElDX0NBUFMoInZpZGVv
L3gtcmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwODt2aWRlby94LXZwOTthcHBsaWNhdGlvbi94
LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbyIpKTsKIAogc3RhdGljIEdzdFN0YXRpY1BhZFRlbXBs
YXRlIGF1ZGlvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgiYXVkaW9fc3Jj
JXUiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJQ19DQVBT
KCJhdWRpby94LXJhdyhBTlkpOyIpKTsKKyAgICBHU1RfU1RBVElDX0NBUFMoImF1ZGlvL3gtcmF3
KEFOWSk7YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8iKSk7CiAKIEdTVF9E
RUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0TWVkaWFTdHJlYW1TcmNEZWJ1Zyk7CiAjZGVmaW5l
IEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnCkBAIC0yMzYsNyArMjQy
LDcgQEAgcHVibGljOgogCiAgICAgICAgIGlmIChkcm9wKSB7CiAgICAgICAgICAgICBtX25lZWRz
RGlzY29udCA9IHRydWU7Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QobV9zcmMuZ2V0KCks
ICIlcyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4gbm90IHB1c2hpbmciLCBtX3RyYWNrLmhhc1ZpZGVv
KCkgPyAiVmlkZW8iIDogIkF1ZGlvIik7CisgICAgICAgICAgICBHU1RfVFJBQ0VfT0JKRUNUKG1f
c3JjLmdldCgpLCAiJXMgcXVldWUgZnVsbCBhbHJlYWR5Li4uIG5vdCBwdXNoaW5nIiwgbV90cmFj
ay5oYXNWaWRlbygpID8gIlZpZGVvIiA6ICJBdWRpbyIpOwogICAgICAgICAgICAgcmV0dXJuOwog
ICAgICAgICB9CiAKQEAgLTY4OCw2ICs2OTQsNyBAQCB2b2lkIHdlYmtpdE1lZGlhU3RyZWFtU3Jj
QWRkVHJhY2soV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJhY2tQcgog
ICAgIGNvbnN0IGNoYXIqIHNvdXJjZVR5cGU7CiAgICAgdW5zaWduZWQgY291bnRlcjsKICAgICBH
c3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkVGVtcGxhdGU7CisKICAgICBpZiAodHJhY2stPmhhc0F1
ZGlvKCkpIHsKICAgICAgICAgcGFkVGVtcGxhdGUgPSAmYXVkaW9TcmNUZW1wbGF0ZTsKICAgICAg
ICAgc291cmNlVHlwZSA9ICJhdWRpbyI7CkBAIC02OTksOSArNzA2LDE5IEBAIHZvaWQgd2Via2l0
TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFT
dHJlYW1UcmFja1ByCiAgICAgICAgIGNvdW50ZXIgPSBzZWxmLT5wcml2LT52aWRlb1BhZENvdW50
ZXIuZXhjaGFuZ2VBZGQoMSk7CiAgICAgfQogCi0gICAgYXV0byBwYWROYW1lID0gbWFrZVN0cmlu
Zyhzb3VyY2VUeXBlLCAiX3NyYyIsIGNvdW50ZXIpOworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQorICAgIGlmICh0cmFjay0+c291cmNlKCkuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpIHsKKyAg
ICAgICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgpKTsKKyAgICAgICAgc291cmNlLnJlZ2lzdGVy
Q2xpZW50KCk7CisgICAgfSBlbHNlIGlmICh0cmFjay0+c291cmNlKCkuaXNJbmNvbWluZ1ZpZGVv
U291cmNlKCkpIHsKKyAgICAgICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgpKTsKKyAgICAgICAg
c291cmNlLnJlZ2lzdGVyQ2xpZW50KCk7CisgICAgfQorI2VuZGlmCisKICAgICBHU1RfREVCVUdf
T0JKRUNUKHNlbGYsICJTZXR1cCAlcyBzb3VyY2UgZm9yIHRyYWNrICVzLCBvbmx5IHRyYWNrOiAl
cyIsIHNvdXJjZVR5cGUsIHRyYWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCksIGJvb2xGb3JQcmludGlu
Zyhvbmx5VHJhY2spKTsKIAorICAgIGF1dG8gcGFkTmFtZSA9IG1ha2VTdHJpbmcoc291cmNlVHlw
ZSwgIl9zcmMiLCBjb3VudGVyKTsKICAgICBhdXRvIHNvdXJjZSA9IG1ha2VVbmlxdWU8SW50ZXJu
YWxTb3VyY2U+KEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksICp0cmFjaywgcGFkTmFtZSk7CiAgICAg
YXV0byogZWxlbWVudCA9IHNvdXJjZS0+Z2V0KCk7CiAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9D
QVNUKHNlbGYpLCBlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5j
b2Rlci5jcHAKaW5kZXggZmFjNDcwNWZiOGE3Y2YyZGMyM2VhNTExYjE1ZmNmNDg1NTJjZjMzYS4u
YTc2ZWYxZWZmZDE2ZmEyNmI2ZGUzNTc0ZjQ2NGY1ZDIzM2M5NWVmZSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVv
RW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKQEAgLTI5Nyw5ICsyOTcsMTEgQEAgc3Rh
dGljIHZvaWQgd2Via2l0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2NsYXNzX2luaXQoV2ViS2l0V2Vi
cnRjVmlkZW9FbmNvZGVyQ2xhc3MKICAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZWxmLT5wcml2
LT5wYXJzZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRyKTsKICAgICAgICAg
fSwgInRhcmdldC1iaXRyYXRlIiwgc2V0Qml0cmF0ZUJpdFBlclNlYywgImludGVydmFsLWludHJh
ZnJhbWVzIik7CiAgICAgRW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihYMjY0LCAieDI2NGVuYyIs
ICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKLSAgICAgICAgInZpZGVvL3gtaDI2NCxhbGln
bm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVhbSxwcm9maWxlPWJhc2VsaW5lIiwKKyAg
ICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVh
bSxwcm9maWxlPWNvbnN0cmFpbmVkLWJhc2VsaW5lIiwKICAgICAgICAgW10oV2ViS2l0V2VicnRj
VmlkZW9FbmNvZGVyKiBzZWxmKSB7CiAgICAgICAgICAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2Fy
ZyhHX09CSkVDVChzZWxmLT5wcml2LT5lbmNvZGVyLmdldCgpKSwgInR1bmUiLCAiemVyb2xhdGVu
Y3kiKTsKKyAgICAgICAgICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdfT0JKRUNUKHNlbGYt
PnByaXYtPmVuY29kZXIuZ2V0KCkpLCAic3BlZWQtcHJlc2V0IiwgInVsdHJhZmFzdCIpOworICAg
ICAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkp
LCAia2V5LWludC1tYXgiLCAxNSwgTlVMTCk7CiAgICAgICAgICAgICBnX29iamVjdF9zZXQoc2Vs
Zi0+cHJpdi0+cGFyc2VyLmdldCgpLCAiY29uZmlnLWludGVydmFsIiwgMSwgbnVsbHB0cik7CiAg
ICAgICAgIH0sICJiaXRyYXRlIiwgc2V0Qml0cmF0ZUtiaXRQZXJTZWMsICJrZXktaW50LW1heCIp
OwogICAgIEVuY29kZXJzOjpyZWdpc3RlckVuY29kZXIoT3BlbkgyNjQsICJvcGVuaDI2NGVuYyIs
ICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTZmNTVhMmQ1ZmEzYjA1NzhmNTQxODAyNmZmOTg1OThiZWRiYTU2MwotLS0gL2Rldi9udWxs
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsNzMgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9EYXRhLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJ
bmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkKKyAgICA6
IFJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8sIFdU
Rk1vdmUoYXVkaW9UcmFja0lkKSkKKyAgICAsIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFt
ZXIoKQoreworICAgIHN0YXJ0KCk7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcjo6flJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcigpCit7CisgICAg
c3RvcCgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6
c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBvcGVuVmFsdmUoKTsKK30KKwordm9pZCBSZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKCkKK3sK
KyAgICBjbG9zZVZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBhYmls
aXRpZXMmIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVz
KCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1wdHlD
YXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBS
ZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKCkKK3sKKyAgICBy
ZXR1cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ0F1ZGlv
U291cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJiBnc3RT
YW1wbGUpCit7CisgICAgYXV0byogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKGdzdFNh
bXBsZS5nZXQoKSk7CisgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBkZXNjcmlw
dGlvbjsKKyAgICBHU3RyZWFtZXJBdWRpb0RhdGEgZnJhbWVzKFdURk1vdmUoZ3N0U2FtcGxlKSwg
ZGVzY3JpcHRpb24uZ2V0SW5mbygpKTsKKworICAgIGF1ZGlvU2FtcGxlc0F2YWlsYWJsZShNZWRp
YVRpbWUoR1NUX1RJTUVfQVNfVVNFQ09ORFMoR1NUX0JVRkZFUl9QVFMoYnVmZmVyKSksIEdfVVNF
Q19QRVJfU0VDKSwgZnJhbWVzLCBkZXNjcmlwdGlvbiwgMCk7Cit9CisKK30KKworI2VuZGlmIC8v
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2NjhkYjUz
YmNmOWMxNmQzMDFiODE3MmU2OGIxOTE4OTA3ZmRhZWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWlu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyIDogcHVibGljIFJlYWx0aW1l
TWVkaWFTb3VyY2UsIHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1
YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
cj4gY3JlYXRlKFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBS
ZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZShhdWRpb1RyYWNrSWQp
KSk7IH0KKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcihTdHJpbmcmJik7CisgICAgflJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
cigpOworCitwcml2YXRlOgorICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2UgQVBJCisgICAgdm9p
ZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQcm9kdWNpbmdEYXRh
KCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2Fw
YWJpbGl0aWVzKCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
JiBzZXR0aW5ncygpIGZpbmFsOworICAgIGJvb2wgaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gUmVhbHRpbWVJbmNvbWluZ1NvdXJj
ZUdTdHJlYW1lciBBUEkKKyAgICB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxl
PiYmKSBmaW5hbDsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1cnJlbnRT
ZXR0aW5nczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFt
ZXIpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFT
b3VyY2UmIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmlzSW5jb21pbmdBdWRpb1NvdXJjZSgpOyB9
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291
cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NGIxNjU0MmI3NzUxMDJkMjZmMTVkMjBlNmZl
ZjVlMzNjOWVkZDcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3Bw
CkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlh
IFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJl
YWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIk1lZGlhU2FtcGxl
R1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisjaW5jbHVkZSA8
d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0
X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRf
d2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcigp
Cit7CisgICAgbV9iaW4gPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBtX3ZhbHZlID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAgIG1fdGVlID0gZ3N0
X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ0ZWUiLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9zZXQo
bV90ZWUuZ2V0KCksICJhbGxvdy1ub3QtbGlua2VkIiwgdHJ1ZSwgbnVsbHB0cik7CisKKyAgICBh
dXRvKiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxscHRyKTsK
KyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fdmFsdmUu
Z2V0KCksIHF1ZXVlLCBtX3RlZS5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBnc3RfZWxlbWVudF9s
aW5rX21hbnkobV92YWx2ZS5nZXQoKSwgcXVldWUsIG1fdGVlLmdldCgpLCBudWxscHRyKTsKKyAg
ICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fdmFsdmUuZ2V0KCkpOworICAg
IGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUpOworICAgIGdzdF9lbGVt
ZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV90ZWUuZ2V0KCkpOworCisgICAgYXV0byBzaW5r
UGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fdmFsdmUuZ2V0KCks
ICJzaW5rIikpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4uZ2V0KCksIGdzdF9naG9z
dF9wYWRfbmV3KCJzaW5rIiwgc2lua1BhZC5nZXQoKSkpOworfQorCit2b2lkIFJlYWx0aW1lSW5j
b21pbmdTb3VyY2VHU3RyZWFtZXI6OmNsb3NlVmFsdmUoKSBjb25zdAoreworICAgIGlmIChtX3Zh
bHZlKQorICAgICAgICBnX29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3AiLCB0cnVlLCBu
dWxscHRyKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpvcGVu
VmFsdmUoKSBjb25zdAoreworICAgIGlmIChtX3ZhbHZlKQorICAgICAgICBnX29iamVjdF9zZXQo
bV92YWx2ZS5nZXQoKSwgImRyb3AiLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQgUmVhbHRp
bWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVnaXN0ZXJDbGllbnQoKQoreworICAgIEdTVF9E
RUJVRygiUmVnaXN0ZXJpbmcgbmV3IGNsaWVudCIpOworICAgIGF1dG8qIHF1ZXVlID0gZ3N0X2Vs
ZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIGF1dG8qIHNpbmsgPSBn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsiLCBudWxscHRyKTsKKyAgICBnX29iamVj
dF9zZXQoc2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAiZW1pdC1zaWduYWxzIiwg
VFJVRSwgIm1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7CisgICAgZ19zaWduYWxfY29ubmVjdF9z
d2FwcGVkKHNpbmssICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSygrW10oUmVhbHRpbWVJbmNvbWlu
Z1NvdXJjZUdTdHJlYW1lciogc2VsZiwgR3N0RWxlbWVudCogc2luaykgLT4gR3N0Rmxvd1JldHVy
biB7CisgICAgICAgIGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19wdWxsX3Nh
bXBsZShHU1RfQVBQX1NJTksoc2luaykpKTsKKyAgICAgICAgc2VsZi0+ZGlzcGF0Y2hTYW1wbGUo
V1RGTW92ZShzYW1wbGUpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0pLCB0
aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChzaW5rLCAibmV3LXByZXJvbGwi
LCBHX0NBTExCQUNLKCtbXShSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKiBzZWxmLCBH
c3RFbGVtZW50KiBzaW5rKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAgICAgYXV0byBzYW1wbGUg
PSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1RfQVBQX1NJTksoc2luaykp
KTsKKyAgICAgICAgc2VsZi0+ZGlzcGF0Y2hTYW1wbGUoV1RGTW92ZShzYW1wbGUpKTsKKyAgICAg
ICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0pLCB0aGlzKTsKKworICAgIGdzdF9iaW5fYWRk
X21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgcXVldWUsIHNpbmssIG51bGxwdHIpOwor
ICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX3RlZS5nZXQoKSwgcXVldWUsIHNpbmssIG51bGxw
dHIpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUpOworICAg
IGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc2luayk7CisKKyAgICBhdXRvIGRv
dEZpbGVOYW1lID0gbWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUobV9iaW4uZ2V0KCkpLCAiLmlu
Y29taW5nIik7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU5f
Q0FTVChtX2Jpbi5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUu
dXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIu
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQ2NGM0OTcwY2NiOGQxMWI3
OWE1YzIwZDdmMTM1MmU2ZjRhZmJiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUg
IkdSZWZQdHJHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFs
dGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBHc3RFbGVtZW50KiBi
aW4oKSB7IHJldHVybiBtX2Jpbi5nZXQoKTsgfQorICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoKTsK
KworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIoKTsKKwor
ICAgIHZvaWQgY2xvc2VWYWx2ZSgpIGNvbnN0OworICAgIHZvaWQgb3BlblZhbHZlKCkgY29uc3Q7
CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmFsdmU7CisKK3ByaXZhdGU6CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmKSB7IH0KKworICAg
IEdSZWZQdHI8R3N0RWxlbWVudD4gbV9iaW47CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3Rl
ZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4zZDY4ZWU1YjkxMjZiZTZl
N2U4MDJmYjJiZDFjNmE4OTVjNGQ1MzdkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxMDcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgor
CisjaW5jbHVkZSAiTWVkaWFTYW1wbGVHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJWaWRlb0ZyYW1l
TWV0YWRhdGFHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvcnRwL3J0cC5oPgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmIHZpZGVvVHJhY2tJZCkK
KyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6Vmlk
ZW8sIFdURk1vdmUodmlkZW9UcmFja0lkKSkKKyAgICAsIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXIoKQoreworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBwb3J0ZWRDb25zdHJhaW50
cyBjb25zdHJhaW50czsKKyAgICBjb25zdHJhaW50cy5zZXRTdXBwb3J0c1dpZHRoKHRydWUpOwor
ICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0KHRydWUpOworICAgIG1fY3VycmVudFNl
dHRpbmdzID0gUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHsgfTsKKyAgICBtX2N1cnJlbnRT
ZXR0aW5ncy0+c2V0U3VwcG9ydGVkQ29uc3RyYWludHMoV1RGTW92ZShjb25zdHJhaW50cykpOwor
CisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KG1fdmFsdmUuZ2V0KCksICJzaW5rIikpOworICAgIGdzdF9wYWRfYWRkX3Byb2JlKHNpbmtQYWQu
Z2V0KCksIHN0YXRpY19jYXN0PEdzdFBhZFByb2JlVHlwZT4oR1NUX1BBRF9QUk9CRV9UWVBFX0JV
RkZFUiksIFtdKEdzdFBhZCosIEdzdFBhZFByb2JlSW5mbyogaW5mbywgZ3BvaW50ZXIpIC0+IEdz
dFBhZFByb2JlUmV0dXJuIHsKKyAgICAgICAgYXV0byB2aWRlb1NhbXBsZU1ldGFkYXRhID0gc3Rk
OjptYWtlX29wdGlvbmFsPFZpZGVvU2FtcGxlTWV0YWRhdGE+KHsgfSk7CisgICAgICAgIHZpZGVv
U2FtcGxlTWV0YWRhdGEtPnJlY2VpdmVUaW1lID0gTW9ub3RvbmljVGltZTo6bm93KCkuc2Vjb25k
c1NpbmNlRXBvY2goKTsKKworICAgICAgICBhdXRvKiBidWZmZXIgPSBHU1RfQlVGRkVSX0NBU1Qo
R1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEoaW5mbykpOworICAgICAgICBHc3RSVFBCdWZmZXIgcnRw
QnVmZmVyIEdTVF9SVFBfQlVGRkVSX0lOSVQ7CisgICAgICAgIGlmIChnc3RfcnRwX2J1ZmZlcl9t
YXAoYnVmZmVyLCBHU1RfTUFQX1JFQUQsICZydHBCdWZmZXIpKSB7CisgICAgICAgICAgICB2aWRl
b1NhbXBsZU1ldGFkYXRhLT5ydHBUaW1lc3RhbXAgPSBnc3RfcnRwX2J1ZmZlcl9nZXRfdGltZXN0
YW1wKCZydHBCdWZmZXIpOworICAgICAgICAgICAgZ3N0X3J0cF9idWZmZXJfdW5tYXAoJnJ0cEJ1
ZmZlcik7CisgICAgICAgIH0KKyAgICAgICAgYnVmZmVyID0gd2Via2l0R3N0QnVmZmVyU2V0Vmlk
ZW9TYW1wbGVNZXRhZGF0YShidWZmZXIsIFdURk1vdmUodmlkZW9TYW1wbGVNZXRhZGF0YSkpOwor
ICAgICAgICBHU1RfUEFEX1BST0JFX0lORk9fREFUQShpbmZvKSA9IGJ1ZmZlcjsKKyAgICAgICAg
cmV0dXJuIEdTVF9QQURfUFJPQkVfT0s7CisgICAgfSwgbnVsbHB0ciwgbnVsbHB0cik7CisKKyAg
ICBzdGFydCgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cjo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBvcGVuVmFsdmUoKTsKK30KKwordm9pZCBS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKCkK
K3sKKyAgICBjbG9zZVZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VDYXBh
YmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0
aWVzKCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6ZW1w
dHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdz
JiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKCkKK3sKKyAg
ICBpZiAobV9jdXJyZW50U2V0dGluZ3MpCisgICAgICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5n
cy52YWx1ZSgpOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0cmFpbnRz
IGNvbnN0cmFpbnRzOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzV2lkdGgodHJ1ZSk7Cisg
ICAgY29uc3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7CisKKyAgICBSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3Mgc2V0dGluZ3M7CisgICAgYXV0byYgc2l6ZSA9IHRoaXMtPnNpemUo
KTsKKyAgICBzZXR0aW5ncy5zZXRXaWR0aChzaXplLndpZHRoKCkpOworICAgIHNldHRpbmdzLnNl
dEhlaWdodChzaXplLmhlaWdodCgpKTsKKyAgICBzZXR0aW5ncy5zZXRTdXBwb3J0ZWRDb25zdHJh
aW50cyhjb25zdHJhaW50cyk7CisKKyAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IFdURk1vdmUoc2V0
dGluZ3MpOworICAgIHJldHVybiBtX2N1cnJlbnRTZXR0aW5ncy52YWx1ZSgpOworfQorCit2b2lk
IFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3NEaWRDaGFuZ2Uo
T3B0aW9uU2V0PFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZz4gc2V0dGluZ3MpCit7
CisgICAgaWYgKHNldHRpbmdzLmNvbnRhaW5zQW55KHsgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzOjpGbGFnOjpXaWR0aCwgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnOjpIZWln
aHQgfSkpCisgICAgICAgIG1fY3VycmVudFNldHRpbmdzID0gc3RkOjpudWxsb3B0OworfQorCit2
b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUo
R1JlZlB0cjxHc3RTYW1wbGU+JiYgZ3N0U2FtcGxlKQoreworICAgIHZpZGVvU2FtcGxlQXZhaWxh
YmxlKE1lZGlhU2FtcGxlR1N0cmVhbWVyOjpjcmVhdGVXcmFwcGVkU2FtcGxlKGdzdFNhbXBsZSks
IHsgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5YmMzMDA2OWNkMzMyMDky
MzE4YmJmNzc4YWI5M2Q5MTg0ODMxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2lu
Y2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFs
dGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyIDogcHVibGljIFJlYWx0aW1lTWVkaWFTb3Vy
Y2UsIHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAg
ICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4gY3JlYXRl
KFN0cmluZyYmIHZpZGVvVHJhY2tJZCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZSh2aWRlb1RyYWNrSWQpKSk7IH0KKyAg
ICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKCkgPSBkZWZhdWx0OworCitw
cm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFN0cmlu
ZyYmKTsKKworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAgIHZv
aWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5nRGF0
YSgpICBmaW5hbDsKKyAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGlt
ZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1l
ZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBmaW5hbDsKKyAgICBjb25zdCBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgZmluYWw7CisgICAgYm9vbCBp
c0luY29taW5nVmlkZW9Tb3VyY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAg
ICAvLyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIEFQSQorICAgIHZvaWQgZGlzcGF0
Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYpIGZpbmFsOworCisgICAgc3RkOjpvcHRpb25h
bDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdzOworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lOKFdl
YkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcikKKyAgICBzdGF0aWMg
Ym9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZSYgc291cmNlKSB7
IHJldHVybiBzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCk7IH0KK1NQRUNJQUxJWkVfVFlQ
RV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTc0YjI1ZDRlZmQ1OGNmNzViNzNjZmQ2MmIwNzU3NDJm
NTI4OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAK
QEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlh
IFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNs
dWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVh
bWVyQXVkaW9DYXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRl
Z2VyQ29udmVyc2lvbi5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJy
dGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0
Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVh
bWVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBzb3VyY2UpCisgICAgOiBSZWFsdGlt
ZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIFZlY3RvcjxzdGQ6OnBhaXI8
Y29uc3QgY2hhciosIGludD4+IGVuY29kaW5nczsKKyAgICBlbmNvZGluZ3MucmVzZXJ2ZUluaXRp
YWxDYXBhY2l0eSg0KTsKKyAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBwZW5kKHsgIk9QVVMiLCA0
ODAwMCB9KTsKKyAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBwZW5kKHsgIkc3MjIiLCA4MDAwIH0p
OworICAgIGVuY29kaW5ncy51bmNoZWNrZWRBcHBlbmQoeyAiUENNQSIsIDgwMDAgfSk7CisgICAg
ZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVuZCh7ICJQQ01VIiwgODAwMCB9KTsKKyAgICBtX2FsbG93
ZWRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICBmb3IgKGF1dG8m
IFtlbmNvZGluZ05hbWUsIGNsb2NrUmF0ZV0gOiBlbmNvZGluZ3MpCisgICAgICAgIGdzdF9jYXBz
X2FwcGVuZF9zdHJ1Y3R1cmUobV9hbGxvd2VkQ2Fwcy5nZXQoKSwgZ3N0X3N0cnVjdHVyZV9uZXco
ImFwcGxpY2F0aW9uL3gtcnRwIiwgIm1lZGlhIiwgR19UWVBFX1NUUklORywgImF1ZGlvIiwgImVu
Y29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBlbmNvZGluZ05hbWUsICJjbG9jay1yYXRlIiwg
R19UWVBFX0lOVCwgY2xvY2tSYXRlLCBudWxscHRyKSk7CisKKyAgICBtX2F1ZGlvY29udmVydCA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgbnVsbHB0cik7CisgICAg
bV9hdWRpb3Jlc2FtcGxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb3Jlc2FtcGxl
IiwgbnVsbHB0cik7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0
KCkpLCBtX2F1ZGlvY29udmVydC5nZXQoKSwgbV9hdWRpb3Jlc2FtcGxlLmdldCgpLCBudWxscHRy
KTsKKyAgICBzZXRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKK30KKworYm9vbCBSZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8
R3N0Q2Fwcz4mIGNhcHMpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX2Jpbi5nZXQoKSwgIk91
dGdvaW5nIGF1ZGlvIHNvdXJjZSBwYXlsb2FkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBjYXBz
LmdldCgpKTsKKyAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKGNh
cHMuZ2V0KCksIDApOworICAgIGlmIChjb25zdCBjaGFyKiBlbmNvZGluZ05hbWUgPSBnc3Rfc3Ry
dWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiZW5jb2RpbmctbmFtZSIpKSB7CisgICAgICAg
IGlmIChlcXVhbChlbmNvZGluZ05hbWUsICJPUFVTIikpIHsKKyAgICAgICAgICAgIG1fZW5jb2Rl
ciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJvcHVzZW5jIiwgbnVsbHB0cik7CisgICAgICAgICAg
ICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJydHBvcHVzcGF5IiwgbnVsbHB0
cik7CisgICAgICAgICAgICBpZiAoIW1fZW5jb2RlciB8fCAhbV9wYXlsb2FkZXIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAvLyBGSVhNRTogRW5hYmxlIGR0
eCB0b28/CisgICAgICAgICAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVChtX2Vu
Y29kZXIuZ2V0KCkpLCAiYXVkaW8tdHlwZSIsICJ2b2ljZSIpOworCisgICAgICAgICAgICBpZiAo
Y29uc3QgY2hhciogdXNlSW5iYW5kRmVjID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVj
dHVyZSwgInVzZWluYmFuZGZlYyIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAodXNl
SW5iYW5kRmVjLCAiMSIpKQorICAgICAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV9lbmNv
ZGVyLmdldCgpLCAiaW5iYW5kLWZlYyIsIHRydWUsIG51bGxwdHIpOworICAgICAgICAgICAgfQor
ICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGVuY29kaW5nTmFtZSwgIkc3MjIiKSkgeworICAgICAg
ICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwZzcyMnBheSIsIG51
bGxwdHIpOworICAgICAgICAgICAgaWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiUENN
QSIpIHx8IGVxdWFsKGVuY29kaW5nTmFtZSwgIlBDTVUiKSkgeworICAgICAgICAgICAgYXV0byBw
YXlsb2FkZXJOYW1lID0gbWFrZVN0cmluZygicnRwIiwgZW5jb2RpbmdOYW1lLCAicGF5Iik7Cisg
ICAgICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KHBheWxvYWRlck5h
bWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5hc2NpaSgpLmRhdGEoKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBtX2VuY29kZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgiYWxhd2VuYyIsIG51
bGxwdHIpOworICAgICAgICAgICAgaWYgKCFtX3BheWxvYWRlciB8fCAhbV9lbmNvZGVyKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAg
IEdTVF9FUlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJVbnN1cHBvcnRlZCBvdXRnb2luZyBhdWRp
byBlbmNvZGluZzogJXMiLCBlbmNvZGluZ05hbWUpOworICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVChtX2Jp
bi5nZXQoKSwgImVuY29kaW5nLW5hbWUgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICB9CisKKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJhdXRvLWhl
YWRlci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBpZiAoY29uc3QgY2hhciog
bWluUFRpbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAibWlucHRpbWUi
KSkgeworICAgICAgICBTdHJpbmcgdGltZShtaW5QVGltZSk7CisgICAgICAgIGlmIChhdXRvIHZh
bHVlID0gcGFyc2VJbnRlZ2VyQWxsb3dpbmdUcmFpbGluZ0p1bms8aW50NjRfdD4odGltZSkpCisg
ICAgICAgICAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJtaW4tcHRpbWUiLCAq
dmFsdWUgKiBHU1RfTVNFQ09ORCwgbnVsbHB0cik7CisgICAgfQorCisgICAgaW50IHBheWxvYWRU
eXBlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAicGF5bG9hZCIs
ICZwYXlsb2FkVHlwZSkpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwg
InB0IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIpOworCisgICAgZ19vYmplY3Rfc2V0KG1fY2Fwc0Zp
bHRlci5nZXQoKSwgImNhcHMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKKworICAgIGdzdF9iaW5f
YWRkKEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fcGF5bG9hZGVyLmdldCgpKTsKKyAgICBp
ZiAobV9lbmNvZGVyKSB7CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX2Jpbi5n
ZXQoKSksIG1fZW5jb2Rlci5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueSht
X291dGdvaW5nU291cmNlLmdldCgpLCBtX3ZhbHZlLmdldCgpLCBtX2F1ZGlvY29udmVydC5nZXQo
KSwgbV9hdWRpb3Jlc2FtcGxlLmdldCgpLAorICAgICAgICAgICAgbV9wcmVFbmNvZGVyUXVldWUu
Z2V0KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9wYXlsb2FkZXIuZ2V0KCksIG1fcG9zdEVuY29kZXJR
dWV1ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ3N0X2VsZW1lbnRf
bGlua19tYW55KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIG1fdmFsdmUuZ2V0KCksIG1fYXVkaW9j
b252ZXJ0LmdldCgpLCBtX2F1ZGlvcmVzYW1wbGUuZ2V0KCksCisgICAgICAgICAgICBtX3BheWxv
YWRlci5nZXQoKSwgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBudWxscHRyKTsKKyAgICB9Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxOTAyYjVm
NjkxNDI1NDhiYTE3YzcwNjM0NzY4ZWU1YWM5YjViYTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2lu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgor
CituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lciBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291
cmNlR1N0cmVhbWVyPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIGF1ZGlv
U291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcihXVEZNb3ZlKGF1ZGlvU291cmNlKSkpOyB9CisKKyAgICBib29sIHNldFBheWxv
YWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsKKworcHJvdGVjdGVkOgorICAg
IGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU+JiYpOworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVu
dD4gbV9hdWRpb2NvbnZlcnQ7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2F1ZGlvcmVzYW1w
bGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Y3NmQxOTVjZGY4ZWE3
YmQwOWE1Zjg3Njc5N2Q4OWYyNzM1Y2RlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRn
b2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KworI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lck1lZGlh
U3RyZWFtU291cmNlLmgiCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRl
IDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisKK0dT
VF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7Cisj
ZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVy
OjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIG1fYmluID0g
Z3N0X2Jpbl9uZXcobnVsbHB0cik7CisKKyAgICBtX3ZhbHZlID0gZ3N0X2VsZW1lbnRfZmFjdG9y
eV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdf
T0JKRUNUKG1fdmFsdmUuZ2V0KCkpLCAiZHJvcC1tb2RlIiwgImZvcndhcmQtc3RpY2t5LWV2ZW50
cyIpOworCisgICAgbV9wcmVFbmNvZGVyUXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2Uo
InF1ZXVlIiwgbnVsbHB0cik7CisgICAgbV9wb3N0RW5jb2RlclF1ZXVlID0gZ3N0X2VsZW1lbnRf
ZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIG1fY2Fwc0ZpbHRlciA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIG51bGxwdHIpOworCisgICAgZ3N0X2Jp
bl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3ZhbHZlLmdldCgpLCBtX3By
ZUVuY29kZXJRdWV1ZS5nZXQoKSwKKyAgICAgICAgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBt
X2NhcHNGaWx0ZXIuZ2V0KCksIG51bGxwdHIpOworCisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdS
ZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9jYXBzRmlsdGVyLmdldCgpLCAic3JjIikp
OworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4uZ2V0KCksIGdzdF9naG9zdF9wYWRfbmV3
KCJzcmMiLCBzcmNQYWQuZ2V0KCkpKTsKK30KKworUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyOjp+UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAg
ICBzdG9wKCk7CisKKyAgICBpZiAobV93ZWJydGNTaW5rUGFkKSB7CisgICAgICAgIGF1dG8gc3Jj
UGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYmluLmdldCgpLCAi
c3JjIikpOworICAgICAgICBnc3RfcGFkX3VubGluayhzcmNQYWQuZ2V0KCksIG1fd2VicnRjU2lu
a1BhZC5nZXQoKSk7CisKKyAgICAgICAgYXV0byBwYXJlbnQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9n
ZXRfcGFyZW50X2VsZW1lbnQobV93ZWJydGNTaW5rUGFkLmdldCgpKSk7CisgICAgICAgIEdTVF9E
RUJVR19PQkpFQ1QocGFyZW50LmdldCgpLCAiUmVtb3ZpbmcgcGFkICUiIEdTVF9QVFJfRk9STUFU
LCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworICAgICAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3Jl
cXVlc3RfcGFkKHBhcmVudC5nZXQoKSwgbV93ZWJydGNTaW5rUGFkLmdldCgpKTsKKyAgICB9CisK
KyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9iaW4uZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsK
KyAgICBpZiAoYXV0byBwaXBlbGluZSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfcGFyZW50
KG1fYmluLmdldCgpKSkpCisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU5fQ0FTVChwaXBl
bGluZS5nZXQoKSksIG1fYmluLmdldCgpKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXI6OnNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+
JiYgbmV3U291cmNlKQoreworICAgIGlmIChtX3NvdXJjZSAmJiAhbV9pbml0aWFsU2V0dGluZ3Mp
CisgICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV9zb3VyY2UudmFsdWUoKS0+c2V0dGluZ3Mo
KTsKKworICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAgbV9zb3VyY2UudmFsdWUoKS0+cmVtb3Zl
T2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fc291cmNlID0gV1RGTW92ZShuZXdTb3VyY2UpOworICAg
IGluaXRpYWxpemVGcm9tVHJhY2soKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXI6OnN0YXJ0KCkKK3sKKyAgICBtX3NvdXJjZS52YWx1ZSgpLT5hZGRPYnNl
cnZlcigqdGhpcyk7CisgICAgbV9pc1N0b3BwZWQgPSBmYWxzZTsKKyAgICBnc3RfZWxlbWVudF9s
aW5rKG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIG1fdmFsdmUuZ2V0KCkpOworICAgIGdzdF9lbGVt
ZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV9iaW4uZ2V0KCkpOworfQorCit2b2lkIFJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c3RvcCgpCit7CisgICAgbV9pc1N0b3Bw
ZWQgPSB0cnVlOworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAgIG1f
c291cmNlLnZhbHVlKCktPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBnc3RfZWxlbWVudF9z
ZW5kX2V2ZW50KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIGdzdF9ldmVudF9uZXdfZW9zKCkpOwor
ICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9iaW4uZ2V0KCksIFRSVUUpOworICAg
IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX291dGdvaW5nU291cmNlLmdldCgpLCBHU1RfU1RBVEVf
TlVMTCk7CisgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV9v
dXRnb2luZ1NvdXJjZS5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZSht
X2Jpbi5nZXQoKSwgRkFMU0UpOworICAgIG1fc291cmNlLnJlc2V0KCk7Cit9CisKK3ZvaWQgUmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2VNdXRlZENoYW5nZWQoKQor
eworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9tdXRl
ZCAhPSBtX3NvdXJjZS52YWx1ZSgpLT5tdXRlZCgpKTsKKyAgICBtX211dGVkID0gbV9zb3VyY2Uu
dmFsdWUoKS0+bXV0ZWQoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXI6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fc291cmNlKQor
ICAgICAgICByZXR1cm47CisKKyAgICBtX2VuYWJsZWQgPSBtX3NvdXJjZS52YWx1ZSgpLT5lbmFi
bGVkKCk7CisgICAgaWYgKG1fdmFsdmUpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3ZhbHZlLmdl
dCgpLCAiZHJvcCIsICFtX2VuYWJsZWQsIG51bGxwdHIpOworfQorCit2b2lkIFJlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6aW5pdGlhbGl6ZUZyb21UcmFjaygpCit7CisgICAg
bV9tdXRlZCA9IG1fc291cmNlLnZhbHVlKCktPm11dGVkKCk7CisgICAgbV9lbmFibGVkID0gbV9z
b3VyY2UudmFsdWUoKS0+ZW5hYmxlZCgpOworICAgIG1fb3V0Z29pbmdTb3VyY2UgPSB3ZWJraXRN
ZWRpYVN0cmVhbVNyY05ldygpOworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX2Jpbi5n
ZXQoKSksIG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCkpOworICAgIHdlYmtpdE1lZGlhU3RyZWFtU3Jj
QWRkVHJhY2soV0VCS0lUX01FRElBX1NUUkVBTV9TUkMobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSks
IG1fc291cmNlLT5wdHIoKSwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlh
U291cmNlR1N0cmVhbWVyOjpsaW5rKCkKK3sKKyAgICBnc3RfZWxlbWVudF9saW5rKG1fcG9zdEVu
Y29kZXJRdWV1ZS5nZXQoKSwgbV9jYXBzRmlsdGVyLmdldCgpKTsKKworICAgIGF1dG8gc3JjUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYmluLmdldCgpLCAic3Jj
IikpOworICAgIGdzdF9wYWRfbGluayhzcmNQYWQuZ2V0KCksIG1fd2VicnRjU2lua1BhZC5nZXQo
KSk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChtX2Jpbi5nZXQoKSk7
Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTaW5r
UGFkKEdSZWZQdHI8R3N0UGFkPiYmIHBhZCkKK3sKKyAgICBtX3dlYnJ0Y1NpbmtQYWQgPSBXVEZN
b3ZlKHBhZCk7CisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gdHJhbnNjZWl2
ZXI7CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjU2lua1BhZC5nZXQoKSwgInRyYW5zY2VpdmVy
IiwgJnRyYW5zY2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9nZXQodHJh
bnNjZWl2ZXIuZ2V0KCksICJzZW5kZXIiLCAmbV9zZW5kZXIub3V0UHRyKCksIG51bGxwdHIpOwor
fQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTVjMWNkMmRlNWQ2NGMzNjFhY2VmZTZm
NDMwN2ZhZmQ3NDhkYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJl
YW1lci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIg
SWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJH
UmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIK
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIgOiBwdWJs
aWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyPiwgcHVibGljIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7CitwdWJsaWM6
CisgICAgflJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpOworCisgICAgdm9p
ZCBzdGFydCgpOworICAgIHZvaWQgc3RvcCgpOworICAgIHZvaWQgc2V0U291cmNlKFJlZjxNZWRp
YVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNv
dXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5nZXQoKTsgfQorCisgICAgY29uc3QgR1Jl
ZlB0cjxHc3RDYXBzPiYgYWxsb3dlZENhcHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93ZWRDYXBz
OyB9CisKKyAgICB2b2lkIGxpbmsoKTsKKyAgICBjb25zdCBHUmVmUHRyPEdzdFBhZD4mIHBhZCgp
IGNvbnN0IHsgcmV0dXJuIG1fd2VicnRjU2lua1BhZDsgfQorICAgIHZvaWQgc2V0U2lua1BhZChH
UmVmUHRyPEdzdFBhZD4mJik7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2Vu
ZGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kZXI7IH0KKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IGJpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmluOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2V0UGF5
bG9hZFR5cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3By
b3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXIoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21UcmFjaygpOworCisgICAgYm9vbCBtX2Vu
YWJsZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX211dGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1f
aXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZjxNZWRpYVN0cmVhbVRy
YWNrUHJpdmF0ZT4+IG1fc291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzPiBtX2luaXRpYWxTZXR0aW5nczsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fYmluOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9vdXRnb2luZ1NvdXJjZTsKKyAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmFsdmU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3By
ZUVuY29kZXJRdWV1ZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZW5jb2RlcjsKKyAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGF5bG9hZGVyOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4g
bV9wb3N0RW5jb2RlclF1ZXVlOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9jYXBzRmlsdGVy
OworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9hbGxvd2VkQ2FwczsKKyAgICBHUmVmUHRyPEdzdFdl
YlJUQ1JUUFNlbmRlcj4gbV9zZW5kZXI7CisgICAgR1JlZlB0cjxHc3RQYWQ+IG1fd2VicnRjU2lu
a1BhZDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOworICAgIHZv
aWQgc291cmNlRW5hYmxlZENoYW5nZWQoKTsKKworICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2
YXRlOjpPYnNlcnZlciBBUEkKKyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlJikgb3ZlcnJpZGUgeyBzb3VyY2VNdXRlZENoYW5nZWQoKTsgfQorICAgIHZv
aWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRl
IHsgc291cmNlRW5hYmxlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5n
ZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBvdmVycmlkZSB7IGluaXRpYWxpemVGcm9tVHJh
Y2soKTsgfQorICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92
ZXJyaWRlIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiOGY2MzRi
MjM0MDA3YjFlOTYwYmJhMWU1NjczOTNmNjEyY2YyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKworR1NU
X0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNk
ZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6
OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGU+JiYgc291cmNlKQorICAgIDogUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyKCkKK3sKKyAgICByZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CisKKyAg
ICBtX3ZpZGVvQ29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252ZXJ0
IiwgbnVsbHB0cik7CisgICAgbV9lbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3
ZWJydGN2aWRlb2VuY29kZXIiLCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9C
SU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX2VuY29kZXIuZ2V0
KCksIG51bGxwdHIpOworCisgICAgYXV0byogcGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9nZXRf
cGFkX3RlbXBsYXRlKG1fZW5jb2Rlci5nZXQoKSwgInNyYyIpOworICAgIGF1dG8gY2FwcyA9IGFk
b3B0R1JlZihnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzKHBhZFRlbXBsYXRlKSk7CisgICAgbV9h
bGxvd2VkQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZ3N0X2Nh
cHNfZm9yZWFjaChjYXBzLmdldCgpLCByZWludGVycHJldF9jYXN0PEdzdENhcHNGb3JlYWNoRnVu
Yz4oK1tdKEdzdENhcHNGZWF0dXJlcyosIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9pbnRl
ciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAg
Y29uc3QgY2hhciogbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKKyAg
ICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdOYW1lID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGVx
dWFsKG5hbWUsICJ2aWRlby94LXZwOCIpKQorICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIlZQ
OCI7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LXZwOSIpKQorICAgICAg
ICAgICAgZW5jb2RpbmdOYW1lID0gIlZQOSI7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsKG5hbWUs
ICJ2aWRlby94LWgyNjQiKSkKKyAgICAgICAgICAgIGVuY29kaW5nTmFtZSA9ICJIMjY0IjsKKyAg
ICAgICAgaWYgKGVuY29kaW5nTmFtZSkKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1
Y3R1cmUoc291cmNlLT5tX2FsbG93ZWRDYXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBw
bGljYXRpb24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAidmlkZW8iLCAiZW5jb2Rp
bmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGVuY29kaW5nTmFtZSwgImNsb2NrLXJhdGUiLCBHX1RZ
UEVfSU5ULCA5MDAwMCwgbnVsbHB0cikpOworICAgIH0pLCB0aGlzKTsKKworICAgIHNldFNvdXJj
ZShXVEZNb3ZlKHNvdXJjZSkpOworfQorCitib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcykK
K3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fYmluLmdldCgpLCAiT3V0Z29pbmcgdmlkZW8gc291
cmNlIHBheWxvYWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAgIGF1
dG8qIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgMCk7Cisg
ICAgR1JlZlB0cjxHc3RDYXBzPiBlbmNvZGVyQ2FwczsKKyAgICBpZiAoY29uc3QgY2hhciogZW5j
b2RpbmdOYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImVuY29kaW5n
LW5hbWUiKSkgeworICAgICAgICBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiVlA4IikpIHsKKyAg
ICAgICAgICAgIGVuY29kZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1w
bGUoInZpZGVvL3gtdnA4IikpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVh
bWVyRWxlbWVudCgicnRwdnA4cGF5IiwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1
YWwoZW5jb2RpbmdOYW1lLCAiVlA5IikpIHsKKyAgICAgICAgICAgIGVuY29kZXJDYXBzID0gYWRv
cHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtdnA5IikpOworICAgICAg
ICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwdnA5cGF5IiwgbnVs
bHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiSDI2NCIpKSB7
CisgICAgICAgICAgICBlbmNvZGVyQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlf
c2ltcGxlKCJ2aWRlby94LWgyNjQiKSk7CisgICAgICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VH
U3RyZWFtZXJFbGVtZW50KCJydHBoMjY0cGF5IiwgbnVsbHB0cik7CisgICAgICAgICAgICAvLyBG
SVhNRTogaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lu
cy1nb29kLy0vaXNzdWVzLzg5MworICAgICAgICAgICAgLy8gZ3N0X3V0aWxfc2V0X29iamVjdF9h
cmcoR19PQkpFQ1QobV9wYXlsb2FkZXIuZ2V0KCkpLCAiYWdncmVnYXRlLW1vZGUiLCAiemVyby1s
YXRlbmN5Iik7CisgICAgICAgICAgICAvLyBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCks
ICJjb25maWctaW50ZXJ2YWwiLCAtMSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSB7CisgICAg
ICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1fYmluLmdldCgpLCAiVW5zdXBwb3J0ZWQgb3V0Z29p
bmcgdmlkZW8gZW5jb2Rpbmc6ICVzIiwgZW5jb2RpbmdOYW1lKTsKKyAgICAgICAgICAgIHJldHVy
biBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpF
Q1QobV9iaW4uZ2V0KCksICJlbmNvZGluZy1uYW1lIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgLy8gRklYTUU6IFJlLWVuYWJsZSB0aGlzLiBDdXJyZW50bHkgdHJpZ2dl
cnMgY2FwcyBuZWdvdGlhdGlvbiBlcnJvci4KKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIu
Z2V0KCksICJhdXRvLWhlYWRlci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBn
X29iamVjdF9zZXQobV9lbmNvZGVyLmdldCgpLCAiZm9ybWF0IiwgZW5jb2RlckNhcHMuZ2V0KCks
IG51bGxwdHIpOworCisgICAgaW50IHBheWxvYWRUeXBlOworICAgIGlmIChnc3Rfc3RydWN0dXJl
X2dldF9pbnQoc3RydWN0dXJlLCAicGF5bG9hZCIsICZwYXlsb2FkVHlwZSkpCisgICAgICAgIGdf
b2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwgInB0IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIp
OworCisgICAgYXV0byBmaWx0ZXJlZENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwo
Z3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSksIG51bGxwdHIpKTsKKyAgICBnX29iamVjdF9z
ZXQobV9jYXBzRmlsdGVyLmdldCgpLCAiY2FwcyIsIGZpbHRlcmVkQ2Fwcy5nZXQoKSwgbnVsbHB0
cik7CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3BheWxv
YWRlci5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KG1fb3V0Z29pbmdTb3VyY2Uu
Z2V0KCksIG1fdmFsdmUuZ2V0KCksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX3ByZUVuY29kZXJR
dWV1ZS5nZXQoKSwKKyAgICAgICAgbV9lbmNvZGVyLmdldCgpLCBtX3BheWxvYWRlci5nZXQoKSwg
bV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVv
U291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE1MWZkY2EwMjMzMjI0NWFjYzlhZmYyMTVk
Mjk1MGQxZWY1MzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXIuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIEln
YWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
cHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyIGZpbmFsIDog
cHVibGljIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6Cisg
ICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+IGNyZWF0
ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNlKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKHNvdXJj
ZSkpKTsgfQorCisgICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3Rh
dGlvbikgeyBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9CisK
KyAgICBib29sIHNldFBheWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsK
KworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCisgICAgYm9vbCBtX3No
b3VsZEFwcGx5Um90YXRpb24geyBmYWxzZSB9OworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gbV92aWRlb0NvbnZlcnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAppbmRleCAxYTBhOGIxYjMyZDNmN2FkMDZlYTU4OWEwMDcwYWJlZDMzMzg3MTgxLi4w
ZDIxMTkyNWRlMmU5YTI3MDhkZTZjMDg2OGU4OGY0MGY4OTU1MjNjIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVz
dGluZy9JbnRlcm5hbHMuY3BwCkBAIC01OTksNiArNTk5LDkgQEAgdm9pZCBJbnRlcm5hbHM6OnJl
c2V0VG9Db25zaXN0ZW50U3RhdGUoUGFnZSYgcGFnZSkKICAgICBydGNQcm92aWRlci5zZXRIMjY1
U3VwcG9ydCh0cnVlKTsKICAgICBydGNQcm92aWRlci5zZXRWUDlTdXBwb3J0KHRydWUsIHRydWUp
OwogICAgIHJ0Y1Byb3ZpZGVyLmNsZWFyRmFjdG9yeSgpOworI2VsaWYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCisgICAgcGFnZS5zZXR0aW5ncygpLnNldFdlYlJUQ0VuY3J5cHRpb25FbmFibGVkKHRy
dWUpOworICAgIHBhZ2Uuc2V0dGluZ3MoKS5zZXRQZWVyQ29ubmVjdGlvbkVuYWJsZWQodHJ1ZSk7
CiAjZW5kaWYKIAogICAgIHBhZ2Uuc2V0RnVsbHNjcmVlbkF1dG9IaWRlRHVyYXRpb24oMF9zKTsK
QEAgLTE2MTksNiArMTYyMiw3IEBAIHZvaWQgSW50ZXJuYWxzOjphcHBseVJvdGF0aW9uRm9yT3V0
Z29pbmdWaWRlb1NvdXJjZXMoUlRDUGVlckNvbm5lY3Rpb24mIGNvbm5lY3RpCiB7CiAgICAgY29u
bmVjdGlvbi5hcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKTsKIH0KKwogdm9p
ZCBJbnRlcm5hbHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KGJvb2wgdmFsdWUpCiB7CiAjaWYgVVNF
KExJQldFQlJUQykKQEAgLTE2MjYsNiArMTYzMCw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRXZWJS
VENIMjY1U3VwcG9ydChib29sIHZhbHVlKQogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRl
cigpLnNldEgyNjVTdXBwb3J0KHZhbHVlKTsKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlk
ZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2YWx1
ZSk7CiAjZW5kaWYKIH0KIApAQCAtMTYzNiw2ICsxNjQyLDkgQEAgdm9pZCBJbnRlcm5hbHM6OnNl
dFdlYlJUQ1ZQOVN1cHBvcnQoYm9vbCBzdXBwb3J0VlA5UHJvZmlsZTAsIGJvb2wgc3VwcG9ydFZQ
OVByb2YKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRWUDlTdXBwb3J0KHN1
cHBvcnRWUDlQcm9maWxlMCwgc3VwcG9ydFZQOVByb2ZpbGUyKTsKICAgICAgICAgcGFnZS0+bGli
V2ViUlRDUHJvdmlkZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTShzdXBwb3J0VlA5UHJvZmlsZTApOworICAgIFVOVVNFRF9QQVJBTShzdXBwb3J0VlA5
UHJvZmlsZTIpOwogI2VuZGlmCiB9CiAKQEAgLTE2NDYsNiArMTY1NSw4IEBAIHZvaWQgSW50ZXJu
YWxzOjpzZXRXZWJSVENWUDlWVEJTdXBwb3J0KGJvb2wgdmFsdWUpCiAgICAgICAgIHBhZ2UtPmxp
YldlYlJUQ1Byb3ZpZGVyKCkuc2V0VlA5VlRCU3VwcG9ydCh2YWx1ZSk7CiAgICAgICAgIHBhZ2Ut
PmxpYldlYlJUQ1Byb3ZpZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAgICAgfQorI2Vsc2UKKyAgICBV
TlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2ODYsNiArMTY5Nyw4IEBAIHZv
aWQgSW50ZXJuYWxzOjpzZXRFbmFibGVXZWJSVENFbmNyeXB0aW9uKGJvb2wgdmFsdWUpCiAjaWYg
VVNFKExJQldFQlJUQykKICAgICBpZiAoYXV0byogcGFnZSA9IGNvbnRleHREb2N1bWVudCgpLT5w
YWdlKCkpCiAgICAgICAgIHBhZ2UtPnNldHRpbmdzKCkuc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJs
ZWQodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAK
QEAgLTE2OTYsNiArMTcwOSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRVc2VEVExTMTAoYm9vbCB1
c2VEVExTMTApCiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAg
ICAgcmV0dXJuOwogICAgIGRvY3VtZW50LT5wYWdlKCktPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0
VXNlRFRMUzEwKHVzZURUTFMxMCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1c2VEVExTMTAp
OwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNt
YWtlIGIvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKaW5kZXggMDY2MzNlZDRkODk5
ZjI4M2NlZDQ1OGNkYjgzOTE4MjhiOGJjNWQzZS4uMzIxNmY2OTc0YjUzYzBjNzM4NzRmOWZlZGNh
ZmYyOWM4YmMwYTIyYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21h
a2UKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKQEAgLTI4LDYgKzI4LDkg
QEAKICMgIGdzdHJlYW1lci1jb2RlY3BhcnNlcjpHU1RSRUFNRVJfQ09ERUNQQVJTRVJTX0lOQ0xV
REVfRElSUyBhbmQgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVMKICMgIGdzdHJlYW1l
ci1mdWxsOiAgICAgICBHU1RSRUFNRVJfRlVMTF9JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9G
VUxMX0xJQlJBUklFUwogIyAgZ3N0cmVhbWVyLXRyYW5zY29kZXI6IEdTVFJFQU1FUl9UUkFOU0NP
REVSX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1RSQU5TQ09ERVJfTElCUkFSSUVTCisjICBn
c3RyZWFtZXItcnRwOiAgICAgICAgR1NUUkVBTUVSX1JUUF9JTkNMVURFX0RJUlMgYW5kIEdTVFJF
QU1FUl9SVFBfTElCUkFSSUVTCisjICBnc3RyZWFtZXItc2RwOiAgICAgICAgR1NUUkVBTUVSX1NE
UF9JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9TRFBfTElCUkFSSUVTCisjICBnc3RyZWFtZXIt
d2VicnRjOiAgICAgR1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9X
RUJSVENfTElCUkFSSUVTCiAjCiAjIENvcHlyaWdodCAoQykgMjAxMiBSYXBoYWVsIEt1Ym8gZGEg
Q29zdGEgPHJha3Vjb0B3ZWJraXQub3JnPgogIwpAQCAtMTEwLDYgKzExMyw5IEBAIEZJTkRfR1NU
UkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVEFHIGdzdHJlYW1lci10YWctMS4wIGdzdHRhZy0x
LjApCiBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX1ZJREVPIGdzdHJlYW1lci12
aWRlby0xLjAgZ3N0dmlkZW8tMS4wKQogRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1F
Ul9DT0RFQ1BBUlNFUlMgZ3N0cmVhbWVyLWNvZGVjcGFyc2Vycy0xLjAgZ3N0Y29kZWNwYXJzZXJz
LTEuMCkKIEZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVFJBTlNDT0RFUiBnc3Ry
ZWFtZXItdHJhbnNjb2Rlci0xLjAgZ3N0dHJhbnNjb2Rlci0xLjApCitGSU5EX0dTVFJFQU1FUl9D
T01QT05FTlQoR1NUUkVBTUVSX1JUUCBnc3RyZWFtZXItcnRwLTEuMCBnc3RydHAtMS4wKQorRklO
RF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9TRFAgZ3N0cmVhbWVyLXNkcC0xLjAgZ3N0
c2RwLTEuMCkKK0ZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfV0VCUlRDIGdzdHJl
YW1lci13ZWJydGMtMS4wIGdzdHdlYnJ0Yy0xLjApCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIDMuIFByb2Nlc3MgdGhlIENPTVBPTkVOVFMg
cGFzc2VkIHRvIEZJTkRfUEFDS0FHRQpAQCAtMTU0LDQgKzE2MCw2IEBAIG1hcmtfYXNfYWR2YW5j
ZWQoCiAgICAgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVMKICAgICBHU1RSRUFNRVJf
RlVMTF9JTkNMVURFX0RJUlMKICAgICBHU1RSRUFNRVJfRlVMTF9MSUJSQVJJRVMKKyAgICBHU1RS
RUFNRVJfV0VCUlRDX0lOQ0xVREVfRElSUworICAgIEdTVFJFQU1FUl9XRUJSVENfTElCUkFSSUVT
CiApCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlIGIvU291
cmNlL2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZQppbmRleCA5MTFmNmU2Yzk1YWI4MzBiNmZj
MDJlMDFlZGI3NzU0ZmE5MTJmMzRhLi45ZTU0NGU1N2Y4YTNkMjk3OTdlYzYwN2E2Y2YxYjA0Nzg3
M2VkZjRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlCisr
KyBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UKQEAgLTMyLDYgKzMyLDEwIEBA
IGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgICAgICAgbGlz
dChBUFBFTkQgR1NUUkVBTUVSX0NPTVBPTkVOVFMgdHJhbnNjb2RlcikKICAgICAgICAgICBlbmRp
ZiAoKQogCisgICAgICAgICAgaWYgKFVTRV9HU1RSRUFNRVJfV0VCX1JUQykKKyAgICAgICAgICAg
ICAgbGlzdChBUFBFTkQgR1NUUkVBTUVSX0NPTVBPTkVOVFMgd2VicnRjKQorICAgICAgICAgIGVu
ZGlmICgpCisKICAgICAgICAgICBmaW5kX3BhY2thZ2UoR1N0cmVhbWVyIDEuMTQuMCBSRVFVSVJF
RCBDT01QT05FTlRTICR7R1NUUkVBTUVSX0NPTVBPTkVOVFN9KQogCiAgICAgICAgICAgaWYgKEVO
QUJMRV9XRUJfQVVESU8pCkBAIC01OCwxMSArNjIsMjAgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBF
TkFCTEVfV0VCX0FVRElPKQogICAgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJHU3Ry
ZWFtZXJUcmFuc2NvZGVyID49IDEuMjAgaXMgbmVlZGVkIGZvciBVU0VfR1NUUkVBTUVSX1RSQU5T
Q09ERVIuIikKICAgICAgICAgICBlbmRpZiAoKQogCisgICAgICAgICAgaWYgKFVTRV9HU1RSRUFN
RVJfV0VCUlRDIEFORCAoUENfR1NUUkVBTUVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxLjIwIiBP
UiBOT1QgUENfR1NUUkVBTUVSX1dFQlJUQ19GT1VORCkpCisgICAgICAgICAgICAgIG1lc3NhZ2Uo
RkFUQUxfRVJST1IgIkdTdHJlYW1lcldlYlJUQyA+PSAxLjIwIGlzIG5lZWRlZCBmb3IgVVNFX0dT
VFJFQU1FUl9XRUJSVEMuIikKKyAgICAgICAgICBlbmRpZiAoKQogICAgICAgZW5kaWYgKCkKIGVu
ZGlmICgpCiAKIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNIEFORCBFTkFCTEVfV0VCX1JUQykKLSAg
ICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIFRSVUUpCisgICAgaWYgKFVT
RV9HU1RSRUFNRVJfV0VCUlRDKQorICAgICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0Vf
TElCV0VCUlRDIEZBTFNFKQorCisgICAgICAgIGZpbmRfcGFja2FnZShPcGVuU1NMIFJFUVVJUkVE
KQorICAgIGVsc2UgKCkKKyAgICAgICAgU0VUX0FORF9FWFBPU0VfVE9fQlVJTEQoVVNFX0xJQldF
QlJUQyBUUlVFKQorICAgIGVuZGlmICgpCiBlbHNlICgpCiAgICAgU0VUX0FORF9FWFBPU0VfVE9f
QlVJTEQoVVNFX0xJQldFQlJUQyBGQUxTRSkKIGVuZGlmICgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
Y21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVy
RGVmaW5pdGlvbnMuY21ha2UKaW5kZXggMzk0ZjgwY2EyNDdlNTljYTM4OTk1ZTA5MTZhMTAwODQ4
ZjNiNjczYy4uZDVhZjBlMjJiMDQxOGFjNDA4MDgyNTkyMWNkZWM1ZDRiNDgzZDFiOCAxMDA2NDQK
LS0tIGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlCisrKyBiL1NvdXJj
ZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQpAQCAtMTEsMyArMTEsNCBAQCBXRUJL
SVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX05BVElWRV9WSURFTyAiVG9nZ2xlIG5hdGl2
ZSB2aWRlbyBzdXBwb3J0IGluCiBXRUJLSVRfT1BUSU9OX0RFRklORShVU0VfR1NUUkVBTUVSX05B
VElWRV9BVURJTyAiVG9nZ2xlIG5hdGl2ZSBhdWRpbyBzdXBwb3J0IGluIEdTdHJlYW1lciBtZWRp
YSBwbGF5ZXIiIFBSSVZBVEUgT0ZGKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1F
Ul9URVhUX1NJTksgIlRvZ2dsZSB0ZXh0IHNpbmsgc3VwcG9ydCBpbiBHU3RyZWFtZXIgbWVkaWEg
cGxheWVyIiBQUklWQVRFIE9OKQogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9U
UkFOU0NPREVSICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBHU3RyZWFtZXIgTWVkaWFS
ZWNvcmRlciBiYWNrZW5kIiBQUklWQVRFIE9OKQorV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dT
VFJFQU1FUl9XRUJSVEMgIldoZXRoZXIgdG8gZW5hYmxlIHN1cHBvcnQgZm9yIFdlYlJUQyIgUFJJ
VkFURSBPTikKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMu
Y21ha2UgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlCmluZGV4IDIz
ZDIxZjUyZDA1NTA1MzI1Njk1ZDNhMWFmYTFmODcxNjcxYzBhMWMuLjczZjkzYzgxNTcyNmE3MTc3
ZTJmOTU0Y2IxNmM2NGI4M2RkMjJiMjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9HU3RyZWFt
ZXJEZXBlbmRlbmNpZXMuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVuZGVu
Y2llcy5jbWFrZQpAQCAtMiwzICsyLDQgQEAgV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX0dTVFJF
QU1FUl9HTCBFTkFCTEVfVklERU8pCiBXRUJLSVRfT1BUSU9OX0RFUEVORChVU0VfR1NUUkVBTUVS
X01QRUdUUyBFTkFCTEVfVklERU8pCiBXRUJLSVRfT1BUSU9OX0RFUEVORChVU0VfV1BFX1ZJREVP
X1BMQU5FX0RJU1BMQVlfRE1BQlVGIFVTRV9HU1RSRUFNRVJfR0wpCiBXRUJLSVRfT1BUSU9OX0RF
UEVORChVU0VfR1NUUkVBTUVSX1RSQU5TQ09ERVIgRU5BQkxFX01FRElBX1JFQ09SREVSKQorV0VC
S0lUX09QVElPTl9ERVBFTkQoVVNFX0dTVFJFQU1FUl9XRUJSVEMgRU5BQkxFX1dFQl9SVEMpCmRp
ZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VMb2cKaW5kZXggODI1ZmZl
NDgyNWVmNWMzOTk4NTM1MjBmMzdhOGY2N2ZmNzJlYzgwNy4uODg2ZTE3Y2IwYTBhOThlMTYwYTM4
MTc2ZTJkZTllYTZlY2ZmOGQwNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hhbmdlTG9nCisrKyBiL1Rv
b2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDIyLTAyLTEyICBQaGlsaXBwZSBOb3Jt
YW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBJbml0aWFs
IGltcG9ydCBvZiB0aGUgR3N0V2ViUlRDIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogZmxhdHBhay9mbGF0cGFrdXRpbHMucHk6CisgICAg
ICAgIChXZWJraXRGbGF0cGFrLnJ1bl9pbl9zYW5kYm94KTogQWxsb3cgbGlibmljZSBkZWJ1ZyBs
b2cgZW52aXJvbm1lbnQgdmFyaWFibGUgaW4gcnVudGltZSBzYW5kYm94LgorCiAyMDIyLTAzLTEx
ICBBbGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CiAKICAgICAgICAg
RmluaXNoIGltcGxlbWVudGluZyBtb2RpZnktaGVhZGVycyBhY3Rpb25zIGZvciBXS0NvbnRlbnRS
dWxlTGlzdCBTUEkKZGlmZiAtLWdpdCBhL1Rvb2xzL2ZsYXRwYWsvZmxhdHBha3V0aWxzLnB5IGIv
VG9vbHMvZmxhdHBhay9mbGF0cGFrdXRpbHMucHkKaW5kZXggNGE2OTVjMjZkYzRjYjViMDc2ZGMz
YWZjOGMzMjdlMTE1MzU3ZTAxMy4uNmM3YmJmOTI0NWMzYWQ5ODJlZmE5YzhmNzMyNDYxNTg5YmVh
ODY5ZCAxMDA2NDQKLS0tIGEvVG9vbHMvZmxhdHBhay9mbGF0cGFrdXRpbHMucHkKKysrIGIvVG9v
bHMvZmxhdHBhay9mbGF0cGFrdXRpbHMucHkKQEAgLTgzOCw2ICs4MzgsNyBAQCBjbGFzcyBXZWJr
aXRGbGF0cGFrOgogICAgICAgICAgICAgIk1FU0EiLAogICAgICAgICAgICAgIkxJQkdMIiwKICAg
ICAgICAgICAgICJQSVBFV0lSRSIsCisgICAgICAgICAgICAiTklDRSIsCiAgICAgICAgICAgICAi
UlVTVCIsCiAgICAgICAgICAgICAiU0NDQUNIRSIsCiAgICAgICAgICAgICAiU1BBIiwKZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRl
eCBlYzE5ZDEyM2ZkMmRiMTNhMTliYjViNzBkODg5NmE4NjExOWNmZTBlLi4yMTA1ZDk3ZjE4MTA4
MTVmODYwZDBhN2Y5ZGYwYWNlMGViZGEzOWI3IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjIt
MDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAg
IFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
bGliL1Rlc3RFeHBlY3RhdGlvbnM6IEZsYWcgbW9zdCBXZWJSVEMgYXMgZmFpbGluZy4gRHVyaW5n
IHRoaXMgZmlyc3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgY3ljbGUgSSBmb2N1c2VkIG1vc3RseSBv
biBmaXhpbmcgY3Jhc2hlcyBhbmQgb25seSBmaXhlZCBhIGZldyBmYWlsdXJlcy4gVGhlIHJlbWFp
bmluZyBvbmVzCisgICAgICAgIHdpbGwgYmUgYWRyZXNzZWQgaW4gZm9sbG93LXVwIHBhdGNoZXMu
CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLWxvY2FsRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3RlRGVzY3Jp
cHRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXIt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc3RhYmxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIw
MjItMDMtMTEgIE5pa29sYW9zIE1vdWNodGFyaXMgIDxubW91Y2h0YXJpc0BhcHBsZS5jb20+CiAK
ICAgICAgICAgW2lPU10gRml4IG92c2Vyc2Nyb2xsLWJlaGF2aW9yIGZvciBtYWluIGRvY3VtZW50
CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKaW5kZXggNmZmNGFk
NzI1MDg0ZDdkNzAyMjI1ODgyMTMxZjE1Yjk1NjE1NGU1MS4uY2Q1NmQ2NGUwZmZjOTNkYjI3OWI5
YmMxMmI0OGVhZTM3ODM5MTgyMSAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xp
Yi9UZXN0RXhwZWN0YXRpb25zCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4
cGVjdGF0aW9ucwpAQCAtODY0LDcgKzg2NCw2IEBAIHdlYmtpdC5vcmcvYi8yMjk5NzMgbWVkaWEv
dHJhY2svaW4tYmFuZC90cmFjay1pbi1iYW5kLXNydC1ta3YtY3Vlcy1hZGRlZC1vbmNlLmh0CiAK
IHdlYmtpdC5vcmcvYi8yMzAwMjggbWVkaWEvbWVkaWEtc291cmNlL21lZGlhLXNvdXJjZS1zZWVr
LXR3aWNlLmh0bWwgWyBQYXNzIFRpbWVvdXQgXQogCi13ZWJraXQub3JnL2IvMjMxODExIGZhc3Qv
bWVkaWFzdHJlYW0vTWVkaWFTdHJlYW0tdmlkZW8tZWxlbWVudC1lbnRlci1iYWNrZ3JvdW5kLmh0
bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvYXVkaW8tYmFja2dyb3Vu
ZC1wbGF5YmFjay1wbGF5bGlzdC5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMxODEx
IG1lZGlhL21lZGlhLXNlc3Npb24vYWN0aW9uSGFuZGxlckludGVybmFsTWFwcGluZ3MuaHRtbCBb
IEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS9tZWRpYS1zZXNzaW9uL2RlZmF1
bHQtYWN0aW9uSGFuZGxlcnMuaHRtbCBbIEZhaWx1cmUgXQpAQCAtODczLDcgKzg3Miw2IEBAIHdl
YmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvdmlkZW8tY29uY3VycmVudC1wbGF5YmFjay5odG1sIFsg
RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLWludGVycnVwdGlvbi13
aXRoLXJlc3VtZS1ub3QtYWxsb3dpbmctcGxheS5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMjMxODExIG1lZGlhL3ZpZGVvLW11bHRpcGxlLWNvbmN1cnJlbnQtcGxheWJhY2suaHRtbCBb
IEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS93ZWJhdWRpby1iYWNrZ3JvdW5k
LXBsYXliYWNrLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMzE4MTEgd2VicnRjL2Nv
bmN1cnJlbnRWaWRlb1BsYXliYWNrMi5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMx
ODExIG1lZGlhL21lZGlhLXNlc3Npb24vY2FsbEFjdGlvbkhhbmRsZXIuaHRtbCBbIFRpbWVvdXQg
XQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS9tZWRpYS1zZXNzaW9uL3BsYXktYWZ0ZXItc2Vl
ay5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL3JlbW90ZS1jb250
cm9sLWNvbW1hbmQtaXMtdXNlci1nZXN0dXJlLmh0bWwgWyBUaW1lb3V0IF0KQEAgLTg4NiwxMCAr
ODg0LDEwIEBAIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvdmlkZW8tc3lzdGVtLXNsZWVwLmh0
bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgd2ViYXVkaW8vYXVkaW9jb250ZXh0
LXN0YXRlLWludGVycnVwdGVkLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEg
d2ViYXVkaW8vc3VzcGVuZC1jb250ZXh0LXdoaWxlLWludGVycnVwdGVkLmh0bWwgWyBUaW1lb3V0
IF0KIAorIyBydmZjIHJlbGF0ZWQgZmFpbHVyZXMKIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0t
dGVzdHMvdmlkZW8tcnZmYyBbIFBhc3MgXQogZmFzdC9tZWRpYXN0cmVhbS9nZXRVc2VyTWVkaWEt
cnZmYy5odG1sIFsgUGFzcyBGYWlsdXJlIF0KIHdlYnJ0Yy9wZWVyQ29ubmVjdGlvbi1ydmZjLmh0
bWwgWyBGYWlsdXJlIF0KLXdlYnJ0Yy9jYW52YXMtdG8tcGVlci1jb25uZWN0aW9uLmh0bWwgWyBG
YWlsdXJlIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdmlkZW8tcnZmYy9yZXF1
ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLXdlYnJ0Yy5odHRwcy5odG1sIFsgU2tpcCBdCiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3ZpZGVvLXJ2ZmMvcmVxdWVzdC12aWRlby1mcmFt
ZS1jYWxsYmFjay1iZWZvcmUteHItc2Vzc2lvbi5odHRwcy5odG1sIFsgU2tpcCBdCiBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3ZpZGVvLXJ2ZmMvcmVxdWVzdC12aWRlby1mcmFtZS1j
YWxsYmFjay1kdXJpbmcteHItc2Vzc2lvbi5odHRwcy5odG1sIFsgU2tpcCBdCkBAIC05MDksNiAr
OTA3LDg3IEBAIHdlYmtpdC5vcmcvYi8yMzQwODQgbWVkaWEvdHJhY2svdmlkZW8tdHJhY2stY29u
ZmlndXJhdGlvbi5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMzcyNTYgbWVkaWEv
dmlkZW8tc3JjLWJsb2ItcGVyZi5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KIAorIyBEYXRhQ2hh
bm5lbCBHc3RXZWJSVEMgaW1wbGVtZW50YXRpb24gaW5jb21wbGV0ZQord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvZGF0YWNoYW5uZWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0
cC93cHQvd2VicnRjL3RyYW5zZmVyLWRhdGFjaGFubmVsLXNlcnZpY2Utd29ya2VyLmh0dHBzLmh0
bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1zdGF0c1NlbGVjdG9yLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC5odG1sIFsg
U2tpcCBdCisKKyMgVGhlIEdzdFdlYlJUQyBiYWNrZW5kIGRvZXNuJ3Qgc3VwcG9ydCB0cmFuc2Zv
cm1zIHlldC4KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0cC93cHQvd2VicnRjL2F1ZGlvdmlkZW8t
c2NyaXB0LXRyYW5zZm9ybS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAv
d3B0L3dlYnJ0Yy92aWRlby1zY3JpcHQtdHJhbnNmb3JtLWtleWZyYW1lLW9ubHkuaHRtbCBbIFNr
aXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93ZWJydGMvdmlkZW8tc2NyaXB0LXRy
YW5zZm9ybS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3JtL3NjcmlwdC1hdWRpby10
cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1lbmNvZGVkLXRyYW5zZm9ybS9zY3JpcHQt
Y2hhbmdlLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3Jt
L3NjcmlwdC1tZXRhZGF0YS10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1lbmNvZGVk
LXRyYW5zZm9ybS9zY3JpcHQtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2Rl
ZC10cmFuc2Zvcm0vc2NyaXB0LXdyaXRlLXR3aWNlLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tp
cCBdCisKKyMgVGhlIGdlbmVyYXRlZCBTRFAgb2ZmZXIgY3VycmVudGx5IGRvZXMgbm90IHJlZmxl
Y3QgdGhlIGNvZGVjLXByZWZlcmVuY2VzIHNldAorIyBvbiB0cmFuc2NlaXZlcnMuIEluc3RlYWQg
dGhlIG5lZ290aWF0ZWQgb3V0Z29pbmcgbWVkaWEgc291cmNlIGNhcHMgYXJlIHVzZWQKKyMgYW5k
IG91ciBjdXJyZW50IGltcGxlbWVudGF0aW9uIG9mIG91dGdvaW5nIHNvdXJjZSBkb2Vzbid0IHN1
cHBvcnQgbXVsdGlwbGUKKyMgcGF5bG9hZCB0eXBlcy4KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2Vi
cnRjL2F1ZGlvLXBlZXItY29ubmVjdGlvbi1nNzIyLmh0bWwgWyBGYWlsdXJlIF0KKword2Via2l0
Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWFkZEljZUNh
bmRpZGF0ZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tYWRkVHJhY2stcmV1c2Utc2VuZGVyLmh0bWwgWyBGYWls
dXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi1oYXZlLWxvY2FsLW9mZmVyLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taGF2ZS1sb2NhbC1wcmFuc3dlci5o
dG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLWhhdmUtcmVtb3RlLW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLXJlbW90
ZS1wcmFuc3dlci5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWljZWNhbmRpZGF0ZS1ldmVudC5odG1sIFsgRmFpbHVy
ZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24taW5zcGVjdC1hbnN3ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBm
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLW1lZGlhLXNldHVwLWNhbGxiYWNrcy1zaW5nbGUtZGlhbG9nLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1tZWRpYS1zZXR1cC10d28tZGlhbG9ncy5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIz
NTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW9ubmVnb3RpYXRpb25uZWVk
ZWQuaHRtbCBbIFBhc3MgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcGFnZS1jYWNoZS5odG1sIFsgQ3Jhc2ggXQord2Via2l0
Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZWx5
LWFzc2lnbmVkLXRyYW5zY2VpdmVyLW1pZC5odG1sIFsgUGFzcyBGYWlsdXJlIFRpbWVvdXQgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNl
dExvY2FsRGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0
aW9uLW9mZmVyLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dl
YnJ0Yy90aGlyZC1wYXJ0eS1mcmFtZS1pY2UtY2FuZGlkYXRlLWZpbHRlcmluZy5odG1sIFsgRmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjLWV4dGVuc2lvbnMvUlRDUnRwUGFyYW1ldGVycy1tYXhGcmFtZXJhdGUuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3Jt
LXRlc3RzL3dlYnJ0Yy1leHRlbnNpb25zL1JUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZS1jYXB0
dXJlVGltZXN0YW1wLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtcHJpb3JpdHkvUlRDUnRwUGFyYW1ldGVy
cy1lbmNvZGluZ3MuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbnNwZWN0
b3IvcGFnZS9vdmVycmlkZVNldHRpbmctSUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZC5odG1s
IFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZv
cm0tdGVzdHMvbWVkaWEtY2FwYWJpbGl0aWVzL2RlY29kaW5nSW5mby53ZWJydGMuaHRtbCBbIEZh
aWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRl
c3RzL21lZGlhLWNhcGFiaWxpdGllcy9lbmNvZGluZ0luZm8ud2VicnRjLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2FkZFRyYW5zY2VpdmVyLXRoZW4tYWRkVHJh
Y2suaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tdmlk
ZW8tZWxlbWVudC1wbGF5aW5nLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL2NhbmRpZGF0ZS1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IHdlYnJ0Yy9jYW52YXMtdG8tcGVlci1jb25uZWN0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2NhcHR1cmVDYW52YXMtd2VicnRjLmh0bWwgWyBUaW1l
b3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2Nsb3NpbmctcGVlcmNvbm5lY3Rpb24u
aHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGlyZWN0aW9uLWNo
YW5nZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9kaXNhYmxl
LWVuY3J5cHRpb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMv
ZXBoZW1lcmFsLWNlcnRpZmljYXRlcy1hbmQtY25hbWVzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgd2VicnRjL2ZpbHRlcmluZy1pY2UtY2FuZGlkYXRlLWFmdGVyLXJlbG9h
ZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9oMjY0LXBhY2tl
dGl6YXRpb24tbW9kZS5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL2xpYndlYnJ0Yy9zZXRMb2NhbERlc2NyaXB0aW9uQ3Jhc2guaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvbm8tcG9ydC16ZXJvLWluLXVwZC1jYW5k
aWRhdGVzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXIt
Y29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0ZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IHdlYnJ0Yy9wZWVyLWNvbm5lY3Rpb24tcmVtb3RlLWF1ZGlvLW11dGUyLmh0bWwg
WyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi10
cmFjay1lbmQuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVl
cmNvbm5lY3Rpb24tcGFnZS1jYWNoZS1sb25nLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL3BlZXJjb25uZWN0aW9uLXBhZ2UtY2FjaGUuaHRtbCBbIFRpbWVvdXQg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcmVjZWl2ZXItdHJhY2stc2hvdWxkLXN0YXkt
bGl2ZS1ldmVuLWlmLXJlY2VpdmVyLWlzLWluYWN0aXZlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgd2VicnRjL3JlbW92ZS10cmFjay5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy91dGY4LXNkcC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1hZGRUcmFuc2NlaXZlci5odG1sIFsgRmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1nZXRQYXJhbWV0ZXJzLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW1lZGlhc3RyZWFtdHJh
Y2stc3RhdHMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlk
ZW8tbXV0ZS12cDguaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMv
dmlkZW8tbXV0ZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92
aWRlby1yZXBsYWNlLXRyYWNrLXRvLW51bGwuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVwbGFjZS10cmFjay5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby11bm11dGUuaHRtbCBbIENyYXNoIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXZwOC12aWRlb3JhbmdlLmh0bWwgWyBUaW1lb3V0
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZwOC10aGVuLWgyNjQuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdnA5LXN2Yy5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92cDkuaHRtbCBbIEZhaWx1cmUgXQorCiAjLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwogIyBFbmQgb2YgR1N0cmVhbWVyLXJlbGF0ZWQgYnVncwog
Iy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8KQEAgLTE0MjAsMTYgKzE0OTksMTQgQEAg
d2Via2l0Lm9yZy9iLzc5MjAzIHdlYmtpdC5vcmcvYi8xODY2NzggZmFzdC9tZWRpYXN0cmVhbS9N
ZWRpYVN0cmVhbS12aWRlby1lbGVtZW4KIAogZmFzdC9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMt
YWRkRXZlbnRMaXN0ZW5lci5odG1sIFsgRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIF0KIAotd2Vi
a2l0Lm9yZy9iLzE5MTAwNiB3ZWJydGMvc2ltdWxjYXN0LWgyNjQuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzE5MTAwNiB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9zaW11bGNhc3Qt
aDI2NC5odG1sIFsgRmFpbHVyZSBUaW1lb3V0IF0KIAotd2Via2l0Lm9yZy9iLzE5MzY0MSB3ZWJy
dGMvdmlkZW8tc2V0RGlyZWN0aW9uLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQord2Via2l0Lm9yZy9i
LzE5MzY0MSB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1zZXREaXJlY3Rpb24uaHRt
bCBbIEZhaWx1cmUgUGFzcyBUaW1lb3V0IF0KIAogd2Via2l0Lm9yZy9iLzE5NDYxMSBodHRwL3dw
dC93ZWJydGMvZ2V0VXNlck1lZGlhLXByb2Nlc3NTd2FwcGluZy5odG1sIFsgRmFpbHVyZSBdCiAK
IHdlYmtpdC5vcmcvYi8yMDEyNjcgWyBSZWxlYXNlIF0gd2VicnRjL3ZpZGVvLWgyNjQuaHRtbCBb
IFRpbWVvdXQgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMjIyNTg1IFsgRGVidWcgXSB3ZWJydGMv
dmlkZW8taDI2NC5odG1sIFsgQ3Jhc2ggXQotCi13ZWJraXQub3JnL2IvMjEwMjcyIHdlYnJ0Yy9k
YXRhY2hhbm5lbC9tdWx0aXBsZS1jb25uZWN0aW9ucy5odG1sIFsgVGltZW91dCBQYXNzIF0KK3dl
YmtpdC5vcmcvYi8yMjI1ODUgd2Via2l0Lm9yZy9iLzIzNTg4NSBbIERlYnVnIF0gd2VicnRjL3Zp
ZGVvLWgyNjQuaHRtbCBbIENyYXNoIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMjE1MDA1IHdl
YmtpdC5vcmcvYi8yMTg3ODcgd2VicnRjL2gyNjQtYmFzZWxpbmUuaHRtbCBbIENyYXNoIFRpbWVv
dXQgXQogIyBoMjY0LWhpZ2guaHRtbCBpcyBtYXJrZWQgYXMgc2xvdyBpbiB0aGUgcm9vdCBleHBl
Y3RhdGlvbgpAQCAtMTQzOCw3ICsxNTE1LDcgQEAgd2Via2l0Lm9yZy9iLzIxNTAwNyBbIERlYnVn
IF0gd2VicnRjL2gyNjQtaGlnaC5odG1sIFsgU2xvdyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9i
LzIxNjUzOCB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMtc29mdHdhcmUtaDI2NC1iYXNlbGlu
ZS5odG1sIFsgU2xvdyBGYWlsdXJlIF0KIAotd2Via2l0Lm9yZy9iLzIxNjc2MyB3ZWJydGMvY2Fw
dHVyZUNhbnZhcy13ZWJydGMtc29mdHdhcmUtaDI2NC1oaWdoLmh0bWwgWyBDcmFzaCBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMTY3NjMgd2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FwdHVy
ZUNhbnZhcy13ZWJydGMtc29mdHdhcmUtaDI2NC1oaWdoLmh0bWwgWyBDcmFzaCBGYWlsdXJlIFRp
bWVvdXQgXQogCiB3ZWJraXQub3JnL2IvMjE4MjIxIHdlYnJ0Yy92cDktcHJvZmlsZTIuaHRtbCBb
IFRpbWVvdXQgRmFpbHVyZSBdCiAKQEAgLTIyMjcsMTMgKzIzMDQsMTIgQEAgd2Via2l0Lm9yZy9i
LzE4NjEwMCBjc3MzL2NvbG9yLWZpbHRlcnMvY29sb3ItZmlsdGVyLWNvbG9yLXByb3BlcnR5LWxp
c3QtaXRlbS5odG0KIHdlYmtpdC5vcmcvYi8xODYxMDAgZmFzdC9oaWRwaS9maWx0ZXJzLXR1cmJ1
bGVuY2UuaHRtbCBbIEltYWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE4NzA0NCB3ZWJh
bmltYXRpb25zL29wYWNpdHktYW5pbWF0aW9uLXlpZWxkcy1jb21wb3NpdGluZy1zcGFuLmh0bWwg
WyBGYWlsdXJlIF0KIAotd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvZGF0YWNoYW5uZWwvbWRu
cy1pY2UtY2FuZGlkYXRlcy5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IHdl
YnJ0Yy92aWRlby1hZGRUcmFjay5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTg3MDY0
IHdlYnJ0Yy92aWRlby1kaXNhYmxlZC1ibGFjay5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9i
LzE4NzA2NCB3ZWJydGMvdmlkZW8tcmVtb3RlLW11dGUuaHRtbCBbIENyYXNoIF0KLXdlYmtpdC5v
cmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJlcGxhY2UtbXV0ZWQtdHJhY2suaHRtbCBbIFRpbWVv
dXQgXQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRl
by1yZXBsYWNlLW11dGVkLXRyYWNrLmh0bWwgWyBUaW1lb3V0IEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1kaXNhYmxlZC1ibGFj
ay5odG1sIFsgQ3Jhc2ggVGltZW91dCBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlbW90ZS1tdXRlLmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0K
IHdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJvdGF0aW9uLmh0bWwgWyBGYWlsdXJl
IF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXJvdGF0aW9uLW5vLWN2by5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2Vi
cnRjL3ZpZGVvLXJvdGF0aW9uLW5vLWN2by5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCiB3ZWJraXQu
b3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby13aXRoLWRhdGEtY2hhbm5lbC5odG1sIFsgRmFpbHVy
ZSBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMv
d2VicnRjL1JUQ1BlZXJDb25uZWN0aW9uLWdldFN0YXRzLmh0dHBzLmh0bWwgWyBGYWlsdXJlIFBh
c3MgXQogCkBAIC0yNDQwLDkgKzI1MTYsNiBAQCB3ZWJraXQub3JnL2IvMTc0MjQyIG1lZGlhL21l
ZGlhLWZ1bGxzY3JlZW4tcGF1c2UtaW5saW5lLmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8x
ODIxMDggaHR0cC90ZXN0cy9tZWRpYS9obHMvaGxzLXdlYnZ0dC10cmFja3MuaHRtbCBbIFRpbWVv
dXQgXQogd2Via2l0Lm9yZy9iLzEzNzMxMSBtZWRpYS92aWRlby1mdWxsc2NyZWVuLW9ubHktcGxh
eWJhY2suaHRtbCBbIFRpbWVvdXQgQ3Jhc2ggXQogCi13ZWJraXQub3JnL2IvMTk4MTEzIFsgUmVs
ZWFzZSBdIGZhc3QvbWVkaWFzdHJlYW0vbWVkaWEtc3RyZWFtLXBhZ2UtbXV0ZWQuaHRtbCBbIFBh
c3MgXQotd2Via2l0Lm9yZy9iLzE5ODExMyBbIERlYnVnIF0gZmFzdC9tZWRpYXN0cmVhbS9tZWRp
YS1zdHJlYW0tcGFnZS1tdXRlZC5odG1sIFsgVGltZW91dCBdCi0KIHdlYmtpdC5vcmcvYi8xOTQw
NDQgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3Vy
Y2UtYWRkc291cmNlYnVmZmVyLmh0bWwgWyBGYWlsdXJlIF0KIAogIyBSZW1vdmVkIGZyb20gZ2Vu
ZXJhbCBUZXN0RXhwZWN0YXRpb25zIGluIHIyNzYzOTMsIGJ1dCBjb25zb2xlIGVycm9yIG1lc3Nh
Z2Ugc3RpbGwgaGFwcGVuaW5nIGluIEdMaWIuCkBAIC0yNTI3LDEwICsyNjAwLDcgQEAgbWVkaWEv
dmlkZW8tcmVtb3RlLWNvbnRyb2wtcGxheXBhdXNlLmh0bWwgWyBTa2lwIF0KIAogd2Via2l0Lm9y
Zy9iLzIwNzA2MiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9t
ZWRpYXNvdXJjZS1yZXBsYXkuaHRtbCBbIEZhaWx1cmUgUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8y
MjkzNDYgd2VicnRjL211bHRpLWF1ZGlvLmh0bWwgWyBUaW1lb3V0IFBhc3MgXQotCi13ZWJraXQu
b3JnL2IvMjI5NzE1IFsgRGVidWcgXSBmYXN0L21lZGlhc3RyZWFtL2dldERpc3BsYXlNZWRpYS1t
YXgtY29uc3RyYWludHMzLmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi8yMjk3MTUgWyBE
ZWJ1ZyBdIGZhc3QvbWVkaWFzdHJlYW0vc2NyZWVuY2FwdHVyZS11c2VyLWdlc3R1cmUuaHRtbCBb
IFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIyOTM0NiB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy9tdWx0aS1hdWRpby5odG1sIFsgVGltZW91dCBQYXNzIEZhaWx1cmUgXQogCiB3ZWJraXQub3Jn
L2IvMjI5NzM4IGZhc3QvdGV4dC93aGl0ZXNwYWNlL3RhYi1jaGFyYWN0ZXItYmFzaWNzLmh0bWwg
WyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMjk3MzggZmFzdC90ZXh0L3dvcmQtYnJlYWsuaHRt
bCBbIEZhaWx1cmUgXQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWxvY2FsRGVzY3JpcHRpb24tZXhwZWN0ZWQu
dHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLWxvY2FsRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5NWE5
YjYxOTAwOWE3NDMyYTEyOTM2YTdjNmE4MTg5MDg0ZDJjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGVzdHMg
UlRDUGVlckNvbm5lY3Rpb24gbG9jYWxEZXNjcmlwdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRp
b24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDEsIHJlcXVlc3RGYWlsZWQxKTsgZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uCitQQVNTIHJlcXVlc3RTdWNjZWVkZWQgd2FzIGNhbGxlZC4KK1BBU1MgcGMu
c2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2Nl
ZWRlZDIsIHJlcXVlc3RGYWlsZWQyKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHJl
cXVlc3RGYWlsZWQgd2FzIGNhbGxlZC4KK1BBU1MgcGMubG9jYWxEZXNjcmlwdGlvbi50eXBlIGlz
ICJvZmZlciIKK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIGxvY2FsLiBX
YXMgdD0wIDAKKy4KK1BBU1MgcGMubG9jYWxEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZB
SUwgcGMubG9jYWxEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIGxvY2FsLiBXYXMgdD0wIDAKKy4K
K1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYg
LS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVl
ckNvbm5lY3Rpb24tbWVkaWEtc2V0dXAtc2luZ2xlLWRpYWxvZy1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
bWVkaWEtc2V0dXAtc2luZ2xlLWRpYWxvZy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkzNDJk
ZTcyODE5ZDdhOWM1MTdmNTMxYjFmNWZkMTdkNWEwNDIyNAotLS0gL2Rldi9udWxsCisrKyBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYxIEBA
CitUZXN0IHNldHRpbmcgdXAgbWVkaWEgYmV0d2VlbiB0d28gUlRDUGVlckNvbm5lY3Rpb24gaW5z
dGFuY2VzIHdpdGggb25lIHNpbmdsZSBTRFAgZGlhbG9nLgorCitPbiBzdWNjZXNzLCB5b3Ugd2ls
bCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01Q
TEVURSIuCisKKworQ3JlYXRlIFJUQ1BlZXJDb25uZWN0aW9uIEEKK1BBU1MgcGNBLnNpZ25hbGlu
Z1N0YXRlIGlzICdzdGFibGUnCitQQVNTIHBjQS5wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiBpcyBu
dWxsCitQQVNTIHBjQS5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjQS5w
ZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorUEFTUyBwY0EuY3VycmVudFJlbW90ZURl
c2NyaXB0aW9uIGlzIG51bGwKKworQ3JlYXRlIFJUQ1BlZXJDb25uZWN0aW9uIEIKK1BBU1MgcGNC
LnNpZ25hbGluZ1N0YXRlIGlzICdzdGFibGUnCitQQVNTIHBjQi5wZW5kaW5nTG9jYWxEZXNjcmlw
dGlvbiBpcyBudWxsCitQQVNTIHBjQi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbiBpcyBudWxsCitQ
QVNTIHBjQi5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorUEFTUyBwY0IuY3VycmVu
dFJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKKworQTogYWRkIG1lZGlhCitBOiBjcmVhdGUgb2Zm
ZXIKK0E6IGdvdCBvZmZlciwgc2V0IGl0IGFzIGxvY2FsIGRlc2NyaXB0aW9uCitBOiBsb2NhbCBv
ZmZlciBzZXQKK1BBU1MgcGNBLnNpZ25hbGluZ1N0YXRlIGlzICdoYXZlLWxvY2FsLW9mZmVyJwor
UEFTUyBwY0EucGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gaXMgYW4gaW5zdGFuY2Ugb2YgUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uCitQQVNTIHBjQS5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbiBpcyBudWxs
CisKK0E6IHNlbmQgb2ZmZXIgdG8gQgorQSAtLS0gb2ZmZXIgLS0+IEIKK0I6IGdvdCBvZmZlciBm
cm9tIEEsIHNldCBpdCBhcyByZW1vdGUgZGVzY3JpcHRpb24KK0I6IHJlbW90ZSBvZmZlciBzZXQK
K1BBU1MgcGNCLnNpZ25hbGluZ1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKK1BBU1MgcGNC
LnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBhbiBpbnN0YW5jZSBvZiBSVENTZXNzaW9uRGVz
Y3JpcHRpb24KK1BBU1MgcGNCLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK0I6
IGFkZCBtZWRpYSAodG8gaW5jbHVkZSBpbiBhbnN3ZXIpCitCOiBjcmVhdGUgYW5zd2VyCitCOiBn
b3QgYW5zd2VyLCBzZXQgaXQgYXMgbG9jYWwgZGVzY3JpcHRpb24KK0I6IGxvY2FsIGFuc3dlciBz
ZXQKK1BBU1MgcGNCLnNpZ25hbGluZ1N0YXRlIGlzICdzdGFibGUnCitQQVNTIHBjQi5wZW5kaW5n
TG9jYWxEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjQi5jdXJyZW50TG9jYWxEZXNjcmlwdGlv
biBpcyBhbiBpbnN0YW5jZSBvZiBSVENTZXNzaW9uRGVzY3JpcHRpb24KK1BBU1MgcGNCLnBlbmRp
bmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitGQUlMIHBjQi5jdXJyZW50UmVtb2V0RGVzY3Jp
cHRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbgorCitCOiBz
ZW5kIGFuc3dlciB0byBBCitBIDwtLSBhbnN3ZXIgLS0gQgorQTogZ290IGFuc3dlciBmcm9tIEIs
IHNldCBpdCBhcyByZW1vdGUgZGVzY3JpcHRpb24KK0E6IHJlbW90ZSBhbnN3ZXIgc2V0CitQQVNT
IHBjQS5zaWduYWxpbmdTdGF0ZSBpcyAnc3RhYmxlJworUEFTUyBwY0EucGVuZGluZ0xvY2FsRGVz
Y3JpcHRpb24gaXMgbnVsbAorUEFTUyBwY0EuY3VycmVudExvY2FsRGVzY3JpcHRpb24gaXMgYW4g
aW5zdGFuY2Ugb2YgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uCitQQVNTIHBjQS5wZW5kaW5nUmVtb3Rl
RGVzY3JpcHRpb24gaXMgbnVsbAorRkFJTCBwY0EuY3VycmVudFJlbW9ldERlc2NyaXB0aW9uIGlz
IG5vdCBhbiBpbnN0YW5jZSBvZiBSVENTZXNzaW9uRGVzY3JpcHRpb24KKworUEFTUyBPZmZlci9h
bnN3ZXIgZGlhbG9nIGNvbXBsZXRlZAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVl
CisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xp
Yi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4
cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uOWQ1M2VjNWMyMTYwZDAzMjczYzE5ODFmOGVkOWZhMTgzODRmZDA3NQotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBA
QAorVGVzdHMgUlRDUGVlckNvbm5lY3Rpb24gcmVtb3RlRGVzY3JpcHRpb24uCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Np
b25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgcmVxdWVzdEZhaWxlZDEpOyBk
aWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdFN1Y2NlZWRlZCB3YXMgY2FsbGVk
LgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4o
cmVxdWVzdFN1Y2NlZWRlZDIsIHJlcXVlc3RGYWlsZWQyKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRp
b24uCitQQVNTIHJlcXVlc3RGYWlsZWQgd2FzIGNhbGxlZC4KK1BBU1MgcGMucmVtb3RlRGVzY3Jp
cHRpb24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uLnNkcCBzaG91
bGQgYmUgcmVtb3RlLiBXYXMgdD0wIDAKKy4KK1BBU1MgcGMucmVtb3RlRGVzY3JpcHRpb24udHlw
ZSBpcyAib2ZmZXIiCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgcmVt
b3RlLiBXYXMgdD0wIDAKKy4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVT
VCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3RlbHktYXNzaWduZWQtdHJhbnNjZWl2
ZXItbWlkLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVseS1hc3NpZ25lZC10cmFuc2NlaXZlci1t
aWQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmRmZjAyYWE3NGY3MjIwZWRhY2NlMzdkM2YxYmE3
NGRlYzUxYWRjZTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGli
L2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3RlbHktYXNzaWduZWQtdHJh
bnNjZWl2ZXItbWlkLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDI2IEBACitUZXN0IHRoZSBjYXNl
IHdoZXJlIGFuIFJUQ1J0cFRyYW5zY2VpdmVyIGdldHMgYSByZW1vdGVseSBhc3NpZ25lZCBtaWQg
YW5kIGFsc28gdW5tdXRlIHRoZSBhc3NvY2lhdGVkIHNvdXJjZQorCitPbiBzdWNjZXNzLCB5b3Ug
d2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBD
T01QTEVURSIuCisKKworcGNBLmFkZFRyYWNrKHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdLCBz
dHJlYW0pCitBJ3MgdHJhbnNjZWl2ZXIgaXMgbm90IHlldCBhc3NvY2lhdGVkIHdpdGggYSBtZWRp
YSBkZXNjcmlwdGlvbiBhbmQgc2hvdWxkIGhhdmUgYSBudWxsIG1pZAorUEFTUyBwY0EuZ2V0VHJh
bnNjZWl2ZXJzKClbMF0ubWlkIGlzIG51bGwKK0E6IGxvY2FsIG9mZmVyIHNldCAobWlkIGdldHMg
ZGVmaW5lZCkKK21pZEFzc2lnbmVkQnlBID0gcGNBLmdldFRyYW5zY2VpdmVycygpWzBdLm1pZAor
RkFJTCBtaWRBc3NpZ25lZEJ5QSAhPT0gbnVsbCBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgor
cGNCLmFkZFRyYWNrKHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdLCBzdHJlYW0pCitCJ3MgdHJh
bnNjZWl2ZXIgaXMgbm90IHlldCBhc3NvY2lhdGVkIHdpdGggYSBtZWRpYSBkZXNjcmlwdGlvbiBh
bmQgc2hvdWxkIGhhdmUgYSBudWxsIG1pZAorUEFTUyBwY0IuZ2V0VHJhbnNjZWl2ZXJzKClbMF0u
bWlkIGlzIG51bGwKK0I6IHJlbW90ZSBvZmZlciBzZXQgKG1pZCBnZXRzIGRlZmluZWQpCitCJ3Mg
dHJhbnNjZWl2ZXIgc2hvdWxkIGdldCBpdHMgbWlkIGZyb20gdGhlIHJlbW90ZSBzaWRlIChBKQor
UEFTUyBwY0IuZ2V0VHJhbnNjZWl2ZXJzKClbMF0ubWlkIGlzIG1pZEFzc2lnbmVkQnlBCitQQVNT
IE9mZmVyL2Fuc3dlciBkaWFsb2cgY29tcGxldGVkCitQQVNTIEI6IGdvdCByZW1vdGUgdHJhY2sg
ZXZlbnQKK1BBU1MgZXZlbnQudHJhY2sgaXMgYW4gaW5zdGFuY2Ugb2YgTWVkaWFTdHJlYW1UcmFj
aworUEFTUyBBOiBnb3QgcmVtb3RlIHRyYWNrIGV2ZW50CitQQVNTIEI6IHJlbW90ZSB0cmFjayB1
bm11dGUgZXZlbnQKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01Q
TEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXItZXhwZWN0
ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLWV4cGVjdGVkLnR4dApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi41MjAzZjBiYmM4ZGJlYjc4OGY3ODU0ODk1NjYwNzYyMTVlM2NkYmZlCi0tLSAvZGV2
L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLWV4cGVjdGVkLnR4dApA
QCAtMCwwICsxLDM5IEBACitUZXN0IFJUQ1BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0
aW9uIGNhbGxlZCB3aXRoIGFuIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiBvZiB0eXBlICdvZmZlcicK
KworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywg
Zm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKKyoqKiBDcmVhdGUgKHJlbW90ZSkgb2Zm
ZXIgd2l0aCBhdWRpbyAocmVtb3RlT2ZmZXIxKQorKioqIERvbmUsIHN0YXJ0IHRlc3Rpbmcgd2l0
aCByZW1vdGVPZmZlcjEKK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ3N0YWJsZScKK1BBU1Mg
cGMucmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorUEFTUyBwYy5wZW5kaW5nUmVtb3RlRGVzY3Jp
cHRpb24gaXMgbnVsbAorUEFTUyBwYy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAor
CitQQVNTIHJlbW90ZU9mZmVyMSBzZXQgYXMgcmVtb3RlIGRlc2NyaXB0aW9uCitQQVNTIHBjLnNp
Z25hbGluZ1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKK0ZBSUwgcGMucmVtb3RlRGVzY3Jp
cHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3QgUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uXS4KK0ZBSUwgcGMucGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uIHNob3VsZCBiZSBb
b2JqZWN0IE9iamVjdF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbl0uCitQQVNT
IHBjLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK1BBU1MgcmVtb3RlT2ZmZXIx
IHNldCBhcyByZW1vdGUgZGVzY3JpcHRpb24gKGFnYWluKQorUEFTUyBwYy5zaWduYWxpbmdTdGF0
ZSBpcyAnaGF2ZS1yZW1vdGUtb2ZmZXInCisKKyoqKiBUcnkgc2V0dGluZyBsb2NhbCBkZXNjcmlw
dGlvbnMgd2l0aCBiYWQgdHlwZXMgZm9yIHRoZSBjdXJyZW50IHN0YXRlCitQQVNTIHByb21pc2Ug
cGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oe3R5cGU6J2Fuc3dlcicsIHNkcDpyZW1vdGVPZmZlcjEu
c2RwfSk7IHJlamVjdGVkIHdpdGggSW52YWxpZFN0YXRlRXJyb3I6IEZhaWxlZCB0byBzZXQgcmVt
b3RlIGFuc3dlciBzZHAKK1BBU1MgcHJvbWlzZSBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbih7dHlw
ZToncHJhbnN3ZXInLCBzZHA6cmVtb3RlT2ZmZXIxLnNkcH0pOyByZWplY3RlZCB3aXRoIEludmFs
aWRTdGF0ZUVycm9yOiBGYWlsZWQgdG8gc2V0IHJlbW90ZSBhbnN3ZXIgc2RwCisKKyoqKiBDcmVh
dGUgKHJlbW90ZSkgb2ZmZXIgd2l0aCB2aWRlbyAocmVtb3RlT2ZmZXIyKQorKioqIERvbmUsIHN0
YXJ0IHRlc3Rpbmcgd2l0aCByZW1vdGVPZmZlcjIKK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMg
J2hhdmUtcmVtb3RlLW9mZmVyJworCitQQVNTIHJlbW90ZU9mZmVyMiBzZXQgYXMgcmVtb3RlIGRl
c2NyaXB0aW9uCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicK
K0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2Fz
IFtvYmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uXS4KK0ZBSUwgcGMucGVuZGluZ1JlbW90ZURl
c2NyaXB0aW9uIHNob3VsZCBiZSBbb2JqZWN0IE9iamVjdF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Np
b25EZXNjcmlwdGlvbl0uCitQQVNTIHBjLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxs
CisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24tc3RhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3Jt
L2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjI4NDI2OGNlNzhhYWUyYWM5NmMyY2QyZjg0NDA2MzMwNDMwNWU3MTEK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc3RhYmxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUx
IEBACitUZXN0cyBSVENQZWVyQ29ubmVjdGlvbiBpbiBzdGFibGUgc3RhdGUuCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUi
CitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZp
bmlzaElmU3VjY2VlZGVkLCByZXF1ZXN0RmFpbGVkMSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9u
LgorUEFTUyBzZXRMb2NhbERlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwgZXJyb3JSZWFzb24ubmFt
ZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9yLiBXYXMgSW52YWxpZFN0
YXRlRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2Vw
dGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBh
biBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3RhYmxl
IgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihm
aW5pc2hJZlN1Y2NlZWRlZCwgcmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlv
bi4KK1BBU1Mgc2V0TG9jYWxEZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVhc29uLm5h
bWUgc2hvdWxkIGJlIEludmFsaWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIEludmFsaWRT
dGF0ZUVycm9yLgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNl
cHRpb24uIFdhcyBudWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cg
YW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJs
ZSIKK1BBU1MgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVu
KGZpbmlzaElmU3VjY2VlZGVkLCByZXF1ZXN0RmFpbGVkMyk7IGRpZCBub3QgdGhyb3cgZXhjZXB0
aW9uLgorUEFTUyBzZXRSZW1vdGVEZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVhc29u
Lm5hbWUgc2hvdWxkIGJlIEludmFsaWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIEludmFs
aWRTdGF0ZUVycm9yLgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBl
eGNlcHRpb24uIFdhcyBudWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhy
b3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0
YWJsZSIKK1BBU1MgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50
aGVuKGZpbmlzaElmU3VjY2VlZGVkLCByZXF1ZXN0RmFpbGVkNCk7IGRpZCBub3QgdGhyb3cgZXhj
ZXB0aW9uLgorUEFTUyBzZXRSZW1vdGVEZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVh
c29uLm5hbWUgc2hvdWxkIGJlIEludmFsaWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIElu
dmFsaWRTdGF0ZUVycm9yLgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBh
biBleGNlcHRpb24uIFdhcyBudWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQg
dGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMg
InN0YWJsZSIKK1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24p
LnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDEsIGZpbmlzaElmRmFpbGVkKTsgZGlkIG5vdCB0aHJvdyBl
eGNlcHRpb24uCitQQVNTIHNldExvY2FsRGVzY3JpcHRpb24gc3VjY2VlZGVkLgorUEFTUyBwYy5s
b2NhbERlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9u
LnNkcCBzaG91bGQgYmUgbG9jYWwuIFdhcyB0PTAgMAorLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlw
dGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFs
aW5nU3RhdGUgaXMgImhhdmUtbG9jYWwtb2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24g
c2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2Ny
aXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWdu
YWxpbmdTdGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNz
aW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDIsIGZpbmlzaElmRmFpbGVkKTsg
ZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIHN1Y2Nl
ZWRlZC4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9u
LiBXYXMgbnVsbC4KK1BBU1MgcGMucmVtb3RlRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitG
QUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgcmVtb3RlLiBXYXMgdD0wIDAK
Ky4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgImhhdmUtcmVtb3RlLW9mZmVyIgorUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCA3YjE3NWYzYTQyZjlhYzViMTNhMWUwZjE0NGYz
Y2Y2MDcxZGNjMmRkLi5mMzk0NTZjZDQxZWJkNTJiZDdkOTUxZDExNzE1ZDgwYTY1MDQ2ZGExIDEw
MDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIw
MjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAg
ICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRW5hYmxlIEdz
dFdlYlJUQyBieSBkZWZhdWx0IGlmIGEgcmVjZW50LWVub3VnaCAoPj0gMS4yMCkgdmVyc2lvbiBp
cyBhdmFpbGFibGUuCisKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvRmluZEdTdHJlYW1lci5jbWFr
ZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZToKKyAgICAgICAgKiBT
b3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlOgorCiAyMDIyLTAzLTExICBF
bGxpb3R0IFdpbGxpYW1zICA8ZW13QGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlZmlsZS5zaGFy
ZWQ6IFJlbmFtZSBXT1JLU1BBQ0UgdG8gV09SS1NQQUNFX1BBVEggYW5kIGFsbG93IG92ZXJyaWRl
cwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>454981</attachid>
            <date>2022-03-17 09:38:38 -0700</date>
            <delta_ts>2022-03-18 05:01:47 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220317093835.patch</filename>
            <type>text/plain</type>
            <size>340187</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxNDA5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IDg3NWM3YmMyZTEzMGQ4NWMwNjcwYmM2
NTQyZGJlZDRlYjRhYjVkMWMuLjJhN2ZiNWUzYWM0YWUyNDU4MDFjZDExNmU2MzRmODBhMmU5MmM0
ZDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAzLTE2ICBNeWxlcyBDLiBNYXhmaWVsZCAg
PG1tYXhmaWVsZEBhcHBsZS5jb20+CiAKICAgICAgICAgW1dlYkdQVV0gSW1wbGVtZW50IGZpcnN0
IGRyYWZ0IG9mIGJ1ZmZlciBtYXBwaW5nIGFjY29yZGluZyB0byB0aGUgc3BlYwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGIyYTk4MjVkYjY4MmYyYmZmYWUzYjZjZWQxZDQ5OWU1Y2ExNmM2OGQuLmQ0YTQ1ZjMwN2M3
ODgyOTQwM2MzMjM1N2I1NTkwZTU4N2M2MzIxYWIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNzQg
QEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgor
CisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0IG9mIHRoZSBHc3RXZWJSVEMgYmFj
a2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2
NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW5p
dGlhbCBHc3RXZWJSVEMgYmFja2VuZC4gQSBsb3Qgb2YgZmVhdHVyZXMgdW5pbXBsZW1lbnRlZCBz
dGlsbCwgYnV0IHdlIHdpbGwgaW5jcmVtZW50YWxseQorICAgICAgICBpbXByb3ZlIHRoZSBsYXlv
dXQgdGVzdCBjb3ZlcmFnZSBpbiBmb2xsb3ctdXAgcGF0Y2hlcy4gTW9zdCBub3RhYmxlIHNob3J0
LWNvbWluZ3MgY3VycmVudGx5OgorCisgICAgICAgIC0gRGF0YUNoYW5uZWwgc3VwcG9ydCBpcyBp
bmNvbXBsZXRlIChidWcgMjM1ODc5KQorICAgICAgICAtIE5ldHdvcmsgdHJhZmZpYyBub3Qgcm91
dGVkIHRocm91Z2ggTmV0d29yayBwcm9jZXNzIHlldAorICAgICAgICAtIFN0YXRzIHN1cHBvcnQg
aW5jb21wbGV0ZQorICAgICAgICAtIERUTUYgc3VwcG9ydCB1bmltcGxlbWVudGVkCisgICAgICAg
IC0gSUNFIHJlc3RhcnRzIG5vdCBzdXBwb3J0ZWQgeWV0CisgICAgICAgIC0gUmUtbmVnb3RpYXRp
b24gdW5saWtlbHkgdG8gd29yaworICAgICAgICAtIFNpbXVsY2FzdCBub3QgaGFuZGxlZCB5ZXQK
KyAgICAgICAgLSBCYWxhbmNlZCBidW5kbGUgbm90IHN1cHBvcnRlZAorICAgICAgICAtIFJUWCBh
bmQgRkVDIHVuLXRlc3RlZCwgYnV0IHNob3VsZG4ndCBiZSBoYXJkIHRvIGZpeAorCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwOgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZSk6CisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpSVENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6ZnJvbVJU
Q0RhdGFDaGFubmVsSW5pdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXI6OmNoYW5uZWxFdmVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRh
Q2hhbm5lbEhhbmRsZXI6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6On5HU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
OjpzZXRDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyOjpzZW5kU3RyaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hh
bm5lbEhhbmRsZXI6OnNlbmRSYXdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRh
dGFDaGFubmVsSGFuZGxlcjo6Y2xvc2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0
YUNoYW5uZWxIYW5kbGVyOjpjaGVja1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ckRhdGFDaGFubmVsSGFuZGxlcjo6cmVhZHlTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbk1lc3NhZ2VEYXRhKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlU3RyaW5nKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25FcnJvcik6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uQnVmZmVy
ZWRBbW91bnRMb3cpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyOjpwb3N0VGFzayk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcDog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJh
bnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0
QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp+R1N0
cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kOjppY2VUcmFuc3BvcnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGll
bnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6c3Rh
dGVDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tl
bmQ6OmdhdGhlcmluZ1N0YXRlQ2hhbmdlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50
LmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmluaXRpYWxpemVQaXBlbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Ojp+R1N0cmVhbWVyTWVkaWFFbmRwb2ludCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp0ZWFyZG93blBpcGVsaW5lKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZGlzcG9zZUVsZW1lbnRDaGFpbik6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRDb25maWd1cmF0
aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlc3RhcnRJ
Y2UpOgorICAgICAgICAoV2ViQ29yZTo6ZmV0Y2hEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJD
b3JlOjpmZXRjaFNpZ25hbGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2NyaXB0aW9u
c0Zyb21XZWJSVENCaW4pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6ZG9TZXRMb2NhbERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OnNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvU2V0UmVtb3RlRGVzY3JpcHRpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6U2V0RGVzY3JpcHRpb25DYWxsRGF0YTo6U2V0RGVzY3JpcHRpb25D
YWxsRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRE
ZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpz
dG9yZVJlbW90ZU1MaW5lSW5mbyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50Ojpjb25maWd1cmVBbmRMaW5rU291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OnJlcXVlc3RQYWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6YWRkVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6cmVtb3ZlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVPZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0ZUFuc3dlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpnZXRTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjptZWRpYVN0cmVhbUZyb21SVENTdHJlYW0pOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkUmVtb3RlU3RyZWFtKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVJlbW90ZVN0cmVhbSk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVUcmFuc2NlaXZlckJh
Y2tlbmRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRy
YW5zY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNy
ZWF0ZVNvdXJjZUZvclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OnNldFNlbmRlclNvdXJjZUZyb21UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50Ojp0cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZEljZUNhbmRpZGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5l
bCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkRhdGFDaGFu
bmVsKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNsb3NlKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0b3ApOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3VzcGVuZCk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25OZWdvdGlhdGlvbk5lZWRlZCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUNvbm5lY3Rpb25DaGFuZ2Up
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VHYXRoZXJp
bmdDaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25J
Y2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvbkZhaWxlZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb2xsZWN0VHJhbnNjZWl2
ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmdhdGhlclN0
YXRzRm9yTG9nZ2luZyk6CisgICAgICAgIChXZWJDb3JlOjpSVENTdGF0c0xvZ2dlcjo6UlRDU3Rh
dHNMb2dnZXIpOgorICAgICAgICAoV2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI6OnRvSlNPTlN0cmlu
ZyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpwcm9j
ZXNzU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25T
dGF0c0RlbGl2ZXJlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpzdGFydExvZ2dpbmdTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpzdG9wTG9nZ2luZ1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmxvZ0NoYW5uZWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6c3RhdHNMb2dJbnRlcnZhbCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25O
YW1lKToKKyAgICAgICAgKFdURjo6TG9nQXJndW1lbnQ8V2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI+
Ojp0b1N0cmluZyk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyTWVkaWFFbmRwb2ludC5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRp
YUVuZHBvaW50Ojppc1N0b3BwZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6aXNOZWdvdGlhdGlvbk5lZWRlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpwaXBlbGluZSBjb25zdCk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpjcmVhdGVHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpyZWNlaXZlckNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OnNlbmRlckNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnN1c3Bl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpy
ZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpyZXN0YXJ0SWNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZDo6c2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdldFN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmJhY2tl
bmRGcm9tUlRQU2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6ZG9TZXRMb2NhbERlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbik6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRl
T2ZmZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
Ojpkb0NyZWF0ZUFuc3dlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6ZG9TdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZDo6ZG9BZGRJY2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVSZWNlaXZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZURhdGFDaGFu
bmVsSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpmaW5kRXhpc3RpbmdTZW5kZXIpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFjayk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRy
YW5zY2VpdmVyRnJvbVRyYWNrT3JLaW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6YmFja2VuZEZyb21SVFBUcmFuc2NlaXZlcik6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmV4aXN0aW5nVHJhbnNj
ZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpuZXdSZW1vdGVUcmFuc2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmNvbGxlY3RUcmFuc2NlaXZlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZW1vdmVUcmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFwcGx5Um90YXRpb25G
b3JPdXRnb2luZ1ZpZGVvU291cmNlcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjppc05lZ290aWF0
aW9uTmVlZGVkIGNvbnN0KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNw
cDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6
OmdldFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kOjpnZXRDb250cmlidXRpbmdTb3VyY2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0U3luY2hyb25pemF0aW9uU291cmNlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmNy
ZWF0ZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tl
bmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UnRwUmVjZWl2ZXJCYWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6bWVkaWFUeXBlRnJvbVJlY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0
cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1C
YWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3Jt
QmFja2VuZDo6fkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5z
Zm9ybWFibGVGcmFtZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJl
Y2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6cmVxdWVzdEtleUZyYW1lKToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
dXBkYXRlVHJhY2tTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVy
QmFja2VuZDo6c3RhcnRTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZDo6c3RvcFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBT
ZW5kZXJCYWNrZW5kOjpyZXBsYWNlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZDo6Z2V0UGFyYW1ldGVycyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpzZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmNyZWF0ZURUTUZCYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9y
bUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6
c2V0TWVkaWFTdHJlYW1JZHMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVy
QmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJh
bnNmb3JtQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFUeXBlRnJv
bVNlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1C
YWNrZW5kOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6On5HU3RyZWFtZXJSdHBT
ZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNl
bmRlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVl
c3RLZXlGcmFtZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6Y3JlYXRl
U2VuZGVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZl
ckJhY2tlbmQ6OmRpcmVjdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQ6OmN1cnJlbnREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXREaXJlY3Rpb24pOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjptaWQpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzdG9wKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c3RvcHBl
ZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ6OnNldENvZGVjUHJlZmVyZW5jZXMpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1C
YWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zv
cm1CYWNrZW5kOjpzZXRJbnB1dENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFRyYW5zZm9ybUJhY2tlbmQ6OmNsZWFyVHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2spOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6cHJvY2Vzc1Ry
YW5zZm9ybWVkRnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNr
ZW5kKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJT
Y3RwVHJhbnNwb3J0QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9SVENT
Y3RwVHJhbnNwb3J0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5z
cG9ydEJhY2tlbmQ6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyU2N0cFRyYW5z
cG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJh
Y2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6dW5yZWdpc3RlckNsaWVudCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2Vk
KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3Rw
VHJhbnNwb3J0QmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6ZmlsbFJUQ1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENSVFBTdHJl
YW1TdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUlRDQ29kZWNTdGF0cyk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6
OmZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENQ
ZWVyQ29ubmVjdGlvblN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENUcmFuc3BvcnRT
dGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsUmVwb3J0Q2FsbGJhY2spOgorICAgICAgICAo
V2ViQ29yZTo6Q2FsbGJhY2tIb2xkZXI6OkNhbGxiYWNrSG9sZGVyKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpnZXRTdGF0cyk6CisgICAgICAgICogTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Y3JlYXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpzZXRFbGVtZW50KToKKyAg
ICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGls
cy5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VDb21wb25lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9SVENJY2VQcm90b2NvbCk6CisgICAgICAgIChXZWJDb3JlOjp0b1JU
Q0ljZVRjcENhbmRpZGF0ZVR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VDYW5kaWRh
dGVUeXBlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDRXJyb3IpOgorICAgICAgICAoV2ViQ29y
ZTo6dG9XZWJSVENCaXRSYXRlUHJpb3JpdHkpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVJUQ0Vu
Y29kaW5nUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpmcm9tV2ViUlRDQml0UmF0ZVBy
aW9yaXR5KToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvUlRDUnRwU2VuZFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29y
ZTo6ZW5zdXJlRGVidWdDYXRlZ29yeUluaXRpYWxpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OnBh
cnNlSWNlQ2FuZGlkYXRlU0RQKToKKyAgICAgICAgKFdlYkNvcmU6Ong1MDlTZXJpYWxpemUpOgor
ICAgICAgICAoV2ViQ29yZTo6cHJpdmF0ZUtleVNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpnZW5lcmF0ZUNlcnRpZmljYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnNkcE1lZGlhSGFzQXR0
cmlidXRlS2V5KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJXZWJSVENVdGlscy5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDUnRwVHJh
bnNjZWl2ZXJEaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVJUQ1J0cFRyYW5zY2Vp
dmVyRGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OnRvU2Vzc2lvbkRlc2NyaXB0aW9uVHlw
ZSk6CisgICAgICAgIChXZWJDb3JlOjpmcm9tU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZSk6CisgICAg
ICAgIChXZWJDb3JlOjp0b1NpZ25hbGluZ1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRD
SWNlQ29ubmVjdGlvblN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDRHRsc1RyYW5zcG9y
dFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlVHJhbnNwb3J0U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6dG9SVENJY2VHYXRoZXJpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3Jl
OjpidW5kbGVQb2xpY3lGcm9tQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppY2VU
cmFuc3BvcnRQb2xpY3lGcm9tQ29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0b1JU
Q0Vycm9yRGV0YWlsVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOgor
ICAgICAgICAqIHBsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0
cmVhbWVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFt
ZXI6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6fkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIp
OgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6aGFuZGxl
TmV3RGVpbnRlcmxlYXZlUGFkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdURjo6YWRv
cHRHUmVmKToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4pOgor
ICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KToKKyAgICAgICAg
KFdURjo6cmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KToKKyAgICAgICAgKFdURjo6ZGVyZWZH
UHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4pOgorICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyPik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENSVFBU
cmFuc2NlaXZlcj4pOgorICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVs
Pik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4pOgorICAg
ICAgICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KToKKyAgICAgICAgKFdU
Rjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KToKKyAgICAgICAgKFdURjo6cmVm
R1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdz
dFdlYlJUQ0lDRVRyYW5zcG9ydD4pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HUmVmUHRyR1N0cmVhbWVyLmg6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYXBzTWVkaWFU
eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdT
dHJlYW1lci5oOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjpjcmVhdGVBdWRpb1NvdXJjZVByb3ZpZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHA6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OmNyZWF0ZUNvbnZlcnRlcik6
CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1
cmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3Vy
Y2UpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJE
VE1GU2VuZGVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
RFRNRlNlbmRlckJhY2tlbmQ6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjp+R1N0cmVhbWVyRFRNRlNlbmRl
ckJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6
OmNhbkluc2VydERUTUYpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJh
Y2tlbmQ6OnBsYXlUb25lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJC
YWNrZW5kOjp0b25lcyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2Vu
ZGVyQmFja2VuZDo6ZHVyYXRpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
RFRNRlNlbmRlckJhY2tlbmQ6OmludGVyVG9uZUdhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6b25Ub25lUGxheWVkKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQu
aDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lck1lZGlhU3RyZWFtU291cmNlLmNwcDoKKyAgICAgICAgKHdlYmtpdE1lZGlhU3RyZWFtU3Jj
QWRkVHJhY2spOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJWaWRlb0VuY29kZXIuY3BwOgorICAgICAgICAod2Via2l0X3dlYnJ0Y192aWRlb19lbmNv
ZGVyX2NsYXNzX2luaXQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRp
bWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpS
ZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6
Y2FwYWJpbGl0aWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBsZSk6CisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lci5oOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICog
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3Vy
Y2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6bG9ja1ZhbHZlIGNvbnN0
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OnJl
bGVhc2VWYWx2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291
cmNlR1N0cmVhbWVyOjpyZWdpc3RlckNsaWVudCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQu
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpiaW4p
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6ZGlz
cGF0Y2hTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c3RvcFBy
b2R1Y2luZ0RhdGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyOjpjYXBhYmlsaXRpZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJ
bmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzRGlkQ2hhbmdl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0
ZSk6CisgICAgICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjp+UmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2V0U291cmNlKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c3RhcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzdG9wKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6
c291cmNlTXV0ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lcjo6c291cmNlRW5hYmxlZENoYW5nZWQpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjppbml0aWFsaXplRnJv
bVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdT
dHJlYW1lcjo6bGluayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXI6OnNldFNpbmtQYWQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaDogQWRk
ZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFt
ZXI6OnNvdXJjZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXI6OmFsbG93ZWRDYXBzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6cGFkIGNvbnN0KToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2VuZGVy
IGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdT
dHJlYW1lcjo6YmluIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUpOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0
UGF5bG9hZFR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgICog
dGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZXNl
dFRvQ29uc2lzdGVudFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0V2Vi
UlRDSDI2NVN1cHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRXZWJSVENW
UDlTdXBwb3J0KToKKyAgICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0V2ViUlRDVlA5VlRC
U3VwcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6OnNldEVuYWJsZVdlYlJUQ0Vu
Y3J5cHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRVc2VEVExTMTApOgor
CiAyMDIyLTAzLTE3ICBBbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBb
SUZDXVtJbnRlZ3JhdGlvbl0gUmVwbGFjZSBlbmNsb3NpbmdUb3AvQm90dG9tL2hlaWdodCBjYWxs
cyB3aXRoIExpbmU6OmVuY2xvc2luZ0xvZ2ljYWxSZWN0IHdoZW4gYXBwbGljYWJsZQpkaWZmIC0t
Z2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlhbWwg
Yi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFtbAppbmRl
eCA0YWE2N2EzMTI5ODA0ZGE5ZmY4ZTZhNDQ5NDU5NmM0NjYxZmY5ZTE2Li5iNjZjNzQwZTgwNzJj
YzU5YzViYTI3YzVlZTQzMzY0MTZmOWYxY2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1Njcmlw
dHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFtbAorKysgYi9Tb3VyY2UvV1RGL1Njcmlw
dHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFtbApAQCAtMTcyMiw3ICsxNzIyLDkgQEAg
UGVlckNvbm5lY3Rpb25FbmFibGVkOgogICAgIFdlYktpdExlZ2FjeToKICAgICAgIGRlZmF1bHQ6
IHRydWUKICAgICBXZWJLaXQ6Ci0gICAgICBkZWZhdWx0OiBXZWJDb3JlOjpMaWJXZWJSVENQcm92
aWRlcjo6d2ViUlRDQXZhaWxhYmxlKCkKKyAgICAgICJVU0UoTElCV0VCUlRDKSI6IFdlYkNvcmU6
OkxpYldlYlJUQ1Byb3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUoKQorICAgICAgIlVTRShHU1RSRUFN
RVJfV0VCUlRDKSI6IHRydWUKKyAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgV2ViQ29yZToKICAg
ICAgIGRlZmF1bHQ6IHRydWUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZl
cmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2UvV1RGL1Njcmlw
dHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRleCAwZjYz
YzhjYjAyMjc3YmNkYzQ5YjFhZmU3YjVlNTMxZmU4OWNlMmQ1Li41MTg3OGE4ZjQ5NTMyYjc1ODU2
OGZiY2I2OGExZDFmZGJkODU2Y2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJl
ZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9Tb3VyY2UvV1RG
L1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApAQCAt
MTczNSw5ICsxNzM1LDExIEBAIFdlYlJUQ0VuY29kZWRUcmFuc2Zvcm1FbmFibGVkOgogICAgIFdl
YktpdExlZ2FjeToKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgV2ViS2l0OgotICAgICAgZGVm
YXVsdDogdHJ1ZQorICAgICAgIlVTRShMSUJXRUJSVEMpIjogdHJ1ZQorICAgICAgZGVmYXVsdDog
ZmFsc2UKICAgICBXZWJDb3JlOgotICAgICAgZGVmYXVsdDogdHJ1ZQorICAgICAgIlVTRShMSUJX
RUJSVEMpIjogdHJ1ZQorICAgICAgZGVmYXVsdDogZmFsc2UKIAogIyBGSVhNRTogSXMgdGhpcyBp
bXBsZW1lbnRlZCBmb3IgV2ViS2l0TGVnYWN5PyBJZiBub3QsIHRoaXMgc2hvdWxkIGJlIGV4Y2x1
ZGVkIGZyb20gV2ViS2l0TGVnYWN5IGVudGlyZWx5LgogV2ViUlRDSDI2NExvd0xhdGVuY3lFbmNv
ZGVyRW5hYmxlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAg
Yi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuY3BwCmluZGV4IDFiOWFkZTNmOTM2ZWU1NjRk
MzgyYzA3ZWY5NjY1NzZhYjY2MTliNDEuLjkzMTJhM2U4OTRiZDhhMGQ3YTExYTZhNDVjY2JkMzY4
NzNmOGM1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAKKysr
IGIvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNwcApAQCAtMjIzLDYgKzIyMywyMiBAQCB0
ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHVXJpKiBwdHIpCiB9CiAjZW5kaWYKIAordGVtcGxh
dGUgPD4KK0dBcnJheSogcmVmR1B0cihHQXJyYXkqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAg
ICAgICBnX2FycmF5X3JlZihwdHIpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUg
PD4KK3ZvaWQgZGVyZWZHUHRyKEdBcnJheSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAg
IGdfYXJyYXlfdW5yZWYocHRyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAv
LyBVU0UoR0xJQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5oIGIv
U291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgKaW5kZXggZTcyMWZkNTVmNDJhYzNkNzZiNDAx
NzYwZTBhMTliOTlmZTNlMGY4Yi4uNjY3MzYwNzg3YWM1ZjY0OTYwYmUxZDU0NjJkZGU1OWQ3MzU1
ZjZhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgKKysrIGIvU291
cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgKQEAgLTI1MCw2ICsyNTAsOCBAQCB0ZW1wbGF0ZSA8
PiBXVEZfRVhQT1JUX1BSSVZBVEUgR0RhdGVUaW1lKiByZWZHUHRyKEdEYXRlVGltZSogcHRyKTsK
IHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHRGF0ZVRpbWUq
IHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgR0RCdXNOb2RlSW5mbyogcmVm
R1B0cihHREJ1c05vZGVJbmZvKiBwdHIpOwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRF
IHZvaWQgZGVyZWZHUHRyKEdEQnVzTm9kZUluZm8qIHB0cik7Cit0ZW1wbGF0ZSA8PiBXVEZfRVhQ
T1JUX1BSSVZBVEUgR0FycmF5KiByZWZHUHRyKEdBcnJheSopOwordGVtcGxhdGUgPD4gV1RGX0VY
UE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdBcnJheSopOwogCiAjaWYgSEFWRShHVVJJKQog
dGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdVcmkqIHJlZkdQdHIoR1VyaSopOwpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRpYUNh
cGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVz
L01lZGlhQ2FwYWJpbGl0aWVzLmNwcAppbmRleCBkZmI5YmRhYzU2NmI3OTY1YmFhY2ZlMGNmZWU3
MDYxNDM4YjE5NWIyLi44Yzc0NGZjZDEzNzcwMDZmYmI5MDc2NmViYjNiYzRjODRlOGRjY2JlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlh
Q2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJp
bGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRpYyB2
b2lkIGdhdGhlckRlY29kaW5nSW5mbyhEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhRGVjb2RpbmdD
b25maWd1cmF0aW9uJiYKICAgICBjb25maWd1cmF0aW9uLmNhbkV4cG9zZVZQOSA9IGRvY3VtZW50
LnNldHRpbmdzKCkudnA5RGVjb2RlckVuYWJsZWQoKTsKICNlbmRpZgogCi0jaWYgRU5BQkxFKFdF
Ql9SVEMpCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYgKGNv
bmZpZ3VyYXRpb24udHlwZSA9PSBNZWRpYURlY29kaW5nVHlwZTo6V2ViUlRDKSB7CiAgICAgICAg
IGlmIChhdXRvKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+bGli
V2ViUlRDUHJvdmlkZXIoKS5jcmVhdGVEZWNvZGluZ0NvbmZpZ3VyYXRpb24oV1RGTW92ZShjb25m
aWd1cmF0aW9uKSwgV1RGTW92ZShkZWNvZGluZ0NhbGxiYWNrKSk7CkBAIC0yMDAsNyArMjAwLDcg
QEAgc3RhdGljIHZvaWQgZ2F0aGVyRW5jb2RpbmdJbmZvKERvY3VtZW50JiBkb2N1bWVudCwgTWVk
aWFFbmNvZGluZ0NvbmZpZ3VyYXRpb24mJgogICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJlc3Vs
dCkpOwogICAgIH07CiAKLSNpZiBFTkFCTEUoV0VCX1JUQykKKyNpZiBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKExJQldFQlJUQykKICAgICBpZiAoY29uZmlndXJhdGlvbi50eXBlID09IE1lZGlhRW5j
b2RpbmdUeXBlOjpXZWJSVEMpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVudC5w
YWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLmNyZWF0ZUVuY29k
aW5nQ29uZmlndXJhdGlvbihXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBXVEZNb3ZlKGVuY29kaW5n
Q2FsbGJhY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFEZXZpY2VzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
TWVkaWFEZXZpY2VzLmNwcAppbmRleCAwZmFhOGJiNTVhMTk4NWU5ODBmNzM2YjYxZGEwZDYzMGQ2
Y2FlM2NkLi5iZmM1NjY5ZWQ3N2E0M2NkYjk5YTIzNzAwMTBhYzYxMWQyY2JiOTM0IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3Bw
CkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJKU0RPTVBy
b21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTTWVkaWFEZXZpY2VJbmZvLmgiCisjaW5jbHVk
ZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50cy5o
IgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKaW5kZXggODZkNzU3Mzk5MmY0ZDViZDRj
MzUzZGNiNjA5NzI2NGU5ODVkNTdlOC4uMmYzM2YyYjA3MmZhM2ZlZjVkM2FiN2RkM2FmOWEyOGE2
NGFiMTBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9Q
ZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApAQCAtNTMsOSArNTMsMTQgQEAKICNp
bmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvU3Ry
aW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNp
bmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIAotI2lmICFVU0UoTElCV0VCUlRDKQorI2lmICFVU0UoTElCV0VCUlRDKSAmJiAhVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisKIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UGVlckNvbm5lY3Rp
b25CYWNrZW5kPiBjcmVhdGVOb1BlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlv
biYpCiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMTcsMTggKzIyMiw4IEBAIHZvaWQgUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpzZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZChzdGQ6Om9w
dGlvbmFsPERlc2NyaXB0CiAgICAgICAgIGlmIChkZXNjcmlwdGlvblN0YXRlcykKICAgICAgICAg
ICAgIG1fcGVlckNvbm5lY3Rpb24udXBkYXRlRGVzY3JpcHRpb25zKFdURk1vdmUoKmRlc2NyaXB0
aW9uU3RhdGVzKSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykgewotICAg
ICAgICAgICAgYXV0byYgdHJhY2sgPSBldmVudC50cmFjay5nZXQoKTsKLQotICAgICAgICAgICAg
bV9wZWVyQ29ubmVjdGlvbi5kaXNwYXRjaEV2ZW50KFJUQ1RyYWNrRXZlbnQ6OmNyZWF0ZShldmVu
dE5hbWVzKCkudHJhY2tFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNl
bGFibGU6Ok5vLCBXVEZNb3ZlKGV2ZW50LnJlY2VpdmVyKSwgV1RGTW92ZShldmVudC50cmFjayks
IFdURk1vdmUoZXZlbnQuc3RyZWFtcyksIFdURk1vdmUoZXZlbnQudHJhbnNjZWl2ZXIpKSk7Ci0g
ICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJEaXNwYXRjaGVkIGlmIGZlYXNp
YmxlIHRyYWNrIG9mIHR5cGUgIiwgdHJhY2suc291cmNlKCkudHlwZSgpKTsKLQotICAgICAgICAg
ICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSkKLSAgICAgICAgICAgICAgICByZXR1
cm47Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBBcyBwZXIgc3BlYywgd2Ugc2hvdWxkIHNldCBt
dXRlZCB0byAnZmFsc2UnIHdoZW4gc3RhcnRpbmcgdG8gcmVjZWl2ZSB0aGUgY29udGVudCBmcm9t
IG5ldHdvcmsuCi0gICAgICAgICAgICB0cmFjay5zb3VyY2UoKS5zZXRNdXRlZChmYWxzZSk7Ci0g
ICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykKKyAgICAgICAgICAg
IGRpc3BhdGNoVHJhY2tFdmVudChldmVudCk7CiAKICAgICAgICAgaWYgKG1fcGVlckNvbm5lY3Rp
b24uaXNDbG9zZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI0MCw2ICsyMzUsMjAgQEAg
dm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVk
KHN0ZDo6b3B0aW9uYWw8RGVzY3JpcHQKICAgICB9KTsKIH0KIAordm9pZCBQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmRpc3BhdGNoVHJhY2tFdmVudChQZW5kaW5nVHJhY2tFdmVudCYgZXZlbnQpCit7
CisgICAgYXV0byYgdHJhY2sgPSBldmVudC50cmFjay5nZXQoKTsKKworICAgIG1fcGVlckNvbm5l
Y3Rpb24uZGlzcGF0Y2hFdmVudChSVENUcmFja0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygpLnRy
YWNrRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpObywg
V1RGTW92ZShldmVudC5yZWNlaXZlciksIFdURk1vdmUoZXZlbnQudHJhY2spLCBXVEZNb3ZlKGV2
ZW50LnN0cmVhbXMpLCBXVEZNb3ZlKGV2ZW50LnRyYW5zY2VpdmVyKSkpOworICAgIEFMV0FZU19M
T0coTE9HSURFTlRJRklFUiwgIkRpc3BhdGNoZWQgaWYgZmVhc2libGUgdHJhY2sgb2YgdHlwZSAi
LCB0cmFjay5zb3VyY2UoKS50eXBlKCkpOworCisgICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaXND
bG9zZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IEFzIHBlciBzcGVjLCB3
ZSBzaG91bGQgc2V0IG11dGVkIHRvICdmYWxzZScgd2hlbiBzdGFydGluZyB0byByZWNlaXZlIHRo
ZSBjb250ZW50IGZyb20gbmV0d29yay4KKyAgICB0cmFjay5zb3VyY2UoKS5zZXRNdXRlZChmYWxz
ZSk7Cit9CisKIHZvaWQgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzZXRSZW1vdGVEZXNjcmlwdGlv
bkZhaWxlZChFeGNlcHRpb24mJiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRocmVh
ZCgpKTsKQEAgLTQzNywxMyArNDQ2LDE5IEBAIHZvaWQgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpn
ZW5lcmF0ZUNlcnRpZmljYXRlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgQ2VydGlmCiAgICAg
ICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAgICAgICAgcmV0dXJuOwog
ICAgIH0KKwogICAgIExpYldlYlJUQ0NlcnRpZmljYXRlR2VuZXJhdG9yOjpnZW5lcmF0ZUNlcnRp
ZmljYXRlKGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVy
KCksIGluZm8sIFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0oYXV0byYmIHJlc3VsdCkgbXV0
YWJsZSB7CiAgICAgICAgIHByb21pc2Uuc2V0dGxlKFdURk1vdmUocmVzdWx0KSk7CiAgICAgfSk7
CisjZWxpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyAgICBhdXRvIGNlcnRpZmljYXRlID0gOjpX
ZWJDb3JlOjpnZW5lcmF0ZUNlcnRpZmljYXRlKGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIGlu
Zm8pOworICAgIGlmIChjZXJ0aWZpY2F0ZS5oYXNfdmFsdWUoKSkKKyAgICAgICAgcHJvbWlzZS5y
ZXNvbHZlKCpjZXJ0aWZpY2F0ZSk7CisgICAgZWxzZQorICAgICAgICBwcm9taXNlLnJlamVjdChO
b3RTdXBwb3J0ZWRFcnJvcik7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7Ci0g
ICAgVU5VU0VEX1BBUkFNKGV4cGlyZXMpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAgICBV
TlVTRURfUEFSQU0oaW5mbyk7CiAgICAgcHJvbWlzZS5yZWplY3QoTm90U3VwcG9ydGVkRXJyb3Ip
OwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuaAppbmRleCAxZTIzYjRiMmMzNmEzOWEzODQ5
MzYyYjRhZjBiYTI0OGEwMThiNmJlLi43ZGY3NzIwNzg5ZjI2ZTA4ZDkyNTRiMTljNzI1MDcxNGVj
ZTQ1OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1Bl
ZXJDb25uZWN0aW9uQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgKQEAgLTIyNyw2ICsyMjcsOCBAQCBwcm90ZWN0
ZWQ6CiAgICAgfTsKICAgICB2b2lkIGFkZFBlbmRpbmdUcmFja0V2ZW50KFBlbmRpbmdUcmFja0V2
ZW50JiYpOwogCisgICAgdm9pZCBkaXNwYXRjaFRyYWNrRXZlbnQoUGVuZGluZ1RyYWNrRXZlbnQm
KTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZG9DcmVhdGVPZmZlcihSVENPZmZlck9w
dGlvbnMmJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkb0NyZWF0ZUFuc3dlcihSVENBbnN3ZXJP
cHRpb25zJiYpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggNWJkZGZlYzdlNGRmYzlkOWMwMjk5
YzllMjdjYTlkYzIyZGY2NDEwNC4uOTBkZTYzOTkzNGVkNjFjNWMwYjEwMTJjMGFhNTM5N2RkMGQ4
YjMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgRXhjZXB0aW9uT3I8UmVm
PFJUQ1BlZXJDb25uZWN0aW9uPj4gUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZShEb2N1bWVudCYg
ZG9jdW1lbnQKICAgICBpZiAoIXBlZXJDb25uZWN0aW9uLT5pc0Nsb3NlZCgpKSB7CiAgICAgICAg
IGlmIChhdXRvKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKSB7CiAgICAgICAgICAgICBwZWVyQ29u
bmVjdGlvbi0+cmVnaXN0ZXJUb0NvbnRyb2xsZXIocGFnZS0+cnRjQ29udHJvbGxlcigpKTsKLSNp
ZiAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorI2lmIFVTRShMSUJXRUJS
VEMpICYmICghTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRCkKICAgICAgICAg
ICAgIGlmICghcGFnZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgICAgICAg
ICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLnNldExvZ2dpbmdMZXZlbChMb2dXZWJSVEMubGV2
ZWwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxI
YW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYTdiYTlhMDA1OTZkNjUwZTRjN2IzZjc4M2M3MjdiMjFh
NTVkZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcApAQCAtMCwwICsx
LDMwOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIgorCisjaWYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbC5oIgorI2lu
Y2x1ZGUgIlJUQ0RhdGFDaGFubmVsRXZlbnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgorI2lu
Y2x1ZGUgIlJUQ1ByaW9yaXR5VHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4K
KworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVn
KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gR1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpmcm9tUlRDRGF0YUNoYW5uZWxJbml0KGNvbnN0IFJUQ0Rh
dGFDaGFubmVsSW5pdCYgb3B0aW9ucykKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4g
aW5pdChnc3Rfc3RydWN0dXJlX25ldygib3B0aW9ucyIsICJwcm90b2NvbCIsIEdfVFlQRV9TVFJJ
TkcsIG9wdGlvbnMucHJvdG9jb2wudXRmOCgpLmRhdGEoKSwgbnVsbHB0cikpOworCisgICAgaWYg
KG9wdGlvbnMub3JkZXJlZCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwg
Im9yZGVyZWQiLCBHX1RZUEVfQk9PTEVBTiwgKm9wdGlvbnMub3JkZXJlZCwgbnVsbHB0cik7Cisg
ICAgaWYgKG9wdGlvbnMubWF4UGFja2V0TGlmZVRpbWUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVf
c2V0KGluaXQuZ2V0KCksICJtYXgtcGFja2V0LWxpZmV0aW1lIiwgR19UWVBFX0lOVCwgKm9wdGlv
bnMubWF4UGFja2V0TGlmZVRpbWUsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25zLm1heFJldHJh
bnNtaXRzKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAibWF4LXJldHJh
bnNtaXRzIiwgR19UWVBFX0lOVCwgKm9wdGlvbnMubWF4UmV0cmFuc21pdHMsIG51bGxwdHIpOwor
ICAgIGlmIChvcHRpb25zLm5lZ290aWF0ZWQpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGlu
aXQuZ2V0KCksICJuZWdvdGlhdGVkIiwgR19UWVBFX0JPT0xFQU4sICpvcHRpb25zLm5lZ290aWF0
ZWQsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25zLmlkKQorICAgICAgICBnc3Rfc3RydWN0dXJl
X3NldChpbml0LmdldCgpLCAiaWQiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5pZCwgbnVsbHB0cik7
CisKKyAgICBHc3RXZWJSVENQcmlvcml0eVR5cGUgcHJpb3JpdHlUeXBlOworICAgIHN3aXRjaCAo
b3B0aW9ucy5wcmlvcml0eSkgeworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93Ogor
ICAgICAgICBwcmlvcml0eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfVkVSWV9MT1c7
CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpMb3c6CisgICAgICAg
IHByaW9yaXR5VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9MT1c7CisgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpNZWRpdW06CisgICAgICAgIHByaW9yaXR5
VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9NRURJVU07CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpIaWdoOgorICAgICAgICBwcmlvcml0eVR5cGUgPSBH
U1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfSElHSDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJwcmlvcml0eSIsIEdTVF9UWVBFX1dFQlJU
Q19QUklPUklUWV9UWVBFLCBwcmlvcml0eVR5cGUsIG51bGxwdHIpOworCisgICAgcmV0dXJuIGlu
aXQ7Cit9CisKK1JlZjxSVENEYXRhQ2hhbm5lbEV2ZW50PiBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6OmNyZWF0ZURhdGFDaGFubmVsRXZlbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBHUmVmUHRy
PEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmIGRhdGFDaGFubmVsKQoreworICAgIEdVbmlxdWVPdXRQ
dHI8Y2hhcj4gbGFiZWw7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBwcm90b2NvbDsKKyAgICBn
Ym9vbGVhbiBvcmRlcmVkLCBuZWdvdGlhdGVkOworICAgIGdpbnQgbWF4UGFja2V0TGlmZVRpbWUs
IG1heFJldHJhbnNtaXRzLCBpZDsKKyAgICBnX29iamVjdF9nZXQoZGF0YUNoYW5uZWwuZ2V0KCks
ICJvcmRlcmVkIiwgJm9yZGVyZWQsICJsYWJlbCIsICZsYWJlbC5vdXRQdHIoKSwKKyAgICAgICAg
Im1heC1wYWNrZXQtbGlmZXRpbWUiLCAmbWF4UGFja2V0TGlmZVRpbWUsICJtYXgtcmV0cmFuc21p
dHMiLCAmbWF4UmV0cmFuc21pdHMsCisgICAgICAgICJwcm90b2NvbCIsICZwcm90b2NvbC5vdXRQ
dHIoKSwgIm5lZ290aWF0ZWQiLCAmbmVnb3RpYXRlZCwgImlkIiwgJmlkLCBudWxscHRyKTsKKwor
ICAgIFJUQ0RhdGFDaGFubmVsSW5pdCBpbml0OworICAgIGluaXQub3JkZXJlZCA9IG9yZGVyZWQ7
CisgICAgaW5pdC5tYXhQYWNrZXRMaWZlVGltZSA9IG1heFBhY2tldExpZmVUaW1lOworICAgIGlu
aXQubWF4UmV0cmFuc21pdHMgPSBtYXhSZXRyYW5zbWl0czsKKyAgICBpbml0LnByb3RvY29sID0g
U3RyaW5nKHByb3RvY29sLmdldCgpKTsKKyAgICBpbml0Lm5lZ290aWF0ZWQgPSBuZWdvdGlhdGVk
OworICAgIGluaXQuaWQgPSBpZDsKKworICAgIGF1dG8gaGFuZGxlciA9IFdURjo6bWFrZVVuaXF1
ZTxHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI+KFdURk1vdmUoZGF0YUNoYW5uZWwpKTsKKyAg
ICBhdXRvIGNoYW5uZWwgPSBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlKGRvY3VtZW50LCBXVEZNb3Zl
KGhhbmRsZXIpLCBTdHJpbmc6OmZyb21VVEY4KGxhYmVsLmdldCgpKSwgV1RGTW92ZShpbml0KSk7
CisgICAgcmV0dXJuIFJUQ0RhdGFDaGFubmVsRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkuZGF0
YWNoYW5uZWxFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6
Ok5vLCBXVEZNb3ZlKGNoYW5uZWwpKTsKK30KKworR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVy
OjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5l
bD4mJiBjaGFubmVsKQorICAgIDogbV9jaGFubmVsKFdURk1vdmUoY2hhbm5lbCkpCit7CisgICAg
QVNTRVJUKG1fY2hhbm5lbCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jaGFu
bmVsLmdldCgpLCAibm90aWZ5OjpyZWFkeS1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1l
ckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlcikgeworICAgICAgICBoYW5kbGVyLT5yZWFkeVN0
YXRlQ2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBw
ZWQobV9jaGFubmVsLmdldCgpLCAib24tbWVzc2FnZS1kYXRhIiwgR19DQUxMQkFDSygrW10oR1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBHQnl0ZXMqIGJ5dGVzKSB7CisgICAg
ICAgIGhhbmRsZXItPm9uTWVzc2FnZURhdGEoYnl0ZXMpOworICAgIH0pLCB0aGlzKTsKKyAgICBn
X3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tbWVzc2FnZS1zdHJp
bmciLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIs
IGNvbnN0IGNoYXIqIG1lc3NhZ2UpIHsKKyAgICAgICAgaGFuZGxlci0+b25NZXNzYWdlU3RyaW5n
KG1lc3NhZ2UpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQo
bV9jaGFubmVsLmdldCgpLCAib24tZXJyb3IiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRh
Q2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIsIEdFcnJvciogZXJyb3IpIHsKKyAgICAgICAgaGFuZGxl
ci0+b25FcnJvcihlcnJvcik7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rf
c3dhcHBlZChtX2NoYW5uZWwuZ2V0KCksICJvbi1idWZmZXJlZC1hbW91bnQtbG93IiwgR19DQUxM
QkFDSygrW10oR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyKSB7CisgICAgICAg
IC8vIEZJWE1FOiBXZSBzaG91bGQgcGFzcyB0aGUgYW1vdW50IGRlbHRhIGZyb20gd2VicnRjYmlu
IHRvIHRoZSBXZWJDb3JlIGhhbmRsZXIuCisgICAgICAgIGhhbmRsZXItPm9uQnVmZmVyZWRBbW91
bnRMb3coKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxl
cjo6fkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcigpCit7CisgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fY2hhbm5lbC5nZXQoKSwgdGhpcyk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZXRDbGllbnQoUlRDRGF0YUNoYW5uZWxIYW5k
bGVyQ2xpZW50JiBjbGllbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyIGNvbnRl
eHRJZGVudGlmaWVyKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKyAg
ICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICBtX2NvbnRl
eHRJZGVudGlmaWVyID0gY29udGV4dElkZW50aWZpZXI7CisKKyAgICBmb3IgKGF1dG8mIG1lc3Nh
Z2UgOiBtX3BlbmRpbmdNZXNzYWdlcykgeworICAgICAgICBzd2l0Y2hPbihtZXNzYWdlLCBbJl0o
UmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+JiBkYXRhKSB7CisgICAgICAgICAgICBHU1RfREVC
VUcoIk5vdGlmeWluZyBxdWV1ZWQgcmF3IGRhdGEgKHNpemU6ICV6dSkiLCBkYXRhLT5zaXplKCkp
OworICAgICAgICAgICAgY2xpZW50LmRpZFJlY2VpdmVSYXdEYXRhKGRhdGEtPm1ha2VDb250aWd1
b3VzKCktPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgfSwgWyZdKFN0cmluZyYgdGV4
dCkgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJOb3RpZnlpbmcgcXVldWVkIHN0cmluZyAlcyIs
IHRleHQuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgY2xpZW50LmRpZFJlY2VpdmVTdHJp
bmdEYXRhKHRleHQpOworICAgICAgICB9LCBbJl0oU3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2UpIHsK
KyAgICAgICAgICAgIGlmIChzdGF0ZUNoYW5nZS5lcnJvcikgeworICAgICAgICAgICAgICAgIGlm
IChhdXRvIHJ0Y0Vycm9yID0gdG9SVENFcnJvcigqc3RhdGVDaGFuZ2UuZXJyb3IpKQorICAgICAg
ICAgICAgICAgICAgICBjbGllbnQuZGlkRGV0ZWN0RXJyb3IocnRjRXJyb3IucmVsZWFzZU5vbk51
bGwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBHU1RfREVCVUcoIkRpc3BhdGNoaW5n
IHN0YXRlIGNoYW5nZSB0byAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdGVDaGFuZ2Uuc3RhdGUp
KTsKKyAgICAgICAgICAgIGNsaWVudC5kaWRDaGFuZ2VSZWFkeVN0YXRlKHN0YXRlQ2hhbmdlLnN0
YXRlKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIG1fcGVuZGluZ01lc3NhZ2VzLmNsZWFyKCk7
Cit9CisKK2Jvb2wgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kU3RyaW5nRGF0YShj
b25zdCBDU3RyaW5nJiB0ZXh0KQoreworICAgIEdTVF9ERUJVRygiU2VuZGluZyBzdHJpbmcgJXMi
LCB0ZXh0LmRhdGEoKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5lbC5nZXQo
KSwgInNlbmQtc3RyaW5nIiwgdGV4dC5kYXRhKCkpOworICAgIHJldHVybiB0cnVlOworfQorCiti
b29sIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFJhd0RhdGEoY29uc3QgdWludDhf
dCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBhdXRvIGJ5dGVzID0gYWRvcHRHUmVmKGdf
Ynl0ZXNfbmV3KGRhdGEsIGxlbmd0aCkpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX2No
YW5uZWwuZ2V0KCksICJzZW5kLWRhdGEiLCBieXRlcy5nZXQoKSk7CisgICAgcmV0dXJuIHRydWU7
Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjbG9zZSgpCit7CisgICAg
Z19zaWduYWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5lbC5nZXQoKSwgImNsb3NlIik7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGVja1N0YXRlKCkKK3sKKyAgICBBU1NF
UlQobV9jbGllbnRMb2NrLmlzSGVsZCgpKTsKKworICAgIEdzdFdlYlJUQ0RhdGFDaGFubmVsU3Rh
dGUgY2hhbm5lbFN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX2NoYW5uZWwuZ2V0KCksICJyZWFk
eS1zdGF0ZSIsICZjaGFubmVsU3RhdGUsIG51bGxwdHIpOworCisgICAgUlRDRGF0YUNoYW5uZWxT
dGF0ZSBzdGF0ZTsKKyAgICBzd2l0Y2ggKGNoYW5uZWxTdGF0ZSkgeworICAgIGNhc2UgR1NUX1dF
QlJUQ19EQVRBX0NIQU5ORUxfU1RBVEVfTkVXOgorICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRBX0NI
QU5ORUxfU1RBVEVfQ09OTkVDVElORzoKKyAgICAgICAgc3RhdGUgPSBSVENEYXRhQ2hhbm5lbFN0
YXRlOjpDb25uZWN0aW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9XRUJSVENfREFU
QV9DSEFOTkVMX1NUQVRFX09QRU46CisgICAgICAgIHN0YXRlID0gUlRDRGF0YUNoYW5uZWxTdGF0
ZTo6T3BlbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RBVEFfQ0hBTk5F
TF9TVEFURV9DTE9TSU5HOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3RhdGU6OkNs
b3Npbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRBX0NIQU5ORUxf
U1RBVEVfQ0xPU0VEOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3RhdGU6OkNsb3Nl
ZDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFtX2NsaWVudCkgeworICAgICAg
ICBHU1RfREVCVUcoIk5vIGNsaWVudCB5ZXQsIHF1ZXVlaW5nIHN0YXRlIik7CisgICAgICAgIG1f
cGVuZGluZ01lc3NhZ2VzLmFwcGVuZChTdGF0ZUNoYW5nZSB7IHN0YXRlLCB7IH0gfSk7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoISptX2NsaWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgR1NUX0RFQlVHKCJEaXNwYXRjaGluZyBzdGF0ZSBjaGFuZ2UgdG8gJWQiLCBzdGF0
aWNfY2FzdDxpbnQ+KHN0YXRlKSk7CisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50LCBz
dGF0ZV0geworICAgICAgICBpZiAoISpjbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAg
ICAgIGNsaWVudC52YWx1ZSgpLT5kaWRDaGFuZ2VSZWFkeVN0YXRlKHN0YXRlKTsKKyAgICB9KTsK
K30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnJlYWR5U3RhdGVDaGFuZ2Vk
KCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisgICAgY2hlY2tTdGF0
ZSgpOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdlRGF0
YShHQnl0ZXMqIGJ5dGVzKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsK
KworICAgIGlmICghbV9jbGllbnQpIHsKKyAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5k
KEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZShieXRlcykpOworICAgICAgICByZXR1cm47
CisgICAgfQorCisgICAgaWYgKCEqbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHBv
c3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudCwgYnl0ZXMgPSBHUmVmUHRyPEdCeXRlcz4oYnl0ZXMp
XSB7CisgICAgICAgIGlmICghKmNsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
Z3NpemUgc2l6ZSA9IDA7CisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSByZWludGVycHJldF9j
YXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGJ5dGVzLmdldCgpLCAmc2l6ZSkp
OworICAgICAgICBjbGllbnQudmFsdWUoKS0+ZGlkUmVjZWl2ZVJhd0RhdGEoZGF0YSwgc2l6ZSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbk1lc3Nh
Z2VTdHJpbmcoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9j
bGllbnRMb2NrIH07CisKKyAgICBHU1RfREVCVUcoIkluY29taW5nIHN0cmluZzogJXMiLCBtZXNz
YWdlKTsKKyAgICBpZiAoIW1fY2xpZW50KSB7CisgICAgICAgIEdTVF9ERUJVRygiTm8gY2xpZW50
IHlldCwga2VlcGluZyBhcyBidWZmZXJlZCBtZXNzYWdlIik7CisgICAgICAgIG1fcGVuZGluZ01l
c3NhZ2VzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIGlmICghKm1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBH
U1RfREVCVUcoIkRpc3BhdGNoaW5nIHBheWxvYWQiKTsKKyAgICBwb3N0VGFzayhbY2xpZW50ID0g
bV9jbGllbnQsIHN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSldIHsKKyAgICAgICAg
aWYgKCEqY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNsaWVudC52YWx1
ZSgpLT5kaWRSZWNlaXZlU3RyaW5nRGF0YShzdHJpbmcpOworICAgICAgICBHU1RfREVCVUcoIkRv
bmUiKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9u
RXJyb3IoR0Vycm9yKiBlcnJvcikKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2Nr
IH07CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX1dBUk5J
TkcoIkdvdCBkYXRhLWNoYW5uZWwgZXJyb3IgJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAgR1Vu
aXF1ZVB0cjxHRXJyb3I+IGVycm9yQ29weShnX2Vycm9yX2NvcHkoZXJyb3IpKTsKKyAgICBwb3N0
VGFzayhbY2xpZW50ID0gbV9jbGllbnQsIGVycm9yID0gV1RGTW92ZShlcnJvckNvcHkpXSB7Cisg
ICAgICAgIGlmICghY2xpZW50IHx8ICFlcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBhdXRvIHJ0Y0Vycm9yID0gdG9SVENFcnJvcihlcnJvci5nZXQoKSk7CisgICAgICAgIGlm
ICghcnRjRXJyb3IpCisgICAgICAgICAgICBydGNFcnJvciA9IFJUQ0Vycm9yOjpjcmVhdGUoUlRD
RXJyb3I6OkluaXQgeyBSVENFcnJvckRldGFpbFR5cGU6OkRhdGFDaGFubmVsRmFpbHVyZSwgeyB9
LCB7IH0sIHsgfSwgeyB9IH0sIHsgfSk7CisgICAgICAgIGNsaWVudC52YWx1ZSgpLT5kaWREZXRl
Y3RFcnJvcihydGNFcnJvci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBH
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uQnVmZmVyZWRBbW91bnRMb3coKQoreworICAg
IExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKyAgICBpZiAoIW1fY2xpZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBwb3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnRdIHsKKyAgICAg
ICAgaWYgKCFjbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRklYTUU6
IFBhc3MgYW1vdW50IHRvIGhhbmRsZXIgaW5zdGVhZCBvZiAwLgorICAgICAgICBjbGllbnQudmFs
dWUoKS0+YnVmZmVyZWRBbW91bnRJc0RlY3JlYXNpbmcoMCk7CisgICAgfSk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpwb3N0VGFzayhGdW5jdGlvbjx2b2lkKCk+JiYg
ZnVuY3Rpb24pCit7CisgICAgQVNTRVJUKG1fY2xpZW50TG9jay5pc0hlbGQoKSk7CisKKyAgICBp
ZiAoIW1fY29udGV4dElkZW50aWZpZXIpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChXVEZN
b3ZlKGZ1bmN0aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2NyaXB0RXhlY3V0
aW9uQ29udGV4dDo6cG9zdFRhc2tUbyhtX2NvbnRleHRJZGVudGlmaWVyLCBXVEZNb3ZlKGZ1bmN0
aW9uKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmggYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi44ZjMzMmJkZTI0Y2VlYzkyMWZkNDYxNjJjNTA2MGVhMDI1OTNj
ZTFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgKQEAgLTAsMCArMSw4NiBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxI
YW5kbGVyLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxTdGF0ZS5oIgorI2luY2x1ZGUgIlNo
YXJlZEJ1ZmZlci5oIgorCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUgPHd0
Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFJUQ0RhdGFDaGFubmVsRXZlbnQ7CitjbGFzcyBS
VENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQ7CitzdHJ1Y3QgUlRDRGF0YUNoYW5uZWxJbml0Owor
CitjbGFzcyBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIgZmluYWwgOiBwdWJsaWMgUlRDRGF0
YUNoYW5uZWxIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoR1JlZlB0cjxHc3RXZWJS
VENEYXRhQ2hhbm5lbD4mJik7CisgICAgfkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcigpOwor
CisgICAgc3RhdGljIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBmcm9tUlRDRGF0YUNoYW5uZWxJ
bml0KGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpOworICAgIHN0YXRpYyBSZWY8UlRDRGF0YUNo
YW5uZWxFdmVudD4gY3JlYXRlRGF0YUNoYW5uZWxFdmVudChEb2N1bWVudCYsIEdSZWZQdHI8R3N0
V2ViUlRDRGF0YUNoYW5uZWw+JiYpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0RhdGFDaGFubmVs
SGFuZGxlciBBUEkKKyAgICB2b2lkIHNldENsaWVudChSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGll
bnQmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllcikgZmluYWw7CisgICAgYm9vbCBz
ZW5kU3RyaW5nRGF0YShjb25zdCBDU3RyaW5nJikgZmluYWw7CisgICAgYm9vbCBzZW5kUmF3RGF0
YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KSBmaW5hbDsKKyAgICB2b2lkIGNsb3NlKCkgZmluYWw7
CisKKyAgICB2b2lkIG9uTWVzc2FnZURhdGEoR0J5dGVzKik7CisgICAgdm9pZCBvbk1lc3NhZ2VT
dHJpbmcoY29uc3QgY2hhciopOworICAgIHZvaWQgb25FcnJvcihHRXJyb3IqKTsKKyAgICB2b2lk
IG9uQnVmZmVyZWRBbW91bnRMb3coKTsKKyAgICB2b2lkIHJlYWR5U3RhdGVDaGFuZ2VkKCk7CisK
KyAgICB2b2lkIGNoZWNrU3RhdGUoKTsKKyAgICB2b2lkIHBvc3RUYXNrKEZ1bmN0aW9uPHZvaWQo
KT4mJik7CisKKyAgICBzdHJ1Y3QgU3RhdGVDaGFuZ2UgeworICAgICAgICBSVENEYXRhQ2hhbm5l
bFN0YXRlIHN0YXRlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPEdFcnJvcio+IGVycm9yOworICAg
IH07CisgICAgdXNpbmcgTWVzc2FnZSA9IHN0ZDo6dmFyaWFudDxTdGF0ZUNoYW5nZSwgU3RyaW5n
LCBSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+OworICAgIHVzaW5nIFBlbmRpbmdNZXNzYWdl
cyA9IFZlY3RvcjxNZXNzYWdlPjsKKworICAgIExvY2sgbV9jbGllbnRMb2NrOworICAgIEdSZWZQ
dHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IG1fY2hhbm5lbDsKKyAgICBzdGQ6Om9wdGlvbmFsPFdl
YWtQdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50Pj4gbV9jbGllbnQgV1RGX0dVQVJERURf
QllfTE9DSyhtX2NsaWVudExvY2spOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlm
aWVyIG1fY29udGV4dElkZW50aWZpZXI7CisgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gbV9w
cmV2aW91c0J1ZmZlcmVkQW1vdW50OworICAgIFBlbmRpbmdNZXNzYWdlcyBtX3BlbmRpbmdNZXNz
YWdlcyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fY2xpZW50TG9jayk7CisKKyAgICBMb2NrIG1fb3Bl
bkxvY2s7CisgICAgQ29uZGl0aW9uIG1fb3BlbkNvbmRpdGlvbiBXVEZfR1VBUkRFRF9CWV9MT0NL
KG1fb3BlbkxvY2spOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQxNDQ5MjBmY2Q0MDAxZDVmNWZl
YWMzMmViMzZlMjBhYjM1ZmM2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5k
LmNwcApAQCAtMCwwICsxLDk0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIEln
YWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1l
dHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FycmF5QnVmZmVy
Lmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJEdGxzVHJhbnNw
b3J0QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+JiB0cmFuc3Bv
cnQpCisgICAgOiBtX2JhY2tlbmQodHJhbnNwb3J0KQoreworICAgIEFTU0VSVChtX2JhY2tlbmQp
OworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cit9CisKK0dTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kOjp+R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIHVucmVn
aXN0ZXJDbGllbnQoKTsKK30KKworVW5pcXVlUmVmPFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQ+IEdT
dHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjppY2VUcmFuc3BvcnRCYWNrZW5kKCkKK3sKKyAg
ICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kPihtX2Jh
Y2tlbmQpOworfQorCit2b2lkIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpyZWdpc3Rl
ckNsaWVudChDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICBt
X2NsaWVudCA9IGNsaWVudDsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9iYWNrZW5k
LmdldCgpLCAibm90aWZ5OjpzdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckR0bHNUcmFu
c3BvcnRCYWNrZW5kKiBiYWNrZW5kKSB7CisgICAgICAgIGJhY2tlbmQtPnN0YXRlQ2hhbmdlZCgp
OworICAgIH0pLCB0aGlzKTsKK30KKwordm9pZCBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2Vu
ZDo6dW5yZWdpc3RlckNsaWVudCgpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9kYXRhKG1fYmFja2VuZC5nZXQoKSwgdGhpcyk7CisgICAgbV9jbGllbnQuY2xlYXIoKTsK
K30KKwordm9pZCBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKCkg
Y29uc3QKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbd2Vha1RoaXMgPSBXZWFrUHRy
IHsgdGhpcyB9XSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIGlmICghd2Vha1RoaXMtPm1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOwor
CisgICAgICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gcmVtb3RlQ2VydGlmaWNhdGU7CisgICAgICAg
IEdVbmlxdWVPdXRQdHI8Y2hhcj4gY2VydGlmaWNhdGU7CisgICAgICAgIEdzdFdlYlJUQ0RUTFNU
cmFuc3BvcnRTdGF0ZSBzdGF0ZTsKKyAgICAgICAgZ19vYmplY3RfZ2V0KHdlYWtUaGlzLT5tX2Jh
Y2tlbmQuZ2V0KCksICJzdGF0ZSIsICZzdGF0ZSwgInJlbW90ZS1jZXJ0aWZpY2F0ZSIsICZyZW1v
dGVDZXJ0aWZpY2F0ZS5vdXRQdHIoKSwgImNlcnRpZmljYXRlIiwgJmNlcnRpZmljYXRlLm91dFB0
cigpLCBudWxscHRyKTsKKworICAgICAgICBWZWN0b3I8UmVmPEpTQzo6QXJyYXlCdWZmZXI+PiBj
ZXJ0aWZpY2F0ZXM7CisgICAgICAgIGNlcnRpZmljYXRlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5
KDIpOworICAgICAgICBpZiAocmVtb3RlQ2VydGlmaWNhdGUpIHsKKyAgICAgICAgICAgIGF1dG8g
cmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcgPSBtYWtlU3RyaW5nKHJlbW90ZUNlcnRpZmljYXRlLmdl
dCgpKTsKKyAgICAgICAgICAgIGF1dG8ganNSZW1vdGVDZXJ0aWZpY2F0ZSA9IEpTQzo6QXJyYXlC
dWZmZXI6OmNyZWF0ZShyZW1vdGVDZXJ0aWZpY2F0ZVN0cmluZy5jaGFyYWN0ZXJzOCgpLCByZW1v
dGVDZXJ0aWZpY2F0ZVN0cmluZy5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgICAgIGNlcnRpZmlj
YXRlcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShqc1JlbW90ZUNlcnRpZmljYXRlKSk7CisKKyAg
ICAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVTdHJpbmcgPSBtYWtlU3RyaW5nKGNlcnRpZmljYXRl
LmdldCgpKTsKKyAgICAgICAgICAgIGF1dG8ganNDZXJ0aWZpY2F0ZSA9IEpTQzo6QXJyYXlCdWZm
ZXI6OmNyZWF0ZShjZXJ0aWZpY2F0ZVN0cmluZy5jaGFyYWN0ZXJzOCgpLCBjZXJ0aWZpY2F0ZVN0
cmluZy5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgICAgIGNlcnRpZmljYXRlcy51bmNoZWNrZWRB
cHBlbmQoV1RGTW92ZShqc0NlcnRpZmljYXRlKSk7CisgICAgICAgIH0KKyAgICAgICAgd2Vha1Ro
aXMtPm1fY2xpZW50LT5vblN0YXRlQ2hhbmdlZCh0b1JUQ0R0bHNUcmFuc3BvcnRTdGF0ZShzdGF0
ZSksIFdURk1vdmUoY2VydGlmaWNhdGVzKSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjJjMWRjODg0MDgyNzc2YjMwYjAwYTI5MmExOTYwNzUwOGUwNDQxZGMK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oCkBAIC0wLDAgKzEsNTMgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0
ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5o
IgorI2luY2x1ZGUgIlJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dl
YWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJEdGxzVHJh
bnNwb3J0QmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENEdGxzVHJhbnNwb3J0QmFja2VuZCwgcHVi
bGljIENhbk1ha2VXZWFrUHRyPEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLCBXZWFrUHRy
RmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NB
VEVEOworCitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tl
bmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiYpOworICAgIH5HU3RyZWFt
ZXJEdGxzVHJhbnNwb3J0QmFja2VuZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0R0bHNUcmFu
c3BvcnRCYWNrZW5kCisgICAgY29uc3Qgdm9pZCogYmFja2VuZCgpIGNvbnN0IGZpbmFsIHsgcmV0
dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorICAgIFVuaXF1ZVJlZjxSVENJY2VUcmFuc3BvcnRCYWNr
ZW5kPiBpY2VUcmFuc3BvcnRCYWNrZW5kKCkgZmluYWw7CisgICAgdm9pZCByZWdpc3RlckNsaWVu
dChDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHVucmVnaXN0ZXJDbGllbnQoKSBmaW5hbDsKKwor
ICAgIHZvaWQgc3RhdGVDaGFuZ2VkKCkgY29uc3Q7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RU
TFNUcmFuc3BvcnQ+IG1fYmFja2VuZDsKKyAgICBXZWFrUHRyPENsaWVudD4gbV9jbGllbnQ7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUzYmU2ZTY3MDQyNWRmODY3OGE0
MGY0Zjk2ZWI0OTY3NTdmN2I0N2EKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5k
LmNwcApAQCAtMCwwICsxLDEyMyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJ
Z2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tl
bmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlwdENv
cmUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVh
bWVySWNlVHJhbnNwb3J0QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQ+JiB0cmFuc3BvcnQpCisgICAgOiBtX2JhY2tlbmQodHJhbnNwb3J0KQoreworICAgIEFTU0VS
VChtX2JhY2tlbmQpOworCisgICAgaWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCksICJub3RpZnk6OnRyYW5zcG9ydCIsIEdf
Q0FMTEJBQ0soK1tdKEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAg
ICAgICAgYmFja2VuZC0+aWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsKK30K
KworR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckljZVRyYW5zcG9ydEJh
Y2tlbmQoKQoreworICAgIGlmIChHX0lTX09CSkVDVChtX2ljZVRyYW5zcG9ydC5nZXQoKSkpCisg
ICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2ljZVRyYW5zcG9y
dC5nZXQoKSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRh
KG1fYmFja2VuZC5nZXQoKSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0
QmFja2VuZDo6aWNlVHJhbnNwb3J0Q2hhbmdlZCgpCit7CisgICAgaWYgKEdfSVNfT0JKRUNUKG1f
aWNlVHJhbnNwb3J0LmdldCgpKSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVj
dF9ieV9kYXRhKG1faWNlVHJhbnNwb3J0LmdldCgpLCB0aGlzKTsKKworICAgIG1faWNlVHJhbnNw
b3J0LmNsZWFyKCk7CisgICAgZ19vYmplY3RfZ2V0KG1fYmFja2VuZC5nZXQoKSwgInRyYW5zcG9y
dCIsICZtX2ljZVRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV9pY2VUcmFuc3BvcnQuZ2V0KCksICJub3RpZnk6OnN0YXRlIiwgR19D
QUxMQkFDSygrW10oR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAg
ICAgICBiYWNrZW5kLT5zdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKG1faWNlVHJhbnNwb3J0LmdldCgpLCAibm90aWZ5OjpnYXRoZXJp
bmctc3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKiBi
YWNrZW5kKSB7CisgICAgICAgIGJhY2tlbmQtPmdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpOworICAg
IH0pLCB0aGlzKTsKK30KKwordm9pZCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpyZWdp
c3RlckNsaWVudChDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKyAg
ICBtX2NsaWVudCA9IGNsaWVudDsKKworICAgIEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSB0
cmFuc3BvcnRTdGF0ZTsKKyAgICBHc3RXZWJSVENJQ0VHYXRoZXJpbmdTdGF0ZSBnYXRoZXJpbmdT
dGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV9pY2VUcmFuc3BvcnQuZ2V0KCksICJzdGF0ZSIsICZ0
cmFuc3BvcnRTdGF0ZSwgImdhdGhlcmluZy1zdGF0ZSIsICZnYXRoZXJpbmdTdGF0ZSwgbnVsbHB0
cik7CisKKyAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9
LCB0cmFuc3BvcnRTdGF0ZSwgZ2F0aGVyaW5nU3RhdGVdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhp
cyB8fCAhd2Vha1RoaXMtPm1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IC8vIFdlIHN0YXJ0IG9ic2VydmluZyBhIGJpdCBsYXRlIGFuZCBtaWdodCBtaXNzIHRoZSBjaGVj
a2luZyBzdGF0ZS4gU3ludGhlc2l6ZSBpdCBhcyBuZWVkZWQuCisgICAgICAgIGlmICh0cmFuc3Bv
cnRTdGF0ZSA+IEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkcgJiYgdHJh
bnNwb3J0U3RhdGUgIT0gR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DTE9TRUQpCisg
ICAgICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKFJUQ0ljZVRyYW5z
cG9ydFN0YXRlOjpDaGVja2luZyk7CisKKyAgICAgICAgd2Vha1RoaXMtPm1fY2xpZW50LT5vblN0
YXRlQ2hhbmdlZCh0b1JUQ0ljZVRyYW5zcG9ydFN0YXRlKHRyYW5zcG9ydFN0YXRlKSk7CisgICAg
ICAgIHdlYWtUaGlzLT5tX2NsaWVudC0+b25HYXRoZXJpbmdTdGF0ZUNoYW5nZWQodG9SVENJY2VH
YXRoZXJpbmdTdGF0ZShnYXRoZXJpbmdTdGF0ZSkpOworICAgIH0pOworfQorCit2b2lkIEdTdHJl
YW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQoKQoreworICAgIEFTU0VS
VChtX2NsaWVudCk7CisgICAgbV9jbGllbnQuY2xlYXIoKTsKK30KKwordm9pZCBHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQoKSBjb25zdAoreworICAgIGlmICghbV9j
bGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0
ZSB0cmFuc3BvcnRTdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV9pY2VUcmFuc3BvcnQuZ2V0KCks
ICJzdGF0ZSIsICZ0cmFuc3BvcnRTdGF0ZSwgbnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVh
ZChbd2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfSwgdHJhbnNwb3J0U3RhdGVdIHsKKyAgICAg
ICAgaWYgKCF3ZWFrVGhpcyB8fCAhd2Vha1RoaXMtPm1fY2xpZW50KQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDSWNl
VHJhbnNwb3J0U3RhdGUodHJhbnNwb3J0U3RhdGUpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpnYXRoZXJpbmdTdGF0ZUNoYW5nZWQoKSBjb25zdAor
eworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdzdFdlYlJUQ0lD
RUdhdGhlcmluZ1N0YXRlIGdhdGhlcmluZ1N0YXRlOworICAgIGdfb2JqZWN0X2dldChtX2ljZVRy
YW5zcG9ydC5nZXQoKSwgImdhdGhlcmluZy1zdGF0ZSIsICZnYXRoZXJpbmdTdGF0ZSwgbnVsbHB0
cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbd2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfSwg
Z2F0aGVyaW5nU3RhdGVdIHsKKyAgICAgICAgaWYgKCF3ZWFrVGhpcyB8fCAhd2Vha1RoaXMtPm1f
Y2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQt
Pm9uR2F0aGVyaW5nU3RhdGVDaGFuZ2VkKHRvUlRDSWNlR2F0aGVyaW5nU3RhdGUoZ2F0aGVyaW5n
U3RhdGUpKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNl
VHJhbnNwb3J0QmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5N2Ez
OTU3ZTMyZTFhMWExYTMxNTU0ZjA5ZDBmNjY2ZTkxNTJiZDkKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VU
cmFuc3BvcnRCYWNrZW5kLmgKQEAgLTAsMCArMSw1NSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSAiUlRDSWNlVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9XZWFrUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZCBmaW5hbCA6IHB1YmxpYyBSVENJY2VUcmFuc3BvcnRCYWNrZW5kLCBwdWJsaWMgQ2FuTWFrZVdl
YWtQdHI8R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZD4geworICAgIFdURl9NQUtFX0ZBU1Rf
QUxMT0NBVEVEOworCitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVySWNlVHJhbnNwb3J0
QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+Jik7CisgICAgfkdT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBSVENJY2VU
cmFuc3BvcnRCYWNrZW5kCisgICAgY29uc3Qgdm9pZCogYmFja2VuZCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorCisgICAgdm9pZCByZWdpc3RlckNsaWVudChDbGll
bnQmKSBmaW5hbDsKKyAgICB2b2lkIHVucmVnaXN0ZXJDbGllbnQoKSBmaW5hbDsKKworICAgIHZv
aWQgc3RhdGVDaGFuZ2VkKCkgY29uc3Q7CisgICAgdm9pZCBnYXRoZXJpbmdTdGF0ZUNoYW5nZWQo
KSBjb25zdDsKKyAgICB2b2lkIGljZVRyYW5zcG9ydENoYW5nZWQoKTsKKworICAgIEdSZWZQdHI8
R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gbV9iYWNrZW5kOworICAgIEdSZWZQdHI8R3N0V2ViUlRD
SUNFVHJhbnNwb3J0PiBtX2ljZVRyYW5zcG9ydDsKKyAgICBXZWFrUHRyPENsaWVudD4gbV9jbGll
bnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ck1lZGlhRW5kcG9pbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUxM2RiYWFiYjk4MzkyODcxNWI5ZDg2NThj
NzdlYTJmYjQ5YzY1ZDEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcApAQCAtMCww
ICsxLDEyNzIgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJNZWRpYUVuZHBvaW50LmgiCisKKyNpZiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkRvY3VtZW50LmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU2N0cFRy
YW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2lu
Y2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCisjaW5jbHVkZSAiSlNSVENTdGF0c1JlcG9y
dC5oIgorI2luY2x1ZGUgIkxvZ2dpbmcuaCIKKyNpbmNsdWRlICJNZWRpYUVuZHBvaW50Q29uZmln
dXJhdGlvbi5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUlRDRGF0
YUNoYW5uZWwuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEV2ZW50LmgiCisjaW5jbHVkZSAi
UlRDSWNlQ2FuZGlkYXRlLmgiCisjaW5jbHVkZSAiUlRDT2ZmZXJPcHRpb25zLmgiCisjaW5jbHVk
ZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSVENTY3RwVHJhbnNwb3J0QmFja2Vu
ZC5oIgorI2luY2x1ZGUgIlJUQ1Nlc3Npb25EZXNjcmlwdGlvbi5oIgorI2luY2x1ZGUgIlJUQ1N0
YXRzUmVwb3J0LmgiCisjaW5jbHVkZSAiUlRDVHJhY2tFdmVudC5oIgorI2luY2x1ZGUgIlJlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSA8Z3N0L3NkcC9zZHAuaD4KKyNpbmNsdWRlIDx3
dGYvTWFpblRocmVhZC5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2luY2x1ZGUgPHd0Zi9n
bGliL1J1bkxvb3BTb3VyY2VQcmlvcml0eS5oPgorI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBl
Lmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9JbnRlZ2VyQ29udmVyc2lvbi5oPgorCitH
U1RfREVCVUdfQ0FURUdPUlkod2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5l
IEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludChHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQmIHBlZXJDb25uZWN0aW9uKQorICAg
IDogbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCisgICAgLCBtX3N0YXRz
Q29sbGVjdG9yKEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpjcmVhdGUoKSkKKyNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKKyAgICAsIG1fc3RhdHNMb2dUaW1lcigqdGhpcywgJkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZykKKyAgICAsIG1fbG9nZ2VyKHBlZXJD
b25uZWN0aW9uLmxvZ2dlcigpKQorICAgICwgbV9sb2dJZGVudGlmaWVyKHBlZXJDb25uZWN0aW9u
LmxvZ0lkZW50aWZpZXIoKSkKKyNlbmRpZgoreworICAgIGVuc3VyZUdTdHJlYW1lckluaXRpYWxp
emVkKCk7CisKKyAgICBzdGF0aWMgc3RkOjpvbmNlX2ZsYWcgZGVidWdSZWdpc3RlcmVkRmxhZzsK
KyAgICBzdGQ6OmNhbGxfb25jZShkZWJ1Z1JlZ2lzdGVyZWRGbGFnLCBbXSB7CisgICAgICAgIEdT
VF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcsICJ3ZWJr
aXR3ZWJydGNlbmRwb2ludCIsIDAsICJXZWJLaXQgV2ViUlRDIGVuZC1wb2ludCIpOworICAgIH0p
OworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYWxpemVQaXBlbGluZSgp
Cit7CisgICAgc3RhdGljIHVpbnQzMl90IG5QaXBlbGluZSA9IDA7CisgICAgYXV0byBwaXBlbGlu
ZU5hbWUgPSBtYWtlU3RyaW5nKCJ3ZWJraXQtd2VicnQtcGlwZWxpbmUtIiwgblBpcGVsaW5lKTsK
KyAgICBtX3BpcGVsaW5lID0gZ3N0X3BpcGVsaW5lX25ldyhwaXBlbGluZU5hbWUuYXNjaWkoKS5k
YXRhKCkpOworCisgICAgY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5l
LmdldCgpLCBbdGhpc10oR3N0TWVzc2FnZSogbWVzc2FnZSkgeworICAgICAgICBoYW5kbGVNZXNz
YWdlKG1lc3NhZ2UpOworICAgIH0pOworCisgICAgYXV0byBiaW5OYW1lID0gbWFrZVN0cmluZygi
d2Via2l0LXdlYnJ0Y2Jpbi0iLCBuUGlwZWxpbmUrKyk7CisgICAgbV93ZWJydGNCaW4gPSBtYWtl
R1N0cmVhbWVyRWxlbWVudCgid2VicnRjYmluIiwgYmluTmFtZS5hc2NpaSgpLmRhdGEoKSk7Cisg
ICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgbV9zdGF0
c0NvbGxlY3Rvci0+c2V0RWxlbWVudChtX3dlYnJ0Y0Jpbi5nZXQoKSk7CisgICAgZ19zaWduYWxf
Y29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAibm90aWZ5OjppY2UtY29ubmVjdGlv
bi1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50
KSB7CisgICAgICAgIGVuZFBvaW50LT5vbkljZUNvbm5lY3Rpb25DaGFuZ2UoKTsKKyAgICB9KSwg
dGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAi
bm90aWZ5OjppY2UtZ2F0aGVyaW5nLXN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVk
aWFFbmRwb2ludCogZW5kUG9pbnQpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uSWNlR2F0aGVyaW5n
Q2hhbmdlKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZCht
X3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLW5lZ290aWF0aW9uLW5lZWRlZCIsIEdfQ0FMTEJBQ0soK1td
KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50KSB7CisgICAgICAgIGVuZFBvaW50LT5v
bk5lZ290aWF0aW9uTmVlZGVkKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLWljZS1jYW5kaWRhdGUiLCBHX0NBTExC
QUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCwgZ3VpbnQgc2RwTUxpbmVJ
bmRleCwgZ2NoYXJhcnJheSBjYW5kaWRhdGUpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uSWNlQ2Fu
ZGlkYXRlKHNkcE1MaW5lSW5kZXgsIGNhbmRpZGF0ZSk7CisgICAgfSksIHRoaXMpOworICAgIGdf
c2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInBhZC1hZGRlZCIsIEdf
Q0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RQYWQqIHBh
ZCkgeworICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5vdGlmaWNhdGlvbnMuCisgICAg
ICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9QQURfU1JDKQorICAgICAgICAg
ICAgcmV0dXJuOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRBbmRXYWl0KFtwcm90ZWN0ZWRU
aGlzID0gUmVmKCplbmRQb2ludCksIHBhZF0geworICAgICAgICAgICAgaWYgKHByb3RlY3RlZFRo
aXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAgICAg
cHJvdGVjdGVkVGhpcy0+YWRkUmVtb3RlU3RyZWFtKHBhZCk7CisgICAgICAgIH0pOworICAgIH0p
LCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCks
ICJwYWQtcmVtb3ZlZCIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVu
ZFBvaW50LCBHc3RQYWQqIHBhZCkgeworICAgICAgICAvLyBJZ25vcmUgb3V0Z29pbmcgcGFkIG5v
dGlmaWNhdGlvbnMuCisgICAgICAgIGlmIChHU1RfUEFEX0RJUkVDVElPTihwYWQpICE9IEdTVF9Q
QURfU1JDKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNhbGxPbk1haW5UaHJlYWRB
bmRXYWl0KFtwcm90ZWN0ZWRUaGlzID0gUmVmKCplbmRQb2ludCksIHBhZF0geworICAgICAgICAg
ICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICAgICAgcHJvdGVjdGVkVGhpcy0+cmVtb3ZlUmVtb3RlU3RyZWFtKHBhZCk7
CisgICAgICAgIH0pOworICAgIH0pLCB0aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm9uLWRhdGEtY2hhbm5lbCIsIEdfQ0FMTEJBQ0soK1td
KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50LCBHc3RXZWJSVENEYXRhQ2hhbm5lbCog
Y2hhbm5lbCkgeworICAgICAgICBlbmRQb2ludC0+b25EYXRhQ2hhbm5lbChjaGFubmVsKTsKKyAg
ICB9KSwgdGhpcyk7CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9waXBlbGluZS5n
ZXQoKSksIG1fd2VicnRjQmluLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworR1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6fkdTdHJlYW1lck1lZGlhRW5kcG9pbnQoKQoreworICAgIGlmICht
X3BpcGVsaW5lKQorICAgICAgICB0ZWFyZG93blBpcGVsaW5lKCk7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyTWVkaWFFbmRwb2ludDo6dGVhcmRvd25QaXBlbGluZSgpCit7CisgICAgQVNTRVJUKG1fcGlw
ZWxpbmUpOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0b3BMb2dnaW5nU3RhdHMo
KTsKKyNlbmRpZgorICAgIG1fc3RhdHNDb2xsZWN0b3ItPnNldEVsZW1lbnQobnVsbHB0cik7CisK
KyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV93ZWJydGNCaW4uZ2V0
KCksIHRoaXMpOworICAgIGRpc2Nvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBl
bGluZS5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCks
IEdTVF9TVEFURV9OVUxMKTsKKworICAgIG1fc291cmNlcy5jbGVhcigpOworICAgIG1fcmVtb3Rl
TUxpbmVJbmZvcy5jbGVhcigpOworICAgIG1fcmVtb3RlU3RyZWFtc0J5SWQuY2xlYXIoKTsKKyAg
ICBtX3dlYnJ0Y0JpbiA9IG51bGxwdHI7CisgICAgbV9waXBlbGluZSA9IG51bGxwdHI7Cit9CisK
K2Jvb2wgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aGFuZGxlTWVzc2FnZShHc3RNZXNzYWdlKiBt
ZXNzYWdlKQoreworICAgIHN3aXRjaCAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSkgeworICAg
IGNhc2UgR1NUX01FU1NBR0VfRU9TOgorICAgICAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxF
X1dJVEhfVFMoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVCVUdfR1JBUEhf
U0hPV19BTEwsICJlb3MiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9F
TEVNRU5UOiB7CisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSBnc3RfbWVzc2FnZV9nZXRfc3Ry
dWN0dXJlKG1lc3NhZ2UpOworICAgICAgICBpZiAoIWdfc3RyY21wMChnc3Rfc3RydWN0dXJlX2dl
dF9uYW1lKGRhdGEpLCAiR3N0QmluRm9yd2FyZGVkIikpIHsKKyAgICAgICAgICAgIEdSZWZQdHI8
R3N0TWVzc2FnZT4gc3ViTWVzc2FnZTsKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KGRh
dGEsICJtZXNzYWdlIiwgR1NUX1RZUEVfTUVTU0FHRSwgJnN1Yk1lc3NhZ2Uub3V0UHRyKCksIG51
bGxwdHIpOworICAgICAgICAgICAgaWYgKEdTVF9NRVNTQUdFX1RZUEUoc3ViTWVzc2FnZS5nZXQo
KSkgPT0gR1NUX01FU1NBR0VfRU9TKQorICAgICAgICAgICAgICAgIGRpc3Bvc2VFbGVtZW50Q2hh
aW4oR1NUX0VMRU1FTlRfQ0FTVChHU1RfTUVTU0FHRV9TUkMoc3ViTWVzc2FnZS5nZXQoKSkpKTsK
KyAgICAgICAgfQorICAgICAgICBicmVhazsKKyAgICB9CisgICAgZGVmYXVsdDoKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmRpc3Bvc2VFbGVtZW50Q2hhaW4oR3N0RWxlbWVudCogZWxlbWVudCkKK3sKKyAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJHb3QgZWxlbWVudCBFT1MgbWVz
c2FnZSBmcm9tICUiIEdTVF9QVFJfRk9STUFULCBlbGVtZW50KTsKKworICAgIGF1dG8gcGFkID0g
YWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGVsZW1lbnQsICJzaW5rIikpOwor
ICAgIGF1dG8gcGVlciA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9wZWVyKHBhZC5nZXQoKSkpOwor
CisgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBUUlVF
KTsKKyAgICBnc3RfcGFkX3VubGluayhwZWVyLmdldCgpLCBwYWQuZ2V0KCkpOworICAgIGdzdF9i
aW5fcmVtb3ZlKEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgZWxlbWVudCk7CisgICAg
Z3N0X2VsZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgcGVlci5n
ZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKGVsZW1lbnQsIEdTVF9TVEFURV9OVUxM
KTsKKyAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEZB
TFNFKTsKK30KKworYm9vbCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRDb25maWd1cmF0aW9u
KE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQoreworICAgIGlmICht
X3BpcGVsaW5lKQorICAgICAgICB0ZWFyZG93blBpcGVsaW5lKCk7CisKKyAgICBpZiAoIWluaXRp
YWxpemVQaXBlbGluZSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBhdXRvIGJ1bmRs
ZVBvbGljeSA9IGJ1bmRsZVBvbGljeUZyb21Db25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pOwor
ICAgIGF1dG8gaWNlVHJhbnNwb3J0UG9saWN5ID0gaWNlVHJhbnNwb3J0UG9saWN5RnJvbUNvbmZp
Z3VyYXRpb24oY29uZmlndXJhdGlvbik7CisgICAgZ19vYmplY3Rfc2V0KG1fd2VicnRjQmluLmdl
dCgpLCAiYnVuZGxlLXBvbGljeSIsIGJ1bmRsZVBvbGljeSwgImljZS10cmFuc3BvcnQtcG9saWN5
IiwgaWNlVHJhbnNwb3J0UG9saWN5LCBudWxscHRyKTsKKworICAgIGZvciAoYXV0byYgc2VydmVy
IDogY29uZmlndXJhdGlvbi5pY2VTZXJ2ZXJzKSB7CisgICAgICAgIGJvb2wgc3R1blNldCA9IGZh
bHNlOworICAgICAgICBmb3IgKGF1dG8mIHVybCA6IHNlcnZlci51cmxzKSB7CisgICAgICAgICAg
ICBpZiAodXJsLnByb3RvY29sKCkuc3RhcnRzV2l0aCgidHVybiIpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byB2YWxpZCA9IHVybC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKS5yZXBsYWNlKCJ0dXJu
OiIsICJ0dXJuOi8vIikucmVwbGFjZSgidHVybnM6IiwgInR1cm5zOi8vIik7CisgICAgICAgICAg
ICAgICAgVVJMIHZhbGlkVVJMKFVSTCgpLCB2YWxpZCk7CisgICAgICAgICAgICAgICAgLy8gRklY
TUU6IGxpYm5pY2UgY3VycmVudGx5IGRvZXNuJ3Qgc2VlbSB0byBoYW5kbGUgSVB2NiBhZGRyZXNz
ZXMgdmVyeSB3ZWxsLgorICAgICAgICAgICAgICAgIGlmICh2YWxpZFVSTC5ob3N0KCkuc3RhcnRz
V2l0aCgnWycpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAg
ICB2YWxpZFVSTC5zZXRVc2VyKHNlcnZlci51c2VybmFtZSk7CisgICAgICAgICAgICAgICAgdmFs
aWRVUkwuc2V0UGFzc3dvcmQoc2VydmVyLmNyZWRlbnRpYWwpOworICAgICAgICAgICAgICAgIGdi
b29sZWFuIHJlc3VsdCA9IEZBTFNFOworICAgICAgICAgICAgICAgIGdfc2lnbmFsX2VtaXRfYnlf
bmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImFkZC10dXJuLXNlcnZlciIsIHZhbGlkVVJMLnN0cmlu
ZygpLnV0ZjgoKS5kYXRhKCksICZyZXN1bHQpOworICAgICAgICAgICAgICAgIGlmICghcmVzdWx0
KQorICAgICAgICAgICAgICAgICAgICBHU1RfV0FSTklORygiVW5hYmxlIHRvIHVzZSBUVVJOIHNl
cnZlcjogJXMiLCB2YWxpZFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIGlmICghc3R1blNldCAmJiB1cmwucHJvdG9jb2woKS5zdGFydHNXaXRo
KCJzdHVuIikpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHZhbGlkID0gdXJsLnN0cmluZygpLmlz
b2xhdGVkQ29weSgpLnJlcGxhY2UoInN0dW46IiwgInN0dW46Ly8iKTsKKyAgICAgICAgICAgICAg
ICBVUkwgdmFsaWRVUkwoVVJMKCksIHZhbGlkKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
bGlibmljZSBjdXJyZW50bHkgZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBJUHY2IGFkZHJlc3NlcyB2
ZXJ5IHdlbGwuCisgICAgICAgICAgICAgICAgaWYgKHZhbGlkVVJMLmhvc3QoKS5zdGFydHNXaXRo
KCdbJykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHZh
bGlkVVJMLnNldFVzZXIoc2VydmVyLnVzZXJuYW1lKTsKKyAgICAgICAgICAgICAgICB2YWxpZFVS
TC5zZXRQYXNzd29yZChzZXJ2ZXIuY3JlZGVudGlhbCk7CisgICAgICAgICAgICAgICAgZ19vYmpl
Y3Rfc2V0KG1fd2VicnRjQmluLmdldCgpLCAic3R1bi1zZXJ2ZXIiLCB2YWxpZFVSTC5zdHJpbmco
KS51dGY4KCkuZGF0YSgpLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBzdHVuU2V0ID0gdHJ1
ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIFdJUDogaHR0cHM6
Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvLS9tZXJn
ZV9yZXF1ZXN0cy8zMDIKKyAgICBHU1RfRklYTUUoIiV6dSBjdXN0b20gY2VydGlmaWNhdGVzIG5v
dCBwcm9wYWdhdGVkIHRvIHdlYnJ0Y2JpbiIsIGNvbmZpZ3VyYXRpb24uY2VydGlmaWNhdGVzLnNp
emUoKSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NU
X1NUQVRFX1BMQVlJTkcpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwg
IkVuZC1wb2ludCByZWFkeSIpOworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIEdTdHJlYW1l
ck1lZGlhRW5kcG9pbnQ6OnJlc3RhcnRJY2UoKQoreworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9w
aXBlbGluZS5nZXQoKSwgInJlc3RhcnRpbmcgSUNFIik7CisgICAgLy8gV0lQIGluIGh0dHBzOi8v
Z2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2Vf
cmVxdWVzdHMvMTg3NworICAgIGluaXRpYXRlKHRydWUsIGdzdF9zdHJ1Y3R1cmVfbmV3KCJ3ZWJy
dGNiaW4tb2ZmZXItb3B0aW9ucyIsICJpY2UtcmVzdGFydCIsIEdfVFlQRV9CT09MRUFOLCBUUlVF
LCBudWxscHRyKSk7Cit9CisKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxSVENTZHBU
eXBlLCBTdHJpbmc+PiBmZXRjaERlc2NyaXB0aW9uKEdzdEVsZW1lbnQqIHdlYnJ0Y0JpbiwgY29u
c3QgY2hhciogbmFtZSkKK3sKKyAgICBpZiAoIXdlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIHsg
fTsKKworICAgIEdVbmlxdWVPdXRQdHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBkZXNj
cmlwdGlvbjsKKyAgICBnX29iamVjdF9nZXQod2VicnRjQmluLCBtYWtlU3RyaW5nKG5hbWUsICIt
ZGVzY3JpcHRpb24iKS51dGY4KCkuZGF0YSgpLCAmZGVzY3JpcHRpb24ub3V0UHRyKCksIG51bGxw
dHIpOworICAgIGlmICghZGVzY3JpcHRpb24pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBH
VW5pcXVlUHRyPGNoYXI+IHNkcFN0cmluZyhnc3Rfc2RwX21lc3NhZ2VfYXNfdGV4dChkZXNjcmlw
dGlvbi0+c2RwKSk7CisgICAgR1NUX1RSQUNFX09CSkVDVCh3ZWJydGNCaW4sICIlcy1kZXNjcmlw
dGlvbiBTRFA6ICVzIiwgbmFtZSwgc2RwU3RyaW5nLmdldCgpKTsKKyAgICByZXR1cm4geyB7IGZy
b21TZXNzaW9uRGVzY3JpcHRpb25UeXBlKCpkZXNjcmlwdGlvbi5nZXQoKSksIHNkcFN0cmluZy5n
ZXQoKSB9IH07Cit9CisKK3N0YXRpYyBHc3RXZWJSVENTaWduYWxpbmdTdGF0ZSBmZXRjaFNpZ25h
bGluZ1N0YXRlKEdzdEVsZW1lbnQqIHdlYnJ0Y0JpbikKK3sKKyAgICBHc3RXZWJSVENTaWduYWxp
bmdTdGF0ZSBzdGF0ZTsKKyAgICBnX29iamVjdF9nZXQod2VicnRjQmluLCAic2lnbmFsaW5nLXN0
YXRlIiwgJnN0YXRlLCBudWxscHRyKTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBkZXNjKGdfZW51bV90b19zdHJpbmcoR1NUX1RZUEVfV0VCUlRD
X1NJR05BTElOR19TVEFURSwgc3RhdGUpKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKHdlYnJ0Y0Jp
biwgIlNpZ25hbGluZyBzdGF0ZSBzZXQgdG8gJXMiLCBkZXNjLmdldCgpKTsKKyNlbmRpZgorICAg
IHJldHVybiBzdGF0ZTsKK30KKworZW51bSBjbGFzcyBHYXRoZXJTaWduYWxpbmdTdGF0ZSB7IE5v
LCBZZXMgfTsKK3N0YXRpYyBzdGQ6Om9wdGlvbmFsPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6RGVz
Y3JpcHRpb25TdGF0ZXM+IGRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4oR3N0RWxlbWVudCogd2Vi
cnRjQmluLCBHYXRoZXJTaWduYWxpbmdTdGF0ZSBnYXRoZXJTaWduYWxpbmdTdGF0ZSA9IEdhdGhl
clNpZ25hbGluZ1N0YXRlOjpObykKK3sKKyAgICBzdGQ6Om9wdGlvbmFsPFJUQ1NkcFR5cGU+IGN1
cnJlbnRMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSwgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHBU
eXBlLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nUmVtb3RlRGVzY3Jp
cHRpb25TZHBUeXBlOworICAgIFN0cmluZyBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcCwgcGVu
ZGluZ0xvY2FsRGVzY3JpcHRpb25TZHAsIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvblNkcCwgcGVu
ZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwOworICAgIGlmIChhdXRvIGN1cnJlbnRMb2NhbERlc2Ny
aXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3ZWJydGNCaW4sICJjdXJyZW50LWxvY2FsIikpIHsK
KyAgICAgICAgYXV0byBbc2RwVHlwZSwgZGVzY3JpcHRpb25dID0gKmN1cnJlbnRMb2NhbERlc2Ny
aXB0aW9uOworICAgICAgICBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcFR5cGUgPSBzZHBUeXBl
OworICAgICAgICBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcCA9IFdURk1vdmUoZGVzY3JpcHRp
b24pOworICAgIH0KKyAgICBpZiAoYXV0byBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiA9IGZldGNo
RGVzY3JpcHRpb24od2VicnRjQmluLCAicGVuZGluZy1sb2NhbCIpKSB7CisgICAgICAgIGF1dG8g
W3NkcFR5cGUsIGRlc2NyaXB0aW9uXSA9ICpwZW5kaW5nTG9jYWxEZXNjcmlwdGlvbjsKKyAgICAg
ICAgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgcGVu
ZGluZ0xvY2FsRGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9Cisg
ICAgaWYgKGF1dG8gY3VycmVudFJlbW90ZURlc2NyaXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3
ZWJydGNCaW4sICJjdXJyZW50LXJlbW90ZSIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5cGUsIGRl
c2NyaXB0aW9uXSA9ICpjdXJyZW50UmVtb3RlRGVzY3JpcHRpb247CisgICAgICAgIGN1cnJlbnRS
ZW1vdGVEZXNjcmlwdGlvblNkcFR5cGUgPSBzZHBUeXBlOworICAgICAgICBjdXJyZW50UmVtb3Rl
RGVzY3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAgaWYgKGF1
dG8gcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3ZWJydGNCaW4s
ICJwZW5kaW5nLXJlbW90ZSIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5cGUsIGRlc2NyaXB0aW9u
XSA9ICpwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb247CisgICAgICAgIHBlbmRpbmdSZW1vdGVEZXNj
cmlwdGlvblNkcFR5cGUgPSBzZHBUeXBlOworICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3JpcHRp
b25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9CisKKyAgICBzdGQ6Om9wdGlvbmFs
PFJUQ1NpZ25hbGluZ1N0YXRlPiBzaWduYWxpbmdTdGF0ZTsKKyAgICBpZiAoZ2F0aGVyU2lnbmFs
aW5nU3RhdGUgPT0gR2F0aGVyU2lnbmFsaW5nU3RhdGU6OlllcykKKyAgICAgICAgc2lnbmFsaW5n
U3RhdGUgPSB0b1NpZ25hbGluZ1N0YXRlKGZldGNoU2lnbmFsaW5nU3RhdGUod2VicnRjQmluKSk7
CisKKyAgICByZXR1cm4gUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpEZXNjcmlwdGlvblN0YXRlcyB7
CisgICAgICAgIHNpZ25hbGluZ1N0YXRlLAorICAgICAgICBjdXJyZW50TG9jYWxEZXNjcmlwdGlv
blNkcFR5cGUsIGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uU2RwLAorICAgICAgICBwZW5kaW5nTG9j
YWxEZXNjcmlwdGlvblNkcFR5cGUsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwLAorICAgICAg
ICBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlLCBjdXJyZW50UmVtb3RlRGVzY3JpcHRp
b25TZHAsCisgICAgICAgIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvblNkcFR5cGUsIHBlbmRpbmdS
ZW1vdGVEZXNjcmlwdGlvblNkcAorICAgIH07Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6ZG9TZXRMb2NhbERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiog
ZGVzY3JpcHRpb24pCit7CisgICAgc2V0RGVzY3JpcHRpb24oZGVzY3JpcHRpb24sIHRydWUsIFtw
cm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpc10geworICAgICAgICBpZiAocHJvdGVjdGVk
VGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gZGVz
Y3JpcHRpb25zID0gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0JpbihtX3dlYnJ0Y0Jpbi5nZXQoKSwg
R2F0aGVyU2lnbmFsaW5nU3RhdGU6Olllcyk7CisgICAgICAgIEdSZWZQdHI8R3N0V2ViUlRDU0NU
UFRyYW5zcG9ydD4gdHJhbnNwb3J0OworICAgICAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4u
Z2V0KCksICJzY3RwLXRyYW5zcG9ydCIsICZ0cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOwor
ICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRMb2NhbERlc2NyaXB0aW9uU3VjY2Vl
ZGVkKFdURk1vdmUoZGVzY3JpcHRpb25zKSwgdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFt
ZXJTY3RwVHJhbnNwb3J0QmFja2VuZD4oV1RGTW92ZSh0cmFuc3BvcnQpKSA6IG51bGxwdHIpOwor
ICAgIH0sIFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpc10oY29uc3QgR0Vycm9yKiBl
cnJvcikgeworICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgIGlmIChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHU1RfV0VC
UlRDX0VSUk9SX0lOVkFMSURfU1RBVEUpCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFj
a2VuZC5zZXRMb2NhbERlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRTdGF0ZUVy
cm9yLCAiRmFpbGVkIHRvIHNldCBsb2NhbCBhbnN3ZXIgc2RwOiBubyBwZW5kaW5nIHJlbW90ZSBk
ZXNjcmlwdGlvbi4iX3MgfSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGVlckNvbm5l
Y3Rpb25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0
aW9uRXJyb3IsICJVbmFibGUgdG8gYXBwbHkgc2Vzc2lvbiBsb2NhbCBkZXNjcmlwdGlvbiJfcyB9
KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb1NldFJlbW90
ZURlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7
CisgICAgc2V0RGVzY3JpcHRpb24oJmRlc2NyaXB0aW9uLCBmYWxzZSwgW3Byb3RlY3RlZFRoaXMg
PSBSZWYoKnRoaXMpLCB0aGlzXSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3Bw
ZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiQWNraW5nIHJlbW90ZSBkZXNjcmlwdGlvbiIpOworICAgICAgICBhdXRv
IGRlc2NyaXB0aW9ucyA9IGRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0
KCksIEdhdGhlclNpZ25hbGluZ1N0YXRlOjpZZXMpOworICAgICAgICBHUmVmUHRyPEdzdFdlYlJU
Q1NDVFBUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAgICAgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRj
QmluLmdldCgpLCAic2N0cC10cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRy
KTsKKyAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuc2V0UmVtb3RlRGVzY3JpcHRpb25T
dWNjZWVkZWQoV1RGTW92ZShkZXNjcmlwdGlvbnMpLCB0cmFuc3BvcnQgPyBtYWtlVW5pcXVlPEdT
dHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kPihXVEZNb3ZlKHRyYW5zcG9ydCkpIDogbnVsbHB0
cik7CisgICAgfSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCB0aGlzXShjb25zdCBHRXJy
b3IqIGVycm9yKSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKGVycm9yICYmIGVycm9yLT5jb2RlID09IEdT
VF9XRUJSVENfRVJST1JfSU5WQUxJRF9TVEFURSkKKyAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rp
b25CYWNrZW5kLnNldFJlbW90ZURlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IEludmFsaWRT
dGF0ZUVycm9yLCAiRmFpbGVkIHRvIHNldCByZW1vdGUgYW5zd2VyIHNkcCJfcyB9KTsKKyAgICAg
ICAgZWxzZQorICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuc2V0UmVtb3RlRGVz
Y3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJyb3IsICJVbmFibGUgdG8gYXBw
bHkgc2Vzc2lvbiByZW1vdGUgZGVzY3JpcHRpb24iX3MgfSk7CisgICAgfSk7CisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECisgICAgc3RhcnRMb2dnaW5nU3RhdHMoKTsKKyNlbmRpZgorfQorCitz
dHJ1Y3QgU2V0RGVzY3JpcHRpb25DYWxsRGF0YSB7CisgICAgRnVuY3Rpb248dm9pZCgpPiBzdWNj
ZXNzQ2FsbGJhY2s7CisgICAgRnVuY3Rpb248dm9pZChjb25zdCBHRXJyb3IqKT4gZmFpbHVyZUNh
bGxiYWNrOworfTsKKworV0VCS0lUX0RFRklORV9BU1lOQ19EQVRBX1NUUlVDVChTZXREZXNjcmlw
dGlvbkNhbGxEYXRhKTsKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXREZXNjcmlw
dGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uLCBib29sIGlzTG9j
YWwsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzdWNjZXNzQ2FsbGJhY2ssIEZ1bmN0aW9uPHZvaWQoY29u
c3QgR0Vycm9yKik+JiYgZmFpbHVyZUNhbGxiYWNrKQoreworICAgIEdzdFNEUE1lc3NhZ2UqIG1l
c3NhZ2U7CisgICAgYXV0byBzZHBUeXBlID0gUlRDU2RwVHlwZTo6T2ZmZXI7CisKKyAgICBpZiAo
ZGVzY3JpcHRpb24pIHsKKyAgICAgICAgaWYgKGdzdF9zZHBfbWVzc2FnZV9uZXdfZnJvbV90ZXh0
KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRlc2NyaXB0aW9uLT5zZHAoKS5jaGFyYWN0
ZXJzOCgpKSwgJm1lc3NhZ2UpICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAgICAgIGZhaWx1cmVD
YWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAg
ICBzZHBUeXBlID0gZGVzY3JpcHRpb24tPnR5cGUoKTsKKyAgICB9IGVsc2UgaWYgKGdzdF9zZHBf
bWVzc2FnZV9uZXcoJm1lc3NhZ2UpICE9IEdTVF9TRFBfT0spIHsKKyAgICAgICAgZmFpbHVyZUNh
bGxiYWNrKG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc0xv
Y2FsKQorICAgICAgICBzdG9yZVJlbW90ZU1MaW5lSW5mbyhtZXNzYWdlKTsKKworICAgIGF1dG8g
dHlwZSA9IHRvU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZShzZHBUeXBlKTsKKyAgICBHU1RfREVCVUdf
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDcmVhdGluZyAlcyBzZXNzaW9uIGZvciBTRFAgJXMi
LCBpc0xvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLCBnc3Rfd2VicnRjX3NkcF90eXBlX3RvX3N0
cmluZyh0eXBlKSk7CisKKyAgICBHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlv
bj4gc2Vzc2lvbkRlc2NyaXB0aW9uKGdzdF93ZWJydGNfc2Vzc2lvbl9kZXNjcmlwdGlvbl9uZXco
dHlwZSwgbWVzc2FnZSkpOworICAgIGF1dG8gc2lnbmFsTmFtZSA9IG1ha2VTdHJpbmcoInNldC0i
LCBpc0xvY2FsID8gImxvY2FsIiA6ICJyZW1vdGUiLCAiLWRlc2NyaXB0aW9uIik7CisgICAgYXV0
byogZGF0YSA9IGNyZWF0ZVNldERlc2NyaXB0aW9uQ2FsbERhdGEoKTsKKyAgICBkYXRhLT5zdWNj
ZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nlc3NDYWxsYmFjayk7CisgICAgZGF0YS0+ZmFpbHVy
ZUNhbGxiYWNrID0gV1RGTW92ZShmYWlsdXJlQ2FsbGJhY2spOworICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgc2lnbmFsTmFtZS5hc2NpaSgpLmRhdGEoKSwgc2Vz
c2lvbkRlc2NyaXB0aW9uLmdldCgpLCBnc3RfcHJvbWlzZV9uZXdfd2l0aF9jaGFuZ2VfZnVuYyhb
XShHc3RQcm9taXNlKiByYXdQcm9taXNlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBh
dXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8U2V0RGVzY3JpcHRpb25DYWxsRGF0YSo+KHVzZXJEYXRh
KTsKKyAgICAgICAgYXV0byBwcm9taXNlID0gYWRvcHRHUmVmKHJhd1Byb21pc2UpOworICAgICAg
ICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZS5nZXQoKSk7CisgICAgICAg
IGNvbnN0IGF1dG8qIHJlcGx5ID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UuZ2V0KCkp
OworICAgICAgICBpZiAocmVzdWx0ICE9IEdTVF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEIHx8IChy
ZXBseSAmJiBnc3Rfc3RydWN0dXJlX2hhc19maWVsZChyZXBseSwgImVycm9yIikpKSB7CisgICAg
ICAgICAgICBzdGQ6Om9wdGlvbmFsPEdVbmlxdWVQdHI8R0Vycm9yPj4gZXJyb3JIb2xkZXI7Cisg
ICAgICAgICAgICBpZiAocmVwbHkpIHsKKyAgICAgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdF
cnJvcj4gZXJyb3I7CisgICAgICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksICJl
cnJvciIsIEdfVFlQRV9FUlJPUiwgJmVycm9yLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAg
ICAgICAgICBHU1RfRVJST1IoIlVuYWJsZSB0byBzZXQgZGVzY3JpcHRpb24sIGVycm9yOiAlcyIs
IGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAgICAgICAgICBlcnJvckhvbGRlciA9IEdVbmlxdWVQ
dHI8R0Vycm9yPihlcnJvci5yZWxlYXNlKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbZXJyb3IgPSBXVEZNb3ZlKGVycm9ySG9sZGVyKSwgZmFpbHVyZUNh
bGxiYWNrID0gV1RGTW92ZShkYXRhLT5mYWlsdXJlQ2FsbGJhY2spXSB7CisgICAgICAgICAgICAg
ICAgZmFpbHVyZUNhbGxiYWNrKGVycm9yID8gZXJyb3ItPmdldCgpIDogbnVsbHB0cik7CisgICAg
ICAgICAgICB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxs
T25NYWluVGhyZWFkKFtzdWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKGRhdGEtPnN1Y2Nlc3NDYWxs
YmFjayldIHsKKyAgICAgICAgICAgIHN1Y2Nlc3NDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAg
ICB9LCBkYXRhLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZXN0cm95U2V0RGVz
Y3JpcHRpb25DYWxsRGF0YSkpKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpz
dG9yZVJlbW90ZU1MaW5lSW5mbyhHc3RTRFBNZXNzYWdlKiBtZXNzYWdlKQoreworICAgIG1fcmVt
b3RlTUxpbmVJbmZvcy5jbGVhcigpOworICAgIHVuc2lnbmVkIHRvdGFsTWVkaWFzID0gZ3N0X3Nk
cF9tZXNzYWdlX21lZGlhc19sZW4obWVzc2FnZSk7CisgICAgbV9yZW1vdGVNTGluZUluZm9zLnJl
c2VydmVDYXBhY2l0eSh0b3RhbE1lZGlhcyk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVs
aW5lLmdldCgpLCAiU3RvcmluZyAldSByZW1vdGUgcGVuZGluZyBtbGluZXMiLCB0b3RhbE1lZGlh
cyk7CisgICAgZm9yICh1bnNpZ25lZCBtZWRpYUluZGV4ID0gMDsgbWVkaWFJbmRleCA8IHRvdGFs
TWVkaWFzOyBtZWRpYUluZGV4KyspIHsKKyAgICAgICAgY29uc3QgYXV0byogbWVkaWEgPSBnc3Rf
c2RwX21lc3NhZ2VfZ2V0X21lZGlhKG1lc3NhZ2UsIG1lZGlhSW5kZXgpOworICAgICAgICBjb25z
dCBjaGFyKiBtZWRpYVR5cGUgPSBnc3Rfc2RwX21lZGlhX2dldF9tZWRpYShtZWRpYSk7CisgICAg
ICAgIGlmICghZ19zdHJfZXF1YWwobWVkaWFUeXBlLCAiYXVkaW8iKSAmJiAhZ19zdHJfZXF1YWwo
bWVkaWFUeXBlLCAidmlkZW8iKSkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisjaWZuZGVmIEdT
VF9ESVNBQkxFX0dTVF9ERUJVRworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IG1lZGlhUmVwcmVz
ZW50YXRpb24oZ3N0X3NkcF9tZWRpYV9hc190ZXh0KG1lZGlhKSk7CisgICAgICAgIEdTVF9MT0df
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJQcm9jZXNzaW5nIG1lZGlhOlxuJXMiLCBtZWRpYVJl
cHJlc2VudGF0aW9uLmdldCgpKTsKKyNlbmRpZgorICAgICAgICBjb25zdCBjaGFyKiBtaWQgPSBn
c3Rfc2RwX21lZGlhX2dldF9hdHRyaWJ1dGVfdmFsKG1lZGlhLCAibWlkIik7CisgICAgICAgIGlm
ICghbWlkKQorICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgYm9vbCBpc0luYWN0aXZl
ID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsQXR0cmlidXRlcyA9IGdzdF9zZHBfbWVk
aWFfYXR0cmlidXRlc19sZW4obWVkaWEpOworICAgICAgICBmb3IgKHVuc2lnbmVkIGF0dHJpYnV0
ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXggPCB0b3RhbEF0dHJpYnV0ZXM7IGF0dHJpYnV0ZUlu
ZGV4KyspIHsKKyAgICAgICAgICAgIGNvbnN0IGF1dG8qIGF0dHJpYnV0ZSA9IGdzdF9zZHBfbWVk
aWFfZ2V0X2F0dHJpYnV0ZShtZWRpYSwgYXR0cmlidXRlSW5kZXgpOworICAgICAgICAgICAgaWYg
KCFnX3N0cmNtcDAoYXR0cmlidXRlLT5rZXksICJpbmFjdGl2ZSIpKSB7CisgICAgICAgICAgICAg
ICAgaXNJbmFjdGl2ZSA9IHRydWU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGlzSW5hY3RpdmUpIHsKKyAgICAgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlNraXBwaW5nIGluYWN0aXZlIG1lZGlh
Iik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgfQorCisgICAgICAgIG1fbWVkaWFG
b3JNaWQuc2V0KHsgbWlkIH0sIGdfc3RyX2VxdWFsKG1lZGlhVHlwZSwgImF1ZGlvIikgPyBSZWFs
dGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6
OlZpZGVvKTsKKworICAgICAgICAvLyBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0
cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3RzLzE5MDcKKyAgICAgICAgaWYg
KHNkcE1lZGlhSGFzQXR0cmlidXRlS2V5KG1lZGlhLCAiaWNlLWxpdGUiKSkgeworICAgICAgICAg
ICAgR1JlZlB0cjxHT2JqZWN0PiBpY2U7CisgICAgICAgICAgICBnX29iamVjdF9nZXQobV93ZWJy
dGNCaW4uZ2V0KCksICJpY2UtYWdlbnQiLCAmaWNlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAg
ICAgICAgIGdfb2JqZWN0X3NldChpY2UuZ2V0KCksICJpY2UtbGl0ZSIsIFRSVUUsIG51bGxwdHIp
OworICAgICAgICB9CisKKyAgICAgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25l
d19lbXB0eSgpKTsKKyAgICAgICAgVmVjdG9yPGludD4gcGF5bG9hZFR5cGVzOworICAgICAgICB1
bnNpZ25lZCB0b3RhbEZvcm1hdHMgPSBnc3Rfc2RwX21lZGlhX2Zvcm1hdHNfbGVuKG1lZGlhKTsK
KyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTWVkaWEgJXMgaGFz
ICV1IGZvcm1hdHMiLCBtZWRpYVR5cGUsIHRvdGFsRm9ybWF0cyk7CisgICAgICAgIGZvciAodW5z
aWduZWQgZm9ybWF0SW5kZXggPSAwOyBmb3JtYXRJbmRleCA8IHRvdGFsRm9ybWF0czsgZm9ybWF0
SW5kZXgrKykgeworICAgICAgICAgICAgYXV0byBmb3JtYXQgPSBtYWtlU3RyaW5nKGdzdF9zZHBf
bWVkaWFfZ2V0X2Zvcm1hdChtZWRpYSwgZm9ybWF0SW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8g
cGF5bG9hZFR5cGUgPSBwYXJzZUludGVnZXI8aW50Pihmb3JtYXQpOworICAgICAgICAgICAgaWYg
KCFwYXlsb2FkVHlwZSB8fCAhKnBheWxvYWRUeXBlKSB7CisgICAgICAgICAgICAgICAgR1NUX1dB
Uk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJJbnZhbGlkIHBheWxvYWQgdHlwZTogJXMi
LCBmb3JtYXQudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBhdXRvIGZvcm1hdENhcHMgPSBhZG9wdEdSZWYoZ3N0X3Nk
cF9tZWRpYV9nZXRfY2Fwc19mcm9tX21lZGlhKG1lZGlhLCAqcGF5bG9hZFR5cGUpKTsKKyAgICAg
ICAgICAgIGlmICghZm9ybWF0Q2FwcykgeworICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTm8gY2FwcyBmb3VuZCBmb3IgcGF5bG9hZCB0eXBlICVk
IiwgKnBheWxvYWRUeXBlKTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgLy8gUmVsYXkgU0RQIGF0dHJpYnV0ZXMgdG8gdGhlIGNhcHMsIHRo
aXMgaXMgc3BlY2lhbGx5IHVzZWZ1bCBzbyB0aGF0IGVsZW1lbnRzIGluCisgICAgICAgICAgICAv
LyB3ZWJydGNiaW4gd2lsbCBiZSBhYmxlIHRvIGVuYWJsZSBSVFAgaGVhZGVyIGV4dGVuc2lvbnMu
CisgICAgICAgICAgICBnc3Rfc2RwX21lZGlhX2F0dHJpYnV0ZXNfdG9fY2FwcyhtZWRpYSwgZm9y
bWF0Q2Fwcy5nZXQoKSk7CisKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZChjYXBzLmdldCgp
LCBmb3JtYXRDYXBzLmxlYWtSZWYoKSk7CisgICAgICAgICAgICBtX3B0Q291bnRlciA9IHN0ZDo6
bWF4KG1fcHRDb3VudGVyLCAqcGF5bG9hZFR5cGUgKyAxKTsKKyAgICAgICAgICAgIHBheWxvYWRU
eXBlcy5hcHBlbmQoKnBheWxvYWRUeXBlKTsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVk
IHRvdGFsQ2FwcyA9IGdzdF9jYXBzX2dldF9zaXplKGNhcHMuZ2V0KCkpOworICAgICAgICBpZiAo
dG90YWxDYXBzKSB7CisgICAgICAgICAgICBmb3IgKHVuc2lnbmVkIGNhcHNJbmRleCA9IDA7IGNh
cHNJbmRleCA8IHRvdGFsQ2FwczsgY2Fwc0luZGV4KyspIHsKKyAgICAgICAgICAgICAgICBHc3RT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwg
Y2Fwc0luZGV4KTsKKyAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKHN0cnVj
dHVyZSwgImFwcGxpY2F0aW9uL3gtcnRwIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBH
U1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDYWNoaW5nIHBheWxvYWQgY2Fwczog
JSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAgICAgICAgICAgbV9yZW1vdGVNTGlu
ZUluZm9zLnVuY2hlY2tlZEFwcGVuZCh7IFdURk1vdmUoY2FwcyksIGZhbHNlLCBXVEZNb3ZlKHBh
eWxvYWRUeXBlcykgfSk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6Y29uZmlndXJlQW5kTGlua1NvdXJjZShSZWFsdGltZU91dGdvaW5nTWVkaWFT
b3VyY2VHU3RyZWFtZXImIHNvdXJjZSkKK3sKKyAgICBhdXRvIGNhcHMgPSBzb3VyY2UuYWxsb3dl
ZENhcHMoKTsKKyAgICBzdGQ6Om9wdGlvbmFsPHN0ZDo6cGFpcjxQZW5kaW5nTUxpbmVJbmZvLCBH
UmVmUHRyPEdzdENhcHM+Pj4gZm91bmQ7CisgICAgZm9yIChhdXRvJiBtTGluZUluZm8gOiBtX3Jl
bW90ZU1MaW5lSW5mb3MpIHsKKyAgICAgICAgaWYgKG1MaW5lSW5mby5pc1VzZWQpCisgICAgICAg
ICAgICBjb250aW51ZTsKKworICAgICAgICB1bnNpZ25lZCB0b3RhbENhcHMgPSBnc3RfY2Fwc19n
ZXRfc2l6ZShtTGluZUluZm8uY2Fwcy5nZXQoKSk7CisgICAgICAgIGZvciAodW5zaWduZWQgY2Fw
c0luZGV4ID0gMDsgY2Fwc0luZGV4IDwgdG90YWxDYXBzOyBjYXBzSW5kZXgrKykgeworICAgICAg
ICAgICAgYXV0byogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShtTGluZUluZm8u
Y2Fwcy5nZXQoKSwgY2Fwc0luZGV4KTsKKyAgICAgICAgICAgIGF1dG8gY2FwczIgPSBhZG9wdEdS
ZWYoZ3N0X2NhcHNfbmV3X2Z1bGwoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSksIG51bGxw
dHIpKTsKKyAgICAgICAgICAgIGF1dG8gaW50ZXJzZWN0ZWQgPSBhZG9wdEdSZWYoZ3N0X2NhcHNf
aW50ZXJzZWN0KGNhcHMuZ2V0KCksIGNhcHMyLmdldCgpKSk7CisgICAgICAgICAgICBpZiAoIWdz
dF9jYXBzX2lzX2VtcHR5KGludGVyc2VjdGVkLmdldCgpKSkgeworICAgICAgICAgICAgICAgIGZv
dW5kID0gc3RkOjptYWtlX3BhaXIobUxpbmVJbmZvLCBXVEZNb3ZlKGludGVyc2VjdGVkKSk7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAg
aWYgKGZvdW5kLmhhc192YWx1ZSgpKQorICAgICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAg
Ym9vbCBwYXlsb2FkVHlwZVdhc1NldCA9IGZhbHNlOworICAgIGlmIChmb3VuZCkgeworICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJVbnVzZWQgYW5kIGNvbXBhdGli
bGUgY2FwcyBmb3VuZCBmb3IgJSIgR1NUX1BUUl9GT1JNQVQgIi4uLiAlIiBHU1RfUFRSX0ZPUk1B
VCwgY2Fwcy5nZXQoKSwgZm91bmQtPnNlY29uZC5nZXQoKSk7CisgICAgICAgIHBheWxvYWRUeXBl
V2FzU2V0ID0gc291cmNlLnNldFBheWxvYWRUeXBlKGZvdW5kLT5zZWNvbmQpOworICAgICAgICBm
b3VuZC0+Zmlyc3QuaXNVc2VkID0gdHJ1ZTsKKyAgICB9IGVsc2UKKyAgICAgICAgcGF5bG9hZFR5
cGVXYXNTZXQgPSBzb3VyY2Uuc2V0UGF5bG9hZFR5cGUoY2Fwcyk7CisKKyAgICBpZiAoIXBheWxv
YWRUeXBlV2FzU2V0KQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAoIXNvdXJjZS5wYWQoKSkg
eworICAgICAgICBzb3VyY2Uuc2V0U2lua1BhZChyZXF1ZXN0UGFkKG1fcmVxdWVzdFBhZENvdW50
ZXIsIHNvdXJjZS5hbGxvd2VkQ2FwcygpKSk7CisgICAgICAgIG1fcmVxdWVzdFBhZENvdW50ZXIr
KzsKKyAgICB9CisKKyAgICBhdXRvJiBzaW5rUGFkID0gc291cmNlLnBhZCgpOworICAgIEFTU0VS
VCghZ3N0X3BhZF9pc19saW5rZWQoc2lua1BhZC5nZXQoKSkpOworICAgIGlmIChnc3RfcGFkX2lz
X2xpbmtlZChzaW5rUGFkLmdldCgpKSkgeworICAgICAgICBXVEZMb2dBbHdheXMoIlJlYWx0aW1l
TWVkaWFTb3VyY2UgYWxyZWFkeSBsaW5rZWQsIHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uIik7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHNvdXJjZUJpbiA9IHNvdXJjZS5iaW4o
KTsKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIHNvdXJj
ZUJpbi5nZXQoKSk7CisgICAgc291cmNlLmxpbmsoKTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9H
U1RfREVCVUcKKyAgICBHVW5pcXVlUHRyPGNoYXI+IHBhZElkKGdzdF9wYWRfZ2V0X25hbWUoc2lu
a1BhZC5nZXQoKSkpOworICAgIGF1dG8gZG90RmlsZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpF
Q1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwgIi5vdXRnb2luZy0iLCBwYWRJZC5nZXQoKSk7Cisg
ICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5n
ZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEo
KSk7CisjZW5kaWYKK30KKworR1JlZlB0cjxHc3RQYWQ+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OnJlcXVlc3RQYWQodW5zaWduZWQgbWxpbmVJbmRleCwgY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYg
YWxsb3dlZENhcHMpCit7CisgICAgYXV0byBwYWRJZCA9IG1ha2VTdHJpbmcoInNpbmtfIiwgbWxp
bmVJbmRleCk7CisgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkoYWxsb3dl
ZENhcHMuZ2V0KCkpKTsKKworICAgIGdzdF9jYXBzX21hcF9pbl9wbGFjZShjYXBzLmdldCgpLCBb
XShHc3RDYXBzRmVhdHVyZXMqLCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSwgZ3BvaW50ZXIgdXNl
ckRhdGEpIC0+IGdib29sZWFuIHsKKyAgICAgICAgYXV0byogZW5kUG9pbnQgPSByZWludGVycHJl
dF9jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqPih1c2VyRGF0YSk7CisgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgInBheWxvYWQiLCBHX1RZUEVfSU5ULCBlbmRQb2ludC0+
bV9wdENvdW50ZXIrKywgbnVsbHB0cik7CisgICAgICAgIHJldHVybiBUUlVFOworICAgIH0sIHRo
aXMpOworCisgICAgLy8gRklYTUU6IFJlc3RyaWN0aW5nIGNhcHMgYW5kIGNvZGVjLXByZWZlcmVu
Y2VzIGJyZWFrcyBjYXBzIG5lZ290aWF0aW9uIG9mIG91dGdvaW5nIHNvdXJjZXMgaW4KKyAgICAv
LyBzb21lIGNhc2UgKGppdHNpKS4KKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0
KCksICJSZXF1ZXN0aW5nIHBhZCAlcyByZXN0cmljdGVkIHRvICUiIEdTVF9QVFJfRk9STUFULCBw
YWRJZC51dGY4KCkuZGF0YSgpLCBjYXBzLmdldCgpKTsKKyAgICBhdXRvKiBwYWRUZW1wbGF0ZSA9
IGdzdF9lbGVtZW50X2dldF9wYWRfdGVtcGxhdGUobV93ZWJydGNCaW4uZ2V0KCksICJzaW5rXyV1
Iik7CisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X3JlcXVlc3RfcGFk
KG1fd2VicnRjQmluLmdldCgpLCBwYWRUZW1wbGF0ZSwgcGFkSWQudXRmOCgpLmRhdGEoKSwgY2Fw
cy5nZXQoKSkpOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHRyYW5zY2Vp
dmVyOworICAgIGdfb2JqZWN0X2dldChzaW5rUGFkLmdldCgpLCAidHJhbnNjZWl2ZXIiLCAmdHJh
bnNjZWl2ZXIub3V0UHRyKCksIG51bGxwdHIpOworICAgIGdfb2JqZWN0X3NldCh0cmFuc2NlaXZl
ci5nZXQoKSwgImNvZGVjLXByZWZlcmVuY2VzIiwgY2Fwcy5nZXQoKSwgbnVsbHB0cik7CisgICAg
cmV0dXJuIHNpbmtQYWQ7Cit9CisKK2Jvb2wgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkVHJh
Y2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgc2VuZGVyLCBNZWRpYVN0cmVhbVRyYWNrJiB0
cmFjaywgY29uc3QgRml4ZWRWZWN0b3I8U3RyaW5nPiYpCit7CisgICAgR1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZDo6U291cmNlIHNvdXJjZTsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRl
cj4gcnRjU2VuZGVyOworCisgICAgaWYgKHRyYWNrLnByaXZhdGVUcmFjaygpLmhhc0F1ZGlvKCkp
IHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIG91
dGdvaW5nIGF1ZGlvIHNvdXJjZSIpOworICAgICAgICBhdXRvIGF1ZGlvU291cmNlID0gUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJhY2sucHJpdmF0ZVRyYWNr
KCkpOworICAgICAgICBjb25maWd1cmVBbmRMaW5rU291cmNlKGF1ZGlvU291cmNlKTsKKworICAg
ICAgICBydGNTZW5kZXIgPSBhdWRpb1NvdXJjZS0+c2VuZGVyKCk7CisgICAgICAgIHNvdXJjZSA9
IFdURk1vdmUoYXVkaW9Tb3VyY2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh0cmFj
ay5wcml2YXRlVHJhY2soKS5oYXNWaWRlbygpKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIG91dGdvaW5nIHZpZGVvIHNvdXJjZSIpOworICAgICAg
ICBhdXRvIHZpZGVvU291cmNlID0gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVy
OjpjcmVhdGUodHJhY2sucHJpdmF0ZVRyYWNrKCkpOworICAgICAgICBjb25maWd1cmVBbmRMaW5r
U291cmNlKHZpZGVvU291cmNlKTsKKworICAgICAgICBydGNTZW5kZXIgPSB2aWRlb1NvdXJjZS0+
c2VuZGVyKCk7CisgICAgICAgIHNvdXJjZSA9IFdURk1vdmUodmlkZW9Tb3VyY2UpOworICAgIH0K
KworICAgIHNlbmRlci5zZXRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKKworICAgIGlmIChhdXRv
IHJ0cFNlbmRlciA9IHNlbmRlci5ydGNTZW5kZXIoKSkgeworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBbHJlYWR5IGhhcyBhIHNlbmRlci4iKTsKKyAgICAgICAg
cmV0dXJuIHRydWU7CisgICAgfQorCisgICAgc2VuZGVyLnNldFJUQ1NlbmRlcihXVEZNb3ZlKHJ0
Y1NlbmRlcikpOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU2Vu
ZGVyIGNvbmZpZ3VyZWQiKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpyZW1vdmVUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5k
ZXIpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVtb3Zpbmcg
dHJhY2siKTsKKyAgICBpZiAoYXV0byBiaW4gPSBzZW5kZXIuc3RvcFNvdXJjZSgpKQorICAgICAg
ICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIGJpbi5nZXQo
KSk7CisgICAgc2VuZGVyLmNsZWFyU291cmNlKCk7CisgICAgb25OZWdvdGlhdGlvbk5lZWRlZCgp
OworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlT2ZmZXIoY29uc3Qg
UlRDT2ZmZXJPcHRpb25zJiBvcHRpb25zKQoreworICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVk
ZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTg3
NworICAgIC8vIEZJWE1FOiBQbHVtYiBvcHRpb25zLnZvaWNlQWN0aXZpdHlEZXRlY3Rpb24uCisg
ICAgaW5pdGlhdGUodHJ1ZSwgZ3N0X3N0cnVjdHVyZV9uZXcoIndlYnJ0Y2Jpbi1vZmZlci1vcHRp
b25zIiwgImljZS1yZXN0YXJ0IiwgR19UWVBFX0JPT0xFQU4sIG9wdGlvbnMuaWNlUmVzdGFydCwg
bnVsbHB0cikpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlQW5z
d2VyKCkKK3sKKyAgICBpbml0aWF0ZShmYWxzZSwgbnVsbHB0cik7Cit9CisKK3N0cnVjdCBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50SG9sZGVyIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExP
Q0FURUQ7CisgICAgZXhwbGljaXQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludEhvbGRlcihHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50JiBlbmRQb2ludCkKKyAgICAgICAgOiBlbmRQb2ludChlbmRQb2ludCkK
KyAgICB7IH0KKworICAgIFJlZjxHU3RyZWFtZXJNZWRpYUVuZHBvaW50PiBlbmRQb2ludDsKK307
CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aW5pdGlhdGUoYm9vbCBpc0luaXRpYXRv
ciwgR3N0U3RydWN0dXJlKiByYXdPcHRpb25zKQoreworICAgIG1faXNJbml0aWF0b3IgPSBpc0lu
aXRpYXRvcjsKKyAgICBjb25zdCBjaGFyKiB0eXBlID0gaXNJbml0aWF0b3IgPyAib2ZmZXIiIDog
ImFuc3dlciI7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ3JlYXRp
bmcgJXMiLCB0eXBlKTsKKyAgICBhdXRvIHNpZ25hbE5hbWUgPSBtYWtlU3RyaW5nKCJjcmVhdGUt
IiwgdHlwZSk7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IG9wdGlvbnMocmF3T3B0aW9u
cyk7CisgICAgYXV0byBkYXRhID0gbWFrZVVuaXF1ZTxHU3RyZWFtZXJNZWRpYUVuZHBvaW50SG9s
ZGVyPigqdGhpcyk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgp
LCBzaWduYWxOYW1lLmFzY2lpKCkuZGF0YSgpLCBvcHRpb25zLmdldCgpLCBnc3RfcHJvbWlzZV9u
ZXdfd2l0aF9jaGFuZ2VfZnVuYyhbXShHc3RQcm9taXNlKiByYXdQcm9taXNlLCBncG9pbnRlciB1
c2VyRGF0YSkgeworICAgICAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dEhvbGRlcj4gZGF0YShzdGF0aWNfY2FzdDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50SG9sZGVyKj4o
dXNlckRhdGEpKTsKKyAgICAgICAgYXV0byBwcm9taXNlID0gYWRvcHRHUmVmKHJhd1Byb21pc2Up
OworICAgICAgICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZS5nZXQoKSk7
CisgICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpIHsKKyAg
ICAgICAgICAgIGRhdGEtPmVuZFBvaW50LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQo
eyB9KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGF1
dG8qIHJlcGx5ID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UuZ2V0KCkpOworICAgICAg
ICBBU1NFUlQocmVwbHkpOworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQocmVw
bHksICJlcnJvciIpKSB7CisgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gcHJvbWlz
ZUVycm9yOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksICJlcnJvciIsIEdf
VFlQRV9FUlJPUiwgJnByb21pc2VFcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAg
ICBkYXRhLT5lbmRQb2ludC0+Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uRmFpbGVkKEdVbmlxdWVQ
dHI8R0Vycm9yPihwcm9taXNlRXJyb3IucmVsZWFzZSgpKSk7CisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIH0KKworICAgICAgICBjb25zdCBjaGFyKiB0eXBlID0gZGF0YS0+ZW5kUG9pbnQt
Pm1faXNJbml0aWF0b3IgPyAib2ZmZXIiIDogImFuc3dlciI7CisgICAgICAgIEdVbmlxdWVPdXRQ
dHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBzZXNzaW9uRGVzY3JpcHRpb247CisgICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHJlcGx5LCB0eXBlLCBHU1RfVFlQRV9XRUJSVENfU0VTU0lP
Tl9ERVNDUklQVElPTiwgJnNlc3Npb25EZXNjcmlwdGlvbi5vdXRQdHIoKSwgbnVsbHB0cik7CisK
KyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisgICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4g
c2RwKGdzdF9zZHBfbWVzc2FnZV9hc190ZXh0KHNlc3Npb25EZXNjcmlwdGlvbi0+c2RwKSk7Cisg
ICAgICAgIEdTVF9ERUJVR19PQkpFQ1QoZGF0YS0+ZW5kUG9pbnQtPnBpcGVsaW5lKCksICJDcmVh
dGVkICVzOiAlcyIsIHR5cGUsIHNkcC5nZXQoKSk7CisjZW5kaWYKKyAgICAgICAgR1VuaXF1ZVB0
cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IGRlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlw
dGlvbi5yZWxlYXNlKCkpOworICAgICAgICBkYXRhLT5lbmRQb2ludC0+Y3JlYXRlU2Vzc2lvbkRl
c2NyaXB0aW9uU3VjY2VlZGVkKFdURk1vdmUoZGVzY3JpcHRpb24pKTsKKyAgICB9LCBkYXRhLnJl
bGVhc2UoKSwgbnVsbHB0cikpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Omdl
dFN0YXRzKEdzdFBhZCogcGFkLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7Cisg
ICAgbV9zdGF0c0NvbGxlY3Rvci0+Z2V0U3RhdHMoW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2Up
LCBwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKV0oYXV0byYmIHJlcG9ydCkgbXV0YWJsZSB7Cisg
ICAgICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlz
LT5pc1N0b3BwZWQoKSB8fCAhcmVwb3J0KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IHByb21pc2UtPnJlc29sdmU8SURMSW50ZXJmYWNlPFJUQ1N0YXRzUmVwb3J0Pj4ocmVwb3J0LnJl
bGVhc2VOb25OdWxsKCkpOworICAgIH0sIHBhZCk7Cit9CisKK01lZGlhU3RyZWFtJiBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjptZWRpYVN0cmVhbUZyb21SVENTdHJlYW0oU3RyaW5nIGxhYmVsKQor
eworICAgIGF1dG8gbWVkaWFTdHJlYW0gPSBtX3JlbW90ZVN0cmVhbXNCeUlkLmVuc3VyZShsYWJl
bCwgW2xhYmVsLCB0aGlzXSgpIG11dGFibGUgeworICAgICAgICBhdXRvJiBkb2N1bWVudCA9IGRv
d25jYXN0PERvY3VtZW50PigqbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29ubmVjdGlvbigpLnNj
cmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7CisgICAgICAgIHJldHVybiBNZWRpYVN0cmVhbTo6Y3Jl
YXRlKGRvY3VtZW50LCBNZWRpYVN0cmVhbVByaXZhdGU6OmNyZWF0ZShkb2N1bWVudC5sb2dnZXIo
KSwgeyB9LCBXVEZNb3ZlKGxhYmVsKSkpOworICAgIH0pOworICAgIHJldHVybiAqbWVkaWFTdHJl
YW0uaXRlcmF0b3ItPnZhbHVlOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFk
ZFJlbW90ZVN0cmVhbShHc3RQYWQqIHBhZCkKK3sKKyAgICBtX3BlbmRpbmdJbmNvbWluZ1N0cmVh
bXMrKzsKKworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX2dldF9jdXJyZW50X2Nh
cHMocGFkKSk7CisgICAgaWYgKCFjYXBzKQorICAgICAgICBjYXBzID0gYWRvcHRHUmVmKGdzdF9w
YWRfcXVlcnlfY2FwcyhwYWQsIG51bGxwdHIpKTsKKworICAgIGNvbnN0IGNoYXIqIG1lZGlhVHlw
ZSA9IGNhcHNNZWRpYVR5cGUoY2Fwcy5nZXQoKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiQWRkaW5nIHJlbW90ZSAlcyBzdHJlYW0gdG8gJSIgR1NUX1BUUl9GT1JN
QVQgIiAldSBwZW5kaW5nIGluY29taW5nIHN0cmVhbXMsIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFU
LCBtZWRpYVR5cGUsIHBhZCwgbV9wZW5kaW5nSW5jb21pbmdTdHJlYW1zLCBjYXBzLmdldCgpKTsK
KworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHJ0Y1RyYW5zY2VpdmVyOwor
ICAgIGdfb2JqZWN0X2dldChwYWQsICJ0cmFuc2NlaXZlciIsICZydGNUcmFuc2NlaXZlci5vdXRQ
dHIoKSwgbnVsbHB0cik7CisKKyAgICBhdXRvKiB0cmFuc2NlaXZlciA9IG1fcGVlckNvbm5lY3Rp
b25CYWNrZW5kLmV4aXN0aW5nVHJhbnNjZWl2ZXIoWyZdKGF1dG8mIHRyYW5zY2VpdmVyQmFja2Vu
ZCkgeworICAgICAgICByZXR1cm4gcnRjVHJhbnNjZWl2ZXIuZ2V0KCkgPT0gdHJhbnNjZWl2ZXJC
YWNrZW5kLnJ0Y1RyYW5zY2VpdmVyKCk7CisgICAgfSk7CisgICAgaWYgKCF0cmFuc2NlaXZlcikg
eworICAgICAgICBhdXRvIHR5cGUgPSBkb0NhcHNIYXZlVHlwZShjYXBzLmdldCgpLCAiYXVkaW8i
KSA/IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvIDogUmVhbHRpbWVNZWRpYVNvdXJj
ZTo6VHlwZTo6VmlkZW87CisgICAgICAgIHRyYW5zY2VpdmVyID0gJm1fcGVlckNvbm5lY3Rpb25C
YWNrZW5kLm5ld1JlbW90ZVRyYW5zY2VpdmVyKG1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJ0Y1RyYW5zY2VpdmVyKSksIHR5cGUpOworICAgIH0KKwor
ICAgIEdVbmlxdWVPdXRQdHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlv
bjsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCksICJyZW1vdGUtZGVzY3JpcHRp
b24iLCAmZGVzY3JpcHRpb24ub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgdW5zaWduZWQgbUxp
bmVJbmRleDsKKyAgICBnX29iamVjdF9nZXQocnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJtbGluZWlu
ZGV4IiwgJm1MaW5lSW5kZXgsIG51bGxwdHIpOworICAgIGNvbnN0IGF1dG8qIG1lZGlhID0gZ3N0
X3NkcF9tZXNzYWdlX2dldF9tZWRpYShkZXNjcmlwdGlvbi0+c2RwLCBtTGluZUluZGV4KTsKKyAg
ICBHVW5pcXVlUHRyPGNoYXI+IHNkcChnc3Rfc2RwX21lZGlhX2FzX3RleHQobWVkaWEpKTsKKyAg
ICBhdXRvIHNkcFN0cmluZyA9IG1ha2VTdHJpbmcoc2RwLmdldCgpKTsKKworICAgIEdVbmlxdWVQ
dHI8Z2NoYXI+IG5hbWUoZ3N0X3BhZF9nZXRfbmFtZShwYWQpKTsKKyAgICBTdHJpbmcgbGFiZWwo
bmFtZS5nZXQoKSk7CisgICAgYXV0byBrZXkgPSBtYWtlU3RyaW5nKCJtc2lkOiIpOworICAgIGF1
dG8gbGluZXMgPSBzZHBTdHJpbmcuc3BsaXQoJ1xuJyk7CisgICAgZm9yIChhdXRvJiBsaW5lIDog
bGluZXMpIHsKKyAgICAgICAgYXV0byBpID0gbGluZS5maW5kKGtleSk7CisgICAgICAgIGlmIChp
ICE9IG5vdEZvdW5kKSB7CisgICAgICAgICAgICBhdXRvIHRtcCA9IGxpbmUuc3Vic3RyaW5nKGkg
KyBrZXkuYXNjaWkoKS5sZW5ndGgoKSk7CisgICAgICAgICAgICBsYWJlbCA9IHRtcC5zdWJzdHJp
bmcoMCwgdG1wLmZpbmQoJyAnKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAg
IH0KKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIm1zaWQ6ICVzIiwg
bGFiZWwuYXNjaWkoKS5kYXRhKCkpOworCisgICAgR3N0RWxlbWVudCogYmluID0gbnVsbHB0cjsK
KyAgICBhdXRvJiB0cmFjayA9IHRyYW5zY2VpdmVyLT5yZWNlaXZlcigpLnRyYWNrKCk7CisgICAg
YXV0byYgc291cmNlID0gdHJhY2sucHJpdmF0ZVRyYWNrKCkuc291cmNlKCk7CisgICAgaWYgKHNv
dXJjZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgYmluID0gc3RhdGljX2Nhc3Q8
UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4oc291cmNlKS5iaW4oKTsKKyAg
ICBlbHNlIGlmIChzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkpCisgICAgICAgIGJpbiA9
IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJj
ZSkuYmluKCk7CisgICAgQVNTRVJUKGJpbik7CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NB
U1QobV9waXBlbGluZS5nZXQoKSksIGJpbik7CisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVm
KGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKGJpbiwgInNpbmsiKSk7CisgICAgZ3N0X3BhZF9s
aW5rKHBhZCwgc2lua1BhZC5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRo
X3BhcmVudChiaW4pOworCisgICAgdHJhY2suc2V0RW5hYmxlZCh0cnVlKTsKKyAgICBzb3VyY2Uu
c2V0TXV0ZWQoZmFsc2UpOworCisgICAgYXV0byYgbWVkaWFTdHJlYW0gPSBtZWRpYVN0cmVhbUZy
b21SVENTdHJlYW0obGFiZWwpOworICAgIG1lZGlhU3RyZWFtLmFkZFRyYWNrRnJvbVBsYXRmb3Jt
KHRyYWNrKTsKKworICAgIFZlY3RvcjxSZWZQdHI8TWVkaWFTdHJlYW0+PiBwZW5kaW5nU3RyZWFt
czsKKyAgICBwZW5kaW5nU3RyZWFtcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDEpOworICAgIHBl
bmRpbmdTdHJlYW1zLnVuY2hlY2tlZEFwcGVuZCgmbWVkaWFTdHJlYW0pOworCisgICAgbV9wZWVy
Q29ubmVjdGlvbkJhY2tlbmQuYWRkUGVuZGluZ1RyYWNrRXZlbnQoeyBSZWYodHJhbnNjZWl2ZXIt
PnJlY2VpdmVyKCkpLCBSZWYodHJhbnNjZWl2ZXItPnJlY2VpdmVyKCkudHJhY2soKSksIFdURk1v
dmUocGVuZGluZ1N0cmVhbXMpLCBSZWYoKnRyYW5zY2VpdmVyKSB9KTsKKworICAgIGlmIChtX3Bl
bmRpbmdJbmNvbWluZ1N0cmVhbXMgPT0gZ3N0X3NkcF9tZXNzYWdlX21lZGlhc19sZW4oZGVzY3Jp
cHRpb24tPnNkcCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgp
LCAiSW5jb21pbmcgc3RyZWFtcyBnYXRoZXJlZCwgbm93IGZpcmluZyB0cmFjayBldmVudHMiKTsK
KyAgICAgICAgbV9wZW5kaW5nSW5jb21pbmdTdHJlYW1zID0gMDsKKyAgICAgICAgbV9wZWVyQ29u
bmVjdGlvbkJhY2tlbmQuZGlzcGF0Y2hQZW5kaW5nVHJhY2tFdmVudHMoKTsKKyAgICB9CisKKyNp
Zm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisgICAgYXV0byBkb3RGaWxlTmFtZSA9IG1ha2VT
dHJpbmcoR1NUX09CSkVDVF9OQU1FKG1fcGlwZWxpbmUuZ2V0KCkpLCAiLmluY29taW5nLSIsIG1l
ZGlhVHlwZSwgJy0nLCBHU1RfT0JKRUNUX05BTUUocGFkKSk7CisgICAgR1NUX0RFQlVHX0JJTl9U
T19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19H
UkFQSF9TSE9XX0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKK30KKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVSZW1vdGVTdHJlYW0oR3N0UGFkKikK
K3sKKyAgICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJyZW1vdmVSZW1vdGVT
dHJlYW0iKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6Om9wdGlvbmFsPEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OkJhY2tlbmRzPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVh
dGVUcmFuc2NlaXZlckJhY2tlbmRzKGNvbnN0IFN0cmluZyYga2luZCwgY29uc3QgUlRDUnRwVHJh
bnNjZWl2ZXJJbml0JiBpbml0LCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmJiBz
b3VyY2UpCit7CisgICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIHN0ZDo6bnVs
bG9wdDsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIiV6dSBzdHJl
YW1zIGluIGluaXQgZGF0YSIsIGluaXQuc3RyZWFtcy5zaXplKCkpOworCisgICAgLy8gRklYTUU6
IFNob3VsZCB3ZSBidWlsZCB0aGUgY2FwcyBmcm9tIHRoZSBpbml0LnNlbmRFbmNvZGluZ3M/IFBy
b2JsZW0gaXMgdGhlcmUgaXMgbm8KKyAgICAvLyBlbmNvZGluZ05hbWUgb3IgY2xvY2tSYXRlIGlu
IFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycy4KKyAgICBWZWN0b3I8c3RkOjpwYWlyPGNvbnN0IGNo
YXIqLCBpbnQ+PiBlbmNvZGluZ3M7CisgICAgY29uc3QgY2hhciogbWVkaWEgPSBraW5kLnV0Zjgo
KS5kYXRhKCk7CisgICAgaWYgKGtpbmQgPT0gInZpZGVvIl9zKSB7CisgICAgICAgIGVuY29kaW5n
cy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KDMpOworICAgICAgICBlbmNvZGluZ3MudW5jaGVja2Vk
QXBwZW5kKHsgIlZQOCIsIDkwMDAwIH0pOworICAgICAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBw
ZW5kKHsgIlZQOSIsIDkwMDAwIH0pOworICAgICAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBwZW5k
KHsgIkgyNjQiLCA5MDAwMCB9KTsKKyAgICB9IGVsc2UgeworICAgICAgICBlbmNvZGluZ3MucmVz
ZXJ2ZUluaXRpYWxDYXBhY2l0eSg0KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVu
ZCh7ICJPUFVTIiwgNDgwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy51bmNoZWNrZWRBcHBlbmQo
eyAiRzcyMiIsIDgwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy51bmNoZWNrZWRBcHBlbmQoeyAi
UENNQSIsIDgwMDAgfSk7CisgICAgICAgIGVuY29kaW5ncy51bmNoZWNrZWRBcHBlbmQoeyAiUENN
VSIsIDgwMDAgfSk7CisgICAgfQorCisgICAgYXV0byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBz
X25ld19lbXB0eSgpKTsKKyAgICBmb3IgKGF1dG8mIFtlbmNvZGluZ05hbWUsIGNsb2NrUmF0ZV0g
OiBlbmNvZGluZ3MpIHsKKyAgICAgICAgZ3N0X2NhcHNfYXBwZW5kX3N0cnVjdHVyZShjYXBzLmdl
dCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGljYXRpb24veC1ydHAiLCAibWVkaWEiLCBHX1RZ
UEVfU1RSSU5HLCBtZWRpYSwgImVuY29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBlbmNvZGlu
Z05hbWUsCisgICAgICAgICAgICAicGF5bG9hZCIsIEdfVFlQRV9JTlQsIG1fcHRDb3VudGVyKyss
ICJjbG9jay1yYXRlIiwgR19UWVBFX0lOVCwgY2xvY2tSYXRlLCBudWxscHRyKSk7CisgICAgfQor
CisgICAgYXV0byBkaXJlY3Rpb24gPSBmcm9tUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oaW5p
dC5kaXJlY3Rpb24pOworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICBHVW5pcXVl
UHRyPGNoYXI+IGRlc2MoZ19lbnVtX3RvX3N0cmluZyhHU1RfVFlQRV9XRUJSVENfUlRQX1RSQU5T
Q0VJVkVSX0RJUkVDVElPTiwgZGlyZWN0aW9uKSk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiQWRkaW5nICVzIHRyYW5zY2VpdmVyIGZvciBwYXlsb2FkICUiIEdTVF9Q
VFJfRk9STUFULCBkZXNjLmdldCgpLCBjYXBzLmdldCgpKTsKKyNlbmRpZgorCisgICAgLy8gRklY
TUU6IE5vbmUgb2YgdGhpcyAoZXhjZXB0ZWQgZGlyZWN0aW9uKSBpcyBwYXNzZWQgdG8gd2VicnRj
YmluIHlldC4KKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gaW5pdERhdGEoZ3N0X3N0cnVj
dHVyZV9uZXcoInRyYW5zY2VpdmVyLWluaXQtZGF0YSIsICJkaXJlY3Rpb24iLCBHU1RfVFlQRV9X
RUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTiwgZGlyZWN0aW9uLCBudWxscHRyKSk7CisK
KyAgICBHVmFsdWUgc3RyZWFtSWRzVmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgZ192YWx1ZV9p
bml0KCZzdHJlYW1JZHNWYWx1ZSwgR1NUX1RZUEVfTElTVCk7CisgICAgZm9yIChhdXRvJiBzdHJl
YW0gOiBpbml0LnN0cmVhbXMpIHsKKyAgICAgICAgR1ZhbHVlIHZhbHVlID0gR19WQUxVRV9JTklU
OworICAgICAgICBnX3ZhbHVlX2luaXQoJnZhbHVlLCBHX1RZUEVfU1RSSU5HKTsKKyAgICAgICAg
Z192YWx1ZV9zZXRfc3RyaW5nKCZ2YWx1ZSwgc3RyZWFtLT5pZCgpLnV0ZjgoKS5kYXRhKCkpOwor
ICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUoJnN0cmVhbUlkc1ZhbHVlLCAmdmFs
dWUpOworICAgICAgICBnX3ZhbHVlX3Vuc2V0KCZ2YWx1ZSk7CisgICAgfQorICAgIGdzdF9zdHJ1
Y3R1cmVfdGFrZV92YWx1ZShpbml0RGF0YS5nZXQoKSwgInN0cmVhbS1pZHMiLCAmc3RyZWFtSWRz
VmFsdWUpOworCisgICAgR1ZhbHVlIGVuY29kaW5nc1ZhbHVlID0gR19WQUxVRV9JTklUOworICAg
IGdfdmFsdWVfaW5pdCgmZW5jb2RpbmdzVmFsdWUsIEdTVF9UWVBFX0xJU1QpOworICAgIGlmIChr
aW5kID09ICJhdWRpbyIpIHsKKyAgICAgICAgaWYgKCFpbml0LnNlbmRFbmNvZGluZ3MuaXNFbXB0
eSgpKSB7CisgICAgICAgICAgICBhdXRvIGVuY29kaW5nRGF0YSA9IGZyb21SVENFbmNvZGluZ1Bh
cmFtZXRlcnMoaW5pdC5zZW5kRW5jb2RpbmdzWzBdKTsKKyAgICAgICAgICAgIEdWYWx1ZSB2YWx1
ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICAgICAgICAgIGdfdmFsdWVfaW5pdCgmdmFsdWUsIEdTVF9U
WVBFX1NUUlVDVFVSRSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfc2V0X3N0cnVjdHVyZSgmdmFs
dWUsIGVuY29kaW5nRGF0YS5nZXQoKSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfbGlzdF9hcHBl
bmRfdmFsdWUoJmVuY29kaW5nc1ZhbHVlLCAmdmFsdWUpOworICAgICAgICAgICAgZ192YWx1ZV91
bnNldCgmdmFsdWUpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgZm9yIChhdXRv
JiBlbmNvZGluZyA6IGluaXQuc2VuZEVuY29kaW5ncykgeworICAgICAgICAgICAgYXV0byBlbmNv
ZGluZ0RhdGEgPSBmcm9tUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGVuY29kaW5nKTsKKyAgICAgICAg
ICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVfSU5JVDsKKyAgICAgICAgICAgIGdfdmFsdWVfaW5p
dCgmdmFsdWUsIEdTVF9UWVBFX1NUUlVDVFVSRSk7CisgICAgICAgICAgICBnc3RfdmFsdWVfc2V0
X3N0cnVjdHVyZSgmdmFsdWUsIGVuY29kaW5nRGF0YS5nZXQoKSk7CisgICAgICAgICAgICBnc3Rf
dmFsdWVfbGlzdF9hcHBlbmRfdmFsdWUoJmVuY29kaW5nc1ZhbHVlLCAmdmFsdWUpOworICAgICAg
ICAgICAgZ192YWx1ZV91bnNldCgmdmFsdWUpOworICAgICAgICB9CisgICAgfQorICAgIGdzdF9z
dHJ1Y3R1cmVfdGFrZV92YWx1ZShpbml0RGF0YS5nZXQoKSwgImVuY29kaW5ncyIsICZlbmNvZGlu
Z3NWYWx1ZSk7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBydGNUcmFu
c2NlaXZlcjsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJh
ZGQtdHJhbnNjZWl2ZXIiLCBkaXJlY3Rpb24sIGNhcHMuZ2V0KCksICZydGNUcmFuc2NlaXZlci5v
dXRQdHIoKSk7CisgICAgaWYgKCFydGNUcmFuc2NlaXZlcikKKyAgICAgICAgcmV0dXJuIHN0ZDo6
bnVsbG9wdDsKKworICAgIGF1dG8gdHJhbnNjZWl2ZXIgPSBtYWtlVW5pcXVlPEdTdHJlYW1lclJ0
cFRyYW5zY2VpdmVyQmFja2VuZD4oV1RGTW92ZShydGNUcmFuc2NlaXZlcikpOworICAgIHJldHVy
biBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcyB7IHRyYW5zY2VpdmVyLT5jcmVhdGVT
ZW5kZXJCYWNrZW5kKG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLCBXVEZNb3ZlKHNvdXJjZSksIFdU
Rk1vdmUoaW5pdERhdGEpKSwgdHJhbnNjZWl2ZXItPmNyZWF0ZVJlY2VpdmVyQmFja2VuZCgpLCBX
VEZNb3ZlKHRyYW5zY2VpdmVyKSB9OworfQorCitzdGQ6Om9wdGlvbmFsPEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OkJhY2tlbmRzPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFuc2NlaXZl
cihjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JiBp
bml0KQoreworICAgIHJldHVybiBjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKHRyYWNrS2luZCwg
aW5pdCwgbnVsbHB0cik7Cit9CisKK0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTb3VyY2VGb3JUcmFjayhNZWRpYVN0cmVhbVRy
YWNrJiB0cmFjaykKK3sKKyAgICBpZiAodHJhY2sucHJpdmF0ZVRyYWNrKCkuaGFzQXVkaW8oKSkK
KyAgICAgICAgcmV0dXJuIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3Jl
YXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsKKworICAgIEFTU0VSVCh0cmFjay5wcml2YXRlVHJh
Y2soKS5oYXNWaWRlbygpKTsKKyAgICByZXR1cm4gUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNl
R1N0cmVhbWVyOjpjcmVhdGUodHJhY2sucHJpdmF0ZVRyYWNrKCkpOworfQorCitzdGQ6Om9wdGlv
bmFsPEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OkJhY2tlbmRzPiBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjphZGRUcmFuc2NlaXZlcihNZWRpYVN0cmVhbVRyYWNrJiB0cmFjaywgY29uc3QgUlRDUnRw
VHJhbnNjZWl2ZXJJbml0JiBpbml0KQoreworICAgIHJldHVybiBjcmVhdGVUcmFuc2NlaXZlckJh
Y2tlbmRzKHRyYWNrLmtpbmQoKSwgaW5pdCwgY3JlYXRlU291cmNlRm9yVHJhY2sodHJhY2spKTsK
K30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJh
Y2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYsIE1lZGlhU3RyZWFtVHJhY2smKQoreworICAg
IEdTVF9GSVhNRV9PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgInNldFNlbmRlclNvdXJjZUZyb21U
cmFjayIpOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxHU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRyYW5z
Y2VpdmVyQmFja2VuZEZyb21TZW5kZXIoR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgYmFja2Vu
ZCkKK3sKKyAgICBHUmVmUHRyPEdBcnJheT4gdHJhbnNjZWl2ZXJzOworICAgIGdfc2lnbmFsX2Vt
aXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC10cmFuc2NlaXZlcnMiLCAmdHJhbnNj
ZWl2ZXJzLm91dFB0cigpKTsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIkxvb2tpbmcgZm9yIHNlbmRlciAlcCBpbiAldSBleGlzdGluZyB0cmFuc2NlaXZlcnMiLCBi
YWNrZW5kLnJ0Y1NlbmRlcigpLCB0cmFuc2NlaXZlcnMtPmxlbik7CisgICAgZm9yICh1bnNpZ25l
ZCB0cmFuc2NlaXZlckluZGV4ID0gMDsgdHJhbnNjZWl2ZXJJbmRleCA8IHRyYW5zY2VpdmVycy0+
bGVuOyB0cmFuc2NlaXZlckluZGV4KyspIHsKKyAgICAgICAgR3N0V2ViUlRDUlRQVHJhbnNjZWl2
ZXIqIGN1cnJlbnQgPSBnX2FycmF5X2luZGV4KHRyYW5zY2VpdmVycy5nZXQoKSwgR3N0V2ViUlRD
UlRQVHJhbnNjZWl2ZXIqLCB0cmFuc2NlaXZlckluZGV4KTsKKyAgICAgICAgR1JlZlB0cjxHc3RX
ZWJSVENSVFBTZW5kZXI+IHNlbmRlcjsKKyAgICAgICAgZ19vYmplY3RfZ2V0KGN1cnJlbnQsICJz
ZW5kZXIiLCAmc2VuZGVyLm91dFB0cigpLCBudWxscHRyKTsKKworICAgICAgICBpZiAoIXNlbmRl
cikKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc2VuZGVyLmdldCgpID09IGJh
Y2tlbmQucnRjU2VuZGVyKCkpCisgICAgICAgICAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdT
dHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4oY3VycmVudCk7CisgICAgfQorCisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkSWNlQ2Fu
ZGlkYXRlKEdTdHJlYW1lckljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgR1NUX0RF
QlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIElDRSBjYW5kaWRhdGUgJXMiLCBj
YW5kaWRhdGUuY2FuZGlkYXRlLnV0ZjgoKS5kYXRhKCkpOworCisgICAgaWYgKCFjYW5kaWRhdGUu
Y2FuZGlkYXRlLnN0YXJ0c1dpdGgoImNhbmRpZGF0ZToiKSkgeworICAgICAgICBjYWxsT25NYWlu
VGhyZWFkKFt0YXNrID0gY3JlYXRlU2hhcmVkVGFzazxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFk
ZEljZUNhbmRpZGF0ZUNhbGxiYWNrRnVuY3Rpb24+KFdURk1vdmUoY2FsbGJhY2spKV0oKSBtdXRh
YmxlIHsKKyAgICAgICAgICAgIHRhc2stPnJ1bihFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwg
IkV4cGVjdCBsaW5lOiBjYW5kaWRhdGU6PGNhbmRpZGF0ZS1zdHI+IiB9KTsKKyAgICAgICAgfSk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRvIHBhcnNlZENhbmRpZGF0ZSA9IHBh
cnNlSWNlQ2FuZGlkYXRlU0RQKGNhbmRpZGF0ZS5jYW5kaWRhdGUpOworICAgIGlmICghcGFyc2Vk
Q2FuZGlkYXRlKSB7CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3Rhc2sgPSBjcmVhdGVTaGFy
ZWRUYXNrPFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRlQ2FsbGJhY2tGdW5j
dGlvbj4oV1RGTW92ZShjYWxsYmFjaykpXSgpIG11dGFibGUgeworICAgICAgICAgICAgdGFzay0+
cnVuKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiRXJyb3IgcHJvY2Vzc2luZyBJQ0UgY2Fu
ZGlkYXRlIiB9KTsKKyAgICAgICAgfSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAv
LyBGSVhNRTogaW52YWxpZCBzZHBNTGluZUluZGV4IGV4Y2VwdGlvbiBub3QgcmVsYXllZCBmcm9t
IHdlYnJ0Y2Jpbi4KKyAgICAvLyBGSVhNRTogSWRlYWxseSB0aGlzIHNob3VsZCBwYXNzIHRoZSBy
ZXN1bHQvZXJyb3IgdG8gYSBHc3RQcm9taXNlIG9iamVjdC4KKyAgICBnX3NpZ25hbF9lbWl0X2J5
X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJhZGQtaWNlLWNhbmRpZGF0ZSIsIGNhbmRpZGF0ZS5z
ZHBNTGluZUluZGV4LCBjYW5kaWRhdGUuY2FuZGlkYXRlLnV0ZjgoKS5kYXRhKCkpOworICAgIGNh
bGxPbk1haW5UaHJlYWQoW3Rhc2sgPSBjcmVhdGVTaGFyZWRUYXNrPFBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6QWRkSWNlQ2FuZGlkYXRlQ2FsbGJhY2tGdW5jdGlvbj4oV1RGTW92ZShjYWxsYmFjaykp
LCBkZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKG1fd2VicnRjQmluLmdl
dCgpKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgdGFzay0+cnVuKFdURk1vdmUoZGVzY3JpcHRpb25z
KSk7CisgICAgfSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+
IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZURhdGFDaGFubmVsKGNvbnN0IFN0cmluZyYg
bGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykKK3sKKyAgICBpZiAoIW1f
d2VicnRjQmluKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGF1dG8gaW5pdCA9IEdT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6ZnJvbVJUQ0RhdGFDaGFubmVsSW5pdChvcHRpb25z
KTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJDcmVhdGluZyBkYXRh
IGNoYW5uZWwgZm9yIGluaXQgb3B0aW9ucyAlIiBHU1RfUFRSX0ZPUk1BVCwgaW5pdC5nZXQoKSk7
CisgICAgR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4gY2hhbm5lbDsKKyAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJjcmVhdGUtZGF0YS1jaGFubmVsIiwg
bGFiZWwudXRmOCgpLmRhdGEoKSwgaW5pdC5nZXQoKSwgJmNoYW5uZWwub3V0UHRyKCkpOworICAg
IGlmICghY2hhbm5lbCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gV1RG
OjptYWtlVW5pcXVlPEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcj4oV1RGTW92ZShjaGFubmVs
KSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25EYXRhQ2hhbm5lbChHc3RX
ZWJSVENEYXRhQ2hhbm5lbCogZGF0YUNoYW5uZWwpCit7CisgICAgR1JlZlB0cjxHc3RXZWJSVENE
YXRhQ2hhbm5lbD4gY2hhbm5lbCA9IGRhdGFDaGFubmVsOworICAgIGNhbGxPbk1haW5UaHJlYWQo
W3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCB0aGlzLCBkYXRhQ2hhbm5lbCA9IFdURk1vdmUo
Y2hhbm5lbCldKCkgbXV0YWJsZSB7CisgICAgICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAi
SW5jb21pbmcgZGF0YSBjaGFubmVsIik7CisgICAgICAgIGF1dG8mIGNvbm5lY3Rpb24gPSBtX3Bl
ZXJDb25uZWN0aW9uQmFja2VuZC5jb25uZWN0aW9uKCk7CisgICAgICAgIGNvbm5lY3Rpb24uZGlz
cGF0Y2hFdmVudChHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNyZWF0ZURhdGFDaGFubmVs
RXZlbnQoKmNvbm5lY3Rpb24uZG9jdW1lbnQoKSwgV1RGTW92ZShkYXRhQ2hhbm5lbCkpKTsKKyAg
ICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjbG9zZSgpCit7CisgICAg
Ly8gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1i
YWQvLS9pc3N1ZXMvMTE4MQorICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwg
IkNsb3NpbmciKTsKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfc2V0
X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9SRUFEWSk7CisKKyNpZiAhUkVMRUFT
RV9MT0dfRElTQUJMRUQKKyAgICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKwordm9p
ZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wKCkKK3sKKyNpZiAhUkVMRUFTRV9MT0dfRElT
QUJMRUQKKyAgICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKKworICAgIGlmIChpc1N0b3Bw
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5l
LmdldCgpLCAiU3RvcHBpbmciKTsKKyAgICB0ZWFyZG93blBpcGVsaW5lKCk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3VzcGVuZCgpCit7CisgICAgaWYgKGlzU3RvcHBlZCgp
KQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0
KCksICJTdXNwZW5kaW5nIik7CisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUu
Z2V0KCksIEdTVF9TVEFURV9QQVVTRUQpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OnJlc3VtZSgpCit7CisgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICByZXR1cm47CisK
KyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJSZXN1bWluZyIpOworICAg
IGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlO
Ryk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25OZWdvdGlhdGlvbk5lZWRl
ZCgpCit7CisgICAgbV9pc05lZ290aWF0aW9uTmVlZGVkID0gdHJ1ZTsKKworICAgIGNhbGxPbk1h
aW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRoaXMpLCB0aGlzXSB7CisgICAgICAgIGlm
IChpc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgR1NUX0RFQlVHX09C
SkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTmVnb3RpYXRpb24gbmVlZGVkISIpOworICAgICAgICBt
X3BlZXJDb25uZWN0aW9uQmFja2VuZC5tYXJrQXNOZWVkaW5nTmVnb3RpYXRpb24oMCk7CisgICAg
fSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDb25uZWN0aW9uQ2hh
bmdlKCkKK3sKKyAgICBHc3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgc3RhdGU7CisgICAgZ19v
YmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAiaWNlLWNvbm5lY3Rpb24tc3RhdGUiLCAmc3Rh
dGUsIG51bGxwdHIpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRoaXMgPSBSZWYo
KnRoaXMpLCB0aGlzLCBjb25uZWN0aW9uU3RhdGUgPSB0b1JUQ0ljZUNvbm5lY3Rpb25TdGF0ZShz
dGF0ZSldIHsKKyAgICAgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOwor
ICAgICAgICBhdXRvJiBjb25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29ubmVj
dGlvbigpOworICAgICAgICBpZiAoY29ubmVjdGlvbi5pY2VDb25uZWN0aW9uU3RhdGUoKSAhPSBj
b25uZWN0aW9uU3RhdGUpCisgICAgICAgICAgICBjb25uZWN0aW9uLnVwZGF0ZUljZUNvbm5lY3Rp
b25TdGF0ZShjb25uZWN0aW9uU3RhdGUpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6Om9uSWNlR2F0aGVyaW5nQ2hhbmdlKCkKK3sKKyAgICBHc3RXZWJSVENJQ0VH
YXRoZXJpbmdTdGF0ZSBzdGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCks
ICJpY2UtZ2F0aGVyaW5nLXN0YXRlIiwgJnN0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWlu
VGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywgc3RhdGVdIHsKKyAgICAg
ICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvJiBj
b25uZWN0aW9uID0gbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29ubmVjdGlvbigpOworICAgICAg
ICBpZiAoc3RhdGUgPT0gR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX0NPTVBMRVRFKQor
ICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuZG9uZUdhdGhlcmluZ0NhbmRpZGF0
ZXMoKTsKKyAgICAgICAgZWxzZSBpZiAoc3RhdGUgPT0gR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5H
X1NUQVRFX0dBVEhFUklORykKKyAgICAgICAgICAgIGNvbm5lY3Rpb24udXBkYXRlSWNlR2F0aGVy
aW5nU3RhdGUoUlRDSWNlR2F0aGVyaW5nU3RhdGU6OkdhdGhlcmluZyk7CisgICAgICAgIGVsc2Ug
aWYgKHN0YXRlID09IEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9ORVcpCisgICAgICAg
ICAgICBjb25uZWN0aW9uLnVwZGF0ZUljZUdhdGhlcmluZ1N0YXRlKFJUQ0ljZUdhdGhlcmluZ1N0
YXRlOjpOZXcpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9u
SWNlQ2FuZGlkYXRlKGd1aW50IHNkcE1MaW5lSW5kZXgsIGdjaGFyYXJyYXkgY2FuZGlkYXRlKQor
eworICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6
IEdldCBtaWQgZnJvbSBjYW5kaWRhdGU/CisgICAgR1VuaXF1ZU91dFB0cjxHc3RXZWJSVENTZXNz
aW9uRGVzY3JpcHRpb24+IGRlc2NyaXB0aW9uOworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jp
bi5nZXQoKSwgImxvY2FsLWRlc2NyaXB0aW9uIiwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxs
cHRyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9uKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25z
dCBhdXRvKiBtZWRpYSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEoZGVzY3JpcHRpb24tPnNk
cCwgc2RwTUxpbmVJbmRleCk7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9
IFJlZigqdGhpcyksIHRoaXMsIG1pZCA9IG1ha2VTdHJpbmcoZ3N0X3NkcF9tZWRpYV9nZXRfYXR0
cmlidXRlX3ZhbChtZWRpYSwgIm1pZCIpKSwgc2RwID0gbWFrZVN0cmluZyhjYW5kaWRhdGUpLCBz
ZHBNTGluZUluZGV4XSgpIG11dGFibGUgeworICAgICAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIGF1dG8gZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25z
RnJvbVdlYlJUQ0JpbihtX3dlYnJ0Y0Jpbi5nZXQoKSk7CisgICAgICAgIG1fcGVlckNvbm5lY3Rp
b25CYWNrZW5kLm5ld0lDRUNhbmRpZGF0ZShXVEZNb3ZlKHNkcCksIFdURk1vdmUobWlkKSwgc2Rw
TUxpbmVJbmRleCwgeyB9LCBXVEZNb3ZlKGRlc2NyaXB0aW9ucykpOworICAgIH0pOworfQorCit2
b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvblN1Y2Nl
ZWRlZChHVW5pcXVlUHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4mJiBkZXNjcmlwdGlv
bikKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwg
dGhpcywgZGVzY3JpcHRpb24gPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKV0geworICAgICAgICBpZiAo
aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1VuaXF1ZVB0cjxj
aGFyPiBzZHAoZ3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoZGVzY3JpcHRpb24tPnNkcCkpOworICAg
ICAgICBpZiAobV9pc0luaXRpYXRvcikKKyAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmNyZWF0ZU9mZmVyU3VjY2VlZGVkKHNkcC5nZXQoKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNyZWF0ZUFuc3dlclN1Y2NlZWRlZChzZHAu
Z2V0KCkpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0
ZVNlc3Npb25EZXNjcmlwdGlvbkZhaWxlZChHVW5pcXVlUHRyPEdFcnJvcj4mJiBlcnJvcikKK3sK
KyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywg
ZXJyb3IgPSBXVEZNb3ZlKGVycm9yKV0geworICAgICAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgYXV0byBleGMgPSBFeGNlcHRpb24geyBPcGVyYXRp
b25FcnJvciwgZXJyb3IgPyBlcnJvci0+bWVzc2FnZSA6ICJVbmtub3duIEVycm9yIiB9OworICAg
ICAgICBpZiAobV9pc0luaXRpYXRvcikKKyAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmNyZWF0ZU9mZmVyRmFpbGVkKFdURk1vdmUoZXhjKSk7CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNyZWF0ZUFuc3dlckZhaWxlZChXVEZNb3Zl
KGV4YykpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNvbGxl
Y3RUcmFuc2NlaXZlcnMoKQoreworICAgIEdSZWZQdHI8R0FycmF5PiB0cmFuc2NlaXZlcnM7Cisg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiZ2V0LXRyYW5zY2Vp
dmVycyIsICZ0cmFuc2NlaXZlcnMub3V0UHRyKCkpOworICAgIGZvciAodW5zaWduZWQgaSA9IDA7
IGkgPCB0cmFuc2NlaXZlcnMtPmxlbjsgaSsrKSB7CisgICAgICAgIEdzdFdlYlJUQ1JUUFRyYW5z
Y2VpdmVyKiBjdXJyZW50ID0gZ19hcnJheV9pbmRleCh0cmFuc2NlaXZlcnMuZ2V0KCksIEdzdFdl
YlJUQ1JUUFRyYW5zY2VpdmVyKiwgaSk7CisKKyAgICAgICAgYXV0byogZXhpc3RpbmdUcmFuc2Nl
aXZlciA9IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmV4aXN0aW5nVHJhbnNjZWl2ZXIoWyZdKGF1
dG8mIHRyYW5zY2VpdmVyQmFja2VuZCkgeworICAgICAgICAgICAgcmV0dXJuIGN1cnJlbnQgPT0g
dHJhbnNjZWl2ZXJCYWNrZW5kLnJ0Y1RyYW5zY2VpdmVyKCk7CisgICAgICAgIH0pOworICAgICAg
ICBpZiAoZXhpc3RpbmdUcmFuc2NlaXZlcikKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IHJlY2VpdmVyOworICAgICAgICBHVW5p
cXVlT3V0UHRyPGNoYXI+IG1pZDsKKyAgICAgICAgZ19vYmplY3RfZ2V0KGN1cnJlbnQsICJyZWNl
aXZlciIsICZyZWNlaXZlci5vdXRQdHIoKSwgIm1pZCIsICZtaWQub3V0UHRyKCksIG51bGxwdHIp
OworCisgICAgICAgIGlmICghcmVjZWl2ZXIgfHwgIW1pZCkKKyAgICAgICAgICAgIGNvbnRpbnVl
OworCisgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLm5ld1JlbW90ZVRyYW5zY2VpdmVy
KFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KFdURk1vdmUo
Y3VycmVudCkpLCBtX21lZGlhRm9yTWlkLmdldChtaWQuZ2V0KCkpKTsKKyAgICB9Cit9CisKKyNp
ZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0
aGVyU3RhdHNGb3JMb2dnaW5nKCkKK3sKKyAgICBhdXRvIGRhdGEgPSBtYWtlVW5pcXVlPEdTdHJl
YW1lck1lZGlhRW5kcG9pbnRIb2xkZXI+KCp0aGlzKTsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV93ZWJydGNCaW4uZ2V0KCksICJnZXQtc3RhdHMiLCBudWxscHRyLCBnc3RfcHJvbWlzZV9u
ZXdfd2l0aF9jaGFuZ2VfZnVuYyhbXShHc3RQcm9taXNlKiByYXdQcm9taXNlLCBncG9pbnRlciB1
c2VyRGF0YSkgeworICAgICAgICBhdXRvIHByb21pc2UgPSBhZG9wdEdSZWYocmF3UHJvbWlzZSk7
CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZ3N0X3Byb21pc2Vfd2FpdChwcm9taXNlLmdldCgpKTsK
KyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lck1lZGlhRW5kcG9pbnRIb2xkZXI+IGRh
dGEoc3RhdGljX2Nhc3Q8R1N0cmVhbWVyTWVkaWFFbmRwb2ludEhvbGRlcio+KHVzZXJEYXRhKSk7
CisgICAgICAgIGlmIChyZXN1bHQgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpCisgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgY29uc3QgYXV0byogcmVwbHkgPSBnc3RfcHJvbWlz
ZV9nZXRfcmVwbHkocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIEFTU0VSVChyZXBseSk7CisgICAg
ICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19maWVsZChyZXBseSwgImVycm9yIikpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgZGF0YS0+ZW5kUG9pbnQtPm9uU3RhdHNEZWxpdmVyZWQo
cmVwbHkpOworICAgIH0sIGRhdGEucmVsZWFzZSgpLCBudWxscHRyKSk7Cit9CisKK2NsYXNzIFJU
Q1N0YXRzTG9nZ2VyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSVENTdGF0c0xvZ2dlcihjb25z
dCBHc3RTdHJ1Y3R1cmUqIHN0YXRzKQorICAgICAgICA6IG1fc3RhdHMoc3RhdHMpCisgICAgeyB9
CisKKyAgICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gZ3N0U3RydWN0dXJl
VG9KU09OU3RyaW5nKG1fc3RhdHMpOyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgR3N0U3RydWN0
dXJlKiBtX3N0YXRzOworfTsKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpwcm9jZXNz
U3RhdHMoY29uc3QgR1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAoIUdTVF9WQUxVRV9IT0xEU19T
VFJVQ1RVUkUodmFsdWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBHc3RTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSA9IGdzdF92YWx1ZV9nZXRfc3RydWN0dXJlKHZhbHVlKTsKKyAgICBHc3RX
ZWJSVENTdGF0c1R5cGUgc3RhdHNUeXBlOworICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXQoc3Ry
dWN0dXJlLCAidHlwZSIsIEdTVF9UWVBFX1dFQlJUQ19TVEFUU19UWVBFLCAmc3RhdHNUeXBlLCBu
dWxscHRyKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSnVzdCBjaGVjayBhIHNpbmdsZSB0
aW1lc3RhbXAsIGluYm91bmQgUlRQIGZvciBpbnN0YW5jZS4KKyAgICBpZiAoIW1fc3RhdHNGaXJz
dERlbGl2ZXJlZFRpbWVzdGFtcCAmJiBzdGF0c1R5cGUgPT0gR1NUX1dFQlJUQ19TVEFUU19JTkJP
VU5EX1JUUCkgeworICAgICAgICBkb3VibGUgdGltZXN0YW1wOworICAgICAgICBpZiAoZ3N0X3N0
cnVjdHVyZV9nZXRfZG91YmxlKHN0cnVjdHVyZSwgInRpbWVzdGFtcCIsICZ0aW1lc3RhbXApKSB7
CisgICAgICAgICAgICBhdXRvIHRzID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyh0aW1lc3Rh
bXApOworICAgICAgICAgICAgbV9zdGF0c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wID0gdHM7CisK
KyAgICAgICAgICAgIGlmICghaXNTdG9wcGVkKCkgJiYgbV9zdGF0c0xvZ1RpbWVyLnJlcGVhdElu
dGVydmFsKCkgIT0gc3RhdHNMb2dJbnRlcnZhbCh0cykpIHsKKyAgICAgICAgICAgICAgICBtX3N0
YXRzTG9nVGltZXIuc3RvcCgpOworICAgICAgICAgICAgICAgIG1fc3RhdHNMb2dUaW1lci5zdGFy
dFJlcGVhdGluZyhzdGF0c0xvZ0ludGVydmFsKHRzKSk7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBpZiAobG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIFdURkxv
Z0xldmVsOjpEZWJ1ZykpIHsKKyAgICAgICAgLy8gU3RhdHMgYXJlIHZlcnkgdmVyYm9zZSwgbGV0
J3Mgb25seSBkaXNwbGF5IHRoZW0gaW4gaW5zcGVjdG9yIGNvbnNvbGUgaW4gdmVyYm9zZSBtb2Rl
LgorICAgICAgICBsb2dnZXIoKS5kZWJ1ZyhMb2dXZWJSVEMsCisgICAgICAgICAgICBMb2dnZXI6
OkxvZ1NpdGVJZGVudGlmaWVyKCJHU3RyZWFtZXJNZWRpYUVuZHBvaW50IiwgIm9uU3RhdHNEZWxp
dmVyZWQiLCBsb2dJZGVudGlmaWVyKCkpLAorICAgICAgICAgICAgUlRDU3RhdHNMb2dnZXIgeyBz
dHJ1Y3R1cmUgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nZ2VyKCkubG9nQWx3YXlzKExv
Z1dlYlJUQ1N0YXRzLAorICAgICAgICAgICAgTG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcigiR1N0
cmVhbWVyTWVkaWFFbmRwb2ludCIsICJvblN0YXRzRGVsaXZlcmVkIiwgbG9nSWRlbnRpZmllcigp
KSwKKyAgICAgICAgICAgIFJUQ1N0YXRzTG9nZ2VyIHsgc3RydWN0dXJlIH0pOworICAgIH0KK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvblN0YXRzRGVsaXZlcmVkKGNvbnN0IEdz
dFN0cnVjdHVyZSogc3RhdHMpCit7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IHN0YXRz
Q29weShnc3Rfc3RydWN0dXJlX2NvcHkoc3RhdHMpKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtw
cm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywgc3RhdHMgPSBXVEZNb3ZlKHN0YXRzQ29w
eSldIHsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoKHN0YXRzLmdldCgpLCBzdGF0aWNf
Y2FzdDxHc3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYz4oW10oR1F1YXJrLCBjb25zdCBHVmFsdWUqIHZh
bHVlLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4geworICAgICAgICAgICAgYXV0byog
ZW5kUG9pbnQgPSByZWludGVycHJldF9jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqPih1c2Vy
RGF0YSk7CisgICAgICAgICAgICBlbmRQb2ludC0+cHJvY2Vzc1N0YXRzKHZhbHVlKTsKKyAgICAg
ICAgICAgIHJldHVybiBUUlVFOworICAgICAgICB9KSwgdGhpcyk7CisgICAgfSk7Cit9CisjZW5k
aWYKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpzdGFydExvZ2dpbmdTdGF0cygpCit7CisgICAgaWYgKG1fc3RhdHNMb2dUaW1lci5pc0Fj
dGl2ZSgpKQorICAgICAgICBtX3N0YXRzTG9nVGltZXIuc3RvcCgpOworICAgIG1fc3RhdHNMb2dU
aW1lci5zdGFydFJlcGVhdGluZyhzdGF0c0xvZ0ludGVydmFsKFNlY29uZHM6Om5hbigpKSk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcExvZ2dpbmdTdGF0cygpCit7Cisg
ICAgbV9zdGF0c0xvZ1RpbWVyLnN0b3AoKTsKK30KKworV1RGTG9nQ2hhbm5lbCYgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6bG9nQ2hhbm5lbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIExvZ1dlYlJU
QzsKK30KKworU2Vjb25kcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdGF0c0xvZ0ludGVydmFs
KFNlY29uZHMgcmVwb3J0VGltZXN0YW1wKSBjb25zdAoreworICAgIGlmIChsb2dnZXIoKS53aWxs
TG9nKGxvZ0NoYW5uZWwoKSwgV1RGTG9nTGV2ZWw6OkluZm8pKQorICAgICAgICByZXR1cm4gMl9z
OworCisgICAgaWYgKHJlcG9ydFRpbWVzdGFtcCAtIG1fc3RhdHNGaXJzdERlbGl2ZXJlZFRpbWVz
dGFtcCA+IDE1X3MpCisgICAgICAgIHJldHVybiAxMF9zOworCisgICAgcmV0dXJuIDRfczsKK30K
KyNlbmRpZgorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmdhdGhlckRlY29kZXJJbXBs
ZW1lbnRhdGlvbk5hbWUoRnVuY3Rpb248dm9pZChTdHJpbmcmJik+JiYgY2FsbGJhY2spCit7Cisg
ICAgLy8gVE9ETzogY29sbGVjdCBzdGF0cyBhbmQgbG9va3VwIEluYm91bmRSdHAgImRlY29kZXJf
aW1wbGVtZW50YXRpb24iIGZpZWxkLgorICAgIGNhbGxiYWNrKHsgfSk7Cit9CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorbmFtZXNwYWNlIFdU
RiB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CitzdHJ1Y3QgTG9nQXJndW1lbnQ7CisKK3Rl
bXBsYXRlIDw+CitzdHJ1Y3QgTG9nQXJndW1lbnQ8V2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI+IHsK
KyAgICBzdGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2Vy
JiBsb2dnZXIpCisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nKGxvZ2dlci50b0pTT05TdHJp
bmcoKSk7CisgICAgfQorfTsKKworfTsgLy8gbmFtZXNwYWNlIFdURgorI2VuZGlmIC8vICFSRUxF
QVNFX0xPR19ESVNBQkxFRAorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg2NWIzNDlh
ZWEyYWM5Yjk3MjQ1Njk1MTI2NGEyODk4NTFmODRhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5k
cG9pbnQuaApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUg
IkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCIKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVh
bWVyLmgiCisjaW5jbHVkZSAiUlRDUnRwUmVjZWl2ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Mb2dn
ZXJIZWxwZXIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xh
c3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kOworY2xhc3MgTWVkaWFTdHJlYW1UcmFjazsKK2NsYXNzIFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbjsKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjsK
KworY2xhc3MgR1N0cmVhbWVyTWVkaWFFbmRwb2ludCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291
bnRlZDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50LCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWlu
PgorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICwgcHJpdmF0ZSBMb2dnZXJIZWxwZXIK
KyNlbmRpZgoreworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dD4gY3JlYXRlKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgcGVlckNvbm5lY3Rpb24p
IHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyTWVkaWFFbmRwb2ludChwZWVyQ29ubmVj
dGlvbikpOyB9CisgICAgdmlydHVhbCB+R1N0cmVhbWVyTWVkaWFFbmRwb2ludCgpOworCisgICAg
Ym9vbCBzZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJik7CisgICAg
dm9pZCByZXN0YXJ0SWNlKCk7CisKKyAgICB2b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25z
dCBSVENTZXNzaW9uRGVzY3JpcHRpb24qKTsKKyAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRp
b24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJik7CisgICAgdm9pZCBkb0NyZWF0ZU9mZmVy
KGNvbnN0IFJUQ09mZmVyT3B0aW9ucyYpOworICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoKTsKKwor
ICAgIHZvaWQgZ2V0U3RhdHMoR3N0UGFkKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CisKKyAg
ICBzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5l
bChjb25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKTsKKyAgICB2b2lkIG9u
RGF0YUNoYW5uZWwoR3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsKKworICAgIHZvaWQgYWRkSWNlQ2Fu
ZGlkYXRlKEdTdHJlYW1lckljZUNhbmRpZGF0ZSYsIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRk
SWNlQ2FuZGlkYXRlQ2FsbGJhY2smJik7CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBz
dG9wKCk7CisgICAgYm9vbCBpc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiAhbV9waXBlbGluZTsg
fQorCisgICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKworICAgIHZvaWQg
Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4m
Jik7CisgICAgYm9vbCBpc05lZ290aWF0aW9uTmVlZGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc05l
Z290aWF0aW9uTmVlZGVkOyB9CisKKyAgICB2b2lkIGNvbmZpZ3VyZUFuZExpbmtTb3VyY2UoUmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyJik7CisKKyAgICBib29sIGFkZFRyYWNr
KEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJiwgY29uc3QgRml4
ZWRWZWN0b3I8U3RyaW5nPiYpOworICAgIHZvaWQgcmVtb3ZlVHJhY2soR1N0cmVhbWVyUnRwU2Vu
ZGVyQmFja2VuZCYpOworCisgICAgc3RydWN0IEJhY2tlbmRzIHsKKyAgICAgICAgc3RkOjp1bmlx
dWVfcHRyPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+IHNlbmRlckJhY2tlbmQ7CisgICAgICAg
IHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+IHJlY2VpdmVyQmFj
a2VuZDsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZD4gdHJhbnNjZWl2ZXJCYWNrZW5kOworICAgIH07CisgICAgc3RkOjpvcHRpb25hbDxCYWNr
ZW5kcz4gYWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0
cFRyYW5zY2VpdmVySW5pdCYpOworICAgIHN0ZDo6b3B0aW9uYWw8QmFja2VuZHM+IGFkZFRyYW5z
Y2VpdmVyKE1lZGlhU3RyZWFtVHJhY2smLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmKTsK
KyAgICBzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiB0cmFu
c2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmKTsKKwor
ICAgIHZvaWQgc2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQmLCBNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICB2b2lkIGNvbGxlY3RUcmFuc2NlaXZlcnMo
KTsKKworICAgIHZvaWQgY3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVkKEdVbmlxdWVQ
dHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmKTsKKyAgICB2b2lkIGNyZWF0ZVNlc3Np
b25EZXNjcmlwdGlvbkZhaWxlZChHVW5pcXVlUHRyPEdFcnJvcj4mJik7CisKKyAgICBHc3RFbGVt
ZW50KiBwaXBlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0KCk7IH0KKyAgICBi
b29sIGhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FC
TEVECisgICAgdm9pZCBwcm9jZXNzU3RhdHMoY29uc3QgR1ZhbHVlKik7CisjZW5kaWYKKworcHJv
dGVjdGVkOgorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHZvaWQgb25TdGF0c0RlbGl2
ZXJlZChjb25zdCBHc3RTdHJ1Y3R1cmUqKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJik7CisKKyAg
ICBib29sIGluaXRpYWxpemVQaXBlbGluZSgpOworICAgIHZvaWQgdGVhcmRvd25QaXBlbGluZSgp
OworICAgIHZvaWQgZGlzcG9zZUVsZW1lbnRDaGFpbihHc3RFbGVtZW50Kik7CisKKyAgICB2b2lk
IHNldERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiosIGJvb2wgaXNMb2Nh
bCwgRnVuY3Rpb248dm9pZCgpPiYmIHN1Y2Nlc3NDYWxsYmFjaywgRnVuY3Rpb248dm9pZChjb25z
dCBHRXJyb3IqKT4mJiBmYWlsdXJlQ2FsbGJhY2spOworICAgIHZvaWQgaW5pdGlhdGUoYm9vbCBp
c0luaXRpYXRvciwgR3N0U3RydWN0dXJlKik7CisKKyAgICB2b2lkIG9uTmVnb3RpYXRpb25OZWVk
ZWQoKTsKKyAgICB2b2lkIG9uSWNlQ29ubmVjdGlvbkNoYW5nZSgpOworICAgIHZvaWQgb25JY2VH
YXRoZXJpbmdDaGFuZ2UoKTsKKyAgICB2b2lkIG9uSWNlQ2FuZGlkYXRlKGd1aW50IHNkcE1MaW5l
SW5kZXgsIGdjaGFyYXJyYXkgY2FuZGlkYXRlKTsKKworICAgIE1lZGlhU3RyZWFtJiBtZWRpYVN0
cmVhbUZyb21SVENTdHJlYW0oU3RyaW5nIGxhYmVsKTsKKworICAgIHZvaWQgYWRkUmVtb3RlU3Ry
ZWFtKEdzdFBhZCopOworICAgIHZvaWQgcmVtb3ZlUmVtb3RlU3RyZWFtKEdzdFBhZCopOworCisg
ICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gY3JlYXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyhjb25z
dCBTdHJpbmcmIGtpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYsIEdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQ6OlNvdXJjZSYmKTsKKyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5k
OjpTb3VyY2UgY3JlYXRlU291cmNlRm9yVHJhY2soTWVkaWFTdHJlYW1UcmFjayYpOworCisgICAg
dm9pZCBzdG9yZVJlbW90ZU1MaW5lSW5mbyhHc3RTRFBNZXNzYWdlKik7CisKKyAgICBHUmVmUHRy
PEdzdFBhZD4gcmVxdWVzdFBhZCh1bnNpZ25lZCBtbGluZUluZGV4LCBjb25zdCBHUmVmUHRyPEdz
dENhcHM+Jik7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICB2b2lkIGdhdGhlclN0
YXRzRm9yTG9nZ2luZygpOworICAgIHZvaWQgc3RhcnRMb2dnaW5nU3RhdHMoKTsKKyAgICB2b2lk
IHN0b3BMb2dnaW5nU3RhdHMoKTsKKworICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3Qg
ZmluYWwgeyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCB2b2lkKiBsb2dJZGVu
dGlmaWVyKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CisgICAgY29u
c3QgY2hhciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQiOyB9CisgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZp
bmFsOworCisgICAgU2Vjb25kcyBzdGF0c0xvZ0ludGVydmFsKFNlY29uZHMpIGNvbnN0OworI2Vu
ZGlmCisKKyAgICBIYXNoTWFwPFN0cmluZywgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZT4gbV9t
ZWRpYUZvck1pZDsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIG1lZGlhVHlwZUZvck1p
ZChjb25zdCBjaGFyKiBtaWQpOworCisgICAgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
JiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fd2Vi
cnRjQmluOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKworICAgIEhhc2hN
YXA8U3RyaW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiBtX3JlbW90ZVN0cmVhbXNCeUlkOworCisg
ICAgc3RydWN0IFBlbmRpbmdNTGluZUluZm8geworICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGNh
cHM7CisgICAgICAgIGJvb2wgaXNVc2VkOworICAgICAgICBWZWN0b3I8aW50PiBwYXlsb2FkVHlw
ZXM7CisgICAgfTsKKyAgICBWZWN0b3I8UGVuZGluZ01MaW5lSW5mbz4gbV9yZW1vdGVNTGluZUlu
Zm9zOworCisgICAgUmVmPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yPiBtX3N0YXRzQ29sbGVjdG9y
OworCisgICAgdW5zaWduZWQgbV9yZXF1ZXN0UGFkQ291bnRlciB7IDAgfTsKKyAgICBpbnQgbV9w
dENvdW50ZXIgeyA5NiB9OworICAgIHVuc2lnbmVkIG1fbWxpbmVJbmRleCB7IDAgfTsKKyAgICBW
ZWN0b3I8UmVmPFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcj4+IG1fc291cmNl
czsKKyAgICB1bnNpZ25lZCBtX3BlbmRpbmdJbmNvbWluZ1N0cmVhbXMgeyAwIH07CisgICAgYm9v
bCBtX2lzSW5pdGlhdG9yIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNOZWdvdGlhdGlvbk5lZWRl
ZCB7IGZhbHNlIH07CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBUaW1lciBtX3N0
YXRzTG9nVGltZXI7CisgICAgU2Vjb25kcyBtX3N0YXRzRmlyc3REZWxpdmVyZWRUaW1lc3RhbXA7
CisgICAgUmVmPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CisgICAgY29uc3Qgdm9pZCogbV9sb2dJ
ZGVudGlmaWVyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRp
ZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1NjRlOWE0NjQ4MDhi
YjA4Y2I0MDYzY2FhYzYxMjQwMmJkZmQ1YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAx
Ny0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUg
IkRvY3VtZW50LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVyTWVkaWFFbmRwb2ludC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFj
a2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJY2VDYW5kaWRh
dGUuaCIKKyNpbmNsdWRlICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisjaW5jbHVkZSAiTWVkaWFFbmRw
b2ludENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1
ZGUgIlJUQ0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCisj
aW5jbHVkZSAiUlRDUnRwQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiUlRDUnRwUmVjZWl2ZXIu
aCIKKyNpbmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJSZWFsdGlt
ZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgc3RkOjp1bmlx
dWVfcHRyPFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3JlYXRlR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kKFJUQ1BlZXJDb25uZWN0aW9uJiBwZWVyQ29ubmVjdGlvbikKK3sKKyAgICBlbnN1
cmVHU3RyZWFtZXJJbml0aWFsaXplZCgpOworICAgIGlmICghaXNHU3RyZWFtZXJQbHVnaW5BdmFp
bGFibGUoIndlYnJ0YyIpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiR3N0V2ViUlRDIHBsdWdp
biBub3QgZm91bmQuIE1ha2Ugc3VyZSB0byBpbnN0YWxsIGdzdC1wbHVnaW5zLWJhZCA+PSAxLjIw
IHdpdGggdGhlIHdlYnJ0YyBwbHVnaW4gZW5hYmxlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxw
dHI7CisgICAgfQorICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kPihwZWVyQ29ubmVjdGlvbik7Cit9CisKK0NyZWF0ZVBlZXJDb25uZWN0aW9u
QmFja2VuZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZSA9IGNyZWF0ZUdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDsKKworc3RhdGljIFJUQ1J0cENhcGFiaWxpdGllcyBnc3RyZWFt
ZXJSdHBDYXBhdGlibGl0aWVzKGNvbnN0IFN0cmluZyYga2luZCkKK3sKKyAgICBSVENSdHBDYXBh
YmlsaXRpZXMgY2FwYWJpbGl0aWVzOworICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25z
LmFwcGVuZCh7ICJodHRwOi8vd3d3LmlldGYub3JnL2lkL2RyYWZ0LWhvbG1lci1ybWNhdC10cmFu
c3BvcnQtd2lkZS1jYy1leHRlbnNpb25zLTAxIiB9KTsKKyAgICBpZiAoa2luZCA9PSAiYXVkaW8i
X3MpIHsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5yZXNlcnZlQ2FwYWNpdHkoNCk7Cisg
ICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MudW5jaGVja2VkQXBwZW5kKHsgLm1pbWVUeXBlID0g
ImF1ZGlvL09QVVMiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDQ4MDAwLAorICAgICAgICAg
ICAgLmNoYW5uZWxzID0gMiwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAg
ICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJh
dWRpby9HNzIyIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4MDAwLAorICAgICAgICAgICAg
LmNoYW5uZWxzID0gMSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgICAg
ICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJhdWRp
by9QQ01BIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4MDAwLAorICAgICAgICAgICAgLmNo
YW5uZWxzID0gMSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgICAgICBj
YXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJhdWRpby9Q
Q01VIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4MDAwLAorICAgICAgICAgICAgLmNoYW5u
ZWxzID0gMSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgIH0gZWxzZSB7
CisgICAgICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJ1cm46M2dw
cDp2aWRlby1vcmllbnRhdGlvbiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MucmVz
ZXJ2ZUNhcGFjaXR5KDQpOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFw
cGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRlby9WUDgiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9
IDkwMDAwLAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7CisgICAgICAgIGNhcGFi
aWxpdGllcy5jb2RlY3MudW5jaGVja2VkQXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL1ZQOSIs
CisgICAgICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10cExp
bmUgPSAicHJvZmlsZS1pZD0wIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy51bmNo
ZWNrZWRBcHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5jbG9j
a1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlkPTEi
IH0pOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1l
VHlwZSA9ICJ2aWRlby9IMjY0IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAg
ICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwYWNrZXRpemF0aW9uLW1vZGU9MTtwcm9maWxlLWxl
dmVsLWlkPTQyZTAxZiIgfSk7CisgICAgfQorICAgIHJldHVybiBjYXBhYmlsaXRpZXM7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OnJlY2VpdmVyQ2FwYWJpbGl0aWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJp
bmcmIGtpbmQpCit7CisgICAgcmV0dXJuIGdzdHJlYW1lclJ0cENhcGF0aWJsaXRpZXMoa2luZCk7
Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQ6OnNlbmRlckNhcGFiaWxpdGllcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3Qg
U3RyaW5nJiBraW5kKQoreworICAgIHJldHVybiBnc3RyZWFtZXJSdHBDYXBhdGlibGl0aWVzKGtp
bmQpOworfQorCitHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCisgICAg
OiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCisgICAgLCBtX2VuZHBvaW50
KEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSgqdGhpcykpCit7CisgICAgZGlzYWJsZUlD
RUNhbmRpZGF0ZUZpbHRlcmluZygpOworfQorCitHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6On5HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQoKSA9IGRlZmF1bHQ7CisKK3ZvaWQg
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzdXNwZW5kKCkKK3sKKyAgICBtX2VuZHBv
aW50LT5zdXNwZW5kKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpyZXN1bWUoKQoreworICAgIG1fZW5kcG9pbnQtPnJlc3VtZSgpOworfQorCit2b2lkIEdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVzdGFydEljZSgpCit7CisgICAgbV9lbmRwb2lu
dC0+cmVzdGFydEljZSgpOworfQorCitib29sIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmIGNvbmZpZ3Vy
YXRpb24pCit7CisgICAgcmV0dXJuIG1fZW5kcG9pbnQtPnNldENvbmZpZ3VyYXRpb24oY29uZmln
dXJhdGlvbik7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRT
dGF0cyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7CisgICAgbV9lbmRwb2ludC0+
Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUg
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgYmFja2VuZEZyb21SVFBTZW5kZXIoUlRDUnRwU2Vu
ZGVyJiBzZW5kZXIpCit7CisgICAgQVNTRVJUKCFzZW5kZXIuaXNTdG9wcGVkKCkpOworICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJj4oKnNlbmRlci5iYWNr
ZW5kKCkpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3Rh
dHMoUlRDUnRwU2VuZGVyJiBzZW5kZXIsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkK
K3sKKyAgICBpZiAoIXNlbmRlci5iYWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0
U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9
CisKKyAgICBhdXRvJiBiYWNrZW5kID0gYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKTsKKyAg
ICBHUmVmUHRyPEdzdFBhZD4gcGFkOworICAgIGlmIChSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQuYXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgcGFk
ID0gc291cmNlLT5wYWQoKTsKKyAgICBlbHNlIGlmIChSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQudmlkZW9Tb3VyY2UoKSkKKyAgICAgICAgcGFk
ID0gc291cmNlLT5wYWQoKTsKKyAgICBtX2VuZHBvaW50LT5nZXRTdGF0cyhwYWQuZ2V0KCksIFdU
Rk1vdmUocHJvbWlzZSkpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6Z2V0U3RhdHMoUlRDUnRwUmVjZWl2ZXImIHJlY2VpdmVyLCBSZWY8RGVmZXJyZWRQcm9taXNl
PiYmIHByb21pc2UpCit7CisgICAgaWYgKCFyZWNlaXZlci5iYWNrZW5kKCkpIHsKKyAgICAgICAg
bV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAgICAg
IHJldHVybjsKKyAgICB9CisKKyAgICBHc3RFbGVtZW50KiBiaW4gPSBudWxscHRyOworICAgIGF1
dG8mIHNvdXJjZSA9IHJlY2VpdmVyLnRyYWNrKCkucHJpdmF0ZVRyYWNrKCkuc291cmNlKCk7Cisg
ICAgaWYgKHNvdXJjZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgYmluID0gc3Rh
dGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4oc291cmNlKS5i
aW4oKTsKKyAgICBlbHNlIGlmIChzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkpCisgICAg
ICAgIGJpbiA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
ciY+KHNvdXJjZSkuYmluKCk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworCisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dl
dF9zdGF0aWNfcGFkKGJpbiwgInNpbmsiKSk7CisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYo
Z3N0X3BhZF9nZXRfcGVlcihzaW5rUGFkLmdldCgpKSk7CisgICAgbV9lbmRwb2ludC0+Z2V0U3Rh
dHMoc3JjUGFkLmdldCgpLCBXVEZNb3ZlKHByb21pc2UpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNz
aW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0TG9j
YWxEZXNjcmlwdGlvbihkZXNjcmlwdGlvbik7CisgICAgbV9pc0xvY2FsRGVzY3JpcHRpb25TZXQg
PSB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRS
ZW1vdGVEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9u
KQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24p
OworICAgIG1faXNSZW1vdGVEZXNjcmlwdGlvblNldCA9IHRydWU7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYm
IG9wdGlvbnMpCit7CisgICAgbV9lbmRwb2ludC0+ZG9DcmVhdGVPZmZlcihvcHRpb25zKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlQW5zd2VyKFJU
Q0Fuc3dlck9wdGlvbnMmJikKK3sKKyAgICBpZiAoIW1faXNSZW1vdGVEZXNjcmlwdGlvblNldCkg
eworICAgICAgICBjcmVhdGVBbnN3ZXJGYWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJy
b3IsICJObyByZW1vdGUgZGVzY3JpcHRpb24gc2V0IiB9KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKyAgICBtX2VuZHBvaW50LT5kb0NyZWF0ZUFuc3dlcigpOworfQorCit2b2lkIEdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y2xvc2UoKQoreworICAgIG1fZW5kcG9pbnQtPmNsb3Nl
KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb1N0b3AoKQor
eworICAgIG1fZW5kcG9pbnQtPnN0b3AoKTsKKyAgICBtX3BlbmRpbmdSZWNlaXZlcnMuY2xlYXIo
KTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2Fu
ZGlkYXRlKFJUQ0ljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBBZGRJY2VDYW5kaWRhdGVDYWxsYmFj
ayYmIGNhbGxiYWNrKQoreworICAgIHVuc2lnbmVkIHNkcE1MaW5lSW5kZXggPSBjYW5kaWRhdGUu
c2RwTUxpbmVJbmRleCgpID8gY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgoKS52YWx1ZSgpIDogMDsK
KyAgICBhdXRvIHJ0Y0NhbmRpZGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJJY2VDYW5k
aWRhdGU+KCpuZXcgR1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsgc2RwTUxpbmVJbmRleCwgY2FuZGlk
YXRlLmNhbmRpZGF0ZSgpIH0pOworICAgIG1fZW5kcG9pbnQtPmFkZEljZUNhbmRpZGF0ZSgqcnRj
Q2FuZGlkYXRlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKK1JlZjxSVENSdHBSZWNlaXZlcj4g
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1
ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiYmIGJhY2tlbmQsIGNvbnN0IFN0cmlu
ZyYgdHJhY2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCit7CisgICAgYXV0byYgZG9jdW1l
bnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9u
Q29udGV4dCgpKTsKKworICAgIGF1dG8gc291cmNlID0gYmFja2VuZC0+Y3JlYXRlU291cmNlKHRy
YWNrS2luZCwgdHJhY2tJZCk7CisgICAgLy8gUmVtb3RlIHNvdXJjZSBpcyBpbml0aWFsbHkgbXV0
ZWQgYW5kIHdpbGwgYmUgdW5tdXRlZCB3aGVuIHJlY2VpdmluZyB0aGUgZmlyc3QgcGFja2V0Lgor
ICAgIHNvdXJjZS0+c2V0TXV0ZWQodHJ1ZSk7CisgICAgYXV0byB0cmFja0lEID0gc291cmNlLT5w
ZXJzaXN0ZW50SUQoKTsKKyAgICBhdXRvIHJlbW90ZVRyYWNrUHJpdmF0ZSA9IE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpjcmVhdGUoZG9jdW1lbnQubG9nZ2VyKCksIFdURk1vdmUoc291cmNlKSwg
V1RGTW92ZSh0cmFja0lEKSk7CisgICAgYXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFtVHJh
Y2s6OmNyZWF0ZShkb2N1bWVudCwgV1RGTW92ZShyZW1vdGVUcmFja1ByaXZhdGUpKTsKKworICAg
IHJldHVybiBSVENSdHBSZWNlaXZlcjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHJlbW90ZVRyYWNr
KSwgV1RGTW92ZShiYWNrZW5kKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5l
bEhhbmRsZXI+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlRGF0YUNoYW5u
ZWxIYW5kbGVyKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYg
b3B0aW9ucykKK3sKKyAgICByZXR1cm4gbV9lbmRwb2ludC0+Y3JlYXRlRGF0YUNoYW5uZWwobGFi
ZWwsIG9wdGlvbnMpOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxSVENSdHBTZW5kZXI+IGZp
bmRFeGlzdGluZ1NlbmRlcihjb25zdCBWZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj4m
IHRyYW5zY2VpdmVycywgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgc2VuZGVyQmFja2VuZCkK
K3sKKyAgICBBU1NFUlQoc2VuZGVyQmFja2VuZC5ydGNTZW5kZXIoKSk7CisgICAgZm9yIChhdXRv
JiB0cmFuc2NlaXZlciA6IHRyYW5zY2VpdmVycykgeworICAgICAgICBhdXRvJiBzZW5kZXIgPSB0
cmFuc2NlaXZlci0+c2VuZGVyKCk7CisgICAgICAgIGlmICghc2VuZGVyLmlzU3RvcHBlZCgpICYm
IHNlbmRlckJhY2tlbmQucnRjU2VuZGVyKCkgPT0gYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVy
KS5ydGNTZW5kZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBSZWYoc2VuZGVyKTsKKyAgICB9Cisg
ICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+PiBH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2sm
IHRyYWNrLCBGaXhlZFZlY3RvcjxTdHJpbmc+JiYgbWVkaWFTdHJlYW1JZHMpCit7CisgICAgYXV0
byBzZW5kZXJCYWNrZW5kID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQ+KCp0aGlzLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBpZiAoIW1fZW5kcG9pbnQtPmFkZFRy
YWNrKCpzZW5kZXJCYWNrZW5kLCB0cmFjaywgbWVkaWFTdHJlYW1JZHMpKQorICAgICAgICByZXR1
cm4gRXhjZXB0aW9uIHsgVHlwZUVycm9yLCAiVW5hYmxlIHRvIGFkZCB0cmFjayJfcyB9OworCisg
ICAgaWYgKGF1dG8gc2VuZGVyID0gZmluZEV4aXN0aW5nU2VuZGVyKG1fcGVlckNvbm5lY3Rpb24u
Y3VycmVudFRyYW5zY2VpdmVycygpLCAqc2VuZGVyQmFja2VuZCkpIHsKKyAgICAgICAgYmFja2Vu
ZEZyb21SVFBTZW5kZXIoKnNlbmRlcikudGFrZVNvdXJjZSgqc2VuZGVyQmFja2VuZCk7CisgICAg
ICAgIHNlbmRlci0+c2V0VHJhY2soUmVmKHRyYWNrKSk7CisgICAgICAgIHNlbmRlci0+c2V0TWVk
aWFTdHJlYW1JZHMoV1RGTW92ZShtZWRpYVN0cmVhbUlkcykpOworICAgICAgICByZXR1cm4gc2Vu
ZGVyLnJlbGVhc2VOb25OdWxsKCk7CisgICAgfQorCisgICAgYXV0byB0cmFuc2NlaXZlckJhY2tl
bmQgPSBtX2VuZHBvaW50LT50cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKCpzZW5kZXJCYWNr
ZW5kKTsKKworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29u
bmVjdGlvbiwgUmVmKHRyYWNrKSwgV1RGTW92ZShzZW5kZXJCYWNrZW5kKSk7CisgICAgc2VuZGVy
LT5zZXRNZWRpYVN0cmVhbUlkcyhXVEZNb3ZlKG1lZGlhU3RyZWFtSWRzKSk7CisgICAgYXV0byBy
ZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKHRyYW5zY2VpdmVyQmFja2VuZC0+Y3JlYXRlUmVjZWl2
ZXJCYWNrZW5kKCksIHRyYWNrLmtpbmQoKSwgdHJhY2suaWQoKSk7CisgICAgYXV0byB0cmFuc2Nl
aXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoc2VuZGVyLmNvcHlSZWYoKSwgV1RGTW92
ZShyZWNlaXZlciksIFdURk1vdmUodHJhbnNjZWl2ZXJCYWNrZW5kKSk7CisgICAgbV9wZWVyQ29u
bmVjdGlvbi5hZGRJbnRlcm5hbFRyYW5zY2VpdmVyKFdURk1vdmUodHJhbnNjZWl2ZXIpKTsKKyAg
ICByZXR1cm4gc2VuZGVyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorRXhjZXB0aW9uT3I8
UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjph
ZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChUJiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0
cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICBhdXRvIGJhY2tlbmRzID0gbV9lbmRwb2lu
dC0+YWRkVHJhbnNjZWl2ZXIodHJhY2tPcktpbmQsIGluaXQpOworICAgIGlmICghYmFja2VuZHMp
CisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsICJVbmFibGUg
dG8gYWRkIHRyYW5zY2VpdmVyIl9zIH07CisKKyAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRl
cjo6Y3JlYXRlKG1fcGVlckNvbm5lY3Rpb24sIFdURk1vdmUodHJhY2tPcktpbmQpLCBXVEZNb3Zl
KGJhY2tlbmRzLT5zZW5kZXJCYWNrZW5kKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJl
Y2VpdmVyKFdURk1vdmUoYmFja2VuZHMtPnJlY2VpdmVyQmFja2VuZCksIHNlbmRlci0+dHJhY2tL
aW5kKCksIHNlbmRlci0+dHJhY2tJZCgpKTsKKyAgICBhdXRvIHRyYW5zY2VpdmVyID0gUlRDUnRw
VHJhbnNjZWl2ZXI6OmNyZWF0ZShXVEZNb3ZlKHNlbmRlciksIFdURk1vdmUocmVjZWl2ZXIpLCBX
VEZNb3ZlKGJhY2tlbmRzLT50cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0
aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICBy
ZXR1cm4gdHJhbnNjZWl2ZXI7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZl
cj4+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhbnNjZWl2ZXIoY29uc3Qg
U3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sK
KyAgICByZXR1cm4gYWRkVHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQoU3RyaW5nIHsgdHJhY2tL
aW5kIH0sIGluaXQpOworfQorCitFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2VpdmVyKFJlZjxNZWRpYVN0
cmVhbVRyYWNrPiYmIHRyYWNrLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQpCit7
CisgICAgcmV0dXJuIGFkZFRyYW5zY2VpdmVyRnJvbVRyYWNrT3JLaW5kKFdURk1vdmUodHJhY2sp
LCBpbml0KTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFNl
bmRlclNvdXJjZUZyb21UcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIsIE1l
ZGlhU3RyZWFtVHJhY2smIHRyYWNrKQoreworICAgIG1fZW5kcG9pbnQtPnNldFNlbmRlclNvdXJj
ZUZyb21UcmFjayhzZW5kZXIsIHRyYWNrKTsKK30KKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQmIGJhY2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIoUlRDUnRwVHJh
bnNjZWl2ZXImIHRyYW5zY2VpdmVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFt
ZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQmPigqdHJhbnNjZWl2ZXIuYmFja2VuZCgpKTsKK30KKwor
UlRDUnRwVHJhbnNjZWl2ZXIqIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZXhpc3Rp
bmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kJik+JiYgbWF0Y2hpbmdGdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHRyYW5zY2Vp
dmVyIDogbV9wZWVyQ29ubmVjdGlvbi5jdXJyZW50VHJhbnNjZWl2ZXJzKCkpIHsKKyAgICAgICAg
aWYgKG1hdGNoaW5nRnVuY3Rpb24oYmFja2VuZEZyb21SVFBUcmFuc2NlaXZlcigqdHJhbnNjZWl2
ZXIpKSkKKyAgICAgICAgICAgIHJldHVybiB0cmFuc2NlaXZlci5nZXQoKTsKKyAgICB9CisgICAg
cmV0dXJuIG51bGxwdHI7Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVyJiBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6Om5ld1JlbW90ZVRyYW5zY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+JiYgdHJhbnNjZWl2ZXJCYWNrZW5kLCBSZWFsdGlt
ZU1lZGlhU291cmNlOjpUeXBlIHR5cGUpCit7CisgICAgYXV0byB0cmFja0tpbmQgPSB0eXBlID09
IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1ZGlvIl9zIDogInZpZGVvIl9z
OworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlv
biwgdHJhY2tLaW5kLCB0cmFuc2NlaXZlckJhY2tlbmQtPmNyZWF0ZVNlbmRlckJhY2tlbmQoKnRo
aXMsIG51bGxwdHIsIG51bGxwdHIpKTsKKyAgICBhdXRvIHJlY2VpdmVyID0gY3JlYXRlUmVjZWl2
ZXIodHJhbnNjZWl2ZXJCYWNrZW5kLT5jcmVhdGVSZWNlaXZlckJhY2tlbmQoKSwgdHJhY2tLaW5k
LCBzZW5kZXItPnRyYWNrSWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5z
Y2VpdmVyOjpjcmVhdGUoV1RGTW92ZShzZW5kZXIpLCBXVEZNb3ZlKHJlY2VpdmVyKSwgV1RGTW92
ZSh0cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFs
VHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2
ZXIuZ2V0KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xs
ZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAgICBtX2VuZHBvaW50LT5jb2xsZWN0VHJhbnNjZWl2ZXJz
KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRQZW5kaW5n
VHJhY2tFdmVudChQZW5kaW5nVHJhY2tFdmVudCYmIGV2ZW50KQoreworICAgIG1fcGVuZGluZ1Ry
YWNrRXZlbnRzLmFwcGVuZChXVEZNb3ZlKGV2ZW50KSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpkaXNwYXRjaFBlbmRpbmdUcmFja0V2ZW50cygpCit7CisgICAg
YXV0byBldmVudHMgPSBXVEZNb3ZlKG1fcGVuZGluZ1RyYWNrRXZlbnRzKTsKKyAgICBmb3IgKGF1
dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNwYXRjaFRyYWNrRXZlbnQoZXZlbnQpOwor
fQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVtb3ZlVHJhY2soUlRD
UnRwU2VuZGVyJiBzZW5kZXIpCit7CisgICAgbV9lbmRwb2ludC0+cmVtb3ZlVHJhY2soYmFja2Vu
ZEZyb21SVFBTZW5kZXIoc2VuZGVyKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKQoreworICAg
IGZvciAoYXV0byYgdHJhbnNjZWl2ZXIgOiBtX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRUcmFuc2Nl
aXZlcnMoKSkgeworICAgICAgICBpZiAoIXRyYW5zY2VpdmVyLT5zZW5kZXIoKS5pc1N0b3BwZWQo
KSkgeworICAgICAgICAgICAgaWYgKGF1dG8qIHZpZGVvU291cmNlID0gYmFja2VuZEZyb21SVFBT
ZW5kZXIodHJhbnNjZWl2ZXItPnNlbmRlcigpKS52aWRlb1NvdXJjZSgpKQorICAgICAgICAgICAg
ICAgIHZpZGVvU291cmNlLT5zZXRBcHBseVJvdGF0aW9uKHRydWUpOworICAgICAgICB9CisgICAg
fQorfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2F0aGVyRGVjb2Rl
ckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJiBjYWxsYmFjaykK
K3sKKyAgICBtX2VuZHBvaW50LT5nYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKFdURk1v
dmUoY2FsbGJhY2spKTsKK30KKworYm9vbCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OmlzTmVnb3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZW5k
cG9pbnQtPmlzTmVnb3RpYXRpb25OZWVkZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVj
dGlvbkJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzODgzMzhj
MDU4YTM3ODM3YTYwNmY3ZGY2NDE4N2FlMWY5YTA3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIlBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVk
aWFTb3VyY2UuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOworY2xhc3MgR1N0cmVhbWVyUnRw
U2VuZGVyQmFja2VuZDsKK2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDsKK2Ns
YXNzIFJUQ1J0cFJlY2VpdmVyOworY2xhc3MgUlRDUnRwUmVjZWl2ZXJCYWNrZW5kOworY2xhc3Mg
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uOworY2xhc3MgUlRDU3RhdHNSZXBvcnQ7CitjbGFzcyBSZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZUluY29taW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU1lZGlhU291cmNlR1N0cmVhbWVy
OworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOworY2xhc3MgUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOworCitzdHJ1Y3QgR1N0cmVhbWVySWNl
Q2FuZGlkYXRlIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgdW5z
aWduZWQgc2RwTUxpbmVJbmRleDsKKyAgICBTdHJpbmcgY2FuZGlkYXRlOworfTsKKworY2xhc3Mg
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kIGZpbmFsIDogcHVibGljIFBlZXJDb25uZWN0
aW9uQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAg
ZXhwbGljaXQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKFJUQ1BlZXJDb25uZWN0aW9u
Jik7CisgICAgfkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCgpOworCitwcml2YXRlOgor
ICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIGRvQ3JlYXRlT2ZmZXIoUlRDT2ZmZXJP
cHRpb25zJiYpIGZpbmFsOworICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoUlRDQW5zd2VyT3B0aW9u
cyYmKSBmaW5hbDsKKyAgICB2b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNz
aW9uRGVzY3JpcHRpb24qKSBmaW5hbDsKKyAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRpb24o
Y29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikgZmluYWw7CisgICAgdm9pZCBkb0FkZEljZUNh
bmRpZGF0ZShSVENJY2VDYW5kaWRhdGUmLCBBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmKSBmaW5h
bDsKKyAgICB2b2lkIGRvU3RvcCgpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEYXRh
Q2hhbm5lbEhhbmRsZXI+IGNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcihjb25zdCBTdHJpbmcmLCBj
b25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RhcnRJY2UoKSBm
aW5hbDsKKyAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRp
b24mJikgZmluYWw7CisgICAgdm9pZCBnZXRTdGF0cyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBm
aW5hbDsKKyAgICB2b2lkIGdldFN0YXRzKFJUQ1J0cFNlbmRlciYsIFJlZjxEZWZlcnJlZFByb21p
c2U+JiYpIGZpbmFsOworICAgIHZvaWQgZ2V0U3RhdHMoUlRDUnRwUmVjZWl2ZXImLCBSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKKworICAgIHZvaWQgZW11bGF0ZVBsYXRmb3JtRXZlbnQo
Y29uc3QgU3RyaW5nJikgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseVJvdGF0aW9uRm9yT3V0Z29p
bmdWaWRlb1NvdXJjZXMoKSBmaW5hbDsKKworICAgIHZvaWQgZ2F0aGVyRGVjb2RlckltcGxlbWVu
dGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJikgZmluYWw7CisKKyAgICBib29s
IGlzTmVnb3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0IGZpbmFsOworCisgICAgc3RkOjpv
cHRpb25hbDxib29sPiBjYW5Ucmlja2xlSWNlQ2FuZGlkYXRlcygpIGNvbnN0IHsgcmV0dXJuIHRy
dWU7IH07CisKKyAgICBmcmllbmQgY2xhc3MgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDsKKyAgICBm
cmllbmQgY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDsKKyAgICBSVENQZWVyQ29ubmVj
dGlvbiYgY29ubmVjdGlvbigpIHsgcmV0dXJuIG1fcGVlckNvbm5lY3Rpb247IH0KKworICAgIHZv
aWQgZ2V0U3RhdHNTdWNjZWVkZWQoY29uc3QgRGVmZXJyZWRQcm9taXNlJiwgUmVmPFJUQ1N0YXRz
UmVwb3J0PiYmKTsKKworICAgIEV4Y2VwdGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+PiBhZGRUcmFj
ayhNZWRpYVN0cmVhbVRyYWNrJiwgRml4ZWRWZWN0b3I8U3RyaW5nPiYmKSBmaW5hbDsKKyAgICB2
b2lkIHJlbW92ZVRyYWNrKFJUQ1J0cFNlbmRlciYpIGZpbmFsOworCisgICAgRXhjZXB0aW9uT3I8
UmVmPFJUQ1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiwgY29u
c3QgUlRDUnRwVHJhbnNjZWl2ZXJJbml0JikgZmluYWw7CisgICAgRXhjZXB0aW9uT3I8UmVmPFJU
Q1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIoUmVmPE1lZGlhU3RyZWFtVHJhY2s+JiYs
IGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpIGZpbmFsOworICAgIHZvaWQgc2V0U2VuZGVy
U291cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRy
YWNrJik7CisKKyAgICBSVENSdHBUcmFuc2NlaXZlciogZXhpc3RpbmdUcmFuc2NlaXZlcihXVEY6
OkZ1bmN0aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJik+JiYpOworICAg
IFJUQ1J0cFRyYW5zY2VpdmVyJiBuZXdSZW1vdGVUcmFuc2NlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiYmLCBSZWFsdGltZU1lZGlhU291cmNlOjpU
eXBlKTsKKworICAgIHZvaWQgY29sbGVjdFRyYW5zY2VpdmVycygpIGZpbmFsOworCisgICAgdm9p
ZCBhZGRQZW5kaW5nVHJhY2tFdmVudChQZW5kaW5nVHJhY2tFdmVudCYmKTsKKyAgICB2b2lkIGRp
c3BhdGNoUGVuZGluZ1RyYWNrRXZlbnRzKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvY2Fs
RGVzY3JpcHRpb25TZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzTG9jYWxEZXNjcmlwdGlv
blNldDsgfQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBFeGNlcHRpb25PcjxSZWY8
UlRDUnRwVHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChUJiYgdHJh
Y2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpOworCisgICAgUmVmPFJUQ1J0
cFJlY2VpdmVyPiBjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kPiYmLCBjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0
cmFja0lkKTsKKworICAgIHZvaWQgc3VzcGVuZCgpIGZpbmFsOworICAgIHZvaWQgcmVzdW1lKCkg
ZmluYWw7CisKKyAgICBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gbV9lbmRwb2ludDsKKyAg
ICBib29sIG1faXNMb2NhbERlc2NyaXB0aW9uU2V0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNS
ZW1vdGVEZXNjcmlwdGlvblNldCB7IGZhbHNlIH07CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVf
cHRyPEdTdHJlYW1lckljZUNhbmRpZGF0ZT4+IG1fcGVuZGluZ0NhbmRpZGF0ZXM7CisgICAgVmVj
dG9yPFJlZjxSVENSdHBSZWNlaXZlcj4+IG1fcGVuZGluZ1JlY2VpdmVyczsKKyAgICBWZWN0b3I8
UGVuZGluZ1RyYWNrRXZlbnQ+IG1fcGVuZGluZ1RyYWNrRXZlbnRzOworfTsKKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJSdHBSZWNlaXZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li45YzEzNDNiMTM5ZjViYTkyZjQxNTVmM2QwNTA1MDVkMmNmYWZjZDc0Ci0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVh
bWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2Vu
ZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50
ZWQuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUlRD
UnRwUGFyYW1ldGVycyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMo
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9y
PFJUQ1J0cENvbnRyaWJ1dGluZ1NvdXJjZT4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpn
ZXRDb250cmlidXRpbmdTb3VyY2VzKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxSVENSdHBTeW5jaHJvbml6YXRpb25Tb3VyY2U+
IEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0U3luY2hyb25pemF0aW9uU291cmNlcygp
IGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitS
ZWY8UmVhbHRpbWVNZWRpYVNvdXJjZT4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpjcmVh
dGVTb3VyY2UoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCkK
K3sKKyAgICBpZiAodHJhY2tLaW5kID09ICJ2aWRlbyJfcykKKyAgICAgICAgcmV0dXJuIFJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrSWQuaXNvbGF0ZWRD
b3B5KCkpOworCisgICAgUkVMRUFTRV9BU1NFUlQodHJhY2tLaW5kID09ICJhdWRpbyJfcyk7Cisg
ICAgcmV0dXJuIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRy
YWNrSWQuaXNvbGF0ZWRDb3B5KCkpOworfQorCitSZWY8UlRDUnRwVHJhbnNmb3JtQmFja2VuZD4g
R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkKK3sK
KyAgICByZXR1cm4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpjcmVhdGUo
bV9ydGNSZWNlaXZlcik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFj
a2VuZD4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCgp
Cit7CisgICAgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiB0cmFuc3BvcnQ7CisgICAg
Z19vYmplY3RfZ2V0KG1fcnRjUmVjZWl2ZXIuZ2V0KCksICJ0cmFuc3BvcnQiLCAmdHJhbnNwb3J0
Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxH
U3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KSA6IG51bGxwdHI7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIGIvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVj
ZWl2ZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjYzYTc1OTdiOTgyNzY3NmRlMDMzYTE5YmM0M2Zj
ZGEyZjgxMzMwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oCkBAIC0wLDAg
KzEsNTMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVk
ZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFJlY2VpdmVyQmFja2VuZC5o
IgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCitjbGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRD
UnRwUmVjZWl2ZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQoR1JlZlB0cjxHc3RX
ZWJSVENSVFBSZWNlaXZlcj4mJiBydGNSZWNlaXZlcikKKyAgICAgICAgOiBtX3J0Y1JlY2VpdmVy
KFdURk1vdmUocnRjUmVjZWl2ZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBHc3RXZWJSVENSVFBS
ZWNlaXZlciogcnRjUmVjZWl2ZXIoKSB7IHJldHVybiBtX3J0Y1JlY2VpdmVyLmdldCgpOyB9Cisg
ICAgUmVmPFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZVNvdXJjZShjb25zdCBTdHJpbmcmIHRy
YWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKTsKKworcHJpdmF0ZToKKyAgICBSVENSdHBQ
YXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMoKSBmaW5hbDsKKyAgICBWZWN0b3I8UlRDUnRwQ29udHJp
YnV0aW5nU291cmNlPiBnZXRDb250cmlidXRpbmdTb3VyY2VzKCkgY29uc3QgZmluYWw7CisgICAg
VmVjdG9yPFJUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZT4gZ2V0U3luY2hyb25pemF0aW9uU291
cmNlcygpIGNvbnN0IGZpbmFsOworICAgIFJlZjxSVENSdHBUcmFuc2Zvcm1CYWNrZW5kPiBydGNS
dHBUcmFuc2Zvcm1CYWNrZW5kKCkgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0R0bHNU
cmFuc3BvcnRCYWNrZW5kPiBkdGxzVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworCisgICAgR1Jl
ZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gbV9ydGNSZWNlaXZlcjsKK307CisKK30gLy8gbmFt
ZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVB
TUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBS
ZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyOTA4MmZlY2E0ZDQ4YTgz
NzAzNjk3OTE3NjdkYmFkYWUzM2Y5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5z
Zm9ybUJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNl
aXZlclRyYW5zZm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9y
bUJhY2tlbmQ6Ok1lZGlhVHlwZSBtZWRpYVR5cGVGcm9tUmVjZWl2ZXIoY29uc3QgR3N0V2ViUlRD
UlRQUmVjZWl2ZXImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJUQ1J0
cFRyYW5zZm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZTo6VmlkZW87Cit9CisKK0dTdHJlYW1lclJ0cFJl
Y2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNr
ZW5kKGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+JiBydGNSZWNlaXZlcikKKyAg
ICA6IEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQobWVkaWFUeXBlRnJvbVJlY2VpdmVyKCpy
dGNSZWNlaXZlciksIFNpZGU6OlJlY2VpdmVyKQorICAgICwgbV9ydGNSZWNlaXZlcihydGNSZWNl
aXZlcikKK3sKK30KKworR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0
cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKCkKK3sKK30KKwordm9pZCBHU3RyZWFt
ZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxi
YWNrKENhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgc2V0SW5wdXRDYWxsYmFjayhXVEZNb3Zl
KGNhbGxiYWNrKSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJS
dHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSgpCit7CisgICAgQVNT
RVJUKG1lZGlhVHlwZSgpID09IE1lZGlhVHlwZTo6VmlkZW8pOworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNm
b3JtQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU4
NjY3NmEwNmI3YWI5ZWIwYjMyZTdkZjdjNjM0ODE1YThjOTc5ZgotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0
cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
ICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9v
cgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBG
b3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5
b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBk
aXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBX
SVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9m
CisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NF
LiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9y
ZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRo
ZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMg
bGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRp
b24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAy
MTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMp
ICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNr
ZW5kIGZpbmFsIDogcHVibGljIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQgeworcHVibGlj
OgorICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kPiBj
cmVhdGUoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4mIHJlY2VpdmVyKSB7IHJl
dHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZChy
ZWNlaXZlcikpOyB9CisgICAgfkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCgp
OworCitwcml2YXRlOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3Jt
QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiYpOworCisgICAgLy8g
UlRDUnRwVHJhbnNmb3JtQmFja2VuZAorICAgIHZvaWQgc2V0VHJhbnNmb3JtYWJsZUZyYW1lQ2Fs
bGJhY2soQ2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCByZXF1ZXN0S2V5RnJhbWUoKSBmaW5h
bDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IG1fcnRjUmVjZWl2ZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5NmJjYmE5MjVmZTlkZmY3ZjZlNTZhNTUx
NjUyZDg1ZTJiODMwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNwcApAQCAt
MCwwICsxLDE0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUg
ImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKworI2lm
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdT
dHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRHRsc1RyYW5z
cG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5j
bHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZl
cnJlZC5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUlRDUGVlckNv
bm5lY3Rpb24uaCIKKyNpbmNsdWRlICJSVENSdHBTZW5kZXIuaCIKKyNpbmNsdWRlICJSZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1
cmVzLmgiCisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZT4KK3N0YXRpYyBpbmxpbmUgYm9v
bCB1cGRhdGVUcmFja1NvdXJjZShTb3VyY2UmIHNvdXJjZSwgTWVkaWFTdHJlYW1UcmFjayogdHJh
Y2spCit7CisgICAgaWYgKCF0cmFjaykgeworICAgICAgICBzb3VyY2Uuc3RvcCgpOworICAgICAg
ICByZXR1cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHNvdXJjZS5zZXRUcmFjayh0cmFjay0+
cHJpdmF0ZVRyYWNrKCkpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0
YXJ0U291cmNlKCkKK3sKKyAgICBzd2l0Y2hPbihtX3NvdXJjZSwgW10oUmVmPFJlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0
YXJ0KCk7CisgICAgfSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0YXJ0KCk7CisgICAgfSwgW10oc3RkOjpu
dWxscHRyX3QmKSB7CisgICAgfSk7Cit9CisKK1dBUk5fVU5VU0VEX1JFVFVSTiBHUmVmUHRyPEdz
dEVsZW1lbnQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0b3BTb3VyY2UoKQoreworICAg
IHN3aXRjaE9uKG1fc291cmNlLCBbXShSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0
cmVhbWVyPiYgc291cmNlKSB7CisgICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAgICByZXR1
cm4gR1JlZlB0cjxHc3RFbGVtZW50Pihzb3VyY2UtPmJpbigpKTsKKyAgICB9LCBbXShSZWY8UmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7CisgICAgICAgIHNv
dXJjZS0+c3RvcCgpOworICAgICAgICByZXR1cm4gR1JlZlB0cjxHc3RFbGVtZW50Pihzb3VyY2Ut
PmJpbigpKTsKKyAgICB9LCBbXShzdGQ6Om51bGxwdHJfdCYpIHsKKyAgICAgICAgcmV0dXJuIEdS
ZWZQdHI8R3N0RWxlbWVudD4obnVsbHB0cik7CisgICAgfSk7CisgICAgcmV0dXJuIG51bGxwdHI7
Cit9CisKK2Jvb2wgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6cmVwbGFjZVRyYWNrKFJUQ1J0
cFNlbmRlciYgc2VuZGVyLCBNZWRpYVN0cmVhbVRyYWNrKiB0cmFjaykKK3sKKyAgICBpZiAoIXRy
YWNrKSB7CisgICAgICAgIGF1dG8gc3RvcHBlZFNvdXJjZSA9IHN0b3BTb3VyY2UoKTsKKyAgICAg
ICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHNlbmRlci50cmFjaygpKSB7CisgICAg
ICAgIHN3aXRjaE9uKG1fc291cmNlLCBbJl0oUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICAgICAgQVNTRVJUKHRyYWNrLT5zb3VyY2Uo
KS50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pOworICAgICAgICAg
ICAgc291cmNlLT5zdG9wKCk7CisgICAgICAgICAgICBzb3VyY2UtPnNldFNvdXJjZSh0cmFjay0+
cHJpdmF0ZVRyYWNrKCkpOworICAgICAgICAgICAgc291cmNlLT5zdGFydCgpOworICAgICAgICB9
LCBbJl0oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkg
eworICAgICAgICAgICAgQVNTRVJUKHRyYWNrLT5zb3VyY2UoKS50eXBlKCkgPT0gUmVhbHRpbWVN
ZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pOworICAgICAgICAgICAgc291cmNlLT5zdG9wKCk7Cisg
ICAgICAgICAgICBzb3VyY2UtPnNldFNvdXJjZSh0cmFjay0+cHJpdmF0ZVRyYWNrKCkpOworICAg
ICAgICAgICAgc291cmNlLT5zdGFydCgpOworICAgICAgICB9LCBbXShzdGQ6Om51bGxwdHJfdCYp
IHsKKyAgICAgICAgfSk7CisgICAgfQorCisgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQtPnNl
dFNlbmRlclNvdXJjZUZyb21UcmFjaygqdGhpcywgKnRyYWNrKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworUlRDUnRwU2VuZFBhcmFtZXRlcnMgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6Z2V0
UGFyYW1ldGVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvUlRDUnRwU2VuZFBhcmFtZXRlcnMo
bV9pbml0RGF0YS5nZXQoKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6
c2V0UGFyYW1ldGVycyhjb25zdCBSVENSdHBTZW5kUGFyYW1ldGVycyYsIERPTVByb21pc2VEZWZl
cnJlZDx2b2lkPiYmIHByb21pc2UpCit7CisgICAgaWYgKCFtX3J0Y1NlbmRlcikgeworICAgICAg
ICBwcm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHByb21pc2UucmVzb2x2ZSgpOworfQor
CitzdGQ6OnVuaXF1ZV9wdHI8UlRDRFRNRlNlbmRlckJhY2tlbmQ+IEdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ6OmNyZWF0ZURUTUZCYWNrZW5kKCkKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxH
U3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZD4oKTsKK30KKworUmVmPFJUQ1J0cFRyYW5zZm9ybUJh
Y2tlbmQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQo
KQoreworICAgIHJldHVybiBHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpjcmVh
dGUobV9ydGNTZW5kZXIpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnNl
dE1lZGlhU3RyZWFtSWRzKGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFja2Vu
ZD4gR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQoKQorewor
ICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJhbnNwb3J0OworICAgIGdfb2Jq
ZWN0X2dldChtX3J0Y1NlbmRlci5nZXQoKSwgInRyYW5zcG9ydCIsICZ0cmFuc3BvcnQub3V0UHRy
KCksIG51bGxwdHIpOworICAgIHJldHVybiB0cmFuc3BvcnQgPyBtYWtlVW5pcXVlPEdTdHJlYW1l
ckR0bHNUcmFuc3BvcnRCYWNrZW5kPih0cmFuc3BvcnQpIDogbnVsbHB0cjsKK30KKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjkzMzEwODFjZjdiMjI0YWI1NjU1Y2MzNjg5NTgxM2EwYjMyNjZlZmIK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5o
IgorI2luY2x1ZGUgIlJUQ1J0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1l
c3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDsK
KworY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENSdHBT
ZW5kZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZCYgYmFja2VuZCwgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYgcnRjU2VuZGVyLCBHVW5p
cXVlUHRyPEdzdFN0cnVjdHVyZT4mJiBpbml0RGF0YSkKKyAgICAgICAgOiBtX3BlZXJDb25uZWN0
aW9uQmFja2VuZChXZWFrUHRyIHsgJmJhY2tlbmQgfSkKKyAgICAgICAgLCBtX3J0Y1NlbmRlcihX
VEZNb3ZlKHJ0Y1NlbmRlcikpCisgICAgICAgICwgbV9pbml0RGF0YShXVEZNb3ZlKGluaXREYXRh
KSkKKyAgICB7CisgICAgfQorCisgICAgdXNpbmcgU291cmNlID0gc3RkOjp2YXJpYW50PHN0ZDo6
bnVsbHB0cl90LCBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiwgUmVm
PFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4+OworICAgIEdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBiYWNrZW5kLCBH
UmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mJiBydGNTZW5kZXIsIFNvdXJjZSYmIHNvdXJjZSwg
R1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEpCisgICAgICAgIDogbV9wZWVyQ29u
bmVjdGlvbkJhY2tlbmQoV2Vha1B0ciB7ICZiYWNrZW5kIH0pCisgICAgICAgICwgbV9ydGNTZW5k
ZXIoV1RGTW92ZShydGNTZW5kZXIpKQorICAgICAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNl
KSkKKyAgICAgICAgLCBtX2luaXREYXRhKFdURk1vdmUoaW5pdERhdGEpKQorICAgIHsKKyAgICB9
CisKKyAgICB2b2lkIHNldFJUQ1NlbmRlcihHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mJiBy
dGNTZW5kZXIpIHsgbV9ydGNTZW5kZXIgPSBXVEZNb3ZlKHJ0Y1NlbmRlcik7IH0KKyAgICBHc3RX
ZWJSVENSVFBTZW5kZXIqIHJ0Y1NlbmRlcigpIHsgcmV0dXJuIG1fcnRjU2VuZGVyLmdldCgpOyB9
CisKKyAgICBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIqIGF1ZGlvU291cmNl
KCkKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLAorICAgICAg
ICAgICAgW10gKFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3Vy
Y2UpIHsgcmV0dXJuIHNvdXJjZS5wdHIoKTsgfSwKKyAgICAgICAgICAgIFtdIChjb25zdCBhdXRv
JikgLT4gUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKiB7IHJldHVybiBudWxs
cHRyOyB9CisgICAgICAgICk7CisgICAgfQorCisgICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlR1N0cmVhbWVyKiB2aWRlb1NvdXJjZSgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpz
d2l0Y2hPbihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChSZWY8UmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7IHJldHVybiBzb3VyY2UucHRyKCk7IH0sCisg
ICAgICAgICAgICBbXSAoY29uc3QgYXV0byYpIC0+IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lciogeyByZXR1cm4gbnVsbHB0cjsgfQorICAgICAgICApOworICAgIH0KKworICAg
IGJvb2wgaGFzU291cmNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRj
aE9uKG1fc291cmNlLAorICAgICAgICAgICAgW10gKGNvbnN0IHN0ZDo6bnVsbHB0cl90JikgeyBy
ZXR1cm4gZmFsc2U7IH0sCisgICAgICAgICAgICBbXSAoY29uc3QgYXV0byYpIHsgcmV0dXJuIHRy
dWU7IH0KKyAgICAgICAgKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyU291cmNlKCkKKyAgICB7
CisgICAgICAgIEFTU0VSVChoYXNTb3VyY2UoKSk7CisgICAgICAgIG1fc291cmNlID0gbnVsbHB0
cjsKKyAgICB9CisKKyAgICB2b2lkIHNldFNvdXJjZShTb3VyY2UmJiBzb3VyY2UpCisgICAgewor
ICAgICAgICBBU1NFUlQoIWhhc1NvdXJjZSgpKTsKKyAgICAgICAgbV9zb3VyY2UgPSBXVEZNb3Zl
KHNvdXJjZSk7CisgICAgICAgIEFTU0VSVChoYXNTb3VyY2UoKSk7CisgICAgfQorCisgICAgdm9p
ZCB0YWtlU291cmNlKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIGJhY2tlbmQpCisgICAgewor
ICAgICAgICBBU1NFUlQoYmFja2VuZC5oYXNTb3VyY2UoKSk7CisgICAgICAgIHNldFNvdXJjZShX
VEZNb3ZlKGJhY2tlbmQubV9zb3VyY2UpKTsKKyAgICB9CisKKyAgICBXQVJOX1VOVVNFRF9SRVRV
Uk4gR1JlZlB0cjxHc3RFbGVtZW50PiBzdG9wU291cmNlKCk7CisKK3ByaXZhdGU6CisgICAgYm9v
bCByZXBsYWNlVHJhY2soUlRDUnRwU2VuZGVyJiwgTWVkaWFTdHJlYW1UcmFjayopIGZpbmFsOwor
ICAgIFJUQ1J0cFNlbmRQYXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMoKSBjb25zdCBmaW5hbDsKKyAg
ICB2b2lkIHNldFBhcmFtZXRlcnMoY29uc3QgUlRDUnRwU2VuZFBhcmFtZXRlcnMmLCBET01Qcm9t
aXNlRGVmZXJyZWQ8dm9pZD4mJikgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RUTUZT
ZW5kZXJCYWNrZW5kPiBjcmVhdGVEVE1GQmFja2VuZCgpIGZpbmFsOworICAgIFJlZjxSVENSdHBU
cmFuc2Zvcm1CYWNrZW5kPiBydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkgZmluYWw7CisgICAgdm9p
ZCBzZXRNZWRpYVN0cmVhbUlkcyhjb25zdCBGaXhlZFZlY3RvcjxTdHJpbmc+JikgZmluYWw7Cisg
ICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBkdGxzVHJhbnNwb3J0
QmFja2VuZCgpIGZpbmFsOworCisgICAgdm9pZCBzdGFydFNvdXJjZSgpOworCisgICAgV2Vha1B0
cjxHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5k
OworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBtX3J0Y1NlbmRlcjsKKyAgICBTb3Vy
Y2UgbV9zb3VyY2U7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IG1faW5pdERhdGE7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNr
ZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2NmM0ZGVj
MWJiMDNhMzI3N2Q5MmIwNjU0MjljNjQwNzJiZTE0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5k
ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
UnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5z
Zm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZSBtZWRpYVR5cGVGcm9tU2VuZGVyKGNvbnN0IEdzdFdlYlJU
Q1JUUFNlbmRlciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUlRDUnRw
VHJhbnNmb3JtQmFja2VuZDo6TWVkaWFUeXBlOjpWaWRlbzsKK30KKworR1N0cmVhbWVyUnRwU2Vu
ZGVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZChj
b25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mIHJ0Y1NlbmRlcikKKyAgICA6IEdTdHJl
YW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQobWVkaWFUeXBlRnJvbVNlbmRlcigqcnRjU2VuZGVyKSwg
U2lkZTo6U2VuZGVyKQorICAgICwgbV9ydGNTZW5kZXIocnRjU2VuZGVyKQoreworfQorCitHU3Ry
ZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNm
b3JtQmFja2VuZCgpCit7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFj
a2VuZDo6c2V0VHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soQ2FsbGJhY2smJiBjYWxsYmFjaykK
K3sKKyAgICBzZXRJbnB1dENhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6
OnJlcXVlc3RLZXlGcmFtZSgpCit7CisgICAgQVNTRVJUKG1lZGlhVHlwZSgpID09IE1lZGlhVHlw
ZTo6VmlkZW8pOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9y
bUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42YjBhNTc2ZGIxMjY4M2U3NTg5Nzg0MmQxNGE3OTU4YTQ5
MGU5MjZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0w
LDAgKzEsNTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5j
bHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUg
PHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVy
U2VuZGVyVHJhbnNmb3JtZXI7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJh
Y2tlbmQgZmluYWwgOiBwdWJsaWMgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCB7CisgICAg
V1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxHU3RyZWFt
ZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kPiBjcmVhdGUoY29uc3QgR1JlZlB0cjxHc3RXZWJS
VENSVFBTZW5kZXI+JiBzZW5kZXIpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyUnRw
U2VuZGVyVHJhbnNmb3JtQmFja2VuZChzZW5kZXIpKTsgfQorICAgIH5HU3RyZWFtZXJSdHBTZW5k
ZXJUcmFuc2Zvcm1CYWNrZW5kKCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgR1N0cmVhbWVy
UnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRl
cj4mKTsKKworICAgIC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lkIHNldFRyYW5z
Zm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVxdWVz
dEtleUZyYW1lKCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9y
dGNTZW5kZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFC
TEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Nl
aXZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDQ5
YWU4NWYxNmRkNDFiMWEzOWEyMDgwYjQ2M2E1ODY3MDA4NDljCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRw
VHJhbnNjZWl2ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqICBDb3B5cmln
aHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENv
cHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisg
KiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIg
b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3Ry
aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhP
VVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAq
ICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBT
ZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRl
dGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJy
YXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwg
SW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAt
MTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5k
LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdT
dHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJSVENSdHBDb2RlY0NhcGFiaWxpdHkuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVl
UHRyLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2lu
dF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50
X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENS
VFBUcmFuc2NlaXZlcj4mJiBydGNUcmFuc2NlaXZlcikKKyAgICA6IG1fcnRjVHJhbnNjZWl2ZXIo
V1RGTW92ZShydGNUcmFuc2NlaXZlcikpCit7CisgICAgZ19vYmplY3Rfc2V0KG1fcnRjVHJhbnNj
ZWl2ZXIuZ2V0KCksICJkby1uYWNrIiwgVFJVRSwgImZlYy10eXBlIiwgR1NUX1dFQlJUQ19GRUNf
VFlQRV9VTFBfUkVELCBudWxscHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0
cFJlY2VpdmVyQmFja2VuZD4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVS
ZWNlaXZlckJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IHJl
Y2VpdmVyOworICAgIGdfb2JqZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAicmVjZWl2
ZXIiLCAmcmVjZWl2ZXIub3V0UHRyKCksIG51bGxwdHIpOworICAgIHJldHVybiBXVEY6Om1ha2VV
bmlxdWU8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJlY2VpdmVyKSk7Cit9
CisKK3N0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPiBHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kJiBiYWNrZW5kLCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3Vy
Y2UmJiBzb3VyY2UsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmIGluaXREYXRhKQoreworICAg
IEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXI7CisgICAgZ19vYmplY3RfZ2V0KG1f
cnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJzZW5kZXIiLCAmc2VuZGVyLm91dFB0cigpLCBudWxscHRy
KTsKKyAgICByZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+
KGJhY2tlbmQsIFdURk1vdmUoc2VuZGVyKSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKGluaXRE
YXRhKSk7Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIEdTdHJlYW1lclJ0cFRyYW5z
Y2VpdmVyQmFja2VuZDo6ZGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBHc3RXZWJSVENSVFBUcmFu
c2NlaXZlckRpcmVjdGlvbiBnc3REaXJlY3Rpb247CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJh
bnNjZWl2ZXIuZ2V0KCksICJkaXJlY3Rpb24iLCAmZ3N0RGlyZWN0aW9uLCBudWxscHRyKTsKKyAg
ICByZXR1cm4gdG9SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihnc3REaXJlY3Rpb24pOworfQor
CitzdGQ6Om9wdGlvbmFsPFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uPiBHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQ6OmN1cnJlbnREaXJlY3Rpb24oKSBjb25zdAoreworICAgIEdzdFdl
YlJUQ1JUUFRyYW5zY2VpdmVyRGlyZWN0aW9uIGdzdERpcmVjdGlvbjsKKyAgICBnX29iamVjdF9n
ZXQobV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgImN1cnJlbnQtZGlyZWN0aW9uIiwgJmdzdERpcmVj
dGlvbiwgbnVsbHB0cik7CisgICAgaWYgKCFnc3REaXJlY3Rpb24pCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgcmV0dXJuIHRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZ3N0
RGlyZWN0aW9uKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNl
dERpcmVjdGlvbihSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAg
Z19vYmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJkaXJlY3Rpb24iLCBmcm9tUlRD
UnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZGlyZWN0aW9uKSwgbnVsbHB0cik7Cit9CisKK1N0cmlu
ZyBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6Om1pZCgpCit7CisgICAgR1VuaXF1ZU91
dFB0cjxjaGFyPiBtaWQ7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCks
ICJtaWQiLCAmbWlkLm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gbWlkLmdldCgpOwor
fQorCit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c3RvcCgpCit7CisgICAg
Ly8gRklYTUU6IHdlYnJ0Y2JpbiB0cmFuc2NlaXZlcnMgY2FuJ3QgYmUgc3RvcHBlZCB5ZXQuCisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJh
Y2tlbmQ6OnN0b3BwZWQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiB3ZWJydGNiaW4gdHJhbnNj
ZWl2ZXJzIGNhbid0IGJlIHN0b3BwZWQgeWV0LgorICAgIHJldHVybiBmYWxzZTsKK30KKworc3Rh
dGljIGlubGluZSBXQVJOX1VOVVNFRF9SRVRVUk4gRXhjZXB0aW9uT3I8R3N0Q2Fwcyo+IHRvUnRw
Q29kZWNDYXBhYmlsaXR5KGNvbnN0IFJUQ1J0cENvZGVjQ2FwYWJpbGl0eSYgY29kZWMpCit7Cisg
ICAgaWYgKCFjb2RlYy5taW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSAmJiAhY29kZWMubWlt
ZVR5cGUuc3RhcnRzV2l0aCgiYXVkaW8vIikpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJ
bnZhbGlkTW9kaWZpY2F0aW9uRXJyb3IsICJSVENSdHBDb2RlY0NhcGFiaWxpdHkgYmFkIG1pbWVU
eXBlIiB9OworCisgICAgYXV0byBjb21wb25lbnRzID0gY29kZWMubWltZVR5cGUuc3BsaXQoJy8n
KTsKKyAgICBhdXRvKiBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXBwbGljYXRpb24veC1y
dHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCBjb21wb25lbnRzWzBdLmFzY2lpKCkuZGF0YSgp
LCAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGNvbXBvbmVudHNbMV0uYXNjaWkoKS5k
YXRhKCksIG51bGxwdHIpOworICAgIGdzdF9jYXBzX3NldF9zaW1wbGUoY2FwcywgImNsb2NrLXJh
dGUiLCBHX1RZUEVfSU5ULCBjb2RlYy5jbG9ja1JhdGUsIG51bGxwdHIpOworICAgIGlmIChjb2Rl
Yy5jaGFubmVscykKKyAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShjYXBzLCAiY2hhbm5lbHMi
LCBHX1RZUEVfSU5ULCAqY29kZWMuY2hhbm5lbHMsIG51bGxwdHIpOworCisgICAgaWYgKCFjb2Rl
Yy5zZHBGbXRwTGluZS5pc0VtcHR5KCkpCisgICAgICAgIEdTVF9GSVhNRSgiVW5wcm9jZXNzZWQg
U0RQIEZtdHBMaW5lOiAlcyIsIGNvZGVjLnNkcEZtdHBMaW5lLnV0ZjgoKS5kYXRhKCkpOworICAg
IEdTVF9ERUJVRygiQ29kZWMgY2FwYWJpbGl0eTogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOwor
ICAgIHJldHVybiBjYXBzOworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQ6OnNldENvZGVjUHJlZmVyZW5jZXMoY29uc3QgVmVjdG9yPFJUQ1J0cENv
ZGVjQ2FwYWJpbGl0eT4mIGNvZGVjcykKK3sKKyAgICBhdXRvIGdzdENvZGVjcyA9IGFkb3B0R1Jl
Zihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZm9yIChhdXRvJiBjb2RlYyA6IGNvZGVjcykg
eworICAgICAgICBhdXRvIHJlc3VsdCA9IHRvUnRwQ29kZWNDYXBhYmlsaXR5KGNvZGVjKTsKKyAg
ICAgICAgaWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1
bHQucmVsZWFzZUV4Y2VwdGlvbigpOworICAgICAgICBnc3RfY2Fwc19hcHBlbmQoZ3N0Q29kZWNz
LmdldCgpLCByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIH0KKyAgICBnX29iamVj
dF9zZXQobV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgImNvZGVjLXByZWZlcmVuY2VzIiwgZ3N0Q29k
ZWNzLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4geyB9OworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmRlYTc3MzA0YjA2ZTQxODBmYzcwNzE0N2Y1NDg4Njk4NTg4MTZh
NjkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaApAQCAtMCwwICsxLDU3
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdS
ZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgi
CisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFRyYW5z
Y2VpdmVyQmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1l
clJ0cFJlY2VpdmVyQmFja2VuZDsKKworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNr
ZW5kIGZpbmFsIDogcHVibGljIFJUQ1J0cFRyYW5zY2VpdmVyQmFja2VuZCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kKEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+JiYpOworCisgICAgc3RkOjp1
bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4gY3JlYXRlUmVjZWl2ZXJCYWNr
ZW5kKCk7CisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+IGNy
ZWF0ZVNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiwgR1N0cmVh
bWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlJiYsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYm
KTsKKworICAgIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBydGNUcmFuc2NlaXZlcigpIHsgcmV0
dXJuIG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBSVENSdHBUcmFu
c2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCBmaW5hbDsKKyAgICBzdGQ6Om9wdGlv
bmFsPFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uPiBjdXJyZW50RGlyZWN0aW9uKCkgY29uc3Qg
ZmluYWw7CisgICAgdm9pZCBzZXREaXJlY3Rpb24oUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24p
IGZpbmFsOworICAgIFN0cmluZyBtaWQoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsK
KyAgICBib29sIHN0b3BwZWQoKSBjb25zdCBmaW5hbDsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBz
ZXRDb2RlY1ByZWZlcmVuY2VzKGNvbnN0IFZlY3RvcjxSVENSdHBDb2RlY0NhcGFiaWxpdHk+Jikg
ZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBtX3J0Y1RyYW5z
Y2VpdmVyOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3Jt
QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWI0YTZhMzdl
NWZiMDNjZTk4MzYzMDZjYmVmY2RmZDlhNWEwZjUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNm
b3JtQmFja2VuZC5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5z
Zm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpzZXRJbnB1dENhbGxiYWNr
KENhbGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgTG9ja2VyIGhvbGRMb2NrIHsgbV9pbnB1dENh
bGxiYWNrTG9jayB9OworICAgIG1faW5wdXRDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOwor
fQorCit2b2lkIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OmNsZWFyVHJhbnNmb3JtYWJs
ZUZyYW1lQ2FsbGJhY2soKQoreworICAgIHNldElucHV0Q2FsbGJhY2soeyB9KTsKK30KKwordm9p
ZCBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpwcm9jZXNzVHJhbnNmb3JtZWRGcmFtZShS
VENSdHBUcmFuc2Zvcm1hYmxlRnJhbWUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRy
YW5zZm9ybUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTU0NDhmYzdkMzI2MThmNzhlN2U4MTVmYzE1
ZTE0OTYxMWIyYjNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0w
LDAgKzEsNjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2Fs
IEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBj
YW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMg
b2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hl
ZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIg
b2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdp
bGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVu
IHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhh
dmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJl
ZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlm
dGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25j
ZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5j
bHVkZSAiUlRDUnRwVHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2Vu
ZCA6IHB1YmxpYyBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kIHsKK3Byb3RlY3RlZDoKKyAgICBHU3Ry
ZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKE1lZGlhVHlwZSwgU2lkZSk7CisgICAgdm9pZCBzZXRJ
bnB1dENhbGxiYWNrKENhbGxiYWNrJiYpOworCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFUeXBlIG1l
ZGlhVHlwZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbWVkaWFUeXBlOyB9CisKK3ByaXZhdGU6
CisgICAgLy8gUlRDUnRwVHJhbnNmb3JtQmFja2VuZAorICAgIHZvaWQgcHJvY2Vzc1RyYW5zZm9y
bWVkRnJhbWUoUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lJikgZmluYWw7CisgICAgdm9pZCBjbGVh
clRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKCkgZmluYWw7CisgICAgU2lkZSBzaWRlKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9zaWRlOyB9CisKKyAgICBNZWRpYVR5cGUgbV9tZWRpYVR5cGU7
CisgICAgU2lkZSBtX3NpZGU7CisKKyAgICBMb2NrIG1faW5wdXRDYWxsYmFja0xvY2s7CisgICAg
Q2FsbGJhY2sgbV9pbnB1dENhbGxiYWNrOworCisgICAgTG9jayBtX291dHB1dENhbGxiYWNrTG9j
azsKK307CisKK2lubGluZSBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJS
dHBUcmFuc2Zvcm1CYWNrZW5kKE1lZGlhVHlwZSBtZWRpYVR5cGUsIFNpZGUgc2lkZSkKKyAgICA6
IG1fbWVkaWFUeXBlKG1lZGlhVHlwZSkKKyAgICAsIG1fc2lkZShzaWRlKQoreworfQorCit9IC8v
IG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJh
bnNwb3J0QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY3OTIxM2QxNzhkZGI1MDliZmEyY2JkNmY2
YzZiYjgzOTBjMjQxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmNwcApA
QCAtMCwwICsxLDk3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBT
LkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9n
aWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaCIK
KworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1
ZGUgIkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
V2ViUlRDVXRpbHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIFJU
Q1NjdHBUcmFuc3BvcnRTdGF0ZSB0b1JUQ1NjdHBUcmFuc3BvcnRTdGF0ZShHc3RXZWJSVENTQ1RQ
VHJhbnNwb3J0U3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2Ug
R1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9ORVc6CisgICAgY2FzZSBHU1RfV0VCUlRD
X1NDVFBfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgIHJldHVybiBSVENTY3Rw
VHJhbnNwb3J0U3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NDVFBfVFJB
TlNQT1JUX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ1NjdHBUcmFuc3BvcnRT
dGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFU
RV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENTY3RwVHJhbnNwb3J0U3RhdGU6OkNsb3NlZDsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitHU3RyZWFt
ZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoR1Jl
ZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiYmIHRyYW5zcG9ydCkKKyAgICA6IG1fYmFja2Vu
ZChXVEZNb3ZlKHRyYW5zcG9ydCkpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7Cit9CisKK0dT
dHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tl
bmQoKQoreworICAgIHVucmVnaXN0ZXJDbGllbnQoKTsKK30KKworVW5pcXVlUmVmPFJUQ0R0bHNU
cmFuc3BvcnRCYWNrZW5kPiBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6ZHRsc1RyYW5z
cG9ydEJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJh
bnNwb3J0OworICAgIGdfb2JqZWN0X2dldChtX2JhY2tlbmQuZ2V0KCksICJ0cmFuc3BvcnQiLCAm
dHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxH
U3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQp
Cit7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAg
Z19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fYmFja2VuZC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUi
LCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkg
eworICAgICAgICBiYWNrZW5kLT5zdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQoKQor
eworICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2JhY2tlbmQuZ2V0
KCksIHRoaXMpOworICAgIG1fY2xpZW50LmNsZWFyKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyU2N0
cFRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX2NsaWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDU0NUUFRyYW5zcG9ydFN0YXRlIHRyYW5z
cG9ydFN0YXRlOworICAgIGd1aW50MTYgbWF4Q2hhbm5lbHM7CisgICAgdWludDY0X3QgbWF4TWVz
c2FnZVNpemU7CisgICAgZ19vYmplY3RfZ2V0KG1fYmFja2VuZC5nZXQoKSwgInN0YXRlIiwgJnRy
YW5zcG9ydFN0YXRlLCAibWF4LW1lc3NhZ2Utc2l6ZSIsICZtYXhNZXNzYWdlU2l6ZSwgIm1heC1j
aGFubmVscyIsICZtYXhDaGFubmVscywgbnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVhZChb
Y2xpZW50ID0gbV9jbGllbnQsIHRyYW5zcG9ydFN0YXRlLCBtYXhDaGFubmVscywgbWF4TWVzc2Fn
ZVNpemVdIHsKKyAgICAgICAgaWYgKCFjbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAg
ICAgICAgY2xpZW50LT5vblN0YXRlQ2hhbmdlZCh0b1JUQ1NjdHBUcmFuc3BvcnRTdGF0ZSh0cmFu
c3BvcnRTdGF0ZSksIG1heE1lc3NhZ2VTaXplLCBtYXhDaGFubmVscyk7CisgICAgfSk7Cit9CisK
K30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3Rw
VHJhbnNwb3J0QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ODBmYzg0OThjMDVjMzk3ZGNiMDZjNzBj
NDMzMDhiMDI5MGYwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oCkBA
IC0wLDAgKzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMu
TC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dp
Y2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEg
b25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisj
aW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1NjdHBUcmFuc3BvcnRC
YWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dz
dFdlYlJUQ1NDVFBUcmFuc3BvcnQgR3N0V2ViUlRDU0NUUFRyYW5zcG9ydDsKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCBmaW5hbCA6
IHB1YmxpYyBSVENTY3RwVHJhbnNwb3J0QmFja2VuZCwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdT
dHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQo
R1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiYmKTsKKyAgICB+R1N0cmVhbWVyU2N0cFRy
YW5zcG9ydEJhY2tlbmQoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgc3RhdGVDaGFuZ2VkKCk7
CisKK3ByaXZhdGUgOgorICAgIC8vIFJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kCisgICAgY29uc3Qg
dm9pZCogYmFja2VuZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQor
ICAgIFVuaXF1ZVJlZjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gZHRsc1RyYW5zcG9ydEJhY2tl
bmQoKSBmaW5hbDsKKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAg
IHZvaWQgdW5yZWdpc3RlckNsaWVudCgpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENT
Q1RQVHJhbnNwb3J0PiBtX2JhY2tlbmQ7CisgICAgV2Vha1B0cjxDbGllbnQ+IG1fY2xpZW50Owor
fTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMp
ICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3Rh
dHNDb2xsZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2YjAwN2IxNTYzY2EwYjgyOWI1ODYwZjkzYTI3
ODI3ODM0NmJmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5jcHAKQEAgLTAsMCAr
MSwyODYgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oIgorCisjaWYgRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1VuaXF1ZVB0
ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5oIgorI2luY2x1ZGUgIkpTUlRD
U3RhdHNSZXBvcnQuaCIKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUg
PGdzdC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4K
KworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVn
KTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcK
KworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1N0YXRz
KFJUQ1N0YXRzUmVwb3J0OjpTdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0
dXJlKQoreworICAgIGRvdWJsZSB0aW1lc3RhbXA7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0
X2RvdWJsZShzdHJ1Y3R1cmUsICJ0aW1lc3RhbXAiLCAmdGltZXN0YW1wKSkKKyAgICAgICAgc3Rh
dHMudGltZXN0YW1wID0gdGltZXN0YW1wOworICAgIHN0YXRzLmlkID0gZ3N0X3N0cnVjdHVyZV9n
ZXRfc3RyaW5nKHN0cnVjdHVyZSwgImlkIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxs
UlRDUlRQU3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlJ0cFN0cmVhbVN0YXRzJiBzdGF0cywg
Y29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZmlsbFJUQ1N0YXRzKHN0YXRz
LCBzdHJ1Y3R1cmUpOworCisgICAgc3RhdHMudHJhbnNwb3J0SWQgPSBnc3Rfc3RydWN0dXJlX2dl
dF9zdHJpbmcoc3RydWN0dXJlLCAidHJhbnNwb3J0LWlkIik7CisgICAgc3RhdHMuY29kZWNJZCA9
IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJjb2RlYy1pZCIpOworCisgICAg
dW5zaWduZWQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJl
LCAic3NyYyIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnNzcmMgPSB2YWx1ZTsKKworICAgIC8v
IEZJWE1FOgorICAgIC8vIHN0YXRzLnRyYW5zcG9ydElkCisgICAgLy8gc3RhdHMuY29kZWNJZAor
ICAgIC8vIHN0YXRzLm1lZGlhVHlwZQorICAgIC8vIHN0YXRzLmtpbmQKK30KKworc3RhdGljIGlu
bGluZSB2b2lkIGZpbGxSVENDb2RlY1N0YXRzKFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzJiBz
dGF0cywgY29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZmlsbFJUQ1N0YXRz
KHN0YXRzLCBzdHJ1Y3R1cmUpOworCisgICAgdW5zaWduZWQgdmFsdWU7CisgICAgaWYgKGdzdF9z
dHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAicGF5bG9hZC10eXBlIiwgJnZhbHVlKSkKKyAg
ICAgICAgc3RhdHMucGF5bG9hZFR5cGUgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9n
ZXRfdWludChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMu
Y2xvY2tSYXRlID0gdmFsdWU7CisKKyAgICAvLyBGSVhNRToKKyAgICAvLyBzdGF0cy5taW1lVHlw
ZSA9CisgICAgLy8gc3RhdHMuY2hhbm5lbHMgPQorICAgIC8vIHN0YXRzLnNkcEZtdHBMaW5lID0K
KyAgICAvLyBzdGF0cy5pbXBsZW1lbnRhdGlvbiA9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBm
aWxsSW5ib3VuZFJUUFN0cmVhbVN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFt
U3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxs
UlRDUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICB1aW50NjRfdCB2YWx1
ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgInBhY2tldHMt
cmVjZWl2ZWQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5wYWNrZXRzUmVjZWl2ZWQgPSB2YWx1
ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgImJ5dGVzLXJl
Y2VpdmVkIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuYnl0ZXNSZWNlaXZlZCA9IHZhbHVlOwor
CisgICAgdW5zaWduZWQgcGFja2V0c0xvc3Q7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3Vp
bnQoc3RydWN0dXJlLCAicGFja2V0cy1sb3N0IiwgJnBhY2tldHNMb3N0KSkKKyAgICAgICAgc3Rh
dHMucGFja2V0c0xvc3QgPSBwYWNrZXRzTG9zdDsKKworICAgIGRvdWJsZSBqaXR0ZXI7CisgICAg
aWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShzdHJ1Y3R1cmUsICJqaXR0ZXIiLCAmaml0dGVy
KSkKKyAgICAgICAgc3RhdHMuaml0dGVyID0gaml0dGVyOworCisgICAgLy8gRklYTUU6CisgICAg
Ly8gc3RhdHMuZnJhY3Rpb25Mb3N0ID0KKyAgICAvLyBzdGF0cy5wYWNrZXRzRGlzY2FyZGVkID0K
KyAgICAvLyBzdGF0cy5wYWNrZXRzUmVwYWlyZWQgPQorICAgIC8vIHN0YXRzLmJ1cnN0UGFja2V0
c0xvc3QgPQorICAgIC8vIHN0YXRzLmJ1cnN0UGFja2V0c0Rpc2NhcmRlZCA9CisgICAgLy8gc3Rh
dHMuYnVyc3RMb3NzQ291bnQgPQorICAgIC8vIHN0YXRzLmJ1cnN0RGlzY2FyZENvdW50ID0KKyAg
ICAvLyBzdGF0cy5idXJzdExvc3NSYXRlID0KKyAgICAvLyBzdGF0cy5idXJzdERpc2NhcmRSYXRl
ID0KKyAgICAvLyBzdGF0cy5nYXBMb3NzUmF0ZSA9CisgICAgLy8gc3RhdHMuZ2FwRGlzY2FyZFJh
dGUgPQorICAgIC8vIHN0YXRzLmZyYW1lc0RlY29kZWQgPQorfQorCitzdGF0aWMgaW5saW5lIHZv
aWQgZmlsbE91dGJvdW5kUlRQU3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRw
U3RyZWFtU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAg
ICBmaWxsUlRDUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICB1aW50NjRf
dCB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgInBh
Y2tldHMtc2VudCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnBhY2tldHNTZW50ID0gdmFsdWU7
CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChzdHJ1Y3R1cmUsICJieXRlcy1zZW50
IiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuYnl0ZXNTZW50ID0gdmFsdWU7CisKKyAgICAvLyBG
SVhNRQorICAgIC8vIHN0YXRzLnRhcmdldEJpdHJhdGUgPQorICAgIC8vIHN0YXRzLmZyYW1lc0Vu
Y29kZWQgPQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1BlZXJDb25uZWN0aW9uU3Rh
dHMoUlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVy
ZSk7CisKKyAgICBpbnQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1
Y3R1cmUsICJkYXRhLWNoYW5uZWxzLW9wZW5lZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLmRh
dGFDaGFubmVsc09wZW5lZCA9IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQo
c3RydWN0dXJlLCAiZGF0YS1jaGFubmVscy1jbG9zZWQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0
cy5kYXRhQ2hhbm5lbHNDbG9zZWQgPSB2YWx1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZp
bGxSVENUcmFuc3BvcnRTdGF0cyhSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHMmIHN0YXRz
LCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3Rh
dHMsIHN0cnVjdHVyZSk7CisKKyAgICAvLyBGSVhNRQorICAgIC8vIHN0YXRzLmJ5dGVzU2VudCA9
CisgICAgLy8gc3RhdHMuYnl0ZXNSZWNlaXZlZCA9CisgICAgLy8gc3RhdHMucnRjcFRyYW5zcG9y
dFN0YXRzSWQgPQorICAgIC8vIHN0YXRzLnNlbGVjdGVkQ2FuZGlkYXRlUGFpcklkID0KKyAgICAv
LyBzdGF0cy5sb2NhbENlcnRpZmljYXRlSWQgPQorICAgIC8vIHN0YXRzLnJlbW90ZUNlcnRpZmlj
YXRlSWQgPQorICAgIC8vIHN0YXRzLmR0bHNTdGF0ZSA9CisgICAgLy8gc3RhdHMudGxzVmVyc2lv
biA9CisgICAgLy8gc3RhdHMuZHRsc0NpcGhlciA9CisgICAgLy8gc3RhdHMuc3J0cENpcGhlciA9
Cit9CisKK3N0YXRpYyBnYm9vbGVhbiBmaWxsUmVwb3J0Q2FsbGJhY2soR1F1YXJrLCBjb25zdCBH
VmFsdWUqIHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBpZiAoIUdTVF9WQUxVRV9I
T0xEU19TVFJVQ1RVUkUodmFsdWUpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIGNvbnN0
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUodmFsdWUp
OworICAgIEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7CisgICAgaWYgKCFnc3Rfc3RydWN0
dXJlX2dldChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VCUlRDX1NUQVRTX1RZUEUsICZz
dGF0c1R5cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIERPTU1hcEFk
YXB0ZXImIHJlcG9ydCA9ICpyZWludGVycHJldF9jYXN0PERPTU1hcEFkYXB0ZXIqPih1c2VyRGF0
YSk7CisKKyAgICBzd2l0Y2ggKHN0YXRzVHlwZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFU
U19DT0RFQzogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6Q29kZWNTdGF0cyBzdGF0czsKKyAg
ICAgICAgZmlsbFJUQ0NvZGVjU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9y
dC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0
YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUDogeworICAgICAgICBSVENTdGF0
c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzIHN0YXRzOworICAgICAgICBmaWxsSW5ib3Vu
ZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElE
TERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVh
bVN0YXRzPj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAg
fQorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19PVVRCT1VORF9SVFA6IHsKKyAgICAgICAgUlRD
U3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxP
dXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQu
c2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRS
dHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUkVNT1RFX0lOQk9VTkRfUlRQOiB7
CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7Cisg
ICAgICAgIGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAg
ICAgIHJlcG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0
OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAg
ICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1JFTU9URV9PVVRC
T1VORF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3Rh
dHMgc3RhdHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1
Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxS
VENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3Zl
KHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RB
VFNfQ1NSQzoKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0YXRzOiBjc3JjIik7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19QRUVSX0NPTk5FQ1RJT046
IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHMgc3RhdHM7Cisg
ICAgICAgIGZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAg
ICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9y
dDo6UGVlckNvbm5lY3Rpb25TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfVFJBTlNQT1JUOiB7
CisgICAgICAgIFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cyBzdGF0czsKKyAgICAgICAg
ZmlsbFJUQ1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQu
c2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0
U3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1NUUkVBTToKKyAgICAgICAgR1NUX0ZJWE1FKCJE
ZXByZWNhdGVkIHN0YXRzOiBzdHJlYW0iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX1NUQVRTX0RBVEFfQ0hBTk5FTDoKKyAgICAgICAgR1NUX0ZJWE1FKCJNaXNzaW5nIGRh
dGEtY2hhbm5lbCBzdGF0cyBzdXBwb3J0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NU
X1dFQlJUQ19TVEFUU19DQU5ESURBVEVfUEFJUjoKKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNf
TE9DQUxfQ0FORElEQVRFOgorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19SRU1PVEVfQ0FORElE
QVRFOgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2FuZGlkYXRlIHN0YXRzIHN1cHBvcnQi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX0NFUlRJRklDQVRF
OgorICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2VydGlmaWNhdGUgc3RhdHMgc3VwcG9ydCIp
OworICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RydWN0
IENhbGxiYWNrSG9sZGVyIHsKKyAgICBHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Q29sbGVjdG9y
Q2FsbGJhY2sgY2FsbGJhY2s7Cit9OworCitXRUJLSVRfREVGSU5FX0FTWU5DX0RBVEFfU1RSVUNU
KENhbGxiYWNrSG9sZGVyKTsKKwordm9pZCBHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Z2V0U3Rh
dHMoQ29sbGVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgR3N0UGFkKiBwYWQpCit7CisgICAgaWYg
KCFtX3dlYnJ0Y0JpbikgeworICAgICAgICBjYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGF1dG8qIGhvbGRlciA9IGNyZWF0ZUNhbGxiYWNrSG9sZGVyKCk7
CisgICAgaG9sZGVyLT5jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIGdfc2lnbmFs
X2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC1zdGF0cyIsIHBhZCwgZ3N0X3By
b21pc2VfbmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlzZSwgZ3Bv
aW50ZXIgdXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9taXNlID0gYWRvcHRHUmVmKHJhd1By
b21pc2UpOworICAgICAgICBhdXRvKiBob2xkZXIgPSBzdGF0aWNfY2FzdDxDYWxsYmFja0hvbGRl
cio+KHVzZXJEYXRhKTsKKyAgICAgICAgaWYgKGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZS5nZXQo
KSkgIT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpIHsKKyAgICAgICAgICAgIGhvbGRlci0+
Y2FsbGJhY2sobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAg
ICAgICBjb25zdCBhdXRvKiBzdGF0cyA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdl
dCgpKTsKKyAgICAgICAgaWYgKCFzdGF0cykgeworICAgICAgICAgICAgaG9sZGVyLT5jYWxsYmFj
ayhudWxscHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlm
IChnc3Rfc3RydWN0dXJlX2hhc19maWVsZChzdGF0cywgImVycm9yIikpIHsKKyAgICAgICAgICAg
IEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVf
Z2V0KHN0YXRzLCAiZXJyb3IiLCBHX1RZUEVfRVJST1IsICZlcnJvci5vdXRQdHIoKSwgbnVsbHB0
cik7CisgICAgICAgICAgICBHU1RfV0FSTklORygiVW5hYmxlIHRvIGdldCBzdGF0cywgZXJyb3I6
ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICAgICAgaG9sZGVyLT5jYWxsYmFjayhudWxs
cHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhbGxPbk1h
aW5UaHJlYWRBbmRXYWl0KFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgaG9sZGVyXSB7Cisg
ICAgICAgICAgICAvLyBIb2xkIGFuIGFkZGl0aW9uYWwgcmVmIHRvIHRoZSBwcm9taXNlIGJlY2F1
c2UgaXQgaXMgYXN5bmNocm9ub3VzbHkgdXNlZCBmcm9tIHRoZSBKUyBiaW5kaW5ncy4KKyAgICAg
ICAgICAgIGhvbGRlci0+Y2FsbGJhY2soUlRDU3RhdHNSZXBvcnQ6OmNyZWF0ZShbcHJvbWlzZSA9
IEdSZWZQdHI8R3N0UHJvbWlzZT4ocHJvbWlzZS5nZXQoKSldKGF1dG8mIG1hcEFkYXB0ZXIpIHsK
KyAgICAgICAgICAgICAgICBjb25zdCBhdXRvKiBzdGF0cyA9IGdzdF9wcm9taXNlX2dldF9yZXBs
eShwcm9taXNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2go
c3RhdHMsIGZpbGxSZXBvcnRDYWxsYmFjaywgJm1hcEFkYXB0ZXIpOworICAgICAgICAgICAgfSkp
OworICAgICAgICB9KTsKKyAgICB9LCBob2xkZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lO
b3RpZnk+KGRlc3Ryb3lDYWxsYmFja0hvbGRlcikpKTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjU0MjczNTUzZjgyNTEzNzI2MWZhOTQ3NmJmZTBhZTE3MmJkMDgxYjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJTdGF0c0NvbGxlY3Rvci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorCisjaW5j
bHVkZSA8d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgor
I2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIFJUQ1N0YXRzUmVwb3J0OworCitjbGFzcyBHU3RyZWFtZXJTdGF0c0NvbGxl
Y3RvciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHU3RyZWFtZXJTdGF0c0NvbGxlY3Rv
ciwgV1RGOjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4geworcHVibGljOgorICAgIHVzaW5nIENv
bGxlY3RvckNhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8UlRDU3RhdHNS
ZXBvcnQ+JiYpPjsKKyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yPiBjcmVh
dGUoKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yKCkpOyB9
CisKKyAgICB2b2lkIHNldEVsZW1lbnQoR3N0RWxlbWVudCogZWxlbWVudCkgeyBtX3dlYnJ0Y0Jp
biA9IGVsZW1lbnQ7IH0KKyAgICB2b2lkIGdldFN0YXRzKENvbGxlY3RvckNhbGxiYWNrJiYsIEdz
dFBhZCopOworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV93ZWJydGNCaW47
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJS
VENVdGlscy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTRiOTc0ZDNhNzJkNmI3YTQ5ZDMyOGMxMmIzYTE0MmIx
YTFlYTNkMQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcApAQCAtMCwwICsxLDQ0NyBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
CisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUg
IkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisKKyNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGUuaCIK
KyNpbmNsdWRlICJSVENJY2VQcm90b2NvbC5oIgorCisjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgor
I2luY2x1ZGUgPG9wZW5zc2wvcnNhLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNs
dWRlIDx3dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYv
U2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9C
YXNlNjQuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+
CisKK0dTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X3dlYnJ0Y191dGlsc19kZWJ1Zyk7
CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX3V0aWxzX2RlYnVnCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBSVENJY2VDb21wb25lbnQgdG9SVENJ
Y2VDb21wb25lbnQoaW50IGNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gY29tcG9uZW50ID09IDEg
PyBSVENJY2VDb21wb25lbnQ6OlJ0cCA6IFJUQ0ljZUNvbXBvbmVudDo6UnRjcDsKK30KKworc3Rh
dGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0ljZVByb3RvY29sPiB0b1JUQ0ljZVByb3RvY29s
KGNvbnN0IFN0cmluZyYgcHJvdG9jb2wpCit7CisgICAgaWYgKHByb3RvY29sLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAocHJvdG9jb2wgPT0gInVkcCIpCisgICAgICAg
IHJldHVybiBSVENJY2VQcm90b2NvbDo6VWRwOworICAgIEFTU0VSVChwcm90b2NvbCA9PSAidGNw
Iik7CisgICAgcmV0dXJuIFJUQ0ljZVByb3RvY29sOjpUY3A7Cit9CisKK3N0YXRpYyBpbmxpbmUg
c3RkOjpvcHRpb25hbDxSVENJY2VUY3BDYW5kaWRhdGVUeXBlPiB0b1JUQ0ljZVRjcENhbmRpZGF0
ZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICBpZiAodHlwZSA9PSAiYWN0aXZlIikKKyAgICAgICAgcmV0
dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU6OkFjdGl2ZTsKKyAgICBpZiAodHlwZSA9PSAicGFz
c2l2ZSIpCisgICAgICAgIHJldHVybiBSVENJY2VUY3BDYW5kaWRhdGVUeXBlOjpQYXNzaXZlOwor
ICAgIEFTU0VSVCh0eXBlID09ICJzbyIpOworICAgIHJldHVybiBSVENJY2VUY3BDYW5kaWRhdGVU
eXBlOjpTbzsKK30KKworc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0ljZUNhbmRpZGF0
ZVR5cGU+IHRvUlRDSWNlQ2FuZGlkYXRlVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAg
aWYgKHR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIGlmICh0eXBlID09
ICJob3N0IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNhbmRpZGF0ZVR5cGU6Okhvc3Q7CisgICAg
aWYgKHR5cGUgPT0gInNyZmx4IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNhbmRpZGF0ZVR5cGU6
OlNyZmx4OworICAgIGlmICh0eXBlID09ICJwcmZseCIpCisgICAgICAgIHJldHVybiBSVENJY2VD
YW5kaWRhdGVUeXBlOjpQcmZseDsKKyAgICBBU1NFUlQodHlwZSA9PSAicmVsYXkiKTsKKyAgICBy
ZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6UmVsYXk7Cit9CisKK1JlZlB0cjxSVENFcnJvcj4g
dG9SVENFcnJvcihHRXJyb3IqIHJ0Y0Vycm9yKQoreworICAgIGF1dG8gZGV0YWlsID0gdG9SVENF
cnJvckRldGFpbFR5cGUoc3RhdGljX2Nhc3Q8R3N0V2ViUlRDRXJyb3I+KHJ0Y0Vycm9yLT5jb2Rl
KSk7CisgICAgaWYgKCFkZXRhaWwpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVy
biBSVENFcnJvcjo6Y3JlYXRlKCpkZXRhaWwsIHJ0Y0Vycm9yLT5tZXNzYWdlKTsKK30KKworc3Rh
dGljIGlubGluZSBkb3VibGUgdG9XZWJSVENCaXRSYXRlUHJpb3JpdHkoUlRDUHJpb3JpdHlUeXBl
IHByaW9yaXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKKyAgICBjYXNlIFJUQ1ByaW9y
aXR5VHlwZTo6VmVyeUxvdzoKKyAgICAgICAgcmV0dXJuIDAuNTsKKyAgICBjYXNlIFJUQ1ByaW9y
aXR5VHlwZTo6TG93OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlw
ZTo6TWVkaXVtOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6
SGlnaDoKKyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGZyb21SVENFbmNvZGlu
Z1BhcmFtZXRlcnMoY29uc3QgUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQor
eworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBydGNQYXJhbWV0ZXJzKGdzdF9zdHJ1Y3R1
cmVfbmV3KCJlbmNvZGluZy1wYXJhbWV0ZXJzIiwgImFjdGl2ZSIsIEdfVFlQRV9CT09MRUFOLCBw
YXJhbWV0ZXJzLmFjdGl2ZSwKKyAgICAgICAgInJpZCIsIEdfVFlQRV9TVFJJTkcsIHBhcmFtZXRl
cnMucmlkLnV0ZjgoKS5kYXRhKCksICJiaXRyYXRlLXByaW9yaXR5IiwgR19UWVBFX0RPVUJMRSwg
dG9XZWJSVENCaXRSYXRlUHJpb3JpdHkocGFyYW1ldGVycy5wcmlvcml0eSksIG51bGxwdHIpKTsK
KworICAgIGlmIChwYXJhbWV0ZXJzLnNzcmMpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0
Y1BhcmFtZXRlcnMuZ2V0KCksICJzc3JjIiwgR19UWVBFX1VMT05HLCBwYXJhbWV0ZXJzLnNzcmMs
IG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMubWF4Qml0cmF0ZSkKKyAgICAgICAgZ3N0
X3N0cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgIm1heC1iaXRyYXRlIiwgR19UWVBF
X1VMT05HLCBwYXJhbWV0ZXJzLm1heEJpdHJhdGUsIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFt
ZXRlcnMubWF4RnJhbWVyYXRlKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0
ZXJzLmdldCgpLCAibWF4LWZyYW1lcmF0ZSIsIEdfVFlQRV9VTE9ORywgcGFyYW1ldGVycy5tYXhG
cmFtZXJhdGUsIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMuc2NhbGVSZXNvbHV0aW9u
RG93bkJ5KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAi
c2NhbGUtcmVzb2x1dGlvbi1kb3duLWJ5IiwgR19UWVBFX0RPVUJMRSwgcGFyYW1ldGVycy5zY2Fs
ZVJlc29sdXRpb25Eb3duQnksIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMubmV0d29y
a1ByaW9yaXR5KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgp
LCAibmV0d29yay1wcmlvcml0eSIsIEdfVFlQRV9JTlQsICpwYXJhbWV0ZXJzLm5ldHdvcmtQcmlv
cml0eSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gcnRjUGFyYW1ldGVyczsKK30KKworc3RhdGlj
IGlubGluZSBSVENQcmlvcml0eVR5cGUgZnJvbVdlYlJUQ0JpdFJhdGVQcmlvcml0eShkb3VibGUg
cHJpb3JpdHkpCit7CisgICAgaWYgKHByaW9yaXR5IDwgMC43KQorICAgICAgICByZXR1cm4gUlRD
UHJpb3JpdHlUeXBlOjpWZXJ5TG93OworICAgIGlmIChwcmlvcml0eSA8IDEuNSkKKyAgICAgICAg
cmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6TG93OworICAgIGlmIChwcmlvcml0eSA8IDIuNSkKKyAg
ICAgICAgcmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6TWVkaXVtOworICAgIHJldHVybiBSVENQcmlv
cml0eVR5cGU6OkhpZ2g7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDUnRwRW5jb2RpbmdQYXJhbWV0
ZXJzIHRvUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSogcnRjUGFyYW1l
dGVycykKK3sKKyAgICBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKworICAg
IHVuc2lnbmVkIHNzcmM7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocnRjUGFyYW1l
dGVycywgInNzcmMiLCAmc3NyYykpCisgICAgICAgIHBhcmFtZXRlcnMuc3NyYyA9IHNzcmM7CisK
KyAgICBnc3Rfc3RydWN0dXJlX2dldChydGNQYXJhbWV0ZXJzLCAiYWN0aXZlIiwgR19UWVBFX0JP
T0xFQU4sICYocGFyYW1ldGVycy5hY3RpdmUpLCBudWxscHRyKTsKKworICAgIHVpbnQ2NF90IG1h
eEJpdHJhdGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChydGNQYXJhbWV0ZXJz
LCAibWF4LWJpdHJhdGUiLCAmbWF4Qml0cmF0ZSkpCisgICAgICAgIHBhcmFtZXRlcnMubWF4Qml0
cmF0ZSA9IG1heEJpdHJhdGU7CisKKyAgICB1aW50NjRfdCBtYXhGcmFtZXJhdGU7CisgICAgaWYg
KGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChydGNQYXJhbWV0ZXJzLCAibWF4LWZyYW1lcmF0ZSIs
ICZtYXhGcmFtZXJhdGUpKQorICAgICAgICBwYXJhbWV0ZXJzLm1heEZyYW1lcmF0ZSA9IG1heEZy
YW1lcmF0ZTsKKworICAgIHBhcmFtZXRlcnMucmlkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5n
KHJ0Y1BhcmFtZXRlcnMsICJyaWQiKTsKKworICAgIGRvdWJsZSBzY2FsZVJlc29sdXRpb25Eb3du
Qnk7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShydGNQYXJhbWV0ZXJzLCAic2Nh
bGUtcmVzb2x1dGlvbi1kb3duLWJ5IiwgJnNjYWxlUmVzb2x1dGlvbkRvd25CeSkpCisgICAgICAg
IHBhcmFtZXRlcnMuc2NhbGVSZXNvbHV0aW9uRG93bkJ5ID0gc2NhbGVSZXNvbHV0aW9uRG93bkJ5
OworCisgICAgZG91YmxlIGJpdHJhdGVQcmlvcml0eTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9n
ZXRfZG91YmxlKHJ0Y1BhcmFtZXRlcnMsICJiaXRyYXRlLXByaW9yaXR5IiwgJmJpdHJhdGVQcmlv
cml0eSkpCisgICAgICAgIHBhcmFtZXRlcnMucHJpb3JpdHkgPSBmcm9tV2ViUlRDQml0UmF0ZVBy
aW9yaXR5KGJpdHJhdGVQcmlvcml0eSk7CisKKyAgICBpbnQgbmV0d29ya1ByaW9yaXR5OworICAg
IGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQocnRjUGFyYW1ldGVycywgIm5ldHdvcmstcHJpb3Jp
dHkiLCAmbmV0d29ya1ByaW9yaXR5KSkKKyAgICAgICAgcGFyYW1ldGVycy5uZXR3b3JrUHJpb3Jp
dHkgPSBzdGF0aWNfY2FzdDxSVENQcmlvcml0eVR5cGU+KG5ldHdvcmtQcmlvcml0eSk7CisKKyAg
ICByZXR1cm4gcGFyYW1ldGVyczsKK30KKworUlRDUnRwU2VuZFBhcmFtZXRlcnMgdG9SVENSdHBT
ZW5kUGFyYW1ldGVycyhjb25zdCBHc3RTdHJ1Y3R1cmUqIHJ0Y1BhcmFtZXRlcnMpCit7CisgICAg
aWYgKCFydGNQYXJhbWV0ZXJzKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgUlRDUnRwU2Vu
ZFBhcmFtZXRlcnMgcGFyYW1ldGVyczsKKyAgICBhdXRvKiBlbmNvZGluZ3MgPSBnc3Rfc3RydWN0
dXJlX2dldF92YWx1ZShydGNQYXJhbWV0ZXJzLCAiZW5jb2RpbmdzIik7CisgICAgdW5zaWduZWQg
c2l6ZSA9IGdzdF92YWx1ZV9saXN0X2dldF9zaXplKGVuY29kaW5ncyk7CisgICAgZm9yICh1bnNp
Z25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBjb25zdCBhdXRvKiB2YWx1ZSA9
IGdzdF92YWx1ZV9saXN0X2dldF92YWx1ZShlbmNvZGluZ3MsIGkpOworICAgICAgICBwYXJhbWV0
ZXJzLmVuY29kaW5ncy5hcHBlbmQodG9SVENFbmNvZGluZ1BhcmFtZXRlcnMoR1NUX1NUUlVDVFVS
RV9DQVNUKHZhbHVlKSkpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBIYW5kbGUgcnRjUGFyYW1l
dGVycy5kZWdyYWRhdGlvbl9wcmVmZXJlbmNlLgorICAgIHJldHVybiBwYXJhbWV0ZXJzOworfQor
CisKK3N0YXRpYyB2b2lkIGVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpCit7CisgICAg
c3RhdGljIHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VG
bGFnLCBbXSB7CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF93ZWJydGNf
dXRpbHNfZGVidWcsICJ3ZWJraXR3ZWJydGN1dGlscyIsIDAsICJXZWJLaXQgV2ViUlRDIHV0aWxp
dGllcyIpOworICAgIH0pOworfQorCitzdGQ6Om9wdGlvbmFsPFJUQ0ljZUNhbmRpZGF0ZTo6Rmll
bGRzPiBwYXJzZUljZUNhbmRpZGF0ZVNEUChjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAgICBlbnN1
cmVEZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQoKTsKKyAgICBHU1RfREVCVUcoIlBhcnNpbmcgSUNF
IENhbmRpZGF0ZTogJXMiLCBzZHAudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKCFzZHAuc3RhcnRz
V2l0aCgiY2FuZGlkYXRlOiIpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgU3RyaW5nIGZv
dW5kYXRpb247CisgICAgdW5zaWduZWQgY29tcG9uZW50SWQgPSAwOworICAgIFN0cmluZyB0cmFu
c3BvcnQ7CisgICAgdW5zaWduZWQgcHJpb3JpdHkgPSAwOworICAgIFN0cmluZyBhZGRyZXNzOwor
ICAgIHVpbnQzMl90IHBvcnQgPSAwOworICAgIFN0cmluZyB0eXBlOworICAgIFN0cmluZyB0Y3B0
eXBlOworICAgIFN0cmluZyByZWxhdGVkQWRkcmVzczsKKyAgICBndWludDE2IHJlbGF0ZWRQb3J0
ID0gMDsKKyAgICBTdHJpbmcgdXNlcm5hbWVGcmFnbWVudDsKKyAgICBhdXRvIHRva2VucyA9IHNk
cC5jb252ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnN1YnN0cmluZygxMCkuc3BsaXQoJyAnKTsKKwor
ICAgIGZvciAoYXV0byBpdCA9IHRva2Vucy5iZWdpbigpOyBpdCAhPSB0b2tlbnMuZW5kKCk7ICsr
aXQpIHsKKyAgICAgICAgYXV0byBpID0gc3RkOjpkaXN0YW5jZSh0b2tlbnMuYmVnaW4oKSwgaXQp
OworICAgICAgICBhdXRvIHRva2VuID0gKml0OworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAg
ICAgY2FzZSAwOgorICAgICAgICAgICAgZm91bmRhdGlvbiA9IHRva2VuOworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcGFy
c2VJbnRlZ2VyPHVuc2lnbmVkPih0b2tlbikpCisgICAgICAgICAgICAgICAgY29tcG9uZW50SWQg
PSAqdmFsdWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB0cmFuc3Bv
cnQgPSB0b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAg
ICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlcjx1bnNpZ25lZD4odG9rZW4pKQorICAg
ICAgICAgICAgICAgIHByaW9yaXR5ID0gKnZhbHVlOworICAgICAgICAgICAgZWxzZQorICAgICAg
ICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0
OgorICAgICAgICAgICAgYWRkcmVzcyA9IHRva2VuOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGNhc2UgNToKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyPHVu
c2lnbmVkPih0b2tlbikpCisgICAgICAgICAgICAgICAgcG9ydCA9ICp2YWx1ZTsKKyAgICAgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoaXQgKyAxID09IHRva2Vucy5lbmQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgICAgICBpdCsrOworICAg
ICAgICAgICAgaWYgKHRva2VuID09ICJ0eXAiKQorICAgICAgICAgICAgICAgIHR5cGUgPSAqaXQ7
CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAicmFkZHIiKQorICAgICAgICAgICAgICAg
IHJlbGF0ZWRBZGRyZXNzID0gKml0OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gPT0gInJw
b3J0IikKKyAgICAgICAgICAgICAgICByZWxhdGVkUG9ydCA9IHBhcnNlSW50ZWdlcjx1bnNpZ25l
ZD4oKml0KS52YWx1ZV9vcigwKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJ0Y3B0
eXBlIikKKyAgICAgICAgICAgICAgICB0Y3B0eXBlID0gKml0OworICAgICAgICAgICAgZWxzZSBp
ZiAodG9rZW4gPT0gInVmcmFnIikKKyAgICAgICAgICAgICAgICB1c2VybmFtZUZyYWdtZW50ID0g
Kml0OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodHlw
ZS5pc0VtcHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBSVENJY2VDYW5kaWRhdGU6
OkZpZWxkcyBmaWVsZHM7CisgICAgZmllbGRzLmZvdW5kYXRpb24gPSBmb3VuZGF0aW9uOworICAg
IGZpZWxkcy5jb21wb25lbnQgPSB0b1JUQ0ljZUNvbXBvbmVudChjb21wb25lbnRJZCk7CisgICAg
ZmllbGRzLnByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgZmllbGRzLnByb3RvY29sID0gdG9SVENJ
Y2VQcm90b2NvbCh0cmFuc3BvcnQpOworICAgIGlmICghYWRkcmVzcy5pc0VtcHR5KCkpIHsKKyAg
ICAgICAgZmllbGRzLmFkZHJlc3MgPSBhZGRyZXNzOworICAgICAgICBmaWVsZHMucG9ydCA9IHBv
cnQ7CisgICAgfQorICAgIGZpZWxkcy50eXBlID0gdG9SVENJY2VDYW5kaWRhdGVUeXBlKHR5cGUp
OworICAgIGZpZWxkcy50Y3BUeXBlID0gdG9SVENJY2VUY3BDYW5kaWRhdGVUeXBlKHRjcHR5cGUp
OworICAgIGlmICghcmVsYXRlZEFkZHJlc3MuaXNFbXB0eSgpKSB7CisgICAgICAgIGZpZWxkcy5y
ZWxhdGVkQWRkcmVzcyA9IHJlbGF0ZWRBZGRyZXNzOworICAgICAgICBmaWVsZHMucmVsYXRlZFBv
cnQgPSByZWxhdGVkUG9ydDsKKyAgICB9CisgICAgZmllbGRzLnVzZXJuYW1lRnJhZ21lbnQgPSB1
c2VybmFtZUZyYWdtZW50OworICAgIHJldHVybiBmaWVsZHM7Cit9CisKK3N0YXRpYyBTdHJpbmcg
eDUwOVNlcmlhbGl6ZShYNTA5KiB4NTA5KQoreworICAgIEJJTyogYmlvID0gQklPX25ldyhCSU9f
c19tZW0oKSk7CisgICAgaWYgKCFiaW8pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRv
IHNjb3BlRXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBCSU9fZnJlZShi
aW8pOworICAgIH0pOworCisgICAgaWYgKCFQRU1fd3JpdGVfYmlvX1g1MDkoYmlvLCB4NTA5KSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgYnVm
ZmVyLnJlc2VydmVDYXBhY2l0eSg0MDk2KTsKKyAgICBpbnQgbGVuZ3RoID0gQklPX3JlYWQoYmlv
LCBidWZmZXIuZGF0YSgpLCA0MDk2KTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKK30KKwor
c3RhdGljIFN0cmluZyBwcml2YXRlS2V5U2VyaWFsaXplKEVWUF9QS0VZKiBwcml2YXRlS2V5KQor
eworICAgIEJJTyogYmlvID0gQklPX25ldyhCSU9fc19tZW0oKSk7CisgICAgaWYgKCFiaW8pCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHNjb3BlRXhpdCA9IFdURjo6bWFrZVNjb3Bl
RXhpdChbJl0geworICAgICAgICBCSU9fZnJlZShiaW8pOworICAgIH0pOworCisgICAgaWYgKCFQ
RU1fd3JpdGVfYmlvX1ByaXZhdGVLZXkoYmlvLCBwcml2YXRlS2V5LCBudWxscHRyLCBudWxscHRy
LCAwLCBudWxscHRyLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3Rv
cjxjaGFyPiBidWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eSg0MDk2KTsKKyAgICBp
bnQgbGVuZ3RoID0gQklPX3JlYWQoYmlvLCBidWZmZXIuZGF0YSgpLCA0MDk2KTsKKyAgICBpZiAo
IWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBTdHJpbmcoYnVmZmVy
LmRhdGEoKSwgbGVuZ3RoKTsKK30KKworc3RkOjpvcHRpb25hbDxSZWY8UlRDQ2VydGlmaWNhdGU+
PiBnZW5lcmF0ZUNlcnRpZmljYXRlKFJlZjxTZWN1cml0eU9yaWdpbj4mJiBvcmlnaW4sIGNvbnN0
IFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJbmZvcm1hdGlvbiYgaW5mbykKK3sK
KyAgICBlbnN1cmVEZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQoKTsKKyAgICBFVlBfUEtFWSogcHJp
dmF0ZUtleSA9IEVWUF9QS0VZX25ldygpOworICAgIGlmICghcHJpdmF0ZUtleSkgeworICAgICAg
ICBHU1RfV0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBwcml2YXRlIGtleSIpOworICAgICAgICBy
ZXR1cm4geyB9OworICAgIH0KKworICAgIGF1dG8gc2NvcGVFeGl0ID0gV1RGOjptYWtlU2NvcGVF
eGl0KFsmXSB7CisgICAgICAgIEVWUF9QS0VZX2ZyZWUocHJpdmF0ZUtleSk7CisgICAgfSk7CisK
KyAgICBzd2l0Y2ggKGluZm8udHlwZSkgeworICAgIGNhc2UgUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uOjpUeXBlOjpFQ0RTQVAyNTY6IHsKKyAgICAgICAgRUNf
S0VZKiBlY0tleSA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShOSURfWDlfNjJfcHJpbWUyNTZ2
MSk7CisgICAgICAgIC8vIEVuc3VyZSBjdXJ2ZSBuYW1lIGlzIGluY2x1ZGVkIHdoZW4gRUMga2V5
IGlzIHNlcmlhbGl6ZWQuCisgICAgICAgIC8vIFdpdGhvdXQgdGhpcyBjYWxsLCBPcGVuU1NMIHZl
cnNpb25zIGJlZm9yZSAxLjEuMCB3aWxsIGNyZWF0ZQorICAgICAgICAvLyBjZXJ0aWZpY2F0ZXMg
dGhhdCBkb24ndCB3b3JrIGZvciBUTFMuCisgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcCBmb3Ig
Qm9yaW5nU1NMIGFuZCBPcGVuU1NMIDEuMS4wKworICAgICAgICBFQ19LRVlfc2V0X2FzbjFfZmxh
ZyhlY0tleSwgT1BFTlNTTF9FQ19OQU1FRF9DVVJWRSk7CisgICAgICAgIGlmICghcHJpdmF0ZUtl
eSB8fCAhZWNLZXkgfHwgIUVDX0tFWV9nZW5lcmF0ZV9rZXkoZWNLZXkpIHx8ICFFVlBfUEtFWV9h
c3NpZ25fRUNfS0VZKHByaXZhdGVLZXksIGVjS2V5KSkgeworICAgICAgICAgICAgRUNfS0VZX2Zy
ZWUoZWNLZXkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRl
SW5mb3JtYXRpb246OlR5cGU6OlJTQVNTQVBLQ1MxdjE1OiB7CisgICAgICAgIFJTQSogcnNhID0g
UlNBX25ldygpOworICAgICAgICBpZiAoIXJzYSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisK
KyAgICAgICAgQklHTlVNKiBleHBvbmVudCA9IEJOX25ldygpOworICAgICAgICBpbnQgcHVibGlj
RXhwb25lbnQgPSBpbmZvLnJzYVBhcmFtZXRlcnMgPyBpbmZvLnJzYVBhcmFtZXRlcnMtPnB1Ymxp
Y0V4cG9uZW50IDogNjU1Mzc7CisgICAgICAgIGF1dG8gbW9kdWx1c0xlbmd0aCA9IGluZm8ucnNh
UGFyYW1ldGVycyA/IGluZm8ucnNhUGFyYW1ldGVycy0+bW9kdWx1c0xlbmd0aCA6IDIwNDg7Cisg
ICAgICAgIGlmICghQk5fc2V0X3dvcmQoZXhwb25lbnQsIHB1YmxpY0V4cG9uZW50KSB8fCAhUlNB
X2dlbmVyYXRlX2tleV9leChyc2EsIG1vZHVsdXNMZW5ndGgsIGV4cG9uZW50LCBudWxscHRyKQor
ICAgICAgICAgICAgfHwgIUVWUF9QS0VZX2Fzc2lnbl9SU0EocHJpdmF0ZUtleSwgcnNhKSkgewor
ICAgICAgICAgICAgUlNBX2ZyZWUocnNhKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAg
ICAgIH0KKyAgICAgICAgQk5fZnJlZShleHBvbmVudCk7CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICB9CisKKyAgICBYNTA5KiB4NTA5ID0gWDUwOV9uZXcoKTsKKyAgICBpZiAoIXg1MDkpIHsK
KyAgICAgICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBjcmVhdGUgY2VydGlmaWNhdGUiKTsKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvIGNlcnRTY29wZUV4aXQgPSBXVEY6
Om1ha2VTY29wZUV4aXQoWyZdIHsKKyAgICAgICAgWDUwOV9mcmVlKHg1MDkpOworICAgIH0pOwor
CisgICAgWDUwOV9zZXRfdmVyc2lvbih4NTA5LCAyKTsKKworICAgIC8vIFNldCBhIHJhbmRvbSA2
NCBiaXQgaW50ZWdlciBhcyBzZXJpYWwgbnVtYmVyLgorICAgIEJJR05VTSogc2VyaWFsTnVtYmVy
ID0gQk5fbmV3KCk7CisgICAgQk5fcHNldWRvX3JhbmQoc2VyaWFsTnVtYmVyLCA2NCwgMCwgMCk7
CisgICAgQVNOMV9JTlRFR0VSKiBhc24xU2VyaWFsTnVtYmVyID0gWDUwOV9nZXRfc2VyaWFsTnVt
YmVyKHg1MDkpOworICAgIEJOX3RvX0FTTjFfSU5URUdFUihzZXJpYWxOdW1iZXIsIGFzbjFTZXJp
YWxOdW1iZXIpOworICAgIEJOX2ZyZWUoc2VyaWFsTnVtYmVyKTsKKworICAgIC8vIFNldCBhIHJh
bmRvbSA4IGJ5dGUgYmFzZTY0IHN0cmluZyBhcyBpc3N1ZXIvc3ViamVjdC4KKyAgICBYNTA5X05B
TUUqIG5hbWUgPSBYNTA5X05BTUVfbmV3KCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcig4
KTsKKyAgICBXVEY6OmNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKGJ1ZmZlci5kYXRhKCks
IGJ1ZmZlci5zaXplKCkpOworICAgIGF1dG8gY29tbW9uTmFtZSA9IGJhc2U2NEVuY29kZVRvU3Ry
aW5nKGJ1ZmZlcik7CisgICAgWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9OSUQobmFtZSwgTklEX2Nv
bW1vbk5hbWUsIE1CU1RSSU5HX0FTQywgKGNvbnN0IGd1Y2hhciopY29tbW9uTmFtZS5hc2NpaSgp
LmRhdGEoKSwgLTEsIC0xLCAwKTsKKyAgICBYNTA5X3NldF9zdWJqZWN0X25hbWUoeDUwOSwgbmFt
ZSk7CisgICAgWDUwOV9zZXRfaXNzdWVyX25hbWUoeDUwOSwgbmFtZSk7CisgICAgWDUwOV9OQU1F
X2ZyZWUobmFtZSk7CisKKyAgICAvLyBGYWxsYmFjayB0byAzMCBkYXlzLCBtYXggb3V0IGF0IG9u
ZSB5ZWFyLgorICAgIHVpbnQ2NF90IGV4cGlyZXMgPSBpbmZvLmV4cGlyZXMudmFsdWVfb3IoMjU5
MjAwMCk7CisgICAgZXhwaXJlcyA9IHN0ZDo6bWluPHVpbnQ2NF90PihleHBpcmVzLCAzMTUzNjAw
MDAwMCk7CisgICAgWDUwOV9nbXRpbWVfYWRqKFg1MDlfZ2V0bV9ub3RCZWZvcmUoeDUwOSksIDAp
OworICAgIFg1MDlfZ210aW1lX2FkaihYNTA5X2dldG1fbm90QWZ0ZXIoeDUwOSksIGV4cGlyZXMp
OworICAgIFg1MDlfc2V0X3B1YmtleSh4NTA5LCBwcml2YXRlS2V5KTsKKworICAgIGlmICghWDUw
OV9zaWduKHg1MDksIHByaXZhdGVLZXksIEVWUF9zaGEyNTYoKSkpIHsKKyAgICAgICAgR1NUX1dB
Uk5JTkcoIkZhaWxlZCB0byBzaWduIGNlcnRpZmljYXRlIik7CisgICAgICAgIHJldHVybiB7IH07
CisgICAgfQorCisgICAgYXV0byBwZW0gPSB4NTA5U2VyaWFsaXplKHg1MDkpOworICAgIEdTVF9E
RUJVRygiR2VuZXJhdGVkIGNlcnRpZmljYXRlIFBFTTogJXMiLCBwZW0uYXNjaWkoKS5kYXRhKCkp
OworICAgIGF1dG8gc2VyaWFsaXplZFByaXZhdGVLZXkgPSBwcml2YXRlS2V5U2VyaWFsaXplKHBy
aXZhdGVLZXkpOworICAgIFZlY3RvcjxSVENDZXJ0aWZpY2F0ZTo6RHRsc0ZpbmdlcnByaW50PiBm
aW5nZXJwcmludHM7CisgICAgLy8gRklYTUU6IEZpbGwgZmluZ2VycHJpbnRzLgorICAgIGF1dG8g
ZXhwaXJhdGlvblRpbWUgPSBXVEY6OldhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgp
ICsgV1RGOjpTZWNvbmRzKGV4cGlyZXMpOworICAgIHJldHVybiBSVENDZXJ0aWZpY2F0ZTo6Y3Jl
YXRlKFdURk1vdmUob3JpZ2luKSwgZXhwaXJhdGlvblRpbWUubWlsbGlzZWNvbmRzKCksIFdURk1v
dmUoZmluZ2VycHJpbnRzKSwgV1RGTW92ZShwZW0pLCBXVEZNb3ZlKHNlcmlhbGl6ZWRQcml2YXRl
S2V5KSk7Cit9CisKK2Jvb2wgc2RwTWVkaWFIYXNBdHRyaWJ1dGVLZXkoY29uc3QgR3N0U0RQTWVk
aWEqIG1lZGlhLCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgdW5zaWduZWQgbGVuID0gZ3N0X3Nk
cF9tZWRpYV9hdHRyaWJ1dGVzX2xlbihtZWRpYSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsg
aSA8IGxlbjsgaSsrKSB7CisgICAgICAgIGNvbnN0IGF1dG8qIGF0dHJpYnV0ZSA9IGdzdF9zZHBf
bWVkaWFfZ2V0X2F0dHJpYnV0ZShtZWRpYSwgaSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKGF0
dHJpYnV0ZS0+a2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisg
ICAgcmV0dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyV2ViUlRDVXRpbHMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI4OGZhNGRi
MDQ3YWZmOGFkYWI4ZDkyOTljNTdiOWVjYzVkYTE4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0
aWxzLmgKQEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIg
SWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
KyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlh
RW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5k
LmgiCisjaW5jbHVkZSAiUlRDQnVuZGxlUG9saWN5LmgiCisjaW5jbHVkZSAiUlRDQ2VydGlmaWNh
dGUuaCIKKyNpbmNsdWRlICJSVENEdGxzVHJhbnNwb3J0LmgiCisjaW5jbHVkZSAiUlRDRXJyb3Iu
aCIKKyNpbmNsdWRlICJSVENJY2VDb25uZWN0aW9uU3RhdGUuaCIKKyNpbmNsdWRlICJSVENJY2VU
cmFuc3BvcnRQb2xpY3kuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRTdGF0ZS5oIgorI2lu
Y2x1ZGUgIlJUQ1J0cFNlbmRQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiUlRDUnRwVHJhbnNjZWl2
ZXJEaXJlY3Rpb24uaCIKKyNpbmNsdWRlICJSVENTZHBUeXBlLmgiCisjaW5jbHVkZSAiUlRDU2ln
bmFsaW5nU3RhdGUuaCIKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUg
PGdzdC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitpbmxpbmUgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gdG9S
VENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlv
biBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEdTVF9X
RUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9OT05FOgorICAgICAgICAvLyDCr1xfKOOD
hClfL8KvCisgICAgICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6SW5hY3Rp
dmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fSU5BQ1RJ
VkU6CisgICAgICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6SW5hY3RpdmU7
CisgICAgY2FzZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fU0VORE9OTFk6
CisgICAgICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6U2VuZG9ubHk7Cisg
ICAgY2FzZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fUkVDVk9OTFk6Cisg
ICAgICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6UmVjdm9ubHk7CisgICAg
Y2FzZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fU0VORFJFQ1Y6CisgICAg
ICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6U2VuZHJlY3Y7CisgICAgfQor
ICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ1J0cFRyYW5z
Y2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKK30KKworaW5saW5lIEdzdFdlYlJUQ1JUUFRyYW5z
Y2VpdmVyRGlyZWN0aW9uIGZyb21SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihSVENSdHBUcmFu
c2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsK
KyAgICBjYXNlIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZToKKyAgICAgICAg
cmV0dXJuIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9JTkFDVElWRTsKKyAg
ICBjYXNlIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kb25seToKKyAgICAgICAgcmV0
dXJuIEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5ET05MWTsKKyAgICBj
YXNlIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpSZWN2b25seToKKyAgICAgICAgcmV0dXJu
IEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9SRUNWT05MWTsKKyAgICBjYXNl
IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kcmVjdjoKKyAgICAgICAgcmV0dXJuIEdT
VF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5EUkVDVjsKKyAgICB9CisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBf
VFJBTlNDRUlWRVJfRElSRUNUSU9OX05PTkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgR3N0V2ViUlRD
U0RQVHlwZSB0b1Nlc3Npb25EZXNjcmlwdGlvblR5cGUoUlRDU2RwVHlwZSBzZHBUeXBlKQorewor
ICAgIHN3aXRjaCAoc2RwVHlwZSkgeworICAgIGNhc2UgUlRDU2RwVHlwZTo6T2ZmZXI6CisgICAg
ICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX09GRkVSOworICAgIGNhc2UgUlRDU2RwVHlw
ZTo6UHJhbnN3ZXI6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX1BSQU5TV0VS
OworICAgIGNhc2UgUlRDU2RwVHlwZTo6QW5zd2VyOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJU
Q19TRFBfVFlQRV9BTlNXRVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpSb2xsYmFjazoKKyAgICAg
ICAgcmV0dXJuIEdTVF9XRUJSVENfU0RQX1RZUEVfUk9MTEJBQ0s7CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJUQ19TRFBfVFlQ
RV9PRkZFUjsKK30KKworc3RhdGljIGlubGluZSBSVENTZHBUeXBlIGZyb21TZXNzaW9uRGVzY3Jp
cHRpb25UeXBlKGNvbnN0IEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24p
Cit7CisgICAgYXV0byB0eXBlID0gZGVzY3JpcHRpb24udHlwZTsKKyAgICBpZiAodHlwZSA9PSBH
U1RfV0VCUlRDX1NEUF9UWVBFX09GRkVSKQorICAgICAgICByZXR1cm4gUlRDU2RwVHlwZTo6T2Zm
ZXI7CisgICAgaWYgKHR5cGUgPT0gR1NUX1dFQlJUQ19TRFBfVFlQRV9BTlNXRVIpCisgICAgICAg
IHJldHVybiBSVENTZHBUeXBlOjpBbnN3ZXI7CisgICAgQVNTRVJUKHR5cGUgPT0gR1NUX1dFQlJU
Q19TRFBfVFlQRV9QUkFOU1dFUik7CisgICAgcmV0dXJuIFJUQ1NkcFR5cGU6OlByYW5zd2VyOwor
fQorCitzdGF0aWMgaW5saW5lIFJUQ1NpZ25hbGluZ1N0YXRlIHRvU2lnbmFsaW5nU3RhdGUoR3N0
V2ViUlRDU2lnbmFsaW5nU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAg
IGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfU1RBQkxFOgorICAgICAgICByZXR1cm4g
UlRDU2lnbmFsaW5nU3RhdGU6OlN0YWJsZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5H
X1NUQVRFX0hBVkVfTE9DQUxfT0ZGRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0
ZTo6SGF2ZUxvY2FsT2ZmZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9I
QVZFX0xPQ0FMX1BSQU5TV0VSOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5nU3RhdGU6Okhh
dmVMb2NhbFByYW5zd2VyOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFW
RV9SRU1PVEVfT0ZGRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJl
bW90ZU9mZmVyOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9SRU1P
VEVfUFJBTlNXRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90
ZVByYW5zd2VyOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfQ0xPU0VEOgor
ICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5nU3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0
ZTo6U3RhYmxlOworfQorCitzdGF0aWMgaW5saW5lIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB0b1JU
Q0ljZUNvbm5lY3Rpb25TdGF0ZShHc3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgc3RhdGUpCit7
CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElP
Tl9TVEFURV9ORVc6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsK
KyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkc6CisgICAg
ICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNoZWNraW5nOworICAgIGNhc2UgR1NU
X1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBS
VENJY2VDb25uZWN0aW9uU3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNF
X0NPTk5FQ1RJT05fU1RBVEVfQ09NUExFVEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVj
dGlvblN0YXRlOjpDb21wbGV0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9O
X1NUQVRFX0ZBSUxFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6RmFp
bGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNU
RUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkRpc2Nvbm5lY3RlZDsK
KyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0xPU0VEOgorICAgICAg
ICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVM
RUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0
YXRlOjpOZXc7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDRHRsc1RyYW5zcG9ydFN0YXRlIHRvUlRD
RHRsc1RyYW5zcG9ydFN0YXRlKEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnRTdGF0ZSBzdGF0ZSkKK3sK
KyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JU
X1NUQVRFX05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6TmV3Owor
ICAgIGNhc2UgR1NUX1dFQlJUQ19EVExTX1RSQU5TUE9SVF9TVEFURV9DT05ORUNUSU5HOgorICAg
ICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpDb25uZWN0aW5nOworICAgIGNhc2Ug
R1NUX1dFQlJUQ19EVExTX1RSQU5TUE9SVF9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVy
biBSVENEdGxzVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENf
RFRMU19UUkFOU1BPUlRfU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5z
cG9ydFN0YXRlOjpDbG9zZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NU
QVRFX0ZBSUxFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6RmFpbGVk
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRp
YyBpbmxpbmUgUlRDSWNlVHJhbnNwb3J0U3RhdGUgdG9SVENJY2VUcmFuc3BvcnRTdGF0ZShHc3RX
ZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgLy8gRklYTUU6IE5vIEdzdFdl
YlJUQ0lDRVRyYW5zcG9ydFN0YXRlID8KKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBH
U1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0lj
ZVRyYW5zcG9ydFN0YXRlOjpOZXc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9O
X1NUQVRFX0NIRUNLSU5HOgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNo
ZWNraW5nOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT05ORUNU
RUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAg
IGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT01QTEVURUQ6CisgICAgICAg
IHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOworICAgIGNhc2UgR1NUX1dF
QlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9GQUlMRUQ6CisgICAgICAgIHJldHVybiBSVENJY2VU
cmFuc3BvcnRTdGF0ZTo6RmFpbGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElP
Tl9TVEFURV9ESVNDT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0
ZTo6RGlzY29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFU
RV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOwor
ICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJU
Q0ljZVRyYW5zcG9ydFN0YXRlOjpOZXc7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlR2F0aGVy
aW5nU3RhdGUgdG9SVENJY2VHYXRoZXJpbmdTdGF0ZShHc3RXZWJSVENJQ0VHYXRoZXJpbmdTdGF0
ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lD
RV9HQVRIRVJJTkdfU1RBVEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDSWNlR2F0aGVyaW5nU3Rh
dGU6Ok5ldzsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9HQVRIRVJJ
Tkc6CisgICAgICAgIHJldHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5nOworICAg
IGNhc2UgR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX0NPTVBMRVRFOgorICAgICAgICBy
ZXR1cm4gUlRDSWNlR2F0aGVyaW5nU3RhdGU6OkNvbXBsZXRlOworICAgIH0KKworICAgIFJFTEVB
U0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR3N0V2ViUlRDQnVu
ZGxlUG9saWN5IGJ1bmRsZVBvbGljeUZyb21Db25maWd1cmF0aW9uKGNvbnN0IE1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQoreworICAgIHN3aXRjaCAoY29uZmlndXJh
dGlvbi5idW5kbGVQb2xpY3kpIHsKKyAgICBjYXNlIFJUQ0J1bmRsZVBvbGljeTo6QmFsYW5jZWQ6
CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfQkFMQU5DRUQ7CisgICAg
Y2FzZSBSVENCdW5kbGVQb2xpY3k6Ok1heENvbXBhdDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJS
VENfQlVORExFX1BPTElDWV9NQVhfQ09NUEFUOworICAgIGNhc2UgUlRDQnVuZGxlUG9saWN5OjpN
YXhCdW5kbGU6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfTUFYX0JV
TkRMRTsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJl
dHVybiBHU1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfTk9ORTsKK30KKworc3RhdGljIGlubGluZSBH
c3RXZWJSVENJQ0VUcmFuc3BvcnRQb2xpY3kgaWNlVHJhbnNwb3J0UG9saWN5RnJvbUNvbmZpZ3Vy
YXRpb24oY29uc3QgTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7
CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkgeworICAgIGNh
c2UgUlRDSWNlVHJhbnNwb3J0UG9saWN5OjpBbGw6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRD
X0lDRV9UUkFOU1BPUlRfUE9MSUNZX0FMTDsKKyAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFBvbGlj
eTo6UmVsYXk6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0lDRV9UUkFOU1BPUlRfUE9MSUNZ
X1JFTEFZOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
cmV0dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lfQUxMOworfQorCitzdGF0aWMg
aW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDRXJyb3JEZXRhaWxUeXBlPiB0b1JUQ0Vycm9yRGV0YWls
VHlwZShHc3RXZWJSVENFcnJvciBjb2RlKQoreworICAgIHN3aXRjaCAoY29kZSkgeworICAgIGNh
c2UgR1NUX1dFQlJUQ19FUlJPUl9EQVRBX0NIQU5ORUxfRkFJTFVSRToKKyAgICAgICAgcmV0dXJu
IFJUQ0Vycm9yRGV0YWlsVHlwZTo6RGF0YUNoYW5uZWxGYWlsdXJlOworICAgIGNhc2UgR1NUX1dF
QlJUQ19FUlJPUl9EVExTX0ZBSUxVUkU6CisgICAgICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5
cGU6OkR0bHNGYWlsdXJlOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9GSU5HRVJQUklOVF9G
QUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRhaWxUeXBlOjpGaW5nZXJwcmludEZh
aWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX1NDVFBfRkFJTFVSRToKKyAgICAgICAg
cmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6U2N0cEZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0VSUk9SX1NEUF9TWU5UQVhfRVJST1I6CisgICAgICAgIHJldHVybiBSVENFcnJvckRldGFp
bFR5cGU6OlNkcFN5bnRheEVycm9yOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9IQVJEV0FS
RV9FTkNPREVSX05PVF9BVkFJTEFCTEU6CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0VOQ09E
RVJfRVJST1I6CisgICAgICAgIC8vIEZJWE1FCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJu
IHsgfTsKKyAgICB9OworfQorCitSZWZQdHI8UlRDRXJyb3I+IHRvUlRDRXJyb3IoR0Vycm9yKik7
CisKK0dVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBmcm9tUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNv
bnN0IFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycyYpOworUlRDUnRwU2VuZFBhcmFtZXRlcnMgdG9S
VENSdHBTZW5kUGFyYW1ldGVycyhjb25zdCBHc3RTdHJ1Y3R1cmUqKTsKKworc3RkOjpvcHRpb25h
bDxSZWY8UlRDQ2VydGlmaWNhdGU+PiBnZW5lcmF0ZUNlcnRpZmljYXRlKFJlZjxTZWN1cml0eU9y
aWdpbj4mJiwgY29uc3QgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0
aW9uJik7CisKK2Jvb2wgc2RwTWVkaWFIYXNBdHRyaWJ1dGVLZXkoY29uc3QgR3N0U0RQTWVkaWEq
LCBjb25zdCBjaGFyKiBrZXkpOworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dT
dHJlYW1lci5jbWFrZQppbmRleCBiM2RjY2NiZDk3NGM4Nzc3MWZhY2Y1OWEzOTZkNGY0MDgxNjBj
YzU5Li43NGY1YjYxOWJmMTIxZDhiNTQxYjJiOTNjOWI5MTNiOWUwMWY2YjNkIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0xLDUgKzEsNiBAQAogaWYgKEVOQUJM
RV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJ
VkFURV9JTkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lciIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lciIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9tc2UiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvZW1lIgpAQCAtNyw3ICs4LDIzIEBAIGlmIChFTkFCTEVfVklERU8g
T1IgRU5BQkxFX1dFQl9BVURJTykKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NP
VVJDRVMKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0
YUNoYW5uZWxIYW5kbGVyLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAg
ICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5j
cHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHAK
KyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVy
QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcAorICAgICAg
ICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNr
ZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJT
Y3RwVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcAorCiAgICAgICAgIE1vZHVs
ZXMvd2ViYXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKwogICAgICAg
ICBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtH
U3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVv
U2lua0dTdHJlYW1lci5jcHAKQEAgLTY1LDYgKzgyLDcgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBF
TkFCTEVfV0VCX0FVRElPKQogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcAogICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCisgICAgICAg
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2Vu
ZC5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRp
c3BsYXlDYXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAogICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNw
cApAQCAtNzIsNyArOTAsMTMgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElP
KQogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9F
bmNvZGVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1Jl
YWx0aW1lQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAg
ICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIu
Y3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlh
U291cmNlQ2VudGVyR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAg
ICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291
cmNlR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcAogICAgICkKIAogICAgIGxp
c3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwpAQCAtMTYyLDcgKzE4
Niw3IEBAIGlmIChFTkFCTEVfVklERU8pCiAgICAgICAgICkKICAgICBlbmRpZiAoKQogCi0gICAg
aWYgKEVOQUJMRV9NRURJQV9TVFJFQU0gT1IgRU5BQkxFX1dFQl9SVEMpCisgICAgaWYgKFVTRV9M
SUJXRUJSVEMpCiAgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElS
RUNUT1JJRVMKICAgICAgICAgICAgICR7R1NUUkVBTUVSX0NPREVDUEFSU0VSU19JTkNMVURFX0RJ
UlN9CiAgICAgICAgICkKQEAgLTE3MSw2ICsxOTUsMjEgQEAgaWYgKEVOQUJMRV9WSURFTykKICAg
ICAgICAgICAgICAgICAke0dTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfTElCUkFSSUVTfQogICAgICAg
ICAgICAgKQogICAgICAgICBlbmRpZiAoKQorICAgIGVsc2VpZiAoVVNFX0dTVFJFQU1FUl9XRUJS
VEMpCisgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJ
RVMKKyAgICAgICAgICAgICR7R1NUUkVBTUVSX1JUUF9JTkNMVURFX0RJUlN9CisgICAgICAgICAg
ICAke0dTVFJFQU1FUl9TRFBfSU5DTFVERV9ESVJTfQorICAgICAgICAgICAgJHtHU1RSRUFNRVJf
V0VCUlRDX0lOQ0xVREVfRElSU30KKyAgICAgICAgKQorICAgICAgICBpZiAoTk9UIFVTRV9HU1RS
RUFNRVJfRlVMTCkKKyAgICAgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCisg
ICAgICAgICAgICAgICAgJHtHU1RSRUFNRVJfUlRQX0xJQlJBUklFU30KKyAgICAgICAgICAgICAg
ICAke0dTVFJFQU1FUl9TRFBfTElCUkFSSUVTfQorICAgICAgICAgICAgICAgICR7R1NUUkVBTUVS
X1dFQlJUQ19MSUJSQVJJRVN9CisgICAgICAgICAgICApCisgICAgICAgIGVuZGlmICgpCisKKyAg
ICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgT3BlblNTTDo6Q3J5cHRvKQogICAg
IGVuZGlmICgpCiBlbmRpZiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdT
dHJlYW1lci5jcHAKaW5kZXggYjRkNWY2NzAzZTkyOWVkZjE3ZjEwOWVmNjQ4MTMwYWNlMDM4Y2Fj
NC4uYTFhY2U5NzYxZGEyY2UyYWFkNDY0MjFiOWJlNmRmOGQzYTllNTQ5MSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlk
ZXJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJl
YW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcApAQCAtMTAwLDEwICsxMDAsNTgg
QEAgQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJl
YW1lcihNZWRpYVN0cmVhbVRyYWNrUHJpdmEKIAogICAgIG1fYXVkaW9TaW5rQmluID0gZ3N0X3Bh
cnNlX2Jpbl9mcm9tX2Rlc2NyaXB0aW9uKCJ0ZWUgbmFtZT1hdWRpb1RlZSIsIHRydWUsIG51bGxw
dHIpOwogCi0gICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQo
KSksIHNyYywgbV9hdWRpb1NpbmtCaW4uZ2V0KCksIG51bGxwdHIpOwotICAgIGdzdF9lbGVtZW50
X2xpbmsoc3JjLCBtX2F1ZGlvU2lua0Jpbi5nZXQoKSk7CisgICAgYXV0byogZGVjb2RlYmluID0g
bWFrZUdTdHJlYW1lckVsZW1lbnQoImRlY29kZWJpbjMiLCBudWxscHRyKTsKKyAgICBnX3NpZ25h
bF9jb25uZWN0X3N3YXBwZWQoZGVjb2RlYmluLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSygrW10o
QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lciogcHJvdmlkZXIsIEdzdFBhZCogcGFkKSB7Cisg
ICAgICAgIGF1dG8gcGFkQ2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX3F1ZXJ5X2NhcHMocGFkLCBu
dWxscHRyKSk7CisgICAgICAgIGJvb2wgaXNBdWRpbyA9IGRvQ2Fwc0hhdmVUeXBlKHBhZENhcHMu
Z2V0KCksICJhdWRpbyIpOworICAgICAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE4
LCAwKSkKKyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQXVkaW8pOworICAgICAgICBlbHNl
IGlmICghaXNBdWRpbykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHNpbmtQ
YWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJvdmlkZXItPm1fYXVk
aW9TaW5rQmluLmdldCgpLCAic2luayIpKTsKKyAgICAgICAgZ3N0X3BhZF9saW5rKHBhZCwgc2lu
a1BhZC5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQo
cHJvdmlkZXItPm1fYXVkaW9TaW5rQmluLmdldCgpKTsKKyAgICB9KSwgdGhpcyk7CisKKyAgICBn
c3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgc3JjLCBkZWNv
ZGViaW4sIG1fYXVkaW9TaW5rQmluLmdldCgpLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9s
aW5rKHNyYywgZGVjb2RlYmluKTsKKworICAgIGF1dG8gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBl
bGluZV9nZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOworICAgIEFTU0VS
VChidXMpOworCisgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgW10oR3N0
QnVzKiwgR3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IEdzdEJ1c1N5
bmNSZXBseSB7CisgICAgICAgIGF1dG8qIGRlY29kZWJpbiA9IEdTVF9FTEVNRU5UX0NBU1QodXNl
ckRhdGEpOworICAgICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSAhPSBHU1RfTUVT
U0FHRV9TVFJFQU1fQ09MTEVDVElPTiB8fCBHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkgIT0gR1NU
X09CSkVDVF9DQVNUKGRlY29kZWJpbikpIHsKKyAgICAgICAgICAgIGdzdF9tZXNzYWdlX3VucmVm
KG1lc3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAgICAgICAgfQor
CisgICAgICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKKyAgICAg
ICAgZ3N0X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb24obWVzc2FnZSwgJmNvbGxlY3Rp
b24ub3V0UHRyKCkpOworICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAgIGdz
dF9tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJP
UDsKKyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBnc3Rfc3RyZWFtX2NvbGxl
Y3Rpb25fZ2V0X3NpemUoY29sbGVjdGlvbi5nZXQoKSk7CisgICAgICAgIEdMaXN0KiBzdHJlYW1z
ID0gbnVsbHB0cjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykg
eworICAgICAgICAgICAgYXV0byogc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9z
dHJlYW0oY29sbGVjdGlvbi5nZXQoKSwgaSk7CisgICAgICAgICAgICBhdXRvIHN0cmVhbVR5cGUg
PSBnc3Rfc3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0pOworICAgICAgICAgICAgaWYgKHN0
cmVhbVR5cGUgPT0gR1NUX1NUUkVBTV9UWVBFX0FVRElPKSB7CisgICAgICAgICAgICAgICAgc3Ry
ZWFtcyA9IGdfbGlzdF9hcHBlbmQoc3RyZWFtcywgY29uc3RfY2FzdDxjaGFyKj4oZ3N0X3N0cmVh
bV9nZXRfc3RyZWFtX2lkKHN0cmVhbSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RyZWFtcykgeworICAgICAgICAgICAg
Z3N0X2VsZW1lbnRfc2VuZF9ldmVudChkZWNvZGViaW4sIGdzdF9ldmVudF9uZXdfc2VsZWN0X3N0
cmVhbXMoc3RyZWFtcykpOworICAgICAgICAgICAgZ19saXN0X2ZyZWUoc3RyZWFtcyk7CisgICAg
ICAgIH0KIAotICAgIGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5n
ZXQoKSk7CisgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgICAgICByZXR1
cm4gR1NUX0JVU19EUk9QOworICAgIH0sIGdzdF9vYmplY3RfcmVmKGRlY29kZWJpbiksIGdzdF9v
YmplY3RfdW5yZWYpOwogfQogI2VuZGlmCiAKQEAgLTEyMCwxMCArMTY4LDggQEAgQXVkaW9Tb3Vy
Y2VQcm92aWRlckdTdHJlYW1lcjo6fkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIoKQogCiAg
ICAgc2V0Q2xpZW50KG51bGxwdHIpOwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgaWYg
KG1fcGlwZWxpbmUpIHsKLSAgICAgICAgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFj
ayhtX3BpcGVsaW5lLmdldCgpKTsKKyAgICBpZiAobV9waXBlbGluZSkKICAgICAgICAgZ3N0X2Vs
ZW1lbnRfc2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICB9
CiAjZW5kaWYKIH0KIApAQCAtMzQ1LDcgKzM5MSw2IEBAIHZvaWQgQXVkaW9Tb3VyY2VQcm92aWRl
ckdTdHJlYW1lcjo6aGFuZGxlTmV3RGVpbnRlcmxlYXZlUGFkKEdzdFBhZCogcGFkKQogCiAgICAg
R1F1YXJrIHF1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoInBlZXIiKTsKICAgICBn
X29iamVjdF9zZXRfcWRhdGEoR19PQkpFQ1QocGFkKSwgcXVhcmssIHNpbmtQYWQuZ2V0KCkpOwot
CiAgICAgbV9kZWludGVybGVhdmVTb3VyY2VQYWRzKys7CiAgICAgR1F1YXJrIGNoYW5uZWxJZFF1
YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoImNoYW5uZWwtaWQiKTsKICAgICBnX29i
amVjdF9zZXRfcWRhdGEoR19PQkpFQ1Qoc2luayksIGNoYW5uZWxJZFF1YXJrLCBHSU5UX1RPX1BP
SU5URVIobV9kZWludGVybGVhdmVTb3VyY2VQYWRzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1l
ckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaAppbmRleCA2ZjI4ODcyYWZiMTE3NmU1MTNkMmJkZjU1
YTYyMjFkNGY2ZmIwYWU3Li5kZDMxM2IzMTQyNDA2Y2FmNTc5NGVhYzdjYzJhZjhkNjRlNTQ1YWEy
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0
cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2F1ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKQEAg
LTMyLDE5ICszMiwxNiBAQCBjbGFzcyBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGZp
bmFsOiBwdWJsaWMgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7CiBwdWJsaWM6CiAgICAgR1N0cmVh
bWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbihHc3RBdWRpb0luZm8mJiBpbmZvKQogICAgICAgICA6
IG1faW5mbyhXVEZNb3ZlKGluZm8pKQotICAgICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1
ZGlvX2luZm9fdG9fY2FwcygmbV9pbmZvKSkpCiAgICAgewogICAgIH0KIAogICAgIEdTdHJlYW1l
ckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24oY29uc3QgR3N0QXVkaW9JbmZvJiBpbmZvKQogICAgICAg
ICA6IG1faW5mbyhpbmZvKQotICAgICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2lu
Zm9fdG9fY2FwcygmbV9pbmZvKSkpCiAgICAgewogICAgIH0KIAogICAgIEdTdHJlYW1lckF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24oR3N0QXVkaW9JbmZvKiBpbmZvKQogICAgICAgICA6IG1faW5mbygq
aW5mbykKLSAgICAgICAgLCBtX2NhcHMoYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMo
Jm1faW5mbykpKQogICAgIHsKICAgICB9CiAKQEAgLTk5LDcgKzk2LDEyIEBAIHB1YmxpYzoKICAg
ICBib29sIG9wZXJhdG9yPT0oY29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYg
b3RoZXIpIHsgcmV0dXJuIGdzdF9hdWRpb19pbmZvX2lzX2VxdWFsKCZtX2luZm8sICZvdGhlci5t
X2luZm8pOyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdTdHJlYW1lckF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24mIG90aGVyKSB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsgfQogCi0g
ICAgY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fY2Fwczsg
fQorICAgIGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGNhcHMoKQorICAgIHsKKyAgICAgICAgaWYg
KCFtX2NhcHMpCisgICAgICAgICAgICBtX2NhcHMgPSBhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9f
dG9fY2FwcygmbV9pbmZvKSk7CisgICAgICAgIHJldHVybiBtX2NhcHM7CisgICAgfQogICAgIGNv
bnN0IEdzdEF1ZGlvSW5mbyYgZ2V0SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQogCiBw
cml2YXRlOgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCmluZGV4IDMxMGJlYWQ3MmE0OGNi
ZGIzMzBiNDUzN2VlMDEwNjJhYTdiMmQwMDguLmQxNmI3YzBiMDU5NTRhZTZmMDdlNzM5M2M2MWVk
ZmMxZWE1MzgzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKQEAgLTI3LDYgKzI3
LDEyIEBACiAjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3RlZ2xpbWFnZS5oPgogI2VuZGlmCiAKKyNp
ZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNp
bmNsdWRlIDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJ
CisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RNaW5p
T2JqZWN0PiBhZG9wdEdSZWYoR3N0TWluaU9iamVjdCogcHRyKQpAQCAtNTg0LDEzICs1OTAsMTUw
IEBAIEdzdEVuY29kaW5nUHJvZmlsZSogcmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVu
Y29kaW5nUHJvZmlsZSogcHRyKQogICAgIHJldHVybiBwdHI7CiB9CiAKLXRlbXBsYXRlIDw+Cit0
ZW1wbGF0ZTw+CiB2b2lkIGRlcmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5n
UHJvZmlsZSogcHRyKQogewogICAgIGlmIChwdHIpCiAgICAgICAgIGdzdF9lbmNvZGluZ19wcm9m
aWxlX3VucmVmKHB0cik7CiB9CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwordGVtcGxh
dGUgPD4gR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JU
UFJlY2VpdmVyKiBwdHIpCit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2
ZXI+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQUmVj
ZWl2ZXIqIHJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVy
KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVD
VChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZH
UHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPihHc3RXZWJSVENSVFBSZWNlaXZlciogcHRyKQorewor
ICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KKwordGVtcGxh
dGUgPD4gR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBT
ZW5kZXIqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+KHB0
ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQU2VuZGVyKiBy
ZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7Cisg
ICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKwor
ICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJU
Q1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAg
ICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdz
dFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIq
IHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4ocHRy
LCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBUcmFuc2NlaXZl
ciogcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2
ZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JK
RUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJl
ZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBw
dHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQor
Cit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBhZG9wdEdSZWYoR3N0
V2ViUlRDRGF0YUNoYW5uZWwqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENE
YXRhQ2hhbm5lbD4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJS
VENEYXRhQ2hhbm5lbCogcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0
YUNoYW5uZWwqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX29iamVjdF9yZWYoR19P
QkpFQ1QocHRyKSk7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRl
cmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHB0cikK
K3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1w
bGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJS
VENEVExTVHJhbnNwb3J0KiBwdHIpCit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDRFRM
U1RyYW5zcG9ydD4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJS
VENEVExTVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJU
Q0RUTFNUcmFuc3BvcnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0
X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUg
PD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1Ry
YW5zcG9ydCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYo
cHRyKTsKK30KKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IGFk
b3B0R1JlZihHc3RXZWJSVENJQ0VUcmFuc3BvcnQqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0
cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxh
dGUgPD4gR3N0V2ViUlRDSUNFVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9y
dD4oR3N0V2ViUlRDSUNFVHJhbnNwb3J0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAg
Z3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisK
K3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2Vi
UlRDSUNFVHJhbnNwb3J0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVj
dF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0UHJvbWlzZT4gYWRvcHRH
UmVmKEdzdFByb21pc2UqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RQcm9taXNlPihw
dHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlPD4gR3N0UHJvbWlzZSogcmVmR1B0cjxH
c3RQcm9taXNlPihHc3RQcm9taXNlKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0
X3Byb21pc2VfcmVmKHB0cik7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZTw+IHZv
aWQgZGVyZWZHUHRyPEdzdFByb21pc2U+KEdzdFByb21pc2UqIHB0cikKK3sKKyAgICBpZiAocHRy
KQorICAgICAgICBnc3RfcHJvbWlzZV91bnJlZihwdHIpOworfQorCisjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdT
VFJFQU1FUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCmluZGV4IDdhMGI1YTExZGRmYTgxNjcw
OTY4OGU4MTM2NmRiN2I1YjM1ZDNhNDEuLmY5ZGVhZWRmNTBmZWI5NTM4OGQyNWY3MzBkYmRjNjgy
ZmM0ZWFhMWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaApAQCAtMzQsNiArMzQsMTYgQEAg
dHlwZWRlZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7CiB0eXBlZGVmIHN0cnVj
dCBfR3N0RUdMSW1hZ2UgR3N0RUdMSW1hZ2U7CiAjZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQordHlwZWRlZiBzdHJ1Y3QgX0dzdFByb21pc2UgR3N0UHJvbWlzZTsKK3R5cGVkZWYg
c3RydWN0IF9Hc3RXZWJSVENEVExTVHJhbnNwb3J0IEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ7Cit0
eXBlZGVmIHN0cnVjdCBfR3N0V2ViUlRDRGF0YUNoYW5uZWwgR3N0V2ViUlRDRGF0YUNoYW5uZWw7
Cit0eXBlZGVmIHN0cnVjdCBfR3N0V2ViUlRDSUNFVHJhbnNwb3J0IEdzdFdlYlJUQ0lDRVRyYW5z
cG9ydDsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENSVFBSZWNlaXZlciBHc3RXZWJSVENSVFBS
ZWNlaXZlcjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENSVFBTZW5kZXIgR3N0V2ViUlRDUlRQ
U2VuZGVyOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyIEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyOworI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+
IEdSZWZQdHI8R3N0UGx1Z2luPiBhZG9wdEdSZWYoR3N0UGx1Z2luKiBwdHIpOwpAQCAtMTUxLDYg
KzE2MSwzNiBAQCB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0RW5jb2RpbmdQcm9maWxlPiBhZG9wdEdS
ZWYoR3N0RW5jb2RpbmdQcm9maWxlKik7CiB0ZW1wbGF0ZTw+IEdzdEVuY29kaW5nUHJvZmlsZSog
cmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmlsZSopOwogdGVtcGxh
dGU8PiB2b2lkIGRlcmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmls
ZSopOwogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdz
dFdlYlJUQ1JUUFJlY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQUmVjZWl2ZXIqKTsKK3Rl
bXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiByZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2Vp
dmVyPihHc3RXZWJSVENSVFBSZWNlaXZlciopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8
R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKik7CisKK3RlbXBsYXRl
IDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQU2Vu
ZGVyKik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBTZW5kZXIqIHJlZkdQdHI8R3N0V2ViUlRD
UlRQU2VuZGVyPihHc3RXZWJSVENSVFBTZW5kZXIqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZH
UHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKik7CisKK3RlbXBsYXRl
IDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IGFkb3B0R1JlZihHc3RXZWJSVENS
VFBUcmFuc2NlaXZlciopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHJl
ZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKik7
Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0
V2ViUlRDUlRQVHJhbnNjZWl2ZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENE
YXRhQ2hhbm5lbD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RhdGFDaGFubmVsKik7Cit0ZW1wbGF0ZSA8
PiBHc3RXZWJSVENEYXRhQ2hhbm5lbCogcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0
V2ViUlRDRGF0YUNoYW5uZWwqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJU
Q0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCopOworCit0ZW1wbGF0ZSA8PiBHUmVm
UHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJSVENEVExTVHJhbnNw
b3J0Kik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEVExTVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdl
YlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+
IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFu
c3BvcnQqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IGFk
b3B0R1JlZihHc3RXZWJSVENJQ0VUcmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0lD
RVRyYW5zcG9ydCogcmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KEdzdFdlYlJUQ0lDRVRy
YW5zcG9ydCopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNw
b3J0PihHc3RXZWJSVENJQ0VUcmFuc3BvcnQqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RQ
cm9taXNlPiBhZG9wdEdSZWYoR3N0UHJvbWlzZSopOwordGVtcGxhdGUgPD4gR3N0UHJvbWlzZSog
cmVmR1B0cjxHc3RQcm9taXNlPihHc3RQcm9taXNlKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVm
R1B0cjxHc3RQcm9taXNlPihHc3RQcm9taXNlKik7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2Ug
V1RGCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNw
cAppbmRleCBlMGE2ZjkwZDdjN2YzMzA5MjJjYjNmZGE1ZmI1YTc3OGUyNThiZjk4Li45Y2ExYzU4
MmI5OWYwNGNmN2Y4ZGM2NjQ5NGNiYjZjNzg0MTAwZWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29t
bW9uLmNwcApAQCAtMTg4LDYgKzE4OCw5IEBAIGNvbnN0IGNoYXIqIGNhcHNNZWRpYVR5cGUoY29u
c3QgR3N0Q2FwcyogY2FwcykKICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1
cmUsICJhcHBsaWNhdGlvbi94LWNlbmMiKSB8fCBnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVj
dHVyZSwgImFwcGxpY2F0aW9uL3gtY2JjcyIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3Ry
dWN0dXJlLCAiYXBwbGljYXRpb24veC13ZWJtLWVuYyIpKQogICAgICAgICByZXR1cm4gZ3N0X3N0
cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKTsKICNl
bmRpZgorICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0
aW9uL3gtcnRwIikpCisgICAgICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3Ry
dWN0dXJlLCAibWVkaWEiKTsKKwogICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0
cnVjdHVyZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oCmluZGV4IGJmNzRl
Y2YwMmNjMjJmNjA2ZWJjYjlmZTg1YzAzNGIyNmM0MDY0NDEuLmU1MjQ3MWNhN2VhNjJhMzE1OGM1
MjMzMzYwNjM1MmVjNjMxNTJhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaApA
QCAtMzAsNiArMzAsMTIgQEAKICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNsdWRl
IDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CiAKKyNpZiBkZWZpbmVkKEJVSUxESU5HX1dlYkNvcmUp
ICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQor
I2luY2x1ZGUgPGdzdC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9B
UEkKKyNlbmRpZgorCiAjaWYgVVNFKFdQRV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRikKICNp
bmNsdWRlIDx3cGUvZXh0ZW5zaW9ucy92aWRlby1wbGFuZS1kaXNwbGF5LWRtYWJ1Zi5oPgogI2Vu
ZGlmCkBAIC00OSw2ICs1NSwxMCBAQCBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RCeXRlUmVh
ZGVyLCBnc3RfYnl0ZV9yZWFkZXJfZnJlZSkKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdFZp
ZGVvQ29udmVydGVyLCBnc3RfdmlkZW9fY29udmVydGVyX2ZyZWUpCiBXVEZfREVGSU5FX0dQVFJf
REVMRVRFUihHc3RBdWRpb0NvbnZlcnRlciwgZ3N0X2F1ZGlvX2NvbnZlcnRlcl9mcmVlKQogCisj
aWYgZGVmaW5lZChCVUlMRElOR19XZWJDb3JlKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKK1dU
Rl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiwgZ3N0X3dl
YnJ0Y19zZXNzaW9uX2Rlc2NyaXB0aW9uX2ZyZWUpCisjZW5kaWYKKwogI2lmIFVTRShXUEVfVklE
RU9fUExBTkVfRElTUExBWV9ETUFCVUYpCiBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihzdHJ1Y3Qg
d3BlX3ZpZGVvX3BsYW5lX2Rpc3BsYXlfZG1hYnVmX3NvdXJjZSwgd3BlX3ZpZGVvX3BsYW5lX2Rp
c3BsYXlfZG1hYnVmX3NvdXJjZV9kZXN0cm95KQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJp
dmF0ZS5jcHAKaW5kZXggZWMzMmJhODVjY2Y4NDcyNTM4MzUyNjgxODU5YzQwNzdlYmQ0OTkyZC4u
MTgyNjZmMTIyYzRiMTg2NzRhMWY3OWJhYjkxZjA1NDk2N2ZjYjcwMCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUu
Y3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
VHJhY2tQcml2YXRlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0Ep
CiAjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5oIgot
I2VsaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJ
QldFQlJUQykgJiYgVVNFKEdTVFJFQU1FUikKKyNlbGlmIEVOQUJMRShXRUJfQVVESU8pICYmIEVO
QUJMRShNRURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiQXVkaW9Tb3Vy
Y2VQcm92aWRlckdTdHJlYW1lci5oIgogI2Vsc2UKICNpbmNsdWRlICJXZWJBdWRpb1NvdXJjZVBy
b3ZpZGVyLmgiCkBAIC0xOTksNyArMTk5LDcgQEAgUmVmUHRyPFdlYkF1ZGlvU291cmNlUHJvdmlk
ZXI+IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGVBdWRpb1NvdXJjZVByb3ZpZGUKIAog
I2lmIFBMQVRGT1JNKENPQ09BKQogICAgIHJldHVybiBNZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3Vy
Y2VQcm92aWRlckNvY29hOjpjcmVhdGUoKnRoaXMpOwotI2VsaWYgVVNFKExJQldFQlJUQykgJiYg
VVNFKEdTVFJFQU1FUikKKyNlbGlmIFVTRShHU1RSRUFNRVIpCiAgICAgcmV0dXJuIEF1ZGlvU291
cmNlUHJvdmlkZXJHU3RyZWFtZXI6OmNyZWF0ZSgqdGhpcyk7CiAjZWxzZQogICAgIHJldHVybiBu
dWxscHRyOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCmlu
ZGV4IDI2ZWU0MjYzYjlkYjg3ODFkYmFlNjFlMWEzMDEyZWY3ZGM3MDk3MjUuLjM1ZTY1YzBlYjBi
ZDQ4MWQzZjg1YTlkZDA1YjY2YmY5NTY5MGU3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKQEAgLTI5LDI5ICsyOSw0NiBAQAogI2luY2x1ZGUgIkxp
YldlYlJUQ0F1ZGlvRm9ybWF0LmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBw
c2luay5oPgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoTElCV0VCUlRDKQotc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IExpYldlYlJUQ0F1
ZGlvRm9ybWF0OjpzYW1wbGVSYXRlOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19hdWRpb0Nh
cHR1cmVTYW1wbGVSYXRlID0gTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGU7CiAjZWxz
ZQotc3RhdGljIGNvbnN0ZXhwciBzaXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IDQ4MDAw
Oworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gNDgw
MDA7CiAjZW5kaWYKIAogR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0
dXJlcihHU3RyZWFtZXJDYXB0dXJlRGV2aWNlIGRldmljZSkKLSAgICA6IEdTdHJlYW1lckNhcHR1
cmVyKGRldmljZSwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3Iiwg
InJhdGUiLCBHX1RZUEVfSU5ULCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSkpCisg
ICAgOiBHU3RyZWFtZXJDYXB0dXJlcihkZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2lt
cGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgc19hdWRpb0NhcHR1cmVTYW1w
bGVSYXRlLCBudWxscHRyKSkpCiB7CiB9CiAKIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdTdHJl
YW1lckF1ZGlvQ2FwdHVyZXIoKQotICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIsIGFk
b3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBF
X0lOVCwgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSwgbnVsbHB0cikpLCBDYXB0dXJlRGV2aWNlOjpE
ZXZpY2VUeXBlOjpNaWNyb3Bob25lKQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIs
IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19U
WVBFX0lOVCwgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSksIENhcHR1cmVEZXZp
Y2U6OkRldmljZVR5cGU6Ok1pY3JvcGhvbmUpCiB7CiB9CiAKIEdzdEVsZW1lbnQqIEdTdHJlYW1l
ckF1ZGlvQ2FwdHVyZXI6OmNyZWF0ZUNvbnZlcnRlcigpCiB7Ci0gICAgcmV0dXJuIG1ha2VHU3Ry
ZWFtZXJCaW4oImF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUiLCB0cnVlKTsKKyAgICBhdXRv
KiBiaW4gPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBhdXRvKiBhdWRpb2NvbnZlcnQgPSBn
c3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvY29udmVydCIsIG51bGxwdHIpOworICAgIGF1
dG8qIGF1ZGlvcmVzYW1wbGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvcmVzYW1w
bGUiLCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChiaW4pLCBh
dWRpb2NvbnZlcnQsIGF1ZGlvcmVzYW1wbGUsIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xp
bmsoYXVkaW9jb252ZXJ0LCBhdWRpb3Jlc2FtcGxlKTsKKworI2lmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorICAgIGlmIChhdXRvKiB3ZWJydGNkc3AgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgid2Vi
cnRjZHNwIiwgbnVsbHB0cikpIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0KHdlYnJ0Y2RzcCwgImVj
aG8tY2FuY2VsIiwgZmFsc2UsICJ2b2ljZS1kZXRlY3Rpb24iLCB0cnVlLCBudWxscHRyKTsKKyAg
ICAgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKGJpbiksIHdlYnJ0Y2RzcCk7CisgICAgICAg
IGdzdF9lbGVtZW50X2xpbmsod2VicnRjZHNwLCBhdWRpb2NvbnZlcnQpOworICAgIH0KKyNlbmRp
ZgorCisgICAgaWYgKGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxpbmtlZF9w
YWQoR1NUX0JJTl9DQVNUKGJpbiksIEdTVF9QQURfU1JDKSkpCisgICAgICAgIGdzdF9lbGVtZW50
X2FkZF9wYWQoR1NUX0VMRU1FTlRfQ0FTVChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwg
cGFkLmdldCgpKSk7CisgICAgaWYgKGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91
bmxpbmtlZF9wYWQoR1NUX0JJTl9DQVNUKGJpbiksIEdTVF9QQURfU0lOSykpKQorICAgICAgICBn
c3RfZWxlbWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1QoYmluKSwgZ3N0X2dob3N0X3BhZF9u
ZXcoInNpbmsiLCBwYWQuZ2V0KCkpKTsKKworICAgIHJldHVybiBiaW47CiB9CiAKIGJvb2wgR1N0
cmVhbWVyQXVkaW9DYXB0dXJlcjo6c2V0U2FtcGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDYXB0dXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCmluZGV4IDQ3OGM3NzVlMGUzZjY5ZDdjZTM2
ZjY3NWNiYmY0Y2E2ZmIzYjYzNTEuLjllMDA4ZDhmNDZhNmZkNWQ1MjI4MjZlMDhmYmY3ZmI2Yjk5
ZGI3MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcApAQCAtMTAwLDcg
KzEwMCw3IEBAIEdzdEVsZW1lbnQqIEdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UoKQog
ICAgICAgICBtX3NyYyA9IG1ha2VFbGVtZW50KG1fc291cmNlRmFjdG9yeSk7CiAgICAgICAgIEFT
U0VSVChtX3NyYyk7CiAgICAgICAgIGlmIChHU1RfSVNfQVBQX1NSQyhtX3NyYy5nZXQoKSkpCi0g
ICAgICAgICAgICBnX29iamVjdF9zZXQobV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZv
cm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgbnVsbHB0cik7CisgICAgICAgICAgICBnX29iamVjdF9z
ZXQobV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElN
RSwgImRvLXRpbWVzdGFtcCIsIHRydWUsIG51bGxwdHIpOwogCiAgICAgICAgIGF1dG8gc3JjUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fc3JjLmdldCgpLCAic3Jj
IikpOwogICAgICAgICBpZiAobV9kZXZpY2VUeXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5
cGU6OkNhbWVyYSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVy
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmExZGU1MmJkNTgxOTRjNzM3NmE2YTFhNGYzZmZlNGRl
ZGMxYTcyYQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAKQEAgLTAsMCAr
MSw3NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFC
TEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OkdTdHJlYW1lckRUTUZTZW5kZXJC
YWNrZW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitHU3RyZWFtZXJEVE1GU2Vu
ZGVyQmFja2VuZDo6fkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCitib29sIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpjYW5JbnNl
cnREVE1GKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30K
Kwordm9pZCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6cGxheVRvbmUoY29uc3QgU3RyaW5n
Jiwgc2l6ZV90LCBzaXplX3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5n
IEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjp0b25lcygpIGNvbnN0Cit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNl
bmRlckJhY2tlbmQ6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiAwOworfQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6Omlu
dGVyVG9uZUdhcCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
MDsKK30KKwordm9pZCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6b25Ub25lUGxheWVkKEZ1
bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYgb25Ub25lUGxheWVkKQoreworICAgIG1fb25U
b25lUGxheWVkID0gV1RGTW92ZShvblRvbmVQbGF5ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLmM1Nzk3MDUwY2VjOWI0YjBhYTZkOWVmZTk4MDhhZTVjOTA4OGZiMzMKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaApAQCAtMCwwICsxLDUwIEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJUQ0RUTUZTZW5kZXJC
YWNrZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUg
eworCisvLyBVc2UgZWFnZXIgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBz
aW5jZSB3ZSBjYWxsIG1ha2VXZWFrUHRyKCkgZnJvbSBhbm90aGVyIHRocmVhZC4KK2NsYXNzIEdT
dHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0RUTUZTZW5kZXJCYWNr
ZW5kLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQsIFdl
YWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CisgICAgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tl
bmQoKTsKKyAgICB+R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAg
ICAvLyBSVENEVE1GU2VuZGVyQmFja2VuZAorICAgIGJvb2wgY2FuSW5zZXJ0RFRNRigpIGZpbmFs
OworICAgIHZvaWQgcGxheVRvbmUoY29uc3QgU3RyaW5nJiB0b25lLCBzaXplX3QgZHVyYXRpb24s
IHNpemVfdCBpbnRlclRvbmVHYXApIGZpbmFsOworICAgIHZvaWQgb25Ub25lUGxheWVkKEZ1bmN0
aW9uPHZvaWQoY29uc3QgU3RyaW5nJik+JiYpIGZpbmFsOworICAgIFN0cmluZyB0b25lcygpIGNv
bnN0IGZpbmFsOworICAgIHNpemVfdCBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHNpemVf
dCBpbnRlclRvbmVHYXAoKSBjb25zdCBmaW5hbDsKKworICAgIEZ1bmN0aW9uPHZvaWQoY29uc3Qg
U3RyaW5nJik+IG1fb25Ub25lUGxheWVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKaW5kZXgg
NmFiMWFhYTExNTE4YTNiNzk3NTdkMDFkZjJhNjlhZmI2NjM2NjBlZC4uMjQzY2FhYTVjNGNmNzFm
ZWE4NWQ5MjkyODhjNjkwNzU0YmFmOTQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCkBAIC0zNCwxNyArMzQsMjMgQEAKICNpbmNsdWRl
ICJWaWRlb0ZyYW1lTWV0YWRhdGFHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJp
dmF0ZU1lZGlhU3RyZWFtLmgiCiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRl
ICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFs
dGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8
Z3N0L2FwcC9nc3RhcHBzcmMuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIu
aD4KICNpbmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+
CiAKIHVzaW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxh
dGUgdmlkZW9TcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJ2aWRlb19zcmMl
dSIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMo
InZpZGVvL3gtcmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwOCIpKTsKKyAgICBHU1RfU1RBVElD
X0NBUFMoInZpZGVvL3gtcmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwODt2aWRlby94LXZwOTth
cHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbyIpKTsKIAogc3RhdGljIEdzdFN0
YXRpY1BhZFRlbXBsYXRlIGF1ZGlvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFU
RSgiYXVkaW9fc3JjJXUiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NU
X1NUQVRJQ19DQVBTKCJhdWRpby94LXJhdyhBTlkpOyIpKTsKKyAgICBHU1RfU1RBVElDX0NBUFMo
ImF1ZGlvL3gtcmF3KEFOWSk7YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8i
KSk7CiAKIEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0TWVkaWFTdHJlYW1TcmNEZWJ1
Zyk7CiAjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnCkBA
IC0yMzYsNyArMjQyLDcgQEAgcHVibGljOgogCiAgICAgICAgIGlmIChkcm9wKSB7CiAgICAgICAg
ICAgICBtX25lZWRzRGlzY29udCA9IHRydWU7Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1Qo
bV9zcmMuZ2V0KCksICIlcyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4gbm90IHB1c2hpbmciLCBtX3Ry
YWNrLmhhc1ZpZGVvKCkgPyAiVmlkZW8iIDogIkF1ZGlvIik7CisgICAgICAgICAgICBHU1RfVFJB
Q0VfT0JKRUNUKG1fc3JjLmdldCgpLCAiJXMgcXVldWUgZnVsbCBhbHJlYWR5Li4uIG5vdCBwdXNo
aW5nIiwgbV90cmFjay5oYXNWaWRlbygpID8gIlZpZGVvIiA6ICJBdWRpbyIpOwogICAgICAgICAg
ICAgcmV0dXJuOwogICAgICAgICB9CiAKQEAgLTY4OCw2ICs2OTQsNyBAQCB2b2lkIHdlYmtpdE1l
ZGlhU3RyZWFtU3JjQWRkVHJhY2soV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3Ry
ZWFtVHJhY2tQcgogICAgIGNvbnN0IGNoYXIqIHNvdXJjZVR5cGU7CiAgICAgdW5zaWduZWQgY291
bnRlcjsKICAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkVGVtcGxhdGU7CisKICAgICBpZiAo
dHJhY2stPmhhc0F1ZGlvKCkpIHsKICAgICAgICAgcGFkVGVtcGxhdGUgPSAmYXVkaW9TcmNUZW1w
bGF0ZTsKICAgICAgICAgc291cmNlVHlwZSA9ICJhdWRpbyI7CkBAIC02OTksOSArNzA2LDE5IEBA
IHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNyYyog
c2VsZiwgTWVkaWFTdHJlYW1UcmFja1ByCiAgICAgICAgIGNvdW50ZXIgPSBzZWxmLT5wcml2LT52
aWRlb1BhZENvdW50ZXIuZXhjaGFuZ2VBZGQoMSk7CiAgICAgfQogCi0gICAgYXV0byBwYWROYW1l
ID0gbWFrZVN0cmluZyhzb3VyY2VUeXBlLCAiX3NyYyIsIGNvdW50ZXIpOworI2lmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorICAgIGlmICh0cmFjay0+c291cmNlKCkuaXNJbmNvbWluZ0F1ZGlvU291
cmNlKCkpIHsKKyAgICAgICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNv
bWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgpKTsKKyAgICAgICAgc291
cmNlLnJlZ2lzdGVyQ2xpZW50KCk7CisgICAgfSBlbHNlIGlmICh0cmFjay0+c291cmNlKCkuaXNJ
bmNvbWluZ1ZpZGVvU291cmNlKCkpIHsKKyAgICAgICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nh
c3Q8UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgp
KTsKKyAgICAgICAgc291cmNlLnJlZ2lzdGVyQ2xpZW50KCk7CisgICAgfQorI2VuZGlmCisKICAg
ICBHU1RfREVCVUdfT0JKRUNUKHNlbGYsICJTZXR1cCAlcyBzb3VyY2UgZm9yIHRyYWNrICVzLCBv
bmx5IHRyYWNrOiAlcyIsIHNvdXJjZVR5cGUsIHRyYWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCksIGJv
b2xGb3JQcmludGluZyhvbmx5VHJhY2spKTsKIAorICAgIGF1dG8gcGFkTmFtZSA9IG1ha2VTdHJp
bmcoc291cmNlVHlwZSwgIl9zcmMiLCBjb3VudGVyKTsKICAgICBhdXRvIHNvdXJjZSA9IG1ha2VV
bmlxdWU8SW50ZXJuYWxTb3VyY2U+KEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksICp0cmFjaywgcGFk
TmFtZSk7CiAgICAgYXV0byogZWxlbWVudCA9IHNvdXJjZS0+Z2V0KCk7CiAgICAgZ3N0X2Jpbl9h
ZGQoR1NUX0JJTl9DQVNUKHNlbGYpLCBlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIu
Y3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclZpZGVvRW5jb2Rlci5jcHAKaW5kZXggZmFjNDcwNWZiOGE3Y2YyZGMyM2VhNTExYjE1ZmNm
NDg1NTJjZjMzYS4uYTc2ZWYxZWZmZDE2ZmEyNmI2ZGUzNTc0ZjQ2NGY1ZDIzM2M5NWVmZSAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKQEAgLTI5Nyw5ICsy
OTcsMTEgQEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2NsYXNzX2lu
aXQoV2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyQ2xhc3MKICAgICAgICAgICAgIGdfb2JqZWN0X3Nl
dChzZWxmLT5wcml2LT5wYXJzZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRy
KTsKICAgICAgICAgfSwgInRhcmdldC1iaXRyYXRlIiwgc2V0Qml0cmF0ZUJpdFBlclNlYywgImlu
dGVydmFsLWludHJhZnJhbWVzIik7CiAgICAgRW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihYMjY0
LCAieDI2NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKLSAgICAgICAgInZpZGVv
L3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVhbSxwcm9maWxlPWJh
c2VsaW5lIiwKKyAgICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1h
dD1ieXRlLXN0cmVhbSxwcm9maWxlPWNvbnN0cmFpbmVkLWJhc2VsaW5lIiwKICAgICAgICAgW10o
V2ViS2l0V2VicnRjVmlkZW9FbmNvZGVyKiBzZWxmKSB7CiAgICAgICAgICAgICBnc3RfdXRpbF9z
ZXRfb2JqZWN0X2FyZyhHX09CSkVDVChzZWxmLT5wcml2LT5lbmNvZGVyLmdldCgpKSwgInR1bmUi
LCAiemVyb2xhdGVuY3kiKTsKKyAgICAgICAgICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdf
T0JKRUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAic3BlZWQtcHJlc2V0IiwgInVsdHJh
ZmFzdCIpOworICAgICAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNlbGYtPnByaXYtPmVu
Y29kZXIuZ2V0KCkpLCAia2V5LWludC1tYXgiLCAxNSwgTlVMTCk7CiAgICAgICAgICAgICBnX29i
amVjdF9zZXQoc2VsZi0+cHJpdi0+cGFyc2VyLmdldCgpLCAiY29uZmlnLWludGVydmFsIiwgMSwg
bnVsbHB0cik7CiAgICAgICAgIH0sICJiaXRyYXRlIiwgc2V0Qml0cmF0ZUtiaXRQZXJTZWMsICJr
ZXktaW50LW1heCIpOwogICAgIEVuY29kZXJzOjpyZWdpc3RlckVuY29kZXIoT3BlbkgyNjQsICJv
cGVuaDI2NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTZmNTVhMmQ1ZmEzYjA1NzhmNTQxODAyNmZmOTg1OThiZWRiYTU2Mwot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAg
KzEsNzMgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5j
b21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9E
YXRhLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
cjo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmIGF1ZGlvVHJh
Y2tJZCkKKyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlw
ZTo6QXVkaW8sIFdURk1vdmUoYXVkaW9UcmFja0lkKSkKKyAgICAsIFJlYWx0aW1lSW5jb21pbmdT
b3VyY2VHU3RyZWFtZXIoKQoreworICAgIHN0YXJ0KCk7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
cigpCit7CisgICAgc3RvcCgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBvcGVuVmFsdmUoKTsKK30K
Kwordm9pZCBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNp
bmdEYXRhKCkKK3sKKyAgICBjbG9zZVZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFT
b3VyY2VDYXBhYmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6
Y2FwYWJpbGl0aWVzKCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllczo6ZW1wdHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzJiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdz
KCkKK3sKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisKK3ZvaWQgUmVhbHRpbWVJ
bmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBsZShHUmVmUHRyPEdzdFNh
bXBsZT4mJiBnc3RTYW1wbGUpCit7CisgICAgYXV0byogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRf
YnVmZmVyKGdzdFNhbXBsZS5nZXQoKSk7CisgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbiBkZXNjcmlwdGlvbjsKKyAgICBHU3RyZWFtZXJBdWRpb0RhdGEgZnJhbWVzKFdURk1vdmUo
Z3N0U2FtcGxlKSwgZGVzY3JpcHRpb24uZ2V0SW5mbygpKTsKKworICAgIGF1ZGlvU2FtcGxlc0F2
YWlsYWJsZShNZWRpYVRpbWUoR1NUX1RJTUVfQVNfVVNFQ09ORFMoR1NUX0JVRkZFUl9QVFMoYnVm
ZmVyKSksIEdfVVNFQ19QRVJfU0VDKSwgZnJhbWVzLCBkZXNjcmlwdGlvbiwgMCk7Cit9CisKK30K
KworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjY2NjhkYjUzYmNmOWMxNmQzMDFiODE3MmU2OGIxOTE4OTA3ZmRhZWMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyIDogcHVi
bGljIFJlYWx0aW1lTWVkaWFTb3VyY2UsIHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcj4gY3JlYXRlKFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkgeyByZXR1cm4gYWRv
cHRSZWYoKm5ldyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZShh
dWRpb1RyYWNrSWQpKSk7IH0KKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lcihTdHJpbmcmJik7CisgICAgflJlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcigpOworCitwcml2YXRlOgorICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2Ug
QVBJCisgICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQ
cm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFi
aWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNv
dXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGZpbmFsOworICAgIGJvb2wgaXNJbmNvbWluZ0F1ZGlv
U291cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gUmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lciBBUEkKKyAgICB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQ
dHI8R3N0U2FtcGxlPiYmKSBmaW5hbDsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5n
cyBtX2N1cnJlbnRTZXR0aW5nczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BF
Q0lBTElaRV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXIpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJl
YWx0aW1lTWVkaWFTb3VyY2UmIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmlzSW5jb21pbmdBdWRp
b1NvdXJjZSgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAvLyBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGlt
ZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NGIxNjU0MmI3NzUxMDJk
MjZmMTVkMjBlNmZlZjVlMzNjOWVkZDcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
I2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUg
Ik1lZGlhU2FtcGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+
CisjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9F
WFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVG
QVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1NvdXJj
ZUdTdHJlYW1lcigpCit7CisgICAgbV9iaW4gPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBt
X3ZhbHZlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAg
IG1fdGVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ0ZWUiLCBudWxscHRyKTsKKyAgICBn
X29iamVjdF9zZXQobV90ZWUuZ2V0KCksICJhbGxvdy1ub3QtbGlua2VkIiwgdHJ1ZSwgbnVsbHB0
cik7CisKKyAgICBhdXRvKiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUi
LCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQo
KSksIG1fdmFsdmUuZ2V0KCksIHF1ZXVlLCBtX3RlZS5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBn
c3RfZWxlbWVudF9saW5rX21hbnkobV92YWx2ZS5nZXQoKSwgcXVldWUsIG1fdGVlLmdldCgpLCBu
dWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fdmFsdmUu
Z2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUpOwor
ICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV90ZWUuZ2V0KCkpOworCisg
ICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1f
dmFsdmUuZ2V0KCksICJzaW5rIikpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4uZ2V0
KCksIGdzdF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgc2lua1BhZC5nZXQoKSkpOworfQorCit2b2lk
IFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmNsb3NlVmFsdmUoKSBjb25zdAorewor
ICAgIGlmIChtX3ZhbHZlKQorICAgICAgICBnX29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRy
b3AiLCB0cnVlLCBudWxscHRyKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyOjpvcGVuVmFsdmUoKSBjb25zdAoreworICAgIGlmIChtX3ZhbHZlKQorICAgICAgICBn
X29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3AiLCBmYWxzZSwgbnVsbHB0cik7Cit9CisK
K3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVnaXN0ZXJDbGllbnQoKQor
eworICAgIEdTVF9ERUJVRygiUmVnaXN0ZXJpbmcgbmV3IGNsaWVudCIpOworICAgIGF1dG8qIHF1
ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIGF1
dG8qIHNpbmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsiLCBudWxscHRyKTsK
KyAgICBnX29iamVjdF9zZXQoc2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAiZW1p
dC1zaWduYWxzIiwgVFJVRSwgIm1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7CisgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKHNpbmssICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSygrW10oUmVh
bHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciogc2VsZiwgR3N0RWxlbWVudCogc2luaykgLT4g
R3N0Rmxvd1JldHVybiB7CisgICAgICAgIGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBf
c2lua19wdWxsX3NhbXBsZShHU1RfQVBQX1NJTksoc2luaykpKTsKKyAgICAgICAgc2VsZi0+ZGlz
cGF0Y2hTYW1wbGUoV1RGTW92ZShzYW1wbGUpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09L
OworICAgIH0pLCB0aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChzaW5rLCAi
bmV3LXByZXJvbGwiLCBHX0NBTExCQUNLKCtbXShSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVh
bWVyKiBzZWxmLCBHc3RFbGVtZW50KiBzaW5rKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAgICAg
YXV0byBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1RfQVBQ
X1NJTksoc2luaykpKTsKKyAgICAgICAgc2VsZi0+ZGlzcGF0Y2hTYW1wbGUoV1RGTW92ZShzYW1w
bGUpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0pLCB0aGlzKTsKKworICAg
IGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgcXVldWUsIHNpbmss
IG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX3RlZS5nZXQoKSwgcXVldWUs
IHNpbmssIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQo
cXVldWUpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc2luayk7CisK
KyAgICBhdXRvIGRvdEZpbGVOYW1lID0gbWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUobV9iaW4u
Z2V0KCkpLCAiLmluY29taW5nIik7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRI
X1RTKEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwg
ZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3Vy
Y2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQ2NGM0
OTcwY2NiOGQxMWI3OWE1YzIwZDdmMTM1MmU2ZjRhZmJiMwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29t
aW5nU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQg
KEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHly
aWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAg
bW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRp
b247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0
aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1
dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBN
RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg
dGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFp
bHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5
OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5j
LiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMw
MSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBH
c3RFbGVtZW50KiBiaW4oKSB7IHJldHVybiBtX2Jpbi5nZXQoKTsgfQorICAgIHZvaWQgcmVnaXN0
ZXJDbGllbnQoKTsKKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXIoKTsKKworICAgIHZvaWQgY2xvc2VWYWx2ZSgpIGNvbnN0OworICAgIHZvaWQgb3BlblZh
bHZlKCkgY29uc3Q7CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmFsdmU7CisKK3ByaXZh
dGU6CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYm
KSB7IH0KKworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9iaW47CisgICAgR1JlZlB0cjxHc3RF
bGVtZW50PiBtX3RlZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8v
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YWNh
MDQzOWY0OWJjYzA2MjkyNDVhZjZiN2E5ZTg1MjkxZjk1ZjFjCi0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lci5oIgorCisjaW5jbHVkZSAiVmlkZW9GcmFtZUdTdHJlYW1lci5oIgorI2luY2x1ZGUg
IlZpZGVvRnJhbWVNZXRhZGF0YUdTdHJlYW1lci5oIgorI2luY2x1ZGUgPGdzdC9ydHAvcnRwLmg+
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0
cmVhbWVyOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoU3RyaW5nJiYgdmlk
ZW9UcmFja0lkKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlOjpWaWRlbywgV1RGTW92ZSh2aWRlb1RyYWNrSWQpKQorICAgICwgUmVhbHRpbWVJbmNv
bWluZ1NvdXJjZUdTdHJlYW1lcigpCit7CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRl
ZENvbnN0cmFpbnRzIGNvbnN0cmFpbnRzOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzV2lk
dGgodHJ1ZSk7CisgICAgY29uc3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7CisgICAg
bV9jdXJyZW50U2V0dGluZ3MgPSBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgeyB9OworICAg
IG1fY3VycmVudFNldHRpbmdzLT5zZXRTdXBwb3J0ZWRDb25zdHJhaW50cyhXVEZNb3ZlKGNvbnN0
cmFpbnRzKSk7CisKKyAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0
X3N0YXRpY19wYWQobV92YWx2ZS5nZXQoKSwgInNpbmsiKSk7CisgICAgZ3N0X3BhZF9hZGRfcHJv
YmUoc2lua1BhZC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0UGFkUHJvYmVUeXBlPihHU1RfUEFEX1BS
T0JFX1RZUEVfQlVGRkVSKSwgW10oR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZvLCBncG9p
bnRlcikgLT4gR3N0UGFkUHJvYmVSZXR1cm4geworICAgICAgICBhdXRvIHZpZGVvRnJhbWVUaW1l
TWV0YWRhdGEgPSBzdGQ6Om1ha2Vfb3B0aW9uYWw8VmlkZW9GcmFtZVRpbWVNZXRhZGF0YT4oeyB9
KTsKKyAgICAgICAgdmlkZW9GcmFtZVRpbWVNZXRhZGF0YS0+cmVjZWl2ZVRpbWUgPSBNb25vdG9u
aWNUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpOworCisgICAgICAgIGF1dG8qIGJ1ZmZl
ciA9IEdTVF9CVUZGRVJfQ0FTVChHU1RfUEFEX1BST0JFX0lORk9fREFUQShpbmZvKSk7CisgICAg
ICAgIEdzdFJUUEJ1ZmZlciBydHBCdWZmZXIgR1NUX1JUUF9CVUZGRVJfSU5JVDsKKyAgICAgICAg
aWYgKGdzdF9ydHBfYnVmZmVyX21hcChidWZmZXIsIEdTVF9NQVBfUkVBRCwgJnJ0cEJ1ZmZlcikp
IHsKKyAgICAgICAgICAgIHZpZGVvRnJhbWVUaW1lTWV0YWRhdGEtPnJ0cFRpbWVzdGFtcCA9IGdz
dF9ydHBfYnVmZmVyX2dldF90aW1lc3RhbXAoJnJ0cEJ1ZmZlcik7CisgICAgICAgICAgICBnc3Rf
cnRwX2J1ZmZlcl91bm1hcCgmcnRwQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIg
PSB3ZWJraXRHc3RCdWZmZXJTZXRWaWRlb0ZyYW1lVGltZU1ldGFkYXRhKGJ1ZmZlciwgV1RGTW92
ZSh2aWRlb0ZyYW1lVGltZU1ldGFkYXRhKSk7CisgICAgICAgIEdTVF9QQURfUFJPQkVfSU5GT19E
QVRBKGluZm8pID0gYnVmZmVyOworICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAg
ICB9LCBudWxscHRyLCBudWxscHRyKTsKKworICAgIHN0YXJ0KCk7Cit9CisKK3ZvaWQgUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzdGFydFByb2R1Y2luZ0RhdGEoKQorewor
ICAgIG9wZW5WYWx2ZSgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lcjo6c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAgIGNsb3NlVmFsdmUoKTsKK30KKwor
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyOjpjYXBhYmlsaXRpZXMoKQoreworICAgIHJldHVybiBSZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOworfQorCitjb25z
dCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lcjo6c2V0dGluZ3MoKQoreworICAgIGlmIChtX2N1cnJlbnRTZXR0aW5ncykKKyAg
ICAgICAgcmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVlKCk7CisKKyAgICBSZWFsdGltZU1l
ZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgY29uc3RyYWludHM7CisgICAgY29uc3RyYWlu
dHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsKKyAgICBjb25zdHJhaW50cy5zZXRTdXBwb3J0c0hl
aWdodCh0cnVlKTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBzZXR0aW5nczsK
KyAgICBhdXRvJiBzaXplID0gdGhpcy0+c2l6ZSgpOworICAgIHNldHRpbmdzLnNldFdpZHRoKHNp
emUud2lkdGgoKSk7CisgICAgc2V0dGluZ3Muc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOworICAg
IHNldHRpbmdzLnNldFN1cHBvcnRlZENvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKTsKKworICAgIG1f
Y3VycmVudFNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7CisgICAgcmV0dXJuIG1fY3VycmVu
dFNldHRpbmdzLnZhbHVlKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
R1N0cmVhbWVyOjpzZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJj
ZVNldHRpbmdzOjpGbGFnPiBzZXR0aW5ncykKK3sKKyAgICBpZiAoc2V0dGluZ3MuY29udGFpbnNB
bnkoeyBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OldpZHRoLCBSZWFsdGltZU1l
ZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OkhlaWdodCB9KSkKKyAgICAgICAgbV9jdXJyZW50U2V0
dGluZ3MgPSBzdGQ6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJiBnc3RTYW1w
bGUpCit7CisgICAgYXV0byogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKGdzdFNhbXBs
ZS5nZXQoKSk7CisgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoVmlkZW9GcmFtZUdTdHJlYW1lcjo6
Y3JlYXRlV3JhcHBlZFNhbXBsZShnc3RTYW1wbGUsIGZyb21Hc3RDbG9ja1RpbWUoR1NUX0JVRkZF
Ul9QVFMoYnVmZmVyKSkpLCB7IH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNl
bmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
OWJjMzAwNjljZDMzMjA5MjMxOGJiZjc3OGFiOTNkOTE4NDgzMWZiCi0tLSAvZGV2L251bGwKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK2NsYXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciA6IHB1YmxpYyBS
ZWFsdGltZU1lZGlhU291cmNlLCBwdWJsaWMgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1l
ciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXI+IGNyZWF0ZShTdHJpbmcmJiB2aWRlb1RyYWNrSWQpIHsgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFdURk1vdmUodmlkZW9U
cmFja0lkKSkpOyB9CisgICAgflJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcigp
ID0gZGVmYXVsdDsKKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lcihTdHJpbmcmJik7CisKK3ByaXZhdGU6CisgICAgLy8gUmVhbHRpbWVNZWRpYVNv
dXJjZSBBUEkKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIHZvaWQg
c3RvcFByb2R1Y2luZ0RhdGEoKSAgZmluYWw7CisgICAgdm9pZCBzZXR0aW5nc0RpZENoYW5nZShP
cHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPikgZmluYWw7CisgICAg
Y29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgZmlu
YWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGZp
bmFsOworICAgIGJvb2wgaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gdHJ1ZTsgfQorCisgICAgLy8gUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciBBUEkK
KyAgICB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmKSBmaW5hbDsKKwor
ICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2N1cnJlbnRT
ZXR0aW5nczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBF
X1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXIpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFT
b3VyY2UmIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmlzSW5jb21pbmdWaWRlb1NvdXJjZSgpOyB9
CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE3NGIyNWQ0ZWZkNThjZjc1
YjczY2ZkNjJiMDc1NzQyZjUyODhmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2lu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi90
ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VY
VEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZB
VUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNl
KQorICAgIDogUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBW
ZWN0b3I8c3RkOjpwYWlyPGNvbnN0IGNoYXIqLCBpbnQ+PiBlbmNvZGluZ3M7CisgICAgZW5jb2Rp
bmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7CisgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFw
cGVuZCh7ICJPUFVTIiwgNDgwMDAgfSk7CisgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVuZCh7
ICJHNzIyIiwgODAwMCB9KTsKKyAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBwZW5kKHsgIlBDTUEi
LCA4MDAwIH0pOworICAgIGVuY29kaW5ncy51bmNoZWNrZWRBcHBlbmQoeyAiUENNVSIsIDgwMDAg
fSk7CisgICAgbV9hbGxvd2VkQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7
CisgICAgZm9yIChhdXRvJiBbZW5jb2RpbmdOYW1lLCBjbG9ja1JhdGVdIDogZW5jb2RpbmdzKQor
ICAgICAgICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlKG1fYWxsb3dlZENhcHMuZ2V0KCksIGdz
dF9zdHJ1Y3R1cmVfbmV3KCJhcHBsaWNhdGlvbi94LXJ0cCIsICJtZWRpYSIsIEdfVFlQRV9TVFJJ
TkcsICJhdWRpbyIsICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklORywgZW5jb2RpbmdOYW1l
LCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIGNsb2NrUmF0ZSwgbnVsbHB0cikpOworCisgICAg
bV9hdWRpb2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvY29udmVydCIs
IG51bGxwdHIpOworICAgIG1fYXVkaW9yZXNhbXBsZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFr
ZSgiYXVkaW9yZXNhbXBsZSIsIG51bGxwdHIpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJ
Tl9DQVNUKG1fYmluLmdldCgpKSwgbV9hdWRpb2NvbnZlcnQuZ2V0KCksIG1fYXVkaW9yZXNhbXBs
ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgc2V0U291cmNlKFdURk1vdmUoc291cmNlKSk7Cit9CisK
K2Jvb2wgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzZXRQYXlsb2FkVHlw
ZShjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBjYXBzKQoreworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9iaW4uZ2V0KCksICJPdXRnb2luZyBhdWRpbyBzb3VyY2UgcGF5bG9hZCBjYXBzOiAlIiBHU1Rf
UFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSk7CisgICAgYXV0byogc3RydWN0dXJlID0gZ3N0X2NhcHNf
Z2V0X3N0cnVjdHVyZShjYXBzLmdldCgpLCAwKTsKKyAgICBpZiAoY29uc3QgY2hhciogZW5jb2Rp
bmdOYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImVuY29kaW5nLW5h
bWUiKSkgeworICAgICAgICBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiT1BVUyIpKSB7CisgICAg
ICAgICAgICBtX2VuY29kZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgib3B1c2VuYyIsIG51bGxw
dHIpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRw
b3B1c3BheSIsIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKCFtX2VuY29kZXIgfHwgIW1fcGF5
bG9hZGVyKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8g
RklYTUU6IEVuYWJsZSBkdHggdG9vPworICAgICAgICAgICAgZ3N0X3V0aWxfc2V0X29iamVjdF9h
cmcoR19PQkpFQ1QobV9lbmNvZGVyLmdldCgpKSwgImF1ZGlvLXR5cGUiLCAidm9pY2UiKTsKKwor
ICAgICAgICAgICAgaWYgKGNvbnN0IGNoYXIqIHVzZUluYmFuZEZlYyA9IGdzdF9zdHJ1Y3R1cmVf
Z2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJ1c2VpbmJhbmRmZWMiKSkgeworICAgICAgICAgICAgICAg
IGlmICghc3RyY21wKHVzZUluYmFuZEZlYywgIjEiKSkKKyAgICAgICAgICAgICAgICAgICAgZ19v
YmplY3Rfc2V0KG1fZW5jb2Rlci5nZXQoKSwgImluYmFuZC1mZWMiLCB0cnVlLCBudWxscHRyKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChlcXVhbChlbmNvZGluZ05hbWUsICJH
NzIyIikpIHsKKyAgICAgICAgICAgIG1fcGF5bG9hZGVyID0gbWFrZUdTdHJlYW1lckVsZW1lbnQo
InJ0cGc3MjJwYXkiLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmICghbV9wYXlsb2FkZXIpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGVu
Y29kaW5nTmFtZSwgIlBDTUEiKSB8fCBlcXVhbChlbmNvZGluZ05hbWUsICJQQ01VIikpIHsKKyAg
ICAgICAgICAgIGF1dG8gcGF5bG9hZGVyTmFtZSA9IG1ha2VTdHJpbmcoInJ0cCIsIGVuY29kaW5n
TmFtZSwgInBheSIpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxl
bWVudChwYXlsb2FkZXJOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuYXNjaWkoKS5kYXRh
KCksIG51bGxwdHIpOworICAgICAgICAgICAgbV9lbmNvZGVyID0gbWFrZUdTdHJlYW1lckVsZW1l
bnQoImFsYXdlbmMiLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmICghbV9wYXlsb2FkZXIgfHwg
IW1fZW5jb2RlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxz
ZSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1fYmluLmdldCgpLCAiVW5zdXBwb3J0
ZWQgb3V0Z29pbmcgYXVkaW8gZW5jb2Rpbmc6ICVzIiwgZW5jb2RpbmdOYW1lKTsKKyAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9F
UlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJlbmNvZGluZy1uYW1lIG5vdCBmb3VuZCIpOworICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ19vYmplY3Rfc2V0KG1fcGF5bG9hZGVy
LmdldCgpLCAiYXV0by1oZWFkZXItZXh0ZW5zaW9uIiwgRkFMU0UsIG51bGxwdHIpOworCisgICAg
aWYgKGNvbnN0IGNoYXIqIG1pblBUaW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVj
dHVyZSwgIm1pbnB0aW1lIikpIHsKKyAgICAgICAgU3RyaW5nIHRpbWUobWluUFRpbWUpOworICAg
ICAgICBpZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlckFsbG93aW5nVHJhaWxpbmdKdW5rPGlu
dDY0X3Q+KHRpbWUpKQorICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGF5bG9hZGVyLmdldCgp
LCAibWluLXB0aW1lIiwgKnZhbHVlICogR1NUX01TRUNPTkQsIG51bGxwdHIpOworICAgIH0KKwor
ICAgIGludCBwYXlsb2FkVHlwZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVj
dHVyZSwgInBheWxvYWQiLCAmcGF5bG9hZFR5cGUpKQorICAgICAgICBnX29iamVjdF9zZXQobV9w
YXlsb2FkZXIuZ2V0KCksICJwdCIsIHBheWxvYWRUeXBlLCBudWxscHRyKTsKKworICAgIGdfb2Jq
ZWN0X3NldChtX2NhcHNGaWx0ZXIuZ2V0KCksICJjYXBzIiwgY2Fwcy5nZXQoKSwgbnVsbHB0cik7
CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3BheWxvYWRl
ci5nZXQoKSk7CisgICAgaWYgKG1fZW5jb2RlcikgeworICAgICAgICBnc3RfYmluX2FkZChHU1Rf
QklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX2VuY29kZXIuZ2V0KCkpOworICAgICAgICBnc3RfZWxl
bWVudF9saW5rX21hbnkobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSwgbV92YWx2ZS5nZXQoKSwgbV9h
dWRpb2NvbnZlcnQuZ2V0KCksIG1fYXVkaW9yZXNhbXBsZS5nZXQoKSwKKyAgICAgICAgICAgIG1f
cHJlRW5jb2RlclF1ZXVlLmdldCgpLCBtX2VuY29kZXIuZ2V0KCksIG1fcGF5bG9hZGVyLmdldCgp
LCBtX3Bvc3RFbmNvZGVyUXVldWUuZ2V0KCksIG51bGxwdHIpOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX291dGdvaW5nU291cmNlLmdldCgpLCBtX3ZhbHZl
LmdldCgpLCBtX2F1ZGlvY29udmVydC5nZXQoKSwgbV9hdWRpb3Jlc2FtcGxlLmdldCgpLAorICAg
ICAgICAgICAgbV9wYXlsb2FkZXIuZ2V0KCksIG1fcG9zdEVuY29kZXJRdWV1ZS5nZXQoKSwgbnVs
bHB0cik7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi5jMTkwMmI1ZjY5MTQyNTQ4YmExN2M3MDYzNDc2OGVlNWFjOWI1YmExCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNDQgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nTWVkaWFTb3Vy
Y2VHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIgZmluYWwgOiBwdWJsaWMgUmVhbHRpbWVPdXRnb2lu
Z01lZGlhU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1l
T3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNr
UHJpdmF0ZT4mJiBhdWRpb1NvdXJjZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZU91
dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZShhdWRpb1NvdXJjZSkpKTsgfQorCisg
ICAgYm9vbCBzZXRQYXlsb2FkVHlwZShjb25zdCBHUmVmUHRyPEdzdENhcHM+JikgZmluYWw7CisK
K3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKworcHJpdmF0ZToKKyAgICBH
UmVmUHRyPEdzdEVsZW1lbnQ+IG1fYXVkaW9jb252ZXJ0OworICAgIEdSZWZQdHI8R3N0RWxlbWVu
dD4gbV9hdWRpb3Jlc2FtcGxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjU0MTVlNTExM2VjNDBiNTViMjhjNGFjZTAyMjI2OWE5YTVlZjg0MTMKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDE1NCBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oIgorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFC
TEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VO
U1RBQkxFX0FQSQorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5k
cG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRw
b2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkK
K3sKKyAgICBtX2JpbiA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOworCisgICAgbV92YWx2ZSA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmFsdmUiLCBudWxscHRyKTsKKyAgICBnc3RfdXRpbF9z
ZXRfb2JqZWN0X2FyZyhHX09CSkVDVChtX3ZhbHZlLmdldCgpKSwgImRyb3AtbW9kZSIsICJmb3J3
YXJkLXN0aWNreS1ldmVudHMiKTsKKworICAgIG1fcHJlRW5jb2RlclF1ZXVlID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIG1fcG9zdEVuY29kZXJRdWV1
ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxscHRyKTsKKyAgICBtX2Nh
cHNGaWx0ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRy
KTsKKworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV92
YWx2ZS5nZXQoKSwgbV9wcmVFbmNvZGVyUXVldWUuZ2V0KCksCisgICAgICAgIG1fcG9zdEVuY29k
ZXJRdWV1ZS5nZXQoKSwgbV9jYXBzRmlsdGVyLmdldCgpLCBudWxscHRyKTsKKworICAgIGF1dG8g
c3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fY2Fwc0ZpbHRl
ci5nZXQoKSwgInNyYyIpKTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKG1fYmluLmdldCgpLCBn
c3RfZ2hvc3RfcGFkX25ldygic3JjIiwgc3JjUGFkLmdldCgpKSk7Cit9CisKK1JlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdT
dHJlYW1lcigpCit7CisgICAgc3RvcCgpOworCisgICAgaWYgKG1fd2VicnRjU2lua1BhZCkgewor
ICAgICAgICBhdXRvIHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3Bh
ZChtX2Jpbi5nZXQoKSwgInNyYyIpKTsKKyAgICAgICAgZ3N0X3BhZF91bmxpbmsoc3JjUGFkLmdl
dCgpLCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworCisgICAgICAgIGF1dG8gcGFyZW50ID0gYWRv
cHRHUmVmKGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KG1fd2VicnRjU2lua1BhZC5nZXQoKSkp
OworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKHBhcmVudC5nZXQoKSwgIlJlbW92aW5nIHBhZCAl
IiBHU1RfUFRSX0ZPUk1BVCwgbV93ZWJydGNTaW5rUGFkLmdldCgpKTsKKyAgICAgICAgZ3N0X2Vs
ZW1lbnRfcmVsZWFzZV9yZXF1ZXN0X3BhZChwYXJlbnQuZ2V0KCksIG1fd2VicnRjU2lua1BhZC5n
ZXQoKSk7CisgICAgfQorCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fYmluLmdldCgpLCBH
U1RfU1RBVEVfTlVMTCk7CisgICAgaWYgKGF1dG8gcGlwZWxpbmUgPSBhZG9wdEdSZWYoZ3N0X2Vs
ZW1lbnRfZ2V0X3BhcmVudChtX2Jpbi5nZXQoKSkpKQorICAgICAgICBnc3RfYmluX3JlbW92ZShH
U1RfQklOX0NBU1QocGlwZWxpbmUuZ2V0KCkpLCBtX2Jpbi5nZXQoKSk7Cit9CisKK3ZvaWQgUmVh
bHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTb3VyY2UoUmVmPE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKK3sKKyAgICBpZiAobV9zb3VyY2UgJiYgIW1f
aW5pdGlhbFNldHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fc291cmNlLnZh
bHVlKCktPnNldHRpbmdzKCk7CisKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIG1fc291cmNl
LnZhbHVlKCktPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBtX3NvdXJjZSA9IFdURk1vdmUo
bmV3U291cmNlKTsKKyAgICBpbml0aWFsaXplRnJvbVRyYWNrKCk7Cit9CisKK3ZvaWQgUmVhbHRp
bWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzdGFydCgpCit7CisgICAgbV9zb3VyY2Uu
dmFsdWUoKS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1faXNTdG9wcGVkID0gZmFsc2U7Cisg
ICAgZ3N0X2VsZW1lbnRfbGluayhtX291dGdvaW5nU291cmNlLmdldCgpLCBtX3ZhbHZlLmdldCgp
KTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fYmluLmdldCgpKTsK
K30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0b3AoKQor
eworICAgIG1faXNTdG9wcGVkID0gdHJ1ZTsKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICBy
ZXR1cm47CisKKyAgICBtX3NvdXJjZS52YWx1ZSgpLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7Cisg
ICAgZ3N0X2VsZW1lbnRfc2VuZF9ldmVudChtX291dGdvaW5nU291cmNlLmdldCgpLCBnc3RfZXZl
bnRfbmV3X2VvcygpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fYmluLmdl
dCgpLCBUUlVFKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9vdXRnb2luZ1NvdXJjZS5n
ZXQoKSwgR1NUX1NUQVRFX05VTEwpOworICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU5fQ0FTVCht
X2Jpbi5nZXQoKSksIG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3Nl
dF9sb2NrZWRfc3RhdGUobV9iaW4uZ2V0KCksIEZBTFNFKTsKKyAgICBtX3NvdXJjZS5yZXNldCgp
OworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c291cmNl
TXV0ZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm47Cisg
ICAgQVNTRVJUKG1fbXV0ZWQgIT0gbV9zb3VyY2UudmFsdWUoKS0+bXV0ZWQoKSk7CisgICAgbV9t
dXRlZCA9IG1fc291cmNlLnZhbHVlKCktPm11dGVkKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRn
b2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2VFbmFibGVkQ2hhbmdlZCgpCit7CisgICAg
aWYgKCFtX3NvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9lbmFibGVkID0gbV9zb3Vy
Y2UudmFsdWUoKS0+ZW5hYmxlZCgpOworICAgIGlmIChtX3ZhbHZlKQorICAgICAgICBnX29iamVj
dF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3AiLCAhbV9lbmFibGVkLCBudWxscHRyKTsKK30KKwor
dm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmluaXRpYWxpemVGcm9t
VHJhY2soKQoreworICAgIG1fbXV0ZWQgPSBtX3NvdXJjZS52YWx1ZSgpLT5tdXRlZCgpOworICAg
IG1fZW5hYmxlZCA9IG1fc291cmNlLnZhbHVlKCktPmVuYWJsZWQoKTsKKyAgICBtX291dGdvaW5n
U291cmNlID0gd2Via2l0TWVkaWFTdHJlYW1TcmNOZXcoKTsKKyAgICBnc3RfYmluX2FkZChHU1Rf
QklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX291dGdvaW5nU291cmNlLmdldCgpKTsKKyAgICB3ZWJr
aXRNZWRpYVN0cmVhbVNyY0FkZFRyYWNrKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG1fb3V0Z29p
bmdTb3VyY2UuZ2V0KCkpLCBtX3NvdXJjZS0+cHRyKCksIHRydWUpOworfQorCit2b2lkIFJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bGluaygpCit7CisgICAgZ3N0X2VsZW1l
bnRfbGluayhtX3Bvc3RFbmNvZGVyUXVldWUuZ2V0KCksIG1fY2Fwc0ZpbHRlci5nZXQoKSk7CisK
KyAgICBhdXRvIHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCht
X2Jpbi5nZXQoKSwgInNyYyIpKTsKKyAgICBnc3RfcGFkX2xpbmsoc3JjUGFkLmdldCgpLCBtX3dl
YnJ0Y1NpbmtQYWQuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJl
bnQobV9iaW4uZ2V0KCkpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdT
dHJlYW1lcjo6c2V0U2lua1BhZChHUmVmUHRyPEdzdFBhZD4mJiBwYWQpCit7CisgICAgbV93ZWJy
dGNTaW5rUGFkID0gV1RGTW92ZShwYWQpOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNj
ZWl2ZXI+IHRyYW5zY2VpdmVyOworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y1NpbmtQYWQuZ2V0
KCksICJ0cmFuc2NlaXZlciIsICZ0cmFuc2NlaXZlci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAg
bV9zZW5kZXIuY2xlYXIoKTsKKyAgICBnX29iamVjdF9nZXQodHJhbnNjZWl2ZXIuZ2V0KCksICJz
ZW5kZXIiLCAmbV9zZW5kZXIub3V0UHRyKCksIG51bGxwdHIpOworfQorCit9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42ZTVjMWNkMmRlNWQ2NGMzNjFhY2VmZTZmNDMwN2ZhZmQ3NDhkYWM2Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEs
ODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvVGhy
ZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFs
dGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNv
dW50ZWQ8UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyPiwgcHVibGljIE1lZGlh
U3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgflJlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpOworCisgICAgdm9pZCBzdGFydCgpOworICAgIHZv
aWQgc3RvcCgpOworICAgIHZvaWQgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4mJik7CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0
dXJuIG1fc291cmNlLT5nZXQoKTsgfQorCisgICAgY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgYWxs
b3dlZENhcHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93ZWRDYXBzOyB9CisKKyAgICB2b2lkIGxp
bmsoKTsKKyAgICBjb25zdCBHUmVmUHRyPEdzdFBhZD4mIHBhZCgpIGNvbnN0IHsgcmV0dXJuIG1f
d2VicnRjU2lua1BhZDsgfQorICAgIHZvaWQgc2V0U2lua1BhZChHUmVmUHRyPEdzdFBhZD4mJik7
CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVyKCkgY29uc3QgeyByZXR1
cm4gbV9zZW5kZXI7IH0KKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGJpbigpIGNvbnN0IHsgcmV0
dXJuIG1fYmluOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2V0UGF5bG9hZFR5cGUoY29uc3QgR1Jl
ZlB0cjxHc3RDYXBzPiYpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBs
aWNpdCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKKworICAgIHZvaWQg
aW5pdGlhbGl6ZUZyb21UcmFjaygpOworCisgICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07Cisg
ICAgYm9vbCBtX211dGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNTdG9wcGVkIHsgZmFsc2Ug
fTsKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IG1fc291
cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2lu
aXRpYWxTZXR0aW5nczsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYmluOworICAgIEdSZWZQ
dHI8R3N0RWxlbWVudD4gbV9vdXRnb2luZ1NvdXJjZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fdmFsdmU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ByZUVuY29kZXJRdWV1ZTsKKyAg
ICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZW5jb2RlcjsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+
IG1fcGF5bG9hZGVyOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9wb3N0RW5jb2RlclF1ZXVl
OworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9jYXBzRmlsdGVyOworICAgIEdSZWZQdHI8R3N0
Q2Fwcz4gbV9hbGxvd2VkQ2FwczsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9z
ZW5kZXI7CisgICAgR1JlZlB0cjxHc3RQYWQ+IG1fd2VicnRjU2lua1BhZDsKKworcHJpdmF0ZToK
KyAgICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOworICAgIHZvaWQgc291cmNlRW5hYmxlZENo
YW5nZWQoKTsKKworICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBBUEkK
KyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgb3Zl
cnJpZGUgeyBzb3VyY2VNdXRlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tFbmFibGVkQ2hh
bmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgc291cmNlRW5hYmxlZENo
YW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVkaWFTdHJlYW1UcmFj
a1ByaXZhdGUmKSBvdmVycmlkZSB7IGluaXRpYWxpemVGcm9tVHJhY2soKTsgfQorICAgIHZvaWQg
dHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgfQorfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiOGY2MzRiMjM0MDA3YjFlOTYwYmJhMWU1
NjczOTNmNjEyY2YyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVh
bWVyLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRl
ICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKworR1NUX0RFQlVHX0NBVEVHT1JZX0VY
VEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZB
VUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNl
KQorICAgIDogUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBy
ZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CisKKyAgICBtX3ZpZGVvQ29udmVydCA9
IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252ZXJ0IiwgbnVsbHB0cik7CisgICAg
bV9lbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3ZWJydGN2aWRlb2VuY29kZXIi
LCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQo
KSksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX2VuY29kZXIuZ2V0KCksIG51bGxwdHIpOworCisg
ICAgYXV0byogcGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9nZXRfcGFkX3RlbXBsYXRlKG1fZW5j
b2Rlci5nZXQoKSwgInNyYyIpOworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX3Rl
bXBsYXRlX2dldF9jYXBzKHBhZFRlbXBsYXRlKSk7CisgICAgbV9hbGxvd2VkQ2FwcyA9IGFkb3B0
R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZ3N0X2NhcHNfZm9yZWFjaChjYXBzLmdl
dCgpLCByZWludGVycHJldF9jYXN0PEdzdENhcHNGb3JlYWNoRnVuYz4oK1tdKEdzdENhcHNGZWF0
dXJlcyosIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAg
ICAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PFJlYWx0aW1lT3V0Z29pbmdWaWRl
b1NvdXJjZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSA9
IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKKyAgICAgICAgY29uc3QgY2hhciog
ZW5jb2RpbmdOYW1lID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94
LXZwOCIpKQorICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIlZQOCI7CisgICAgICAgIGVsc2Ug
aWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LXZwOSIpKQorICAgICAgICAgICAgZW5jb2RpbmdOYW1l
ID0gIlZQOSI7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LWgyNjQiKSkK
KyAgICAgICAgICAgIGVuY29kaW5nTmFtZSA9ICJIMjY0IjsKKyAgICAgICAgaWYgKGVuY29kaW5n
TmFtZSkKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUoc291cmNlLT5tX2Fs
bG93ZWRDYXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGljYXRpb24veC1ydHAiLCAi
bWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAidmlkZW8iLCAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9T
VFJJTkcsIGVuY29kaW5nTmFtZSwgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCA5MDAwMCwgbnVs
bHB0cikpOworICAgIH0pLCB0aGlzKTsKKworICAgIHNldFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkp
OworfQorCitib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5
bG9hZFR5cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcykKK3sKKyAgICBHU1RfREVCVUdf
T0JKRUNUKG1fYmluLmdldCgpLCAiT3V0Z29pbmcgdmlkZW8gc291cmNlIHBheWxvYWQgY2Fwczog
JSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAgIGF1dG8qIHN0cnVjdHVyZSA9IGdz
dF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgMCk7CisgICAgR1JlZlB0cjxHc3RDYXBz
PiBlbmNvZGVyQ2FwczsKKyAgICBpZiAoY29uc3QgY2hhciogZW5jb2RpbmdOYW1lID0gZ3N0X3N0
cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImVuY29kaW5nLW5hbWUiKSkgeworICAgICAg
ICBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiVlA4IikpIHsKKyAgICAgICAgICAgIGVuY29kZXJD
YXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtdnA4Iikp
OworICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwdnA4
cGF5IiwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAi
VlA5IikpIHsKKyAgICAgICAgICAgIGVuY29kZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25l
d19lbXB0eV9zaW1wbGUoInZpZGVvL3gtdnA5IikpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIg
PSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwdnA5cGF5IiwgbnVsbHB0cik7CisgICAgICAgIH0g
ZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiSDI2NCIpKSB7CisgICAgICAgICAgICBlbmNv
ZGVyQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LWgy
NjQiKSk7CisgICAgICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJy
dHBoMjY0cGF5IiwgbnVsbHB0cik7CisgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9naXRs
YWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1nb29kLy0vaXNzdWVzLzg5
MworICAgICAgICAgICAgLy8gZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1QobV9wYXls
b2FkZXIuZ2V0KCkpLCAiYWdncmVnYXRlLW1vZGUiLCAiemVyby1sYXRlbmN5Iik7CisgICAgICAg
ICAgICAvLyBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwi
LCAtMSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHU1RfRVJST1Jf
T0JKRUNUKG1fYmluLmdldCgpLCAiVW5zdXBwb3J0ZWQgb3V0Z29pbmcgdmlkZW8gZW5jb2Rpbmc6
ICVzIiwgZW5jb2RpbmdOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAg
fQorICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJl
bmNvZGluZy1uYW1lIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQor
CisgICAgaWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8g
RklYTUU6IFJlLWVuYWJsZSB0aGlzLiBDdXJyZW50bHkgdHJpZ2dlcnMgY2FwcyBuZWdvdGlhdGlv
biBlcnJvci4KKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJhdXRvLWhlYWRl
ci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBnX29iamVjdF9zZXQobV9lbmNv
ZGVyLmdldCgpLCAiZm9ybWF0IiwgZW5jb2RlckNhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAg
aW50IHBheWxvYWRUeXBlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJl
LCAicGF5bG9hZCIsICZwYXlsb2FkVHlwZSkpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BheWxv
YWRlci5nZXQoKSwgInB0IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIpOworCisgICAgYXV0byBmaWx0
ZXJlZENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwoZ3N0X3N0cnVjdHVyZV9jb3B5
KHN0cnVjdHVyZSksIG51bGxwdHIpKTsKKyAgICBnX29iamVjdF9zZXQobV9jYXBzRmlsdGVyLmdl
dCgpLCAiY2FwcyIsIGZpbHRlcmVkQ2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBnc3RfYmlu
X2FkZChHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3BheWxvYWRlci5nZXQoKSk7CisgICAg
Z3N0X2VsZW1lbnRfbGlua19tYW55KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIG1fdmFsdmUuZ2V0
KCksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX3ByZUVuY29kZXJRdWV1ZS5nZXQoKSwKKyAgICAg
ICAgbV9lbmNvZGVyLmdldCgpLCBtX3BheWxvYWRlci5nZXQoKSwgbV9wb3N0RW5jb2RlclF1ZXVl
LmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgK
bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMC4uODE1MWZkY2EwMjMzMjI0NWFjYzlhZmYyMTVkMjk1MGQxZWY1MzQ3ZgotLS0g
L2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaApAQCAtMCwwICsxLDQ3
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ01lZGlh
U291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyIGZpbmFsIDogcHVibGljIFJlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU+JiYgc291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKHNvdXJjZSkpKTsgfQorCisgICAgdm9p
ZCBzZXRBcHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3Nob3VsZEFw
cGx5Um90YXRpb24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9CisKKyAgICBib29sIHNldFBheWxv
YWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsKKworcHJvdGVjdGVkOgorICAg
IGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFT
dHJlYW1UcmFja1ByaXZhdGU+JiYpOworCisgICAgYm9vbCBtX3Nob3VsZEFwcGx5Um90YXRpb24g
eyBmYWxzZSB9OworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92aWRlb0Nv
bnZlcnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUHJvdmlkZXIuY3BwCmluZGV4
IDEwNjQ2YjdlOTMzZjZhYmJjZmQ1YTU5MjkzNTE4MjY4NmRkNDY0OWUuLmUxZjhlMTQyNGRmYzkx
ZDExYjc5NzM0YWY2ZmNmOGVlYjg5ZTQxZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1By
b3ZpZGVyLmNwcApAQCAtNTcxLDcgKzU3MSw2IEBAIHN0ZDo6b3B0aW9uYWw8UlRDUnRwQ29kZWND
YXBhYmlsaXR5PiBMaWJXZWJSVENQcm92aWRlcjo6Y29kZWNDYXBhYmlsaXR5KGNvbnN0IENvCiAg
ICAgfQogICAgIHJldHVybiB7IH07CiB9Ci0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKIAogI2lm
ICFQTEFURk9STShDT0NPQSkKIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlc2Ugcm91dGluZXMuCkBA
IC01ODQsNyArNTgzLDkgQEAgc3RhdGljIGJvb2wgaXNWUFNvZnR3YXJlRGVjb2RlclNtb290aChj
b25zdCBWaWRlb0NvbmZpZ3VyYXRpb24mKQogewogICAgIHJldHVybiB0cnVlOwogfQotI2VuZGlm
CisjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykK
IAogdm9pZCBMaWJXZWJSVENQcm92aWRlcjo6Y3JlYXRlRGVjb2RpbmdDb25maWd1cmF0aW9uKE1l
ZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlvbiwgRGVjb2RpbmdDb25maWd1
cmF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxz
LmNwcAppbmRleCAxODNjY2UxOTc2MzgyMDFiZTdiNGViY2Q0Nzg3OTMxNjJlNjE0NjNkLi5iNzM1
YmYxNDBiZTNmN2VlYmQ1MGUzMjU0MjRiNzIwNjhiNGYyMjYxIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGlu
Zy9JbnRlcm5hbHMuY3BwCkBAIC01OTksNiArNTk5LDkgQEAgdm9pZCBJbnRlcm5hbHM6OnJlc2V0
VG9Db25zaXN0ZW50U3RhdGUoUGFnZSYgcGFnZSkKICAgICBydGNQcm92aWRlci5zZXRIMjY1U3Vw
cG9ydCh0cnVlKTsKICAgICBydGNQcm92aWRlci5zZXRWUDlTdXBwb3J0KHRydWUsIHRydWUpOwog
ICAgIHJ0Y1Byb3ZpZGVyLmNsZWFyRmFjdG9yeSgpOworI2VsaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisgICAgcGFnZS5zZXR0aW5ncygpLnNldFdlYlJUQ0VuY3J5cHRpb25FbmFibGVkKHRydWUp
OworICAgIHBhZ2Uuc2V0dGluZ3MoKS5zZXRQZWVyQ29ubmVjdGlvbkVuYWJsZWQodHJ1ZSk7CiAj
ZW5kaWYKIAogICAgIHBhZ2Uuc2V0RnVsbHNjcmVlbkF1dG9IaWRlRHVyYXRpb24oMF9zKTsKQEAg
LTE2MTksNiArMTYyMiw3IEBAIHZvaWQgSW50ZXJuYWxzOjphcHBseVJvdGF0aW9uRm9yT3V0Z29p
bmdWaWRlb1NvdXJjZXMoUlRDUGVlckNvbm5lY3Rpb24mIGNvbm5lY3RpCiB7CiAgICAgY29ubmVj
dGlvbi5hcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKTsKIH0KKwogdm9pZCBJ
bnRlcm5hbHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KGJvb2wgdmFsdWUpCiB7CiAjaWYgVVNFKExJ
QldFQlJUQykKQEAgLTE2MjYsNiArMTYzMCw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRXZWJSVENI
MjY1U3VwcG9ydChib29sIHZhbHVlKQogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigp
LnNldEgyNjVTdXBwb3J0KHZhbHVlKTsKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIo
KS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7
CiAjZW5kaWYKIH0KIApAQCAtMTYzNiw2ICsxNjQyLDkgQEAgdm9pZCBJbnRlcm5hbHM6OnNldFdl
YlJUQ1ZQOVN1cHBvcnQoYm9vbCBzdXBwb3J0VlA5UHJvZmlsZTAsIGJvb2wgc3VwcG9ydFZQOVBy
b2YKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRWUDlTdXBwb3J0KHN1cHBv
cnRWUDlQcm9maWxlMCwgc3VwcG9ydFZQOVByb2ZpbGUyKTsKICAgICAgICAgcGFnZS0+bGliV2Vi
UlRDUHJvdmlkZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9Q
QVJBTShzdXBwb3J0VlA5UHJvZmlsZTApOworICAgIFVOVVNFRF9QQVJBTShzdXBwb3J0VlA5UHJv
ZmlsZTIpOwogI2VuZGlmCiB9CiAKQEAgLTE2NDYsNiArMTY1NSw4IEBAIHZvaWQgSW50ZXJuYWxz
OjpzZXRXZWJSVENWUDlWVEJTdXBwb3J0KGJvb2wgdmFsdWUpCiAgICAgICAgIHBhZ2UtPmxpYldl
YlJUQ1Byb3ZpZGVyKCkuc2V0VlA5VlRCU3VwcG9ydCh2YWx1ZSk7CiAgICAgICAgIHBhZ2UtPmxp
YldlYlJUQ1Byb3ZpZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAgICAgfQorI2Vsc2UKKyAgICBVTlVT
RURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2ODYsNiArMTY5Nyw4IEBAIHZvaWQg
SW50ZXJuYWxzOjpzZXRFbmFibGVXZWJSVENFbmNyeXB0aW9uKGJvb2wgdmFsdWUpCiAjaWYgVVNF
KExJQldFQlJUQykKICAgICBpZiAoYXV0byogcGFnZSA9IGNvbnRleHREb2N1bWVudCgpLT5wYWdl
KCkpCiAgICAgICAgIHBhZ2UtPnNldHRpbmdzKCkuc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQo
dmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAg
LTE2OTYsNiArMTcwOSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRVc2VEVExTMTAoYm9vbCB1c2VE
VExTMTApCiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAg
cmV0dXJuOwogICAgIGRvY3VtZW50LT5wYWdlKCktPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0VXNl
RFRMUzEwKHVzZURUTFMxMCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1c2VEVExTMTApOwog
I2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNtYWtl
IGIvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKaW5kZXggMDY2MzNlZDRkODk5ZjI4
M2NlZDQ1OGNkYjgzOTE4MjhiOGJjNWQzZS4uMzIxNmY2OTc0YjUzYzBjNzM4NzRmOWZlZGNhZmYy
OWM4YmMwYTIyYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UK
KysrIGIvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKQEAgLTI4LDYgKzI4LDkgQEAK
ICMgIGdzdHJlYW1lci1jb2RlY3BhcnNlcjpHU1RSRUFNRVJfQ09ERUNQQVJTRVJTX0lOQ0xVREVf
RElSUyBhbmQgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVMKICMgIGdzdHJlYW1lci1m
dWxsOiAgICAgICBHU1RSRUFNRVJfRlVMTF9JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9GVUxM
X0xJQlJBUklFUwogIyAgZ3N0cmVhbWVyLXRyYW5zY29kZXI6IEdTVFJFQU1FUl9UUkFOU0NPREVS
X0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1RSQU5TQ09ERVJfTElCUkFSSUVTCisjICBnc3Ry
ZWFtZXItcnRwOiAgICAgICAgR1NUUkVBTUVSX1JUUF9JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1F
Ul9SVFBfTElCUkFSSUVTCisjICBnc3RyZWFtZXItc2RwOiAgICAgICAgR1NUUkVBTUVSX1NEUF9J
TkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9TRFBfTElCUkFSSUVTCisjICBnc3RyZWFtZXItd2Vi
cnRjOiAgICAgR1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9XRUJS
VENfTElCUkFSSUVTCiAjCiAjIENvcHlyaWdodCAoQykgMjAxMiBSYXBoYWVsIEt1Ym8gZGEgQ29z
dGEgPHJha3Vjb0B3ZWJraXQub3JnPgogIwpAQCAtMTEwLDYgKzExMyw5IEBAIEZJTkRfR1NUUkVB
TUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVEFHIGdzdHJlYW1lci10YWctMS4wIGdzdHRhZy0xLjAp
CiBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX1ZJREVPIGdzdHJlYW1lci12aWRl
by0xLjAgZ3N0dmlkZW8tMS4wKQogRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9D
T0RFQ1BBUlNFUlMgZ3N0cmVhbWVyLWNvZGVjcGFyc2Vycy0xLjAgZ3N0Y29kZWNwYXJzZXJzLTEu
MCkKIEZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVFJBTlNDT0RFUiBnc3RyZWFt
ZXItdHJhbnNjb2Rlci0xLjAgZ3N0dHJhbnNjb2Rlci0xLjApCitGSU5EX0dTVFJFQU1FUl9DT01Q
T05FTlQoR1NUUkVBTUVSX1JUUCBnc3RyZWFtZXItcnRwLTEuMCBnc3RydHAtMS4wKQorRklORF9H
U1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9TRFAgZ3N0cmVhbWVyLXNkcC0xLjAgZ3N0c2Rw
LTEuMCkKK0ZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfV0VCUlRDIGdzdHJlYW1l
ci13ZWJydGMtMS4wIGdzdHdlYnJ0Yy0xLjApCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIDMuIFByb2Nlc3MgdGhlIENPTVBPTkVOVFMgcGFz
c2VkIHRvIEZJTkRfUEFDS0FHRQpAQCAtMTU0LDQgKzE2MCw2IEBAIG1hcmtfYXNfYWR2YW5jZWQo
CiAgICAgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVMKICAgICBHU1RSRUFNRVJfRlVM
TF9JTkNMVURFX0RJUlMKICAgICBHU1RSRUFNRVJfRlVMTF9MSUJSQVJJRVMKKyAgICBHU1RSRUFN
RVJfV0VCUlRDX0lOQ0xVREVfRElSUworICAgIEdTVFJFQU1FUl9XRUJSVENfTElCUkFSSUVTCiAp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlIGIvU291cmNl
L2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZQppbmRleCA5MTFmNmU2Yzk1YWI4MzBiNmZjMDJl
MDFlZGI3NzU0ZmE5MTJmMzRhLi4xZTc1NmJkMTY3MzQyNTNkNjU4YmFhODZmNTY3MmE2NTljODgz
OGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlCisrKyBi
L1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UKQEAgLTMyLDYgKzMyLDEwIEBAIGlm
IChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgICAgICAgbGlzdChB
UFBFTkQgR1NUUkVBTUVSX0NPTVBPTkVOVFMgdHJhbnNjb2RlcikKICAgICAgICAgICBlbmRpZiAo
KQogCisgICAgICAgICAgaWYgKFVTRV9HU1RSRUFNRVJfV0VCX1JUQykKKyAgICAgICAgICAgICAg
bGlzdChBUFBFTkQgR1NUUkVBTUVSX0NPTVBPTkVOVFMgd2VicnRjKQorICAgICAgICAgIGVuZGlm
ICgpCisKICAgICAgICAgICBmaW5kX3BhY2thZ2UoR1N0cmVhbWVyIDEuMTQuMCBSRVFVSVJFRCBD
T01QT05FTlRTICR7R1NUUkVBTUVSX0NPTVBPTkVOVFN9KQogCiAgICAgICAgICAgaWYgKEVOQUJM
RV9XRUJfQVVESU8pCkBAIC01OCwxMSArNjIsMjMgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFC
TEVfV0VCX0FVRElPKQogICAgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJHU3RyZWFt
ZXJUcmFuc2NvZGVyID49IDEuMjAgaXMgbmVlZGVkIGZvciBVU0VfR1NUUkVBTUVSX1RSQU5TQ09E
RVIuIikKICAgICAgICAgICBlbmRpZiAoKQogCisgICAgICAgICAgaWYgKFVTRV9HU1RSRUFNRVJf
V0VCUlRDIEFORCAoUENfR1NUUkVBTUVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxLjIwIiBPUiBO
T1QgUENfR1NUUkVBTUVSX1dFQlJUQ19GT1VORCkpCisgICAgICAgICAgICAgIG1lc3NhZ2UoRkFU
QUxfRVJST1IgIkdTdHJlYW1lcldlYlJUQyA+PSAxLjIwIGlzIG5lZWRlZCBmb3IgVVNFX0dTVFJF
QU1FUl9XRUJSVEMuIikKKyAgICAgICAgICBlbmRpZiAoKQogICAgICAgZW5kaWYgKCkKIGVuZGlm
ICgpCiAKIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNIEFORCBFTkFCTEVfV0VCX1JUQykKLSAgICBT
RVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIFRSVUUpCisgICAgaWYgKFVTRV9H
U1RSRUFNRVJfV0VCUlRDKQorICAgICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElC
V0VCUlRDIEZBTFNFKQorCisgICAgICAgIGZpbmRfcGFja2FnZShPcGVuU1NMKQorICAgICAgICBp
ZiAoTk9UIE9QRU5TU0xfRk9VTkQpCisgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJP
cGVuU1NMIGlzIG5lZWRlZCBmb3IgVVNFX0dTVFJFQU1FUl9XRUJSVEMuIikKKyAgICAgICAgZW5k
aWYgKCkKKyAgICBlbHNlICgpCisgICAgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9M
SUJXRUJSVEMgVFJVRSkKKyAgICBlbmRpZiAoKQogZWxzZSAoKQogICAgIFNFVF9BTkRfRVhQT1NF
X1RPX0JVSUxEKFVTRV9MSUJXRUJSVEMgRkFMU0UpCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291
cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlIGIvU291cmNlL2NtYWtlL0dTdHJl
YW1lckRlZmluaXRpb25zLmNtYWtlCmluZGV4IDM5NGY4MGNhMjQ3ZTU5Y2EzODk5NWUwOTE2YTEw
MDg0OGYzYjY3M2MuLmQ1YWYwZTIyYjA0MThhYzQwODA4MjU5MjFjZGVjNWQ0YjQ4M2QxYjggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQorKysgYi9T
b3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UKQEAgLTExLDMgKzExLDQgQEAg
V0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9OQVRJVkVfVklERU8gIlRvZ2dsZSBu
YXRpdmUgdmlkZW8gc3VwcG9ydCBpbgogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1F
Ul9OQVRJVkVfQVVESU8gIlRvZ2dsZSBuYXRpdmUgYXVkaW8gc3VwcG9ydCBpbiBHU3RyZWFtZXIg
bWVkaWEgcGxheWVyIiBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RS
RUFNRVJfVEVYVF9TSU5LICJUb2dnbGUgdGV4dCBzaW5rIHN1cHBvcnQgaW4gR1N0cmVhbWVyIG1l
ZGlhIHBsYXllciIgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RSRUFN
RVJfVFJBTlNDT0RFUiAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgR1N0cmVhbWVyIE1l
ZGlhUmVjb3JkZXIgYmFja2VuZCIgUFJJVkFURSBPTikKK1dFQktJVF9PUFRJT05fREVGSU5FKFVT
RV9HU1RSRUFNRVJfV0VCUlRDICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBXZWJSVEMi
IFBSSVZBVEUgT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5j
aWVzLmNtYWtlIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVuZGVuY2llcy5jbWFrZQppbmRl
eCAyM2QyMWY1MmQwNTUwNTMyNTY5NWQzYTFhZmExZjg3MTY3MWMwYTFjLi43M2Y5M2M4MTU3MjZh
NzE3N2UyZjk1NGNiMTZjNjRiODNkZDIyYjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0
cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBl
bmRlbmNpZXMuY21ha2UKQEAgLTIsMyArMiw0IEBAIFdFQktJVF9PUFRJT05fREVQRU5EKFVTRV9H
U1RSRUFNRVJfR0wgRU5BQkxFX1ZJREVPKQogV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX0dTVFJF
QU1FUl9NUEVHVFMgRU5BQkxFX1ZJREVPKQogV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX1dQRV9W
SURFT19QTEFORV9ESVNQTEFZX0RNQUJVRiBVU0VfR1NUUkVBTUVSX0dMKQogV0VCS0lUX09QVElP
Tl9ERVBFTkQoVVNFX0dTVFJFQU1FUl9UUkFOU0NPREVSIEVOQUJMRV9NRURJQV9SRUNPUkRFUikK
K1dFQktJVF9PUFRJT05fREVQRU5EKFVTRV9HU1RSRUFNRVJfV0VCUlRDIEVOQUJMRV9XRUJfUlRD
KQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IDdj
MTE0NmJjYTU5OTM3NTJjZDZmOTAwZjQ0ZTVlZjNjMWRkOTc1Y2MuLmQzNjk4NjEyNTRmNjEyYzlm
ZThlZTE3MWUyYmY4Mjk2MTAwZTQ5NDcgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysg
Yi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUg
Tm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5p
dGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NDAKKworICAgICAgICBSZXZpZXdlZCBi
eSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGZsYXRwYWsvZmxhdHBha3V0aWxzLnB5Ogor
ICAgICAgICAoV2Via2l0RmxhdHBhay5ydW5faW5fc2FuZGJveCk6IEFsbG93IGxpYm5pY2UgZGVi
dWcgbG9nIGVudmlyb25tZW50IHZhcmlhYmxlIGluIHJ1bnRpbWUgc2FuZGJveC4KKwogMjAyMi0w
My0xNyAgT3Jpb2wgQnJ1ZmF1ICA8b2JydWZhdUBpZ2FsaWEuY29tPgogCiAgICAgICAgIENsYXJp
ZnkgY29kZSBmb3IgbG9naWNhbC10by1waHlzaWNhbCBtYXBwaW5ncywgYW5kIGFkZCBwaHlzaWNh
bC10by1sb2dpY2FsIG1hcHBpbmdzCmRpZmYgLS1naXQgYS9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1
dGlscy5weSBiL1Rvb2xzL2ZsYXRwYWsvZmxhdHBha3V0aWxzLnB5CmluZGV4IDRhNjk1YzI2ZGM0
Y2I1YjA3NmRjM2FmYzhjMzI3ZTExNTM1N2UwMTMuLjZjN2JiZjkyNDVjM2FkOTgyZWZhOWM4Zjcz
MjQ2MTU4OWJlYTg2OWQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL2ZsYXRwYWsvZmxhdHBha3V0aWxzLnB5
CisrKyBiL1Rvb2xzL2ZsYXRwYWsvZmxhdHBha3V0aWxzLnB5CkBAIC04MzgsNiArODM4LDcgQEAg
Y2xhc3MgV2Via2l0RmxhdHBhazoKICAgICAgICAgICAgICJNRVNBIiwKICAgICAgICAgICAgICJM
SUJHTCIsCiAgICAgICAgICAgICAiUElQRVdJUkUiLAorICAgICAgICAgICAgIk5JQ0UiLAogICAg
ICAgICAgICAgIlJVU1QiLAogICAgICAgICAgICAgIlNDQ0FDSEUiLAogICAgICAgICAgICAgIlNQ
QSIsCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cKaW5kZXggOGJiY2M2ZGQxODI3ZmY4YzE0N2JjZGY4MGJkYzEzOGU1OGFmN2E1Ni4uZWNh
NTk2YjYyODVmYzdjYWI1NWY1YWQzZTBlMTM3MzU2NzhmMGFkZCAxMDA2NDQKLS0tIGEvTGF5b3V0
VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4
IEBACisyMDIyLTAyLTEyICBQaGlsaXBwZSBOb3JtYW5kICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4K
KworICAgICAgICBbR1N0cmVhbWVyXSBJbml0aWFsIGltcG9ydCBvZiB0aGUgR3N0V2ViUlRDIGJh
Y2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIz
NjU0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICog
cGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zOiBGbGFnIG1vc3QgV2ViUlRDIGFzIGZhaWxp
bmcuIER1cmluZyB0aGlzIGZpcnN0IGRldmVsb3BtZW50CisgICAgICAgIGN5Y2xlIEkgZm9jdXNl
ZCBtb3N0bHkgb24gZml4aW5nIGNyYXNoZXMgYW5kIG9ubHkgZml4ZWQgYSBmZXcgZmFpbHVyZXMu
IFRoZSByZW1haW5pbmcgb25lcworICAgICAgICB3aWxsIGJlIGFkcmVzc2VkIGluIGZvbGxvdy11
cCBwYXRjaGVzLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAg
ICAgICogcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJl
bW90ZURlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0v
Z2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0
aW9uLW9mZmVyLWV4cGVjdGVkLnR4dDogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9m
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YWJsZS1leHBlY3RlZC50eHQ6IEFk
ZGVkLgorCiAyMDIyLTAzLTE3ICBBbmRyZXMgR29uemFsZXogIDxhbmRyZXNnXzIyQGFwcGxlLmNv
bT4KIAogICAgICAgICBGaXggZm9yIGFjY2Vzc2liaWxpdHkvYXJpYS10YWIteHh4Lmh0bWwgdGVz
dHMgaW4gaXNvbGF0ZWQgdHJlZSBtb2RlLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZv
cm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0
RXhwZWN0YXRpb25zCmluZGV4IDRhMWE1MmFlNDMzNzRhMmEzMTdlZmFiYTM3NmYzNGE5MjQzNGVl
ZGIuLjc4Mzk0YWQ2NmNhYTVkMzE4ZmY0MWU3NmU4NjJjMGUzYjg4NzBlYjUgMTAwNjQ0Ci0tLSBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9ucworKysgYi9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKQEAgLTg2NCw3ICs4NjQsNiBAQCB3
ZWJraXQub3JnL2IvMjI5OTczIG1lZGlhL3RyYWNrL2luLWJhbmQvdHJhY2staW4tYmFuZC1zcnQt
bWt2LWN1ZXMtYWRkZWQtb25jZS5odAogCiB3ZWJraXQub3JnL2IvMjMwMDI4IG1lZGlhL21lZGlh
LXNvdXJjZS9tZWRpYS1zb3VyY2Utc2Vlay10d2ljZS5odG1sIFsgUGFzcyBUaW1lb3V0IF0KIAot
d2Via2l0Lm9yZy9iLzIzMTgxMSBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVs
ZW1lbnQtZW50ZXItYmFja2dyb3VuZC5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMx
ODExIG1lZGlhL2F1ZGlvLWJhY2tncm91bmQtcGxheWJhY2stcGxheWxpc3QuaHRtbCBbIEZhaWx1
cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS9tZWRpYS1zZXNzaW9uL2FjdGlvbkhhbmRs
ZXJJbnRlcm5hbE1hcHBpbmdzLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEg
bWVkaWEvbWVkaWEtc2Vzc2lvbi9kZWZhdWx0LWFjdGlvbkhhbmRsZXJzLmh0bWwgWyBGYWlsdXJl
IF0KQEAgLTg3Myw3ICs4NzIsNiBAQCB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLWNv
bmN1cnJlbnQtcGxheWJhY2suaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBt
ZWRpYS92aWRlby1pbnRlcnJ1cHRpb24td2l0aC1yZXN1bWUtbm90LWFsbG93aW5nLXBsYXkuaHRt
bCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS92aWRlby1tdWx0aXBsZS1j
b25jdXJyZW50LXBsYXliYWNrLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEg
bWVkaWEvd2ViYXVkaW8tYmFja2dyb3VuZC1wbGF5YmFjay5odG1sIFsgRmFpbHVyZSBdCi13ZWJr
aXQub3JnL2IvMjMxODExIHdlYnJ0Yy9jb25jdXJyZW50VmlkZW9QbGF5YmFjazIuaHRtbCBbIEZh
aWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS9tZWRpYS1zZXNzaW9uL2NhbGxBY3Rp
b25IYW5kbGVyLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvbWVk
aWEtc2Vzc2lvbi9wbGF5LWFmdGVyLXNlZWsuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9i
LzIzMTgxMSBtZWRpYS9yZW1vdGUtY29udHJvbC1jb21tYW5kLWlzLXVzZXItZ2VzdHVyZS5odG1s
IFsgVGltZW91dCBdCkBAIC04ODYsMTAgKzg4NCwxMCBAQCB3ZWJraXQub3JnL2IvMjMxODExIG1l
ZGlhL3ZpZGVvLXN5c3RlbS1zbGVlcC5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMx
ODExIHdlYmF1ZGlvL2F1ZGlvY29udGV4dC1zdGF0ZS1pbnRlcnJ1cHRlZC5odG1sIFsgVGltZW91
dCBdCiB3ZWJraXQub3JnL2IvMjMxODExIHdlYmF1ZGlvL3N1c3BlbmQtY29udGV4dC13aGlsZS1p
bnRlcnJ1cHRlZC5odG1sIFsgVGltZW91dCBdCiAKKyMgcnZmYyByZWxhdGVkIGZhaWx1cmVzCiBp
bXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3ZpZGVvLXJ2ZmMgWyBQYXNzIF0KIGZhc3Qv
bWVkaWFzdHJlYW0vZ2V0VXNlck1lZGlhLXJ2ZmMuaHRtbCBbIFBhc3MgRmFpbHVyZSBdCiB3ZWJy
dGMvcGVlckNvbm5lY3Rpb24tcnZmYy5odG1sIFsgRmFpbHVyZSBdCi13ZWJydGMvY2FudmFzLXRv
LXBlZXItY29ubmVjdGlvbi5odG1sIFsgRmFpbHVyZSBdCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3ZpZGVvLXJ2ZmMvcmVxdWVzdC12aWRlby1mcmFtZS1jYWxsYmFjay13ZWJydGMu
aHR0cHMuaHRtbCBbIFNraXAgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRl
by1ydmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2stYmVmb3JlLXhyLXNlc3Npb24uaHR0
cHMuaHRtbCBbIFNraXAgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1y
dmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2stZHVyaW5nLXhyLXNlc3Npb24uaHR0cHMu
aHRtbCBbIFNraXAgXQpAQCAtOTA3LDEwICs5MDUsODkgQEAgd2Via2l0Lm9yZy9iLzIzNDA4NCBt
ZWRpYS90cmFjay9hdWRpby10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KICMg
Yml0cmF0ZSBlc3RpbWF0aW9uLgogd2Via2l0Lm9yZy9iLzIzNDA4NCBtZWRpYS90cmFjay92aWRl
by10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KIAotd2Via2l0Lm9yZy9iLzIz
Nzg3MiB3ZWJydGMvdnA4LXRoZW4taDI2NC5odG1sIFsgQ3Jhc2ggXQotCiB3ZWJraXQub3JnL2Iv
MjM3OTAxIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2UtaW50ZXJydXB0aW9uLXdpdGgt
cmVzdW1lLWFsbG93aW5nLXBsYXkuaHRtbCBbIFNsb3cgXQogCisjIERhdGFDaGFubmVsIEdzdFdl
YlJUQyBpbXBsZW1lbnRhdGlvbiBpbmNvbXBsZXRlCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy9kYXRhY2hhbm5lbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93ZWJy
dGMvdHJhbnNmZXItZGF0YWNoYW5uZWwtc2VydmljZS13b3JrZXIuaHR0cHMuaHRtbCBbIFNraXAg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LXN0YXRzU2VsZWN0b3IuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21l
ZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVsLmh0bWwgWyBTa2lwIF0KKwor
IyBUaGUgR3N0V2ViUlRDIGJhY2tlbmQgZG9lc24ndCBzdXBwb3J0IHRyYW5zZm9ybXMgeWV0Lgor
d2Via2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93ZWJydGMvYXVkaW92aWRlby1zY3JpcHQtdHJh
bnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0cC93cHQvd2VicnRj
L3ZpZGVvLXNjcmlwdC10cmFuc2Zvcm0ta2V5ZnJhbWUtb25seS5odG1sIFsgU2tpcCBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy92aWRlby1zY3JpcHQtdHJhbnNmb3JtLmh0
bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2NyaXB0LWF1ZGlvLXRyYW5zZm9ybS5o
dHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3JtL3NjcmlwdC1jaGFuZ2UtdHJh
bnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQv
dzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2NyaXB0LW1l
dGFkYXRhLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3Jt
L3NjcmlwdC10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1lbmNvZGVkLXRyYW5zZm9y
bS9zY3JpcHQtd3JpdGUtdHdpY2UtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KKworIyBU
aGUgZ2VuZXJhdGVkIFNEUCBvZmZlciBjdXJyZW50bHkgZG9lcyBub3QgcmVmbGVjdCB0aGUgY29k
ZWMtcHJlZmVyZW5jZXMgc2V0CisjIG9uIHRyYW5zY2VpdmVycy4gSW5zdGVhZCB0aGUgbmVnb3Rp
YXRlZCBvdXRnb2luZyBtZWRpYSBzb3VyY2UgY2FwcyBhcmUgdXNlZAorIyBhbmQgb3VyIGN1cnJl
bnQgaW1wbGVtZW50YXRpb24gb2Ygb3V0Z29pbmcgc291cmNlIGRvZXNuJ3Qgc3VwcG9ydCBtdWx0
aXBsZQorIyBwYXlsb2FkIHR5cGVzLgord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8t
cGVlci1jb25uZWN0aW9uLWc3MjIuaHRtbCBbIEZhaWx1cmUgXQorCit3ZWJraXQub3JnL2IvMjM1
ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tYWRkSWNlQ2FuZGlkYXRlLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1hZGRUcmFjay1yZXVzZS1zZW5kZXIuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhhdmUt
bG9jYWwtb2ZmZXIuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLWxvY2FsLXByYW5zd2VyLmh0bWwgWyBDcmFz
aCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24taGF2ZS1yZW1vdGUtb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhhdmUtcmVtb3RlLXByYW5zd2Vy
Lmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24taWNlY2FuZGlkYXRlLWV2ZW50Lmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1pbnNwZWN0
LWFuc3dlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbWVk
aWEtc2V0dXAtY2FsbGJhY2tzLXNpbmdsZS1kaWFsb2cuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNl
dHVwLXR3by1kaWFsb2dzLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tb25uZWdvdGlhdGlvbm5lZWRlZC5odG1sIFsg
UGFzcyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1wYWdlLWNhY2hlLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1
ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3RlbHktYXNzaWduZWQt
dHJhbnNjZWl2ZXItbWlkLmh0bWwgWyBQYXNzIEZhaWx1cmUgVGltZW91dCBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0TG9jYWxEZXNj
cmlwdGlvbi1vZmZlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXIu
aHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0cC93cHQvd2VicnRjL3RoaXJk
LXBhcnR5LWZyYW1lLWljZS1jYW5kaWRhdGUtZmlsdGVyaW5nLmh0bWwgWyBGYWlsdXJlIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMt
ZXh0ZW5zaW9ucy9SVENSdHBQYXJhbWV0ZXJzLW1heEZyYW1lcmF0ZS5odG1sIFsgRmFpbHVyZSBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2Vi
cnRjLWV4dGVuc2lvbnMvUlRDUnRwU3luY2hyb25pemF0aW9uU291cmNlLWNhcHR1cmVUaW1lc3Rh
bXAuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2Vi
LXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1wcmlvcml0eS9SVENSdHBQYXJhbWV0ZXJzLWVuY29kaW5n
cy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGluc3BlY3Rvci9wYWdlL292
ZXJyaWRlU2V0dGluZy1JQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFibGVkLmh0bWwgWyBUaW1lb3V0
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy9t
ZWRpYS1jYXBhYmlsaXRpZXMvZGVjb2RpbmdJbmZvLndlYnJ0Yy5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEt
Y2FwYWJpbGl0aWVzL2VuY29kaW5nSW5mby53ZWJydGMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYWRkVHJhbnNjZWl2ZXItdGhlbi1hZGRUcmFjay5odG1sIFsg
RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9hdWRpby12aWRlby1lbGVtZW50
LXBsYXlpbmcuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2Fu
ZGlkYXRlLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L2NhbnZhcy10by1wZWVyLWNvbm5lY3Rpb24uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMuaHRtbCBbIFRpbWVvdXQgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2xvc2luZy1wZWVyY29ubmVjdGlvbi5odG1sIFsgVGlt
ZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9kaXJlY3Rpb24tY2hhbmdlLmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2Rpc2FibGUtZW5jcnlwdGlv
bi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9lcGhlbWVyYWwt
Y2VydGlmaWNhdGVzLWFuZC1jbmFtZXMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRhdGUtYWZ0ZXItcmVsb2FkLmh0bWwgWyBU
aW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2gyNjQtcGFja2V0aXphdGlvbi1t
b2RlLmh0bWwgWyBUaW1lb3V0IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMv
bGlid2VicnRjL3NldExvY2FsRGVzY3JpcHRpb25DcmFzaC5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9uby1wb3J0LXplcm8taW4tdXBkLWNhbmRpZGF0ZXMuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9u
LXJlbW90ZS1hdWRpby1tdXRlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0ZTIuaHRtbCBbIFRpbWVvdXQg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25uZWN0aW9uLXRyYWNrLWVuZC5o
dG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9wZWVyY29ubmVjdGlv
bi1wYWdlLWNhY2hlLWxvbmcuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvcGVlcmNvbm5lY3Rpb24tcGFnZS1jYWNoZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZWNlaXZlci10cmFjay1zaG91bGQtc3RheS1saXZlLWV2ZW4t
aWYtcmVjZWl2ZXItaXMtaW5hY3RpdmUuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvcmVtb3ZlLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8y
MzU4ODUgd2VicnRjL3V0Zjgtc2RwLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL3ZpZGVvLWFkZFRyYW5zY2VpdmVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLWdldFBhcmFtZXRlcnMuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tbWVkaWFzdHJlYW10cmFjay1zdGF0cy5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1tdXRlLXZw
OC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1tdXRl
Lmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlcGxh
Y2UtdHJhY2stdG8tbnVsbC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy92aWRlby1yZXBsYWNlLXRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8y
MzU4ODUgd2VicnRjL3ZpZGVvLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8y
MzU4ODUgd2VicnRjL3ZpZGVvLXVubXV0ZS5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvdmlkZW8tdnA4LXZpZGVvcmFuZ2UuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8uaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvdnA4LXRoZW4taDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IHdlYnJ0Yy92cDktc3ZjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8y
MzU4ODUgd2VicnRjL3ZwOS5odG1sIFsgRmFpbHVyZSBdCisKICMvLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vCiAjIEVuZCBvZiBHU3RyZWFtZXItcmVsYXRlZCBidWdzCiAjLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTQzMCwxNiArMTUwNywxNCBAQCB3ZWJraXQub3Jn
L2IvNzkyMDMgd2Via2l0Lm9yZy9iLzE4NjY3OCBmYXN0L21lZGlhc3RyZWFtL01lZGlhU3RyZWFt
LXZpZGVvLWVsZW1lbgogCiBmYXN0L21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy1hZGRFdmVudExp
c3RlbmVyLmh0bWwgWyBEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIgXQogCi13ZWJraXQub3JnL2Iv
MTkxMDA2IHdlYnJ0Yy9zaW11bGNhc3QtaDI2NC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3Jn
L2IvMTkxMDA2IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3NpbXVsY2FzdC1oMjY0Lmh0bWwg
WyBGYWlsdXJlIFRpbWVvdXQgXQogCi13ZWJraXQub3JnL2IvMTkzNjQxIHdlYnJ0Yy92aWRlby1z
ZXREaXJlY3Rpb24uaHRtbCBbIEZhaWx1cmUgUGFzcyBdCit3ZWJraXQub3JnL2IvMTkzNjQxIHdl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXNldERpcmVjdGlvbi5odG1sIFsgRmFpbHVy
ZSBQYXNzIFRpbWVvdXQgXQogCiB3ZWJraXQub3JnL2IvMTk0NjExIGh0dHAvd3B0L3dlYnJ0Yy9n
ZXRVc2VyTWVkaWEtcHJvY2Vzc1N3YXBwaW5nLmh0bWwgWyBGYWlsdXJlIF0KIAogd2Via2l0Lm9y
Zy9iLzIwMTI2NyBbIFJlbGVhc2UgXSB3ZWJydGMvdmlkZW8taDI2NC5odG1sIFsgVGltZW91dCBG
YWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMjI1ODUgWyBEZWJ1ZyBdIHdlYnJ0Yy92aWRlby1oMjY0
Lmh0bWwgWyBDcmFzaCBdCi0KLXdlYmtpdC5vcmcvYi8yMTAyNzIgd2VicnRjL2RhdGFjaGFubmVs
L211bHRpcGxlLWNvbm5lY3Rpb25zLmh0bWwgWyBUaW1lb3V0IFBhc3MgXQord2Via2l0Lm9yZy9i
LzIyMjU4NSB3ZWJraXQub3JnL2IvMjM1ODg1IFsgRGVidWcgXSB3ZWJydGMvdmlkZW8taDI2NC5o
dG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMTUwMDUgd2Via2l0Lm9yZy9i
LzIxODc4NyB3ZWJydGMvaDI2NC1iYXNlbGluZS5odG1sIFsgQ3Jhc2ggVGltZW91dCBdCiAjIGgy
NjQtaGlnaC5odG1sIGlzIG1hcmtlZCBhcyBzbG93IGluIHRoZSByb290IGV4cGVjdGF0aW9uCkBA
IC0xNDQ4LDcgKzE1MjMsNyBAQCB3ZWJraXQub3JnL2IvMjE1MDA3IFsgRGVidWcgXSB3ZWJydGMv
aDI2NC1oaWdoLmh0bWwgWyBTbG93IEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMjE2NTM4IHdl
YnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2FyZS1oMjY0LWJhc2VsaW5lLmh0bWwgWyBT
bG93IEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2IvMjE2NzYzIHdlYnJ0Yy9jYXB0dXJlQ2FudmFz
LXdlYnJ0Yy1zb2Z0d2FyZS1oMjY0LWhpZ2guaHRtbCBbIENyYXNoIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIxNjc2MyB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdl
YnJ0Yy1zb2Z0d2FyZS1oMjY0LWhpZ2guaHRtbCBbIENyYXNoIEZhaWx1cmUgVGltZW91dCBdCiAK
IHdlYmtpdC5vcmcvYi8yMTgyMjEgd2VicnRjL3ZwOS1wcm9maWxlMi5odG1sIFsgVGltZW91dCBG
YWlsdXJlIF0KIApAQCAtMjI0MCwxMyArMjMxNSwxMiBAQCB3ZWJraXQub3JnL2IvMTg2MTAwIGNz
czMvY29sb3ItZmlsdGVycy9jb2xvci1maWx0ZXItY29sb3ItcHJvcGVydHktbGlzdC1pdGVtLmh0
bQogd2Via2l0Lm9yZy9iLzE4NjEwMCBmYXN0L2hpZHBpL2ZpbHRlcnMtdHVyYnVsZW5jZS5odG1s
IFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTg3MDQ0IHdlYmFuaW1hdGlvbnMv
b3BhY2l0eS1hbmltYXRpb24teWllbGRzLWNvbXBvc2l0aW5nLXNwYW4uaHRtbCBbIEZhaWx1cmUg
XQogCi13ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy9kYXRhY2hhbm5lbC9tZG5zLWljZS1jYW5k
aWRhdGVzLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVv
LWFkZFRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3Zp
ZGVvLWRpc2FibGVkLWJsYWNrLmh0bWwgWyBDcmFzaCBdCi13ZWJraXQub3JnL2IvMTg3MDY0IHdl
YnJ0Yy92aWRlby1yZW1vdGUtbXV0ZS5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE4NzA2
NCB3ZWJydGMvdmlkZW8tcmVwbGFjZS1tdXRlZC10cmFjay5odG1sIFsgVGltZW91dCBdCit3ZWJr
aXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJlcGxhY2Ut
bXV0ZWQtdHJhY2suaHRtbCBbIFRpbWVvdXQgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMTg3MDY0
IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLWRpc2FibGVkLWJsYWNrLmh0bWwgWyBD
cmFzaCBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8xODcwNjQgd2Via2l0Lm9yZy9iLzIzNTg4NSB3
ZWJydGMvdmlkZW8tcmVtb3RlLW11dGUuaHRtbCBbIENyYXNoIEZhaWx1cmUgXQogd2Via2l0Lm9y
Zy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcm90YXRpb24uaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0
Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcm90YXRpb24tbm8tY3ZvLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8xODcwNjQgd2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8t
cm90YXRpb24tbm8tY3ZvLmh0bWwgWyBGYWlsdXJlIENyYXNoIF0KIHdlYmtpdC5vcmcvYi8xODcw
NjQgd2VicnRjL3ZpZGVvLXdpdGgtZGF0YS1jaGFubmVsLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtp
dC5vcmcvYi8xODcwNjQgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMvUlRD
UGVlckNvbm5lY3Rpb24tZ2V0U3RhdHMuaHR0cHMuaHRtbCBbIEZhaWx1cmUgUGFzcyBdCiAKQEAg
LTI0NTMsOSArMjUyNyw2IEBAIHdlYmtpdC5vcmcvYi8xNzQyNDIgbWVkaWEvbWVkaWEtZnVsbHNj
cmVlbi1wYXVzZS1pbmxpbmUuaHRtbCBbIFNraXAgXQogd2Via2l0Lm9yZy9iLzE4MjEwOCBodHRw
L3Rlc3RzL21lZGlhL2hscy9obHMtd2VidnR0LXRyYWNrcy5odG1sIFsgVGltZW91dCBdCiB3ZWJr
aXQub3JnL2IvMTM3MzExIG1lZGlhL3ZpZGVvLWZ1bGxzY3JlZW4tb25seS1wbGF5YmFjay5odG1s
IFsgVGltZW91dCBDcmFzaCBdCiAKLXdlYmtpdC5vcmcvYi8xOTgxMTMgWyBSZWxlYXNlIF0gZmFz
dC9tZWRpYXN0cmVhbS9tZWRpYS1zdHJlYW0tcGFnZS1tdXRlZC5odG1sIFsgUGFzcyBdCi13ZWJr
aXQub3JnL2IvMTk4MTEzIFsgRGVidWcgXSBmYXN0L21lZGlhc3RyZWFtL21lZGlhLXN0cmVhbS1w
YWdlLW11dGVkLmh0bWwgWyBUaW1lb3V0IF0KLQogd2Via2l0Lm9yZy9iLzE5NDA0NCBpbXBvcnRl
ZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1hZGRzb3Vy
Y2VidWZmZXIuaHRtbCBbIEZhaWx1cmUgXQogCiAjIFJlbW92ZWQgZnJvbSBnZW5lcmFsIFRlc3RF
eHBlY3RhdGlvbnMgaW4gcjI3NjM5MywgYnV0IGNvbnNvbGUgZXJyb3IgbWVzc2FnZSBzdGlsbCBo
YXBwZW5pbmcgaW4gR0xpYi4KQEAgLTI1NDAsMTAgKzI2MTEsNyBAQCBtZWRpYS92aWRlby1yZW1v
dGUtY29udHJvbC1wbGF5cGF1c2UuaHRtbCBbIFNraXAgXQogCiB3ZWJraXQub3JnL2IvMjA3MDYy
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEtc291cmNlL21lZGlhc291cmNl
LXJlcGxheS5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAotd2Via2l0Lm9yZy9iLzIyOTM0NiB3ZWJy
dGMvbXVsdGktYXVkaW8uaHRtbCBbIFRpbWVvdXQgUGFzcyBdCi0KLXdlYmtpdC5vcmcvYi8yMjk3
MTUgWyBEZWJ1ZyBdIGZhc3QvbWVkaWFzdHJlYW0vZ2V0RGlzcGxheU1lZGlhLW1heC1jb25zdHJh
aW50czMuaHRtbCBbIFRpbWVvdXQgXQotd2Via2l0Lm9yZy9iLzIyOTcxNSBbIERlYnVnIF0gZmFz
dC9tZWRpYXN0cmVhbS9zY3JlZW5jYXB0dXJlLXVzZXItZ2VzdHVyZS5odG1sIFsgVGltZW91dCBd
Cit3ZWJraXQub3JnL2IvMjI5MzQ2IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL211bHRpLWF1
ZGlvLmh0bWwgWyBUaW1lb3V0IFBhc3MgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8yMjk3Mzgg
ZmFzdC90ZXh0L3doaXRlc3BhY2UvdGFiLWNoYXJhY3Rlci1iYXNpY3MuaHRtbCBbIEZhaWx1cmUg
XQogd2Via2l0Lm9yZy9iLzIyOTczOCBmYXN0L3RleHQvd29yZC1icmVhay5odG1sIFsgRmFpbHVy
ZSBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQgYi9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
bG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzk1YTliNjE5MDA5YTc0
MzJhMTI5MzZhN2M2YTgxODkwODRkMmM3ZgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3Rz
L3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1sb2NhbERl
c2NyaXB0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE5IEBACitUZXN0cyBSVENQZWVyQ29u
bmVjdGlvbiBsb2NhbERlc2NyaXB0aW9uLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBz
ZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisK
KworUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihy
ZXF1ZXN0U3VjY2VlZGVkMSwgcmVxdWVzdEZhaWxlZDEpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlv
bi4KK1BBU1MgcmVxdWVzdFN1Y2NlZWRlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5zZXRMb2NhbERl
c2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgcmVx
dWVzdEZhaWxlZDIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdEZhaWxl
ZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5sb2NhbERlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgor
RkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgbG9jYWwuIFdhcyB0PTAgMAor
LgorUEFTUyBwYy5sb2NhbERlc2NyaXB0aW9uLnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2Nh
bERlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgbG9jYWwuIFdhcyB0PTAgMAorLgorUEFTUyBzdWNj
ZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9nLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3Bs
YXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1
cC1zaW5nbGUtZGlhbG9nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kOTM0MmRlNzI4MTlkN2E5
YzUxN2Y1MzFiMWY1ZmQxN2Q1YTA0MjI0Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNl
dHVwLXNpbmdsZS1kaWFsb2ctZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNjEgQEAKK1Rlc3Qgc2V0
dGluZyB1cCBtZWRpYSBiZXR3ZWVuIHR3byBSVENQZWVyQ29ubmVjdGlvbiBpbnN0YW5jZXMgd2l0
aCBvbmUgc2luZ2xlIFNEUCBkaWFsb2cuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBhIHNl
cmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4KKwor
CitDcmVhdGUgUlRDUGVlckNvbm5lY3Rpb24gQQorUEFTUyBwY0Euc2lnbmFsaW5nU3RhdGUgaXMg
J3N0YWJsZScKK1BBU1MgcGNBLnBlbmRpbmdMb2NhbERlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1Mg
cGNBLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGNBLnBlbmRpbmdSZW1v
dGVEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjQS5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24g
aXMgbnVsbAorCitDcmVhdGUgUlRDUGVlckNvbm5lY3Rpb24gQgorUEFTUyBwY0Iuc2lnbmFsaW5n
U3RhdGUgaXMgJ3N0YWJsZScKK1BBU1MgcGNCLnBlbmRpbmdMb2NhbERlc2NyaXB0aW9uIGlzIG51
bGwKK1BBU1MgcGNCLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGNCLnBl
bmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjQi5jdXJyZW50UmVtb3RlRGVz
Y3JpcHRpb24gaXMgbnVsbAorCitBOiBhZGQgbWVkaWEKK0E6IGNyZWF0ZSBvZmZlcgorQTogZ290
IG9mZmVyLCBzZXQgaXQgYXMgbG9jYWwgZGVzY3JpcHRpb24KK0E6IGxvY2FsIG9mZmVyIHNldAor
UEFTUyBwY0Euc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtbG9jYWwtb2ZmZXInCitQQVNTIHBjQS5w
ZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiBpcyBhbiBpbnN0YW5jZSBvZiBSVENTZXNzaW9uRGVzY3Jp
cHRpb24KK1BBU1MgcGNBLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIGlzIG51bGwKKworQTogc2Vu
ZCBvZmZlciB0byBCCitBIC0tLSBvZmZlciAtLT4gQgorQjogZ290IG9mZmVyIGZyb20gQSwgc2V0
IGl0IGFzIHJlbW90ZSBkZXNjcmlwdGlvbgorQjogcmVtb3RlIG9mZmVyIHNldAorUEFTUyBwY0Iu
c2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9mZmVyJworUEFTUyBwY0IucGVuZGluZ1Jl
bW90ZURlc2NyaXB0aW9uIGlzIGFuIGluc3RhbmNlIG9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbgor
UEFTUyBwY0IuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKKworQjogYWRkIG1lZGlh
ICh0byBpbmNsdWRlIGluIGFuc3dlcikKK0I6IGNyZWF0ZSBhbnN3ZXIKK0I6IGdvdCBhbnN3ZXIs
IHNldCBpdCBhcyBsb2NhbCBkZXNjcmlwdGlvbgorQjogbG9jYWwgYW5zd2VyIHNldAorUEFTUyBw
Y0Iuc2lnbmFsaW5nU3RhdGUgaXMgJ3N0YWJsZScKK1BBU1MgcGNCLnBlbmRpbmdMb2NhbERlc2Ny
aXB0aW9uIGlzIG51bGwKK1BBU1MgcGNCLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIGlzIGFuIGlu
c3RhbmNlIG9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbgorUEFTUyBwY0IucGVuZGluZ1JlbW90ZURl
c2NyaXB0aW9uIGlzIG51bGwKK0ZBSUwgcGNCLmN1cnJlbnRSZW1vZXREZXNjcmlwdGlvbiBpcyBu
b3QgYW4gaW5zdGFuY2Ugb2YgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uCisKK0I6IHNlbmQgYW5zd2Vy
IHRvIEEKK0EgPC0tIGFuc3dlciAtLSBCCitBOiBnb3QgYW5zd2VyIGZyb20gQiwgc2V0IGl0IGFz
IHJlbW90ZSBkZXNjcmlwdGlvbgorQTogcmVtb3RlIGFuc3dlciBzZXQKK1BBU1MgcGNBLnNpZ25h
bGluZ1N0YXRlIGlzICdzdGFibGUnCitQQVNTIHBjQS5wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiBp
cyBudWxsCitQQVNTIHBjQS5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbiBpcyBhbiBpbnN0YW5jZSBv
ZiBSVENTZXNzaW9uRGVzY3JpcHRpb24KK1BBU1MgcGNBLnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlv
biBpcyBudWxsCitGQUlMIHBjQS5jdXJyZW50UmVtb2V0RGVzY3JpcHRpb24gaXMgbm90IGFuIGlu
c3RhbmNlIG9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbgorCitQQVNTIE9mZmVyL2Fuc3dlciBkaWFs
b2cgY29tcGxldGVkCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBD
T01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3RlRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25u
ZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45ZDUzZWM1
YzIxNjBkMDMyNzNjMTk4MWY4ZWQ5ZmExODM4NGZkMDc1Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LXJlbW90ZURlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE5IEBACitUZXN0cyBS
VENQZWVyQ29ubmVjdGlvbiByZW1vdGVEZXNjcmlwdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgcGMuc2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0
aW9uKS50aGVuKHJlcXVlc3RTdWNjZWVkZWQxLCByZXF1ZXN0RmFpbGVkMSk7IGRpZCBub3QgdGhy
b3cgZXhjZXB0aW9uLgorUEFTUyByZXF1ZXN0U3VjY2VlZGVkIHdhcyBjYWxsZWQuCitQQVNTIHBj
LnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3Vj
Y2VlZGVkMiwgcmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mg
cmVxdWVzdEZhaWxlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBl
IGlzICJvZmZlciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSByZW1v
dGUuIFdhcyB0PTAgMAorLgorUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZl
ciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSByZW1vdGUuIFdhcyB0
PTAgMAorLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVseS1hc3NpZ25lZC10cmFuc2NlaXZlci1taWQtZXhw
ZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLXJlbW90ZWx5LWFzc2lnbmVkLXRyYW5zY2VpdmVyLW1pZC1leHBlY3Rl
ZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZGZmMDJhYTc0ZjcyMjBlZGFjY2UzN2QzZjFiYTc0ZGVjNTFhZGNl
MQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVseS1hc3NpZ25lZC10cmFuc2NlaXZlci1t
aWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjYgQEAKK1Rlc3QgdGhlIGNhc2Ugd2hlcmUgYW4g
UlRDUnRwVHJhbnNjZWl2ZXIgZ2V0cyBhIHJlbW90ZWx5IGFzc2lnbmVkIG1pZCBhbmQgYWxzbyB1
bm11dGUgdGhlIGFzc29jaWF0ZWQgc291cmNlCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNlZSBh
IHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRFIi4K
KworCitwY0EuYWRkVHJhY2soc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0sIHN0cmVhbSkKK0En
cyB0cmFuc2NlaXZlciBpcyBub3QgeWV0IGFzc29jaWF0ZWQgd2l0aCBhIG1lZGlhIGRlc2NyaXB0
aW9uIGFuZCBzaG91bGQgaGF2ZSBhIG51bGwgbWlkCitQQVNTIHBjQS5nZXRUcmFuc2NlaXZlcnMo
KVswXS5taWQgaXMgbnVsbAorQTogbG9jYWwgb2ZmZXIgc2V0IChtaWQgZ2V0cyBkZWZpbmVkKQor
bWlkQXNzaWduZWRCeUEgPSBwY0EuZ2V0VHJhbnNjZWl2ZXJzKClbMF0ubWlkCitGQUlMIG1pZEFz
c2lnbmVkQnlBICE9PSBudWxsIHNob3VsZCBiZSB0cnVlLiBXYXMgZmFsc2UuCitwY0IuYWRkVHJh
Y2soc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0sIHN0cmVhbSkKK0IncyB0cmFuc2NlaXZlciBp
cyBub3QgeWV0IGFzc29jaWF0ZWQgd2l0aCBhIG1lZGlhIGRlc2NyaXB0aW9uIGFuZCBzaG91bGQg
aGF2ZSBhIG51bGwgbWlkCitQQVNTIHBjQi5nZXRUcmFuc2NlaXZlcnMoKVswXS5taWQgaXMgbnVs
bAorQjogcmVtb3RlIG9mZmVyIHNldCAobWlkIGdldHMgZGVmaW5lZCkKK0IncyB0cmFuc2NlaXZl
ciBzaG91bGQgZ2V0IGl0cyBtaWQgZnJvbSB0aGUgcmVtb3RlIHNpZGUgKEEpCitQQVNTIHBjQi5n
ZXRUcmFuc2NlaXZlcnMoKVswXS5taWQgaXMgbWlkQXNzaWduZWRCeUEKK1BBU1MgT2ZmZXIvYW5z
d2VyIGRpYWxvZyBjb21wbGV0ZWQKK1BBU1MgQjogZ290IHJlbW90ZSB0cmFjayBldmVudAorUEFT
UyBldmVudC50cmFjayBpcyBhbiBpbnN0YW5jZSBvZiBNZWRpYVN0cmVhbVRyYWNrCitQQVNTIEE6
IGdvdCByZW1vdGUgdHJhY2sgZXZlbnQKK1BBU1MgQjogcmVtb3RlIHRyYWNrIHVubXV0ZSBldmVu
dAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZlci1leHBlY3RlZC50eHQgYi9M
YXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rp
b24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXItZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUy
MDNmMGJiYzhkYmViNzg4Zjc4NTQ4OTU2NjA3NjIxNWUzY2RiZmUKLS0tIC9kZXYvbnVsbAorKysg
Yi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXItZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEs
MzkgQEAKK1Rlc3QgUlRDUGVlckNvbm5lY3Rpb24uc2V0UmVtb3RlRGVzY3JpcHRpb24gY2FsbGVk
IHdpdGggYW4gUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIG9mIHR5cGUgJ29mZmVyJworCitPbiBzdWNj
ZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBi
eSAiVEVTVCBDT01QTEVURSIuCisKKworKioqIENyZWF0ZSAocmVtb3RlKSBvZmZlciB3aXRoIGF1
ZGlvIChyZW1vdGVPZmZlcjEpCisqKiogRG9uZSwgc3RhcnQgdGVzdGluZyB3aXRoIHJlbW90ZU9m
ZmVyMQorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAnc3RhYmxlJworUEFTUyBwYy5yZW1vdGVE
ZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjLnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBu
dWxsCitQQVNTIHBjLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK1BBU1MgcmVt
b3RlT2ZmZXIxIHNldCBhcyByZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcGMuc2lnbmFsaW5nU3Rh
dGUgaXMgJ2hhdmUtcmVtb3RlLW9mZmVyJworRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91
bGQgYmUgW29iamVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVzY3JpcHRpb25d
LgorRkFJTCBwYy5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2Jq
ZWN0XS4gV2FzIFtvYmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uXS4KK1BBU1MgcGMuY3VycmVu
dFJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKKworUEFTUyByZW1vdGVPZmZlcjEgc2V0IGFzIHJl
bW90ZSBkZXNjcmlwdGlvbiAoYWdhaW4pCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICdoYXZl
LXJlbW90ZS1vZmZlcicKKworKioqIFRyeSBzZXR0aW5nIGxvY2FsIGRlc2NyaXB0aW9ucyB3aXRo
IGJhZCB0eXBlcyBmb3IgdGhlIGN1cnJlbnQgc3RhdGUKK1BBU1MgcHJvbWlzZSBwYy5zZXRSZW1v
dGVEZXNjcmlwdGlvbih7dHlwZTonYW5zd2VyJywgc2RwOnJlbW90ZU9mZmVyMS5zZHB9KTsgcmVq
ZWN0ZWQgd2l0aCBJbnZhbGlkU3RhdGVFcnJvcjogRmFpbGVkIHRvIHNldCByZW1vdGUgYW5zd2Vy
IHNkcAorUEFTUyBwcm9taXNlIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHt0eXBlOidwcmFuc3dl
cicsIHNkcDpyZW1vdGVPZmZlcjEuc2RwfSk7IHJlamVjdGVkIHdpdGggSW52YWxpZFN0YXRlRXJy
b3I6IEZhaWxlZCB0byBzZXQgcmVtb3RlIGFuc3dlciBzZHAKKworKioqIENyZWF0ZSAocmVtb3Rl
KSBvZmZlciB3aXRoIHZpZGVvIChyZW1vdGVPZmZlcjIpCisqKiogRG9uZSwgc3RhcnQgdGVzdGlu
ZyB3aXRoIHJlbW90ZU9mZmVyMgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1v
dGUtb2ZmZXInCisKK1BBU1MgcmVtb3RlT2ZmZXIyIHNldCBhcyByZW1vdGUgZGVzY3JpcHRpb24K
K1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9mZmVyJworRkFJTCBwYy5y
ZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUgW29iamVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBS
VENTZXNzaW9uRGVzY3JpcHRpb25dLgorRkFJTCBwYy5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24g
c2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0
aW9uXS4KK1BBU1MgcGMuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKKworUEFTUyBz
dWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBh
L0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVj
dGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0
L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YWJsZS1leHBlY3RlZC50eHQKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjg0MjY4Y2U3OGFhZTJhYzk2YzJjZDJmODQ0MDYzMzA0MzA1ZTcxMQotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQ
ZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsNTEgQEAKK1Rlc3Rz
IFJUQ1BlZXJDb25uZWN0aW9uIGluIHN0YWJsZSBzdGF0ZS4KKworT24gc3VjY2VzcywgeW91IHdp
bGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09N
UExFVEUiLgorCisKK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMu
c2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4oZmluaXNoSWZTdWNj
ZWVkZWQsIHJlcXVlc3RGYWlsZWQxKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHNl
dExvY2FsRGVzY3JpcHRpb24gZmFpbGVkLgorRkFJTCBlcnJvclJlYXNvbi5uYW1lIHNob3VsZCBi
ZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9uRXJyb3IuIFdhcyBJbnZhbGlkU3RhdGVFcnJvci4K
K0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMg
bnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlv
bi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUiCitQQVNTIHBj
LnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZpbmlzaElmU3Vj
Y2VlZGVkLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBz
ZXRMb2NhbERlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwgZXJyb3JSZWFzb24ubmFtZSBzaG91bGQg
YmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9yLiBXYXMgSW52YWxpZFN0YXRlRXJyb3Iu
CitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2Fz
IG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRp
b24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3RhYmxlIgorUEFTUyBw
Yy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4oZmluaXNoSWZT
dWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQzKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNT
IHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwgZXJyb3JSZWFzb24ubmFtZSBzaG91
bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9yLiBXYXMgSW52YWxpZFN0YXRlRXJy
b3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4g
V2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNl
cHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3RhYmxlIgorUEFT
UyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4oZmluaXNo
SWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQ0KTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQ
QVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwgZXJyb3JSZWFzb24ubmFtZSBz
aG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9yLiBXYXMgSW52YWxpZFN0YXRl
RXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlv
bi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBl
eGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3RhYmxlIgor
UEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1
ZXN0U3VjY2VlZGVkMSwgZmluaXNoSWZGYWlsZWQpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4K
K1BBU1Mgc2V0TG9jYWxEZXNjcmlwdGlvbiBzdWNjZWVkZWQuCitQQVNTIHBjLmxvY2FsRGVzY3Jp
cHRpb24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24uc2RwIHNob3Vs
ZCBiZSBsb2NhbC4gV2FzIHQ9MCAwCisuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3Vs
ZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBp
cyAiaGF2ZS1sb2NhbC1vZmZlciIKK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhy
b3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hv
dWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRl
IGlzICJzdGFibGUiCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlw
dGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgZmluaXNoSWZGYWlsZWQpOyBkaWQgbm90IHRo
cm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0UmVtb3RlRGVzY3JpcHRpb24gc3VjY2VlZGVkLgorRkFJ
TCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxs
LgorUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMucmVt
b3RlRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSByZW1vdGUuIFdhcyB0PTAgMAorLgorUEFTUyBw
Yy5zaWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1yZW1vdGUtb2ZmZXIiCitQQVNTIHN1Y2Nlc3NmdWxs
eVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9n
IGIvQ2hhbmdlTG9nCmluZGV4IDAzMTU0YTVkNTYwM2U1NjQ1NWQ0ODRkNWI4YzE4MTYzNDY4MjJm
MzEuLjA3NzljYjI1MThiMTBkOTJjM2RmY2FlYTExZjNlNDI5YzRmMjQxNzYgMTAwNjQ0Ci0tLSBh
L0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNyBAQAorMjAyMi0wMi0xMiAg
UGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJl
YW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NDAKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBFbmFibGUgR3N0V2ViUlRDIGJ5
IGRlZmF1bHQgaWYgYSByZWNlbnQtZW5vdWdoICg+PSAxLjIwKSB2ZXJzaW9uIGlzIGF2YWlsYWJs
ZS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNtYWtlOgorICAgICAg
ICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2U6CisgICAgICAgICogU291cmNl
L2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFr
ZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2U6CisKIDIwMjItMDMtMTcgIFphbiBEb2JlcnNl
ayAgPHpkb2JlcnNla0BpZ2FsaWEuY29tPgogCiAgICAgICAgIFtHVEtdW1dQRV0gQWxzbyBlbmFi
bGUgVVNFX1RFWFRVUkVfTUFQUEVSX0RNQUJVRiBhbG9uZ3NpZGUgb3RoZXIgRE1BQnVmLXJlbGF0
ZWQgZGVmaW5lcwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455087</attachid>
            <date>2022-03-18 05:01:56 -0700</date>
            <delta_ts>2022-03-18 07:24:25 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-236540-20220318050153.patch</filename>
            <type>text/plain</type>
            <size>340046</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxNDc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGE0NDk4ZjcyMTE2ZTNhOTIxNDg2YWQ4
ZGI0NjY2ZTIxNTZhZTgyZjcuLmJlZjQzNmExNWEwZWE0NTFhMjU5MWI5MTBhOTc1NTk4OGExNmM2
OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChP
T1BTISkuCisKKyAgICAgICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWw6IFVuY29uZGl0aW9uYWxseSBlbmFibGUgV2ViUlRDIHdoZW4gR3N0V2ViUlRDIGlzCisgICAg
ICAgIGVuYWJsZWQuIFdlIGRvbid0IGhhdmUgYSBydW50aW1lIFByb3ZpZGVyIHlldC4KKyAgICAg
ICAgKiBTY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWw6
IERpc2FibGUgZW5jb2RlZCB0cmFuc2Zvcm1zIHVubGVzcyBsaWJ3ZWJydGMgaXMgZW5hYmxlZC4K
KyAgICAgICAgKiB3dGYvZ2xpYi9HUmVmUHRyLmNwcDogQWRkIEdBcnJheSBoYW5kbGluZy4KKyAg
ICAgICAgKFdURjo6cmVmR1B0cik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cik6CisgICAgICAg
ICogd3RmL2dsaWIvR1JlZlB0ci5oOgorCiAyMDIyLTAzLTE4ICBDYXJsb3MgR2FyY2lhIENhbXBv
cyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBBZGQgYSBwdWJsaWMgYnVpbGQgb3B0
aW9uIGZvciBQREYuanMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCA4ODM1NjcxZTlkM2NiOTI4OTI4N2RjNGE0NDZi
Y2UwYjMwNWVjNGU5Li42MzE0OWEzYzk2NWRhNWM2Y2UwOGE4ODQ1MjZlODA5MDhmMzY3NDA2IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCkBAIC0xLDMgKzEsMzc0IEBACisyMDIyLTAyLTEyICBQaGlsaXBwZSBOb3JtYW5k
ICA8cG5vcm1hbmRAaWdhbGlhLmNvbT4KKworICAgICAgICBbR1N0cmVhbWVyXSBJbml0aWFsIGlt
cG9ydCBvZiB0aGUgR3N0V2ViUlRDIGJhY2tlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtp
dC5vcmcvc2hvd19idWcuY2dpP2lkPTIzNjU0MAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEluaXRpYWwgR3N0V2ViUlRDIGJhY2tlbmQuIEEgbG90IG9m
IGZlYXR1cmVzIHVuaW1wbGVtZW50ZWQgc3RpbGwsIGJ1dCB3ZSB3aWxsIGluY3JlbWVudGFsbHkK
KyAgICAgICAgaW1wcm92ZSB0aGUgbGF5b3V0IHRlc3QgY292ZXJhZ2UgaW4gZm9sbG93LXVwIHBh
dGNoZXMuIE1vc3Qgbm90YWJsZSBzaG9ydC1jb21pbmdzIGN1cnJlbnRseToKKworICAgICAgICAt
IERhdGFDaGFubmVsIHN1cHBvcnQgaXMgaW5jb21wbGV0ZSAoYnVnIDIzNTg3OSkKKyAgICAgICAg
LSBOZXR3b3JrIHRyYWZmaWMgbm90IHJvdXRlZCB0aHJvdWdoIE5ldHdvcmsgcHJvY2VzcyB5ZXQK
KyAgICAgICAgLSBTdGF0cyBzdXBwb3J0IGluY29tcGxldGUKKyAgICAgICAgLSBEVE1GIHN1cHBv
cnQgdW5pbXBsZW1lbnRlZAorICAgICAgICAtIElDRSByZXN0YXJ0cyBub3Qgc3VwcG9ydGVkIHll
dAorICAgICAgICAtIFJlLW5lZ290aWF0aW9uIHVubGlrZWx5IHRvIHdvcmsKKyAgICAgICAgLSBT
aW11bGNhc3Qgbm90IGhhbmRsZWQgeWV0CisgICAgICAgIC0gQmFsYW5jZWQgYnVuZGxlIG5vdCBz
dXBwb3J0ZWQKKyAgICAgICAgLSBSVFggYW5kIEZFQyB1bi10ZXN0ZWQsIGJ1dCBzaG91bGRuJ3Qg
YmUgaGFyZCB0byBmaXgKKworICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZp
Y2VzLmNwcDoKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFj
a2VuZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdlbmVy
YXRlQ2VydGlmaWNhdGUpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6UlRDUGVlckNvbm5lY3Rpb246OmNyZWF0
ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0
YUNoYW5uZWxIYW5kbGVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJE
YXRhQ2hhbm5lbEhhbmRsZXI6OmZyb21SVENEYXRhQ2hhbm5lbEluaXQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGFubmVsRXZlbnQpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpHU3RyZWFtZXJEYXRhQ2hh
bm5lbEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyOjp+R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2V0Q2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFN0cmluZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kUmF3RGF0YSk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNsb3NlKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2hlY2tTdGF0ZSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnJlYWR5U3RhdGVD
aGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6
b25NZXNzYWdlRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6Om9uTWVzc2FnZVN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRh
Q2hhbm5lbEhhbmRsZXI6Om9uRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0
YUNoYW5uZWxIYW5kbGVyOjpvbkJ1ZmZlcmVkQW1vdW50TG93KToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6cG9zdFRhc2spOgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oOiBB
ZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVh
bWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRs
c1RyYW5zcG9ydEJhY2tlbmQ6OmljZVRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xp
ZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpz
dGF0ZUNoYW5nZWQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OkdT
dHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
SWNlVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0
Q2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5k
OjpyZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3Bv
cnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ckljZVRyYW5zcG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpnYXRoZXJpbmdTdGF0ZUNoYW5nZWQpOgorICAg
ICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9y
dEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0aWFsaXplUGlwZWxpbmUpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6fkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dGVh
cmRvd25QaXBlbGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpoYW5kbGVNZXNzYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmRpc3Bvc2VFbGVtZW50Q2hhaW4pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6c2V0Q29uZmlndXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpyZXN0YXJ0SWNlKToKKyAgICAgICAgKFdlYkNvcmU6OmZldGNoRGVz
Y3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6ZmV0Y2hTaWduYWxpbmdTdGF0ZSk6CisgICAg
ICAgIChXZWJDb3JlOjpkZXNjcmlwdGlvbnNGcm9tV2ViUlRDQmluKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbik6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRSZW1vdGVEZXNjcmlwdGlv
blN1Y2NlZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpk
b1NldFJlbW90ZURlc2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlNldERlc2NyaXB0aW9u
Q2FsbERhdGE6OlNldERlc2NyaXB0aW9uQ2FsbERhdGEpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0RGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcmVSZW1vdGVNTGluZUluZm8pOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y29uZmlndXJlQW5kTGlua1NvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXF1ZXN0UGFkKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVRyYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlT2ZmZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVBbnN3ZXIp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aW5pdGlhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2V0U3RhdHMpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6bWVkaWFTdHJlYW1Gcm9tUlRD
U3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFJl
bW90ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpy
ZW1vdmVSZW1vdGVTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6Y3JlYXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFuc2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTb3VyY2VGb3JUcmFjayk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2sp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6dHJhbnNjZWl2ZXJC
YWNrZW5kRnJvbVNlbmRlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjphZGRJY2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6Y3JlYXRlRGF0YUNoYW5uZWwpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6b25EYXRhQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpjbG9zZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uTmVn
b3RpYXRpb25OZWVkZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6b25JY2VDb25uZWN0aW9uQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6Om9uSWNlR2F0aGVyaW5nQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlQ2FuZGlkYXRlKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNlc3Npb25EZXNjcmlwdGlvblN1Y2NlZWRl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNz
aW9uRGVzY3JpcHRpb25GYWlsZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6Y29sbGVjdFRyYW5zY2VpdmVycyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpnYXRoZXJTdGF0c0ZvckxvZ2dpbmcpOgorICAgICAgICAoV2ViQ29y
ZTo6UlRDU3RhdHNMb2dnZXI6OlJUQ1N0YXRzTG9nZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6OlJU
Q1N0YXRzTG9nZ2VyOjp0b0pTT05TdHJpbmcgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6cHJvY2Vzc1N0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uU3RhdHNEZWxpdmVyZWQpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RhcnRMb2dnaW5nU3RhdHMpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcExvZ2dpbmdTdGF0cyk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpsb2dDaGFubmVsIGNvbnN0KToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0YXRzTG9nSW50ZXJ2
YWwgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0
aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZSk6CisgICAgICAgIChXVEY6OkxvZ0FyZ3VtZW50
PFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyPjo6dG9TdHJpbmcpOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaDogQWRkZWQuCisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGUpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aXNTdG9wcGVkIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmlzTmVnb3RpYXRpb25OZWVk
ZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cGlw
ZWxpbmUgY29uc3QpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6Y3JlYXRlR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OlBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVjZWl2ZXJDYXBhYmlsaXRpZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzZW5kZXJDYXBhYmlsaXRpZXMpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpzdXNwZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVzdW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVzdGFydEljZSk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldENvbmZpZ3VyYXRpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyk6
CisgICAgICAgIChXZWJDb3JlOjpiYWNrZW5kRnJvbVJUUFNlbmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRv
U2V0UmVtb3RlRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0ZU9mZmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9DcmVhdGVBbnN3ZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjbG9zZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvU3RvcCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2FuZGlk
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
Y3JlYXRlUmVjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpjcmVhdGVEYXRhQ2hhbm5lbEhhbmRsZXIpOgorICAgICAgICAoV2ViQ29yZTo6
ZmluZEV4aXN0aW5nU2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6YWRkVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2Vp
dmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6
c2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OmJhY2tlbmRGcm9t
UlRQVHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpleGlzdGluZ1RyYW5zY2VpdmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6bmV3UmVtb3RlVHJhbnNjZWl2ZXIpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJhbnNj
ZWl2ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6cmVtb3ZlVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnYXRoZXJEZWNvZGVy
SW1wbGVtZW50YXRpb25OYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6aXNOZWdvdGlhdGlvbk5lZWRlZCBjb25zdCk6CisgICAgICAgICogTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
Lmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclJ0cFJlY2VpdmVyQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0Q29udHJpYnV0aW5nU291cmNlcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6Omdl
dFN5bmNocm9uaXphdGlvblNvdXJjZXMgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpjcmVhdGVTb3VyY2UpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6ZHRsc1RyYW5zcG9y
dEJhY2tlbmQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuY3Bw
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6Om1lZGlhVHlwZUZyb21SZWNlaXZlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OkdTdHJl
YW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6On5HU3RyZWFtZXJSdHBSZWNlaXZlclRy
YW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJU
cmFuc2Zvcm1CYWNrZW5kOjpzZXRUcmFuc2Zvcm1hYmxlRnJhbWVDYWxsYmFjayk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RL
ZXlGcmFtZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuY3BwOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OnVwZGF0ZVRyYWNrU291cmNlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0YXJ0U291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0b3BTb3VyY2UpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6cmVwbGFjZVRyYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c2V0
UGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5k
OjpjcmVhdGVEVE1GQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnNldE1lZGlhU3RyZWFtSWRzKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNrZW5kKToK
KyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5k
ZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6Om1lZGlhVHlwZUZyb21TZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNm
b3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zv
cm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpzZXRUcmFuc2Zv
cm1hYmxlRnJhbWVDYWxsYmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5k
ZXJUcmFuc2Zvcm1CYWNrZW5kOjpyZXF1ZXN0S2V5RnJhbWUpOgorICAgICAgICAqIE1vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQu
aDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFj
a2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6
OmNyZWF0ZVJlY2VpdmVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVNlbmRlckJhY2tlbmQpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpkaXJlY3Rpb24gY29uc3QpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjdXJyZW50RGly
ZWN0aW9uIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZDo6c2V0RGlyZWN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZDo6bWlkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZDo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQ6OnN0b3BwZWQgY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzZXRDb2RlY1ByZWZlcmVuY2VzKToKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZl
ckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6c2V0SW5wdXRDYWxsYmFjayk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpjbGVhclRyYW5z
Zm9ybWFibGVGcmFtZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRy
YW5zZm9ybUJhY2tlbmQ6OnByb2Nlc3NUcmFuc2Zvcm1lZEZyYW1lKToKKyAgICAgICAgKiBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmg6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6
R1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuY3BwOiBBZGRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OnRvUlRDU2N0cFRyYW5zcG9ydFN0YXRlKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFj
a2VuZDo6fkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJD
bGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6
OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5z
cG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaDogQWRkZWQuCisgICAg
ICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0
b3IuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENTdGF0cyk6CisgICAgICAg
IChXZWJDb3JlOjpmaWxsUlRDUlRQU3RyZWFtU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6Zmls
bFJUQ0NvZGVjU3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbEluYm91bmRSVFBTdHJlYW1T
dGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsT3V0Ym91bmRSVFBTdHJlYW1TdGF0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpmaWxsUlRDUGVlckNvbm5lY3Rpb25TdGF0cyk6CisgICAgICAgIChX
ZWJDb3JlOjpmaWxsUlRDVHJhbnNwb3J0U3RhdHMpOgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJl
cG9ydENhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkNhbGxiYWNrSG9sZGVyOjpDYWxsYmFj
a0hvbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Z2V0
U3RhdHMpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clN0YXRzQ29sbGVjdG9yLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU3Rh
dHNDb2xsZWN0b3I6OmNyZWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTdGF0c0Nv
bGxlY3Rvcjo6c2V0RWxlbWVudCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OnRvUlRDSWNlQ29tcG9uZW50KToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlUHJvdG9jb2wp
OgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VUY3BDYW5kaWRhdGVUeXBlKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvUlRDSWNlQ2FuZGlkYXRlVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JU
Q0Vycm9yKToKKyAgICAgICAgKFdlYkNvcmU6OnRvV2ViUlRDQml0UmF0ZVByaW9yaXR5KToKKyAg
ICAgICAgKFdlYkNvcmU6OmZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMpOgorICAgICAgICAoV2Vi
Q29yZTo6ZnJvbVdlYlJUQ0JpdFJhdGVQcmlvcml0eSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JU
Q0VuY29kaW5nUGFyYW1ldGVycyk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ1J0cFNlbmRQYXJh
bWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OmVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXpl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpwYXJzZUljZUNhbmRpZGF0ZVNEUCk6CisgICAgICAgIChX
ZWJDb3JlOjp4NTA5U2VyaWFsaXplKToKKyAgICAgICAgKFdlYkNvcmU6OnByaXZhdGVLZXlTZXJp
YWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZSk6CisgICAgICAg
IChXZWJDb3JlOjpzZHBNZWRpYUhhc0F0dHJpYnV0ZUtleSk6CisgICAgICAgICogTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjp0b1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKToKKyAgICAgICAgKFdl
YkNvcmU6OmZyb21SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbik6CisgICAgICAgIChXZWJDb3Jl
Ojp0b1Nlc3Npb25EZXNjcmlwdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVNlc3Np
b25EZXNjcmlwdGlvblR5cGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9TaWduYWxpbmdTdGF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZUNvbm5lY3Rpb25TdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjp0b1JUQ0R0bHNUcmFuc3BvcnRTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1JU
Q0ljZVRyYW5zcG9ydFN0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlR2F0aGVyaW5n
U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6YnVuZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6aWNlVHJhbnNwb3J0UG9saWN5RnJvbUNvbmZpZ3VyYXRpb24p
OgorICAgICAgICAoV2ViQ29yZTo6dG9SVENFcnJvckRldGFpbFR5cGUpOgorICAgICAgICAqIHBs
YXRmb3JtL0dTdHJlYW1lci5jbWFrZToKKyAgICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFt
ZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpB
dWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6On5BdWRp
b1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OkF1ZGlvU291cmNl
UHJvdmlkZXJHU3RyZWFtZXI6OmhhbmRsZU5ld0RlaW50ZXJsZWF2ZVBhZCk6CisgICAgICAgICog
cGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24u
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1l
ci5jcHA6CisgICAgICAgIChXVEY6OmFkb3B0R1JlZik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8
R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJU
Q1JUUFJlY2VpdmVyPik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVy
Pik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KToKKyAgICAg
ICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4pOgorICAgICAgICAoV1RG
OjpkZXJlZkdQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6cmVm
R1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8R3N0
V2ViUlRDRGF0YUNoYW5uZWw+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENEVExT
VHJhbnNwb3J0Pik6CisgICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENEVExTVHJhbnNw
b3J0Pik6CisgICAgICAgIChXVEY6OnJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0Pik6Cisg
ICAgICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KToKKyAgICAgICAg
KiBwbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y2Fwc01lZGlhVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHA6CisgICAgICAgIChXZWJDb3Jl
OjpNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZTo6Y3JlYXRlQXVkaW9Tb3VyY2VQcm92aWRlcik6Cisg
ICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2Fw
dHVyZXIuY3BwOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0
cmVhbWVyQXVkaW9DYXB0dXJlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVyOjpjcmVhdGVDb252ZXJ0ZXIpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJDYXB0dXJlcjo6Y3JlYXRlU291cmNlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpHU3RyZWFtZXJEVE1G
U2VuZGVyQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFj
a2VuZDo6fkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpjYW5JbnNlcnREVE1GKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpwbGF5VG9uZSk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6dG9uZXMgY29uc3QpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmR1cmF0aW9uIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjppbnRlclRvbmVHYXAg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6Om9u
VG9uZVBsYXllZCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHA6CisgICAg
ICAgICh3ZWJraXRNZWRpYVN0cmVhbVNyY0FkZFRyYWNrKToKKyAgICAgICAgKiBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcDoKKyAgICAgICAg
KHdlYmtpdF93ZWJydGNfdmlkZW9fZW5jb2Rlcl9jbGFzc19pbml0KToKKyAgICAgICAgKiBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0
cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6
CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6
On5SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzdGFydFByb2R1Y2luZ0Rh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVh
bWVyOjpzdG9wUHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNhcGFiaWxpdGllcyk6CisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKToKKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0
Y2hTYW1wbGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChpc1R5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZUluY29taW5nU291
cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXI6OmxvY2tWYWx2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nU291cmNlR1N0cmVhbWVyOjpyZWxlYXNlVmFsdmUgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVnaXN0ZXJDbGllbnQpOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5n
U291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNv
bWluZ1NvdXJjZUdTdHJlYW1lcjo6YmluKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdTb3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnN0
YXJ0UHJvZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6
OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVzKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0
dGluZ3MpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0
cmVhbWVyOjpzZXR0aW5nc0RpZENoYW5nZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKToKKyAgICAgICAgKiBw
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNl
R1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUpOgorICAgICAgICAoaXNUeXBlKToKKyAgICAgICAg
KiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291
cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291
cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcik6Cisg
ICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNl
dFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXI6OnN0YXJ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6c3RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdv
aW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZU11dGVkQ2hhbmdlZCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZUVuYWJs
ZWRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJj
ZUdTdHJlYW1lcjo6aW5pdGlhbGl6ZUZyb21UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpSZWFs
dGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmxpbmspOgorICAgICAgICAoV2ViQ29y
ZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTaW5rUGFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyLmg6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2UgY29uc3QpOgorICAgICAgICAoV2Vi
Q29yZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjphbGxvd2VkQ2FwcyBj
b25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXI6OnBhZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXI6OnNlbmRlciBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpSZWFs
dGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmJpbiBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRU
eXBlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5n
VmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVh
bWVyLmg6IEFkZGVkLgorICAgICAgICAqIHRlc3RpbmcvSW50ZXJuYWxzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkludGVybmFsczo6cmVzZXRUb0NvbnNpc3RlbnRTdGF0ZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnRlcm5hbHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KToKKyAgICAgICAgKFdlYkNv
cmU6OkludGVybmFsczo6c2V0V2ViUlRDVlA5U3VwcG9ydCk6CisgICAgICAgIChXZWJDb3JlOjpJ
bnRlcm5hbHM6OnNldFdlYlJUQ1ZQOVZUQlN1cHBvcnQpOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpzZXRFbmFibGVXZWJSVENFbmNyeXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6Oklu
dGVybmFsczo6c2V0VXNlRFRMUzEwKToKKwogMjAyMi0wMy0xOCAgQW50dGkgS29pdmlzdG8gIDxh
bnR0aUBhcHBsZS5jb20+CiAKICAgICAgICAgW0NTUyBDb250YWluZXIgUXVlcmllc10gQmFzaWMg
c3VwcG9ydCBmb3IgY29udGFpbmVyIHVuaXRzCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1Njcmlw
dHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFtbCBiL1NvdXJjZS9XVEYvU2NyaXB0cy9Q
cmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlcy55YW1sCmluZGV4IDRhYTY3YTMxMjk4MDRkYTlmZjhl
NmE0NDk0NTk2YzQ2NjFmZjllMTYuLmI2NmM3NDBlODA3MmNjNTljNWJhMjdjNWVlNDMzNjQxNmY5
ZjFjZmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVm
ZXJlbmNlcy55YW1sCisrKyBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVm
ZXJlbmNlcy55YW1sCkBAIC0xNzIyLDcgKzE3MjIsOSBAQCBQZWVyQ29ubmVjdGlvbkVuYWJsZWQ6
CiAgICAgV2ViS2l0TGVnYWN5OgogICAgICAgZGVmYXVsdDogdHJ1ZQogICAgIFdlYktpdDoKLSAg
ICAgIGRlZmF1bHQ6IFdlYkNvcmU6OkxpYldlYlJUQ1Byb3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUo
KQorICAgICAgIlVTRShMSUJXRUJSVEMpIjogV2ViQ29yZTo6TGliV2ViUlRDUHJvdmlkZXI6Ondl
YlJUQ0F2YWlsYWJsZSgpCisgICAgICAiVVNFKEdTVFJFQU1FUl9XRUJSVEMpIjogdHJ1ZQorICAg
ICAgZGVmYXVsdDogZmFsc2UKICAgICBXZWJDb3JlOgogICAgICAgZGVmYXVsdDogdHJ1ZQogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNF
eHBlcmltZW50YWwueWFtbCBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVm
ZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCmluZGV4IDBmNjNjOGNiMDIyNzdiY2RjNDliMWFmZTdi
NWU1MzFmZTg5Y2UyZDUuLjUxODc4YThmNDk1MzJiNzU4NTY4ZmJjYjY4YTFkMWZkYmQ4NTZjZjYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNl
c0V4cGVyaW1lbnRhbC55YW1sCisrKyBiL1NvdXJjZS9XVEYvU2NyaXB0cy9QcmVmZXJlbmNlcy9X
ZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sCkBAIC0xNzM1LDkgKzE3MzUsMTEgQEAgV2Vi
UlRDRW5jb2RlZFRyYW5zZm9ybUVuYWJsZWQ6CiAgICAgV2ViS2l0TGVnYWN5OgogICAgICAgZGVm
YXVsdDogZmFsc2UKICAgICBXZWJLaXQ6Ci0gICAgICBkZWZhdWx0OiB0cnVlCisgICAgICAiVVNF
KExJQldFQlJUQykiOiB0cnVlCisgICAgICBkZWZhdWx0OiBmYWxzZQogICAgIFdlYkNvcmU6Ci0g
ICAgICBkZWZhdWx0OiB0cnVlCisgICAgICAiVVNFKExJQldFQlJUQykiOiB0cnVlCisgICAgICBk
ZWZhdWx0OiBmYWxzZQogCiAjIEZJWE1FOiBJcyB0aGlzIGltcGxlbWVudGVkIGZvciBXZWJLaXRM
ZWdhY3k/IElmIG5vdCwgdGhpcyBzaG91bGQgYmUgZXhjbHVkZWQgZnJvbSBXZWJLaXRMZWdhY3kg
ZW50aXJlbHkuCiBXZWJSVENIMjY0TG93TGF0ZW5jeUVuY29kZXJFbmFibGVkOgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNwcCBiL1NvdXJjZS9XVEYvd3RmL2dsaWIv
R1JlZlB0ci5jcHAKaW5kZXggMWI5YWRlM2Y5MzZlZTU2NGQzODJjMDdlZjk2NjU3NmFiNjYxOWI0
MS4uOTMxMmEzZTg5NGJkOGEwZDdhMTFhNmE0NWNjYmQzNjg3M2Y4YzUwZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNwcAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGli
L0dSZWZQdHIuY3BwCkBAIC0yMjMsNiArMjIzLDIyIEBAIHRlbXBsYXRlIDw+IHZvaWQgZGVyZWZH
UHRyKEdVcmkqIHB0cikKIH0KICNlbmRpZgogCit0ZW1wbGF0ZSA8PgorR0FycmF5KiByZWZHUHRy
KEdBcnJheSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdfYXJyYXlfcmVmKHB0cik7
CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8Pgordm9pZCBkZXJlZkdQdHIoR0Fy
cmF5KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ19hcnJheV91bnJlZihwdHIpOwor
fQorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlmIC8vIFVTRShHTElCKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmggYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dS
ZWZQdHIuaAppbmRleCBlNzIxZmQ1NWY0MmFjM2Q3NmI0MDE3NjBlMGExOWI5OWZlM2UwZjhiLi42
NjczNjA3ODdhYzVmNjQ5NjBiZTFkNTQ2MmRkZTU5ZDczNTVmNmEzIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuaAorKysgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQ
dHIuaApAQCAtMjUwLDYgKzI1MCw4IEBAIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBH
RGF0ZVRpbWUqIHJlZkdQdHIoR0RhdGVUaW1lKiBwdHIpOwogdGVtcGxhdGUgPD4gV1RGX0VYUE9S
VF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdEYXRlVGltZSogcHRyKTsKIHRlbXBsYXRlIDw+IFdU
Rl9FWFBPUlRfUFJJVkFURSBHREJ1c05vZGVJbmZvKiByZWZHUHRyKEdEQnVzTm9kZUluZm8qIHB0
cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJlZkdQdHIoR0RCdXNO
b2RlSW5mbyogcHRyKTsKK3RlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSBHQXJyYXkqIHJl
ZkdQdHIoR0FycmF5Kik7Cit0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgdm9pZCBkZXJl
ZkdQdHIoR0FycmF5Kik7CiAKICNpZiBIQVZFKEdVUkkpCiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JU
X1BSSVZBVEUgR1VyaSogcmVmR1B0cihHVXJpKik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3Bw
CmluZGV4IGRmYjliZGFjNTY2Yjc5NjViYWFjZmUwY2ZlZTcwNjE0MzhiMTk1YjIuLjhjNzQ0ZmNk
MTM3NzAwNmZiYjkwNzY2ZWJiM2JjNGM4NGU4ZGNjYmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRpZXMuY3BwCisrKyBi
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFjYXBhYmlsaXRpZXMvTWVkaWFDYXBhYmlsaXRp
ZXMuY3BwCkBAIC0xODAsNyArMTgwLDcgQEAgc3RhdGljIHZvaWQgZ2F0aGVyRGVjb2RpbmdJbmZv
KERvY3VtZW50JiBkb2N1bWVudCwgTWVkaWFEZWNvZGluZ0NvbmZpZ3VyYXRpb24mJgogICAgIGNv
bmZpZ3VyYXRpb24uY2FuRXhwb3NlVlA5ID0gZG9jdW1lbnQuc2V0dGluZ3MoKS52cDlEZWNvZGVy
RW5hYmxlZCgpOwogI2VuZGlmCiAKLSNpZiBFTkFCTEUoV0VCX1JUQykKKyNpZiBFTkFCTEUoV0VC
X1JUQykgJiYgVVNFKExJQldFQlJUQykKICAgICBpZiAoY29uZmlndXJhdGlvbi50eXBlID09IE1l
ZGlhRGVjb2RpbmdUeXBlOjpXZWJSVEMpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1
bWVudC5wYWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLmNyZWF0
ZURlY29kaW5nQ29uZmlndXJhdGlvbihXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBXVEZNb3ZlKGRl
Y29kaW5nQ2FsbGJhY2spKTsKQEAgLTIwMCw3ICsyMDAsNyBAQCBzdGF0aWMgdm9pZCBnYXRoZXJF
bmNvZGluZ0luZm8oRG9jdW1lbnQmIGRvY3VtZW50LCBNZWRpYUVuY29kaW5nQ29uZmlndXJhdGlv
biYmCiAgICAgICAgIGNhbGxiYWNrKFdURk1vdmUocmVzdWx0KSk7CiAgICAgfTsKIAotI2lmIEVO
QUJMRShXRUJfUlRDKQorI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoTElCV0VCUlRDKQogICAg
IGlmIChjb25maWd1cmF0aW9uLnR5cGUgPT0gTWVkaWFFbmNvZGluZ1R5cGU6OldlYlJUQykgewog
ICAgICAgICBpZiAoYXV0byogcGFnZSA9IGRvY3VtZW50LnBhZ2UoKSkKICAgICAgICAgICAgIHBh
Z2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuY3JlYXRlRW5jb2RpbmdDb25maWd1cmF0aW9uKFdURk1v
dmUoY29uZmlndXJhdGlvbiksIFdURk1vdmUoZW5jb2RpbmdDYWxsYmFjaykpOwpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMuY3BwCmluZGV4
IDBmYWE4YmI1NWExOTg1ZTk4MGY3MzZiNjFkYTBkNjMwZDZjYWUzY2QuLmJmYzU2NjllZDc3YTQz
Y2RiOTlhMjM3MDAxMGFjNjExZDJjYmI5MzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vTWVkaWFEZXZpY2VzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5jcHAKQEAgLTQwLDYgKzQwLDcgQEAKICNp
bmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkpTRE9NUHJvbWlzZURlZmVycmVkLmgiCiAjaW5j
bHVkZSAiSlNNZWRpYURldmljZUluZm8uaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgiCiAjaW5jbHVk
ZSAiTWVkaWFUcmFja1N1cHBvcnRlZENvbnN0cmFpbnRzLmgiCiAjaW5jbHVkZSAiUmVhbHRpbWVN
ZWRpYVNvdXJjZVNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2V0dGluZ3MuaCIKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25C
YWNrZW5kLmNwcAppbmRleCA4NmQ3NTczOTkyZjRkNWJkNGMzNTNkY2I2MDk3MjY0ZTk4NWQ1N2U4
Li4yZjMzZjJiMDcyZmEzZmVmNWQzYWI3ZGQzYWY5YTI4YTY0YWIxMGNlIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlv
bkJhY2tlbmQuY3BwCkBAIC01Myw5ICs1MywxNCBAQAogI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmlu
Z0J1aWxkZXIuaD4KICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZU51bWJlcnMu
aD4KIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJU
Q1V0aWxzLmgiCisjZW5kaWYKKwogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0jaWYgIVVTRShMSUJX
RUJSVEMpCisjaWYgIVVTRShMSUJXRUJSVEMpICYmICFVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwog
c3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IGNyZWF0ZU5vUGVl
ckNvbm5lY3Rpb25CYWNrZW5kKFJUQ1BlZXJDb25uZWN0aW9uJikKIHsKICAgICByZXR1cm4gbnVs
bHB0cjsKQEAgLTIxNywxOCArMjIyLDggQEAgdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNl
dFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKHN0ZDo6b3B0aW9uYWw8RGVzY3JpcHQKICAgICAg
ICAgaWYgKGRlc2NyaXB0aW9uU3RhdGVzKQogICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbi51
cGRhdGVEZXNjcmlwdGlvbnMoV1RGTW92ZSgqZGVzY3JpcHRpb25TdGF0ZXMpKTsKIAotICAgICAg
ICBmb3IgKGF1dG8mIGV2ZW50IDogZXZlbnRzKSB7Ci0gICAgICAgICAgICBhdXRvJiB0cmFjayA9
IGV2ZW50LnRyYWNrLmdldCgpOwotCi0gICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uLmRpc3Bh
dGNoRXZlbnQoUlRDVHJhY2tFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS50cmFja0V2ZW50LCBF
dmVudDo6Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8sIFdURk1vdmUoZXZl
bnQucmVjZWl2ZXIpLCBXVEZNb3ZlKGV2ZW50LnRyYWNrKSwgV1RGTW92ZShldmVudC5zdHJlYW1z
KSwgV1RGTW92ZShldmVudC50cmFuc2NlaXZlcikpKTsKLSAgICAgICAgICAgIEFMV0FZU19MT0co
TE9HSURFTlRJRklFUiwgIkRpc3BhdGNoZWQgaWYgZmVhc2libGUgdHJhY2sgb2YgdHlwZSAiLCB0
cmFjay5zb3VyY2UoKS50eXBlKCkpOwotCi0gICAgICAgICAgICBpZiAobV9wZWVyQ29ubmVjdGlv
bi5pc0Nsb3NlZCgpKQotICAgICAgICAgICAgICAgIHJldHVybjsKLQotICAgICAgICAgICAgLy8g
RklYTUU6IEFzIHBlciBzcGVjLCB3ZSBzaG91bGQgc2V0IG11dGVkIHRvICdmYWxzZScgd2hlbiBz
dGFydGluZyB0byByZWNlaXZlIHRoZSBjb250ZW50IGZyb20gbmV0d29yay4KLSAgICAgICAgICAg
IHRyYWNrLnNvdXJjZSgpLnNldE11dGVkKGZhbHNlKTsKLSAgICAgICAgfQorICAgICAgICBmb3Ig
KGF1dG8mIGV2ZW50IDogZXZlbnRzKQorICAgICAgICAgICAgZGlzcGF0Y2hUcmFja0V2ZW50KGV2
ZW50KTsKIAogICAgICAgICBpZiAobV9wZWVyQ29ubmVjdGlvbi5pc0Nsb3NlZCgpKQogICAgICAg
ICAgICAgcmV0dXJuOwpAQCAtMjQwLDYgKzIzNSwyMCBAQCB2b2lkIFBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6c2V0UmVtb3RlRGVzY3JpcHRpb25TdWNjZWVkZWQoc3RkOjpvcHRpb25hbDxEZXNjcmlw
dAogICAgIH0pOwogfQogCit2b2lkIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZGlzcGF0Y2hUcmFj
a0V2ZW50KFBlbmRpbmdUcmFja0V2ZW50JiBldmVudCkKK3sKKyAgICBhdXRvJiB0cmFjayA9IGV2
ZW50LnRyYWNrLmdldCgpOworCisgICAgbV9wZWVyQ29ubmVjdGlvbi5kaXNwYXRjaEV2ZW50KFJU
Q1RyYWNrRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCkudHJhY2tFdmVudCwgRXZlbnQ6OkNhbkJ1
YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFibGU6Ok5vLCBXVEZNb3ZlKGV2ZW50LnJlY2VpdmVy
KSwgV1RGTW92ZShldmVudC50cmFjayksIFdURk1vdmUoZXZlbnQuc3RyZWFtcyksIFdURk1vdmUo
ZXZlbnQudHJhbnNjZWl2ZXIpKSk7CisgICAgQUxXQVlTX0xPRyhMT0dJREVOVElGSUVSLCAiRGlz
cGF0Y2hlZCBpZiBmZWFzaWJsZSB0cmFjayBvZiB0eXBlICIsIHRyYWNrLnNvdXJjZSgpLnR5cGUo
KSk7CisKKyAgICBpZiAobV9wZWVyQ29ubmVjdGlvbi5pc0Nsb3NlZCgpKQorICAgICAgICByZXR1
cm47CisKKyAgICAvLyBGSVhNRTogQXMgcGVyIHNwZWMsIHdlIHNob3VsZCBzZXQgbXV0ZWQgdG8g
J2ZhbHNlJyB3aGVuIHN0YXJ0aW5nIHRvIHJlY2VpdmUgdGhlIGNvbnRlbnQgZnJvbSBuZXR3b3Jr
LgorICAgIHRyYWNrLnNvdXJjZSgpLnNldE11dGVkKGZhbHNlKTsKK30KKwogdm9pZCBQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OnNldFJlbW90ZURlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiYmIGV4
Y2VwdGlvbikKIHsKICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOwpAQCAtNDM3LDEzICs0NDYs
MTkgQEAgdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdlbmVyYXRlQ2VydGlmaWNhdGUoRG9j
dW1lbnQmIGRvY3VtZW50LCBjb25zdCBDZXJ0aWYKICAgICAgICAgcHJvbWlzZS5yZWplY3QoSW52
YWxpZFN0YXRlRXJyb3IpOwogICAgICAgICByZXR1cm47CiAgICAgfQorCiAgICAgTGliV2ViUlRD
Q2VydGlmaWNhdGVHZW5lcmF0b3I6OmdlbmVyYXRlQ2VydGlmaWNhdGUoZG9jdW1lbnQuc2VjdXJp
dHlPcmlnaW4oKSwgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKSwgaW5mbywgW3Byb21pc2UgPSBX
VEZNb3ZlKHByb21pc2UpXShhdXRvJiYgcmVzdWx0KSBtdXRhYmxlIHsKICAgICAgICAgcHJvbWlz
ZS5zZXR0bGUoV1RGTW92ZShyZXN1bHQpKTsKICAgICB9KTsKKyNlbGlmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorICAgIGF1dG8gY2VydGlmaWNhdGUgPSA6OldlYkNvcmU6OmdlbmVyYXRlQ2VydGlm
aWNhdGUoZG9jdW1lbnQuc2VjdXJpdHlPcmlnaW4oKSwgaW5mbyk7CisgICAgaWYgKGNlcnRpZmlj
YXRlLmhhc192YWx1ZSgpKQorICAgICAgICBwcm9taXNlLnJlc29sdmUoKmNlcnRpZmljYXRlKTsK
KyAgICBlbHNlCisgICAgICAgIHByb21pc2UucmVqZWN0KE5vdFN1cHBvcnRlZEVycm9yKTsKICNl
bHNlCiAgICAgVU5VU0VEX1BBUkFNKGRvY3VtZW50KTsKLSAgICBVTlVTRURfUEFSQU0oZXhwaXJl
cyk7Ci0gICAgVU5VU0VEX1BBUkFNKHR5cGUpOworICAgIFVOVVNFRF9QQVJBTShpbmZvKTsKICAg
ICBwcm9taXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7CiAjZW5kaWYKIH0KZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9u
QmFja2VuZC5oCmluZGV4IDFlMjNiNGIyYzM2YTM5YTM4NDkzNjJiNGFmMGJhMjQ4YTAxOGI2YmUu
LjdkZjc3MjA3ODlmMjZlMDhkOTI1NGIxOWM3MjUwNzE0ZWNlNDU5ZTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuaApAQCAtMjI3LDYgKzIyNyw4IEBAIHByb3RlY3RlZDoKICAgICB9OwogICAgIHZvaWQg
YWRkUGVuZGluZ1RyYWNrRXZlbnQoUGVuZGluZ1RyYWNrRXZlbnQmJik7CiAKKyAgICB2b2lkIGRp
c3BhdGNoVHJhY2tFdmVudChQZW5kaW5nVHJhY2tFdmVudCYpOworCiBwcml2YXRlOgogICAgIHZp
cnR1YWwgdm9pZCBkb0NyZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYmKSA9IDA7CiAgICAgdmly
dHVhbCB2b2lkIGRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlvbnMmJikgPSAwOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLmNwcAppbmRleCA1YmRkZmVjN2U0ZGZjOWQ5YzAyOTljOWUyN2NhOWRjMjJkZjY0MTA0Li45
MGRlNjM5OTM0ZWQ2MWM1YzBiMTAxMmMwYWE1Mzk3ZGQwZDhiMzJhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLmNw
cApAQCAtOTUsNyArOTUsNyBAQCBFeGNlcHRpb25PcjxSZWY8UlRDUGVlckNvbm5lY3Rpb24+PiBS
VENQZWVyQ29ubmVjdGlvbjo6Y3JlYXRlKERvY3VtZW50JiBkb2N1bWVudAogICAgIGlmICghcGVl
ckNvbm5lY3Rpb24tPmlzQ2xvc2VkKCkpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1
bWVudC5wYWdlKCkpIHsKICAgICAgICAgICAgIHBlZXJDb25uZWN0aW9uLT5yZWdpc3RlclRvQ29u
dHJvbGxlcihwYWdlLT5ydGNDb250cm9sbGVyKCkpOwotI2lmICFMT0dfRElTQUJMRUQgfHwgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECisjaWYgVVNFKExJQldFQlJUQykgJiYgKCFMT0dfRElTQUJMRUQg
fHwgIVJFTEVBU0VfTE9HX0RJU0FCTEVEKQogICAgICAgICAgICAgaWYgKCFwYWdlLT5zZXNzaW9u
SUQoKS5pc0VwaGVtZXJhbCgpKQogICAgICAgICAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3Zp
ZGVyKCkuc2V0TG9nZ2luZ0xldmVsKExvZ1dlYlJUQy5sZXZlbCk7CiAjZW5kaWYKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ckRhdGFDaGFubmVsSGFuZGxlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LmJhN2JhOWEwMDU5NmQ2NTBlNGM3YjNmNzgzYzcyN2IyMWE1NWRkNjYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwCkBAIC0wLDAgKzEsMzA5IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5o
IgorI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxF
dmVudC5oIgorI2luY2x1ZGUgIlJUQ0Vycm9yLmgiCisjaW5jbHVkZSAiUlRDUHJpb3JpdHlUeXBl
LmgiCisKKyNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5oPgorCitHU1RfREVCVUdfQ0FURUdPUllf
RVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RF
RkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7
CisKK0dVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6
OmZyb21SVENEYXRhQ2hhbm5lbEluaXQoY29uc3QgUlRDRGF0YUNoYW5uZWxJbml0JiBvcHRpb25z
KQoreworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBpbml0KGdzdF9zdHJ1Y3R1cmVfbmV3
KCJvcHRpb25zIiwgInByb3RvY29sIiwgR19UWVBFX1NUUklORywgb3B0aW9ucy5wcm90b2NvbC51
dGY4KCkuZGF0YSgpLCBudWxscHRyKSk7CisKKyAgICBpZiAob3B0aW9ucy5vcmRlcmVkKQorICAg
ICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAib3JkZXJlZCIsIEdfVFlQRV9CT09M
RUFOLCAqb3B0aW9ucy5vcmRlcmVkLCBudWxscHRyKTsKKyAgICBpZiAob3B0aW9ucy5tYXhQYWNr
ZXRMaWZlVGltZSkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgIm1heC1w
YWNrZXQtbGlmZXRpbWUiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5tYXhQYWNrZXRMaWZlVGltZSwg
bnVsbHB0cik7CisgICAgaWYgKG9wdGlvbnMubWF4UmV0cmFuc21pdHMpCisgICAgICAgIGdzdF9z
dHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJtYXgtcmV0cmFuc21pdHMiLCBHX1RZUEVfSU5ULCAq
b3B0aW9ucy5tYXhSZXRyYW5zbWl0cywgbnVsbHB0cik7CisgICAgaWYgKG9wdGlvbnMubmVnb3Rp
YXRlZCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQoKSwgIm5lZ290aWF0ZWQi
LCBHX1RZUEVfQk9PTEVBTiwgKm9wdGlvbnMubmVnb3RpYXRlZCwgbnVsbHB0cik7CisgICAgaWYg
KG9wdGlvbnMuaWQpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJpZCIs
IEdfVFlQRV9JTlQsICpvcHRpb25zLmlkLCBudWxscHRyKTsKKworICAgIEdzdFdlYlJUQ1ByaW9y
aXR5VHlwZSBwcmlvcml0eVR5cGU7CisgICAgc3dpdGNoIChvcHRpb25zLnByaW9yaXR5KSB7Cisg
ICAgY2FzZSBSVENQcmlvcml0eVR5cGU6OlZlcnlMb3c6CisgICAgICAgIHByaW9yaXR5VHlwZSA9
IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9WRVJZX0xPVzsKKyAgICAgICAgYnJlYWs7CisgICAg
Y2FzZSBSVENQcmlvcml0eVR5cGU6OkxvdzoKKyAgICAgICAgcHJpb3JpdHlUeXBlID0gR1NUX1dF
QlJUQ19QUklPUklUWV9UWVBFX0xPVzsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSVENQcmlv
cml0eVR5cGU6Ok1lZGl1bToKKyAgICAgICAgcHJpb3JpdHlUeXBlID0gR1NUX1dFQlJUQ19QUklP
UklUWV9UWVBFX01FRElVTTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBSVENQcmlvcml0eVR5
cGU6OkhpZ2g6CisgICAgICAgIHByaW9yaXR5VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQ
RV9ISUdIOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5p
dC5nZXQoKSwgInByaW9yaXR5IiwgR1NUX1RZUEVfV0VCUlRDX1BSSU9SSVRZX1RZUEUsIHByaW9y
aXR5VHlwZSwgbnVsbHB0cik7CisKKyAgICByZXR1cm4gaW5pdDsKK30KKworUmVmPFJUQ0RhdGFD
aGFubmVsRXZlbnQ+IEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y3JlYXRlRGF0YUNoYW5u
ZWxFdmVudChEb2N1bWVudCYgZG9jdW1lbnQsIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+
JiYgZGF0YUNoYW5uZWwpCit7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBsYWJlbDsKKyAgICBH
VW5pcXVlT3V0UHRyPGNoYXI+IHByb3RvY29sOworICAgIGdib29sZWFuIG9yZGVyZWQsIG5lZ290
aWF0ZWQ7CisgICAgZ2ludCBtYXhQYWNrZXRMaWZlVGltZSwgbWF4UmV0cmFuc21pdHMsIGlkOwor
ICAgIGdfb2JqZWN0X2dldChkYXRhQ2hhbm5lbC5nZXQoKSwgIm9yZGVyZWQiLCAmb3JkZXJlZCwg
ImxhYmVsIiwgJmxhYmVsLm91dFB0cigpLAorICAgICAgICAibWF4LXBhY2tldC1saWZldGltZSIs
ICZtYXhQYWNrZXRMaWZlVGltZSwgIm1heC1yZXRyYW5zbWl0cyIsICZtYXhSZXRyYW5zbWl0cywK
KyAgICAgICAgInByb3RvY29sIiwgJnByb3RvY29sLm91dFB0cigpLCAibmVnb3RpYXRlZCIsICZu
ZWdvdGlhdGVkLCAiaWQiLCAmaWQsIG51bGxwdHIpOworCisgICAgUlRDRGF0YUNoYW5uZWxJbml0
IGluaXQ7CisgICAgaW5pdC5vcmRlcmVkID0gb3JkZXJlZDsKKyAgICBpbml0Lm1heFBhY2tldExp
ZmVUaW1lID0gbWF4UGFja2V0TGlmZVRpbWU7CisgICAgaW5pdC5tYXhSZXRyYW5zbWl0cyA9IG1h
eFJldHJhbnNtaXRzOworICAgIGluaXQucHJvdG9jb2wgPSBTdHJpbmcocHJvdG9jb2wuZ2V0KCkp
OworICAgIGluaXQubmVnb3RpYXRlZCA9IG5lZ290aWF0ZWQ7CisgICAgaW5pdC5pZCA9IGlkOwor
CisgICAgYXV0byBoYW5kbGVyID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlcj4oV1RGTW92ZShkYXRhQ2hhbm5lbCkpOworICAgIGF1dG8gY2hhbm5lbCA9IFJUQ0Rh
dGFDaGFubmVsOjpjcmVhdGUoZG9jdW1lbnQsIFdURk1vdmUoaGFuZGxlciksIFN0cmluZzo6ZnJv
bVVURjgobGFiZWwuZ2V0KCkpLCBXVEZNb3ZlKGluaXQpKTsKKyAgICByZXR1cm4gUlRDRGF0YUNo
YW5uZWxFdmVudDo6Y3JlYXRlKGV2ZW50TmFtZXMoKS5kYXRhY2hhbm5lbEV2ZW50LCBFdmVudDo6
Q2FuQnViYmxlOjpObywgRXZlbnQ6OklzQ2FuY2VsYWJsZTo6Tm8sIFdURk1vdmUoY2hhbm5lbCkp
OworfQorCitHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OkdTdHJlYW1lckRhdGFDaGFubmVs
SGFuZGxlcihHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmIGNoYW5uZWwpCisgICAgOiBt
X2NoYW5uZWwoV1RGTW92ZShjaGFubmVsKSkKK3sKKyAgICBBU1NFUlQobV9jaGFubmVsKTsKKwor
ICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NoYW5uZWwuZ2V0KCksICJub3RpZnk6OnJl
YWR5LXN0YXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBo
YW5kbGVyKSB7CisgICAgICAgIGhhbmRsZXItPnJlYWR5U3RhdGVDaGFuZ2VkKCk7CisgICAgfSks
IHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NoYW5uZWwuZ2V0KCksICJv
bi1tZXNzYWdlLWRhdGEiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXIqIGhhbmRsZXIsIEdCeXRlcyogYnl0ZXMpIHsKKyAgICAgICAgaGFuZGxlci0+b25NZXNzYWdl
RGF0YShieXRlcyk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBl
ZChtX2NoYW5uZWwuZ2V0KCksICJvbi1tZXNzYWdlLXN0cmluZyIsIEdfQ0FMTEJBQ0soK1tdKEdT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlciwgY29uc3QgY2hhciogbWVzc2FnZSkg
eworICAgICAgICBoYW5kbGVyLT5vbk1lc3NhZ2VTdHJpbmcobWVzc2FnZSk7CisgICAgfSksIHRo
aXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2NoYW5uZWwuZ2V0KCksICJvbi1l
cnJvciIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxl
ciwgR0Vycm9yKiBlcnJvcikgeworICAgICAgICBoYW5kbGVyLT5vbkVycm9yKGVycm9yKTsKKyAg
ICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fY2hhbm5lbC5nZXQo
KSwgIm9uLWJ1ZmZlcmVkLWFtb3VudC1sb3ciLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRh
Q2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIpIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBw
YXNzIHRoZSBhbW91bnQgZGVsdGEgZnJvbSB3ZWJydGNiaW4gdG8gdGhlIFdlYkNvcmUgaGFuZGxl
ci4KKyAgICAgICAgaGFuZGxlci0+b25CdWZmZXJlZEFtb3VudExvdygpOworICAgIH0pLCB0aGlz
KTsKK30KKworR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjp+R1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyKCkKK3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEo
bV9jaGFubmVsLmdldCgpLCB0aGlzKTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6OnNldENsaWVudChSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQmIGNsaWVudCwgU2Ny
aXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIgY29udGV4dElkZW50aWZpZXIpCit7CisgICAg
TG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9OworICAgIEFTU0VSVCghbV9jbGllbnQpOwor
ICAgIG1fY2xpZW50ID0gY2xpZW50OworICAgIG1fY29udGV4dElkZW50aWZpZXIgPSBjb250ZXh0
SWRlbnRpZmllcjsKKworICAgIGZvciAoYXV0byYgbWVzc2FnZSA6IG1fcGVuZGluZ01lc3NhZ2Vz
KSB7CisgICAgICAgIHN3aXRjaE9uKG1lc3NhZ2UsIFsmXShSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1
ZmZlcj4mIGRhdGEpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVRygiTm90aWZ5aW5nIHF1ZXVlZCBy
YXcgZGF0YSAoc2l6ZTogJXp1KSIsIGRhdGEtPnNpemUoKSk7CisgICAgICAgICAgICBjbGllbnQu
ZGlkUmVjZWl2ZVJhd0RhdGEoZGF0YS0+bWFrZUNvbnRpZ3VvdXMoKS0+ZGF0YSgpLCBkYXRhLT5z
aXplKCkpOworICAgICAgICB9LCBbJl0oU3RyaW5nJiB0ZXh0KSB7CisgICAgICAgICAgICBHU1Rf
REVCVUcoIk5vdGlmeWluZyBxdWV1ZWQgc3RyaW5nICVzIiwgdGV4dC5hc2NpaSgpLmRhdGEoKSk7
CisgICAgICAgICAgICBjbGllbnQuZGlkUmVjZWl2ZVN0cmluZ0RhdGEodGV4dCk7CisgICAgICAg
IH0sIFsmXShTdGF0ZUNoYW5nZSBzdGF0ZUNoYW5nZSkgeworICAgICAgICAgICAgaWYgKHN0YXRl
Q2hhbmdlLmVycm9yKSB7CisgICAgICAgICAgICAgICAgaWYgKGF1dG8gcnRjRXJyb3IgPSB0b1JU
Q0Vycm9yKCpzdGF0ZUNoYW5nZS5lcnJvcikpCisgICAgICAgICAgICAgICAgICAgIGNsaWVudC5k
aWREZXRlY3RFcnJvcihydGNFcnJvci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIEdTVF9ERUJVRygiRGlzcGF0Y2hpbmcgc3RhdGUgY2hhbmdlIHRvICVkIiwg
c3RhdGljX2Nhc3Q8aW50PihzdGF0ZUNoYW5nZS5zdGF0ZSkpOworICAgICAgICAgICAgY2xpZW50
LmRpZENoYW5nZVJlYWR5U3RhdGUoc3RhdGVDaGFuZ2Uuc3RhdGUpOworICAgICAgICB9KTsKKyAg
ICB9CisgICAgbV9wZW5kaW5nTWVzc2FnZXMuY2xlYXIoKTsKK30KKworYm9vbCBHU3RyZWFtZXJE
YXRhQ2hhbm5lbEhhbmRsZXI6OnNlbmRTdHJpbmdEYXRhKGNvbnN0IENTdHJpbmcmIHRleHQpCit7
CisgICAgR1NUX0RFQlVHKCJTZW5kaW5nIHN0cmluZyAlcyIsIHRleHQuZGF0YSgpKTsKKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV9jaGFubmVsLmdldCgpLCAic2VuZC1zdHJpbmciLCB0ZXh0
LmRhdGEoKSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyOjpzZW5kUmF3RGF0YShjb25zdCB1aW50OF90KiBkYXRhLCBzaXplX3QgbGVuZ3Ro
KQoreworICAgIGF1dG8gYnl0ZXMgPSBhZG9wdEdSZWYoZ19ieXRlc19uZXcoZGF0YSwgbGVuZ3Ro
KSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5lbC5nZXQoKSwgInNlbmQtZGF0
YSIsIGJ5dGVzLmdldCgpKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJE
YXRhQ2hhbm5lbEhhbmRsZXI6OmNsb3NlKCkKK3sKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUo
bV9jaGFubmVsLmdldCgpLCAiY2xvc2UiKTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXI6OmNoZWNrU3RhdGUoKQoreworICAgIEFTU0VSVChtX2NsaWVudExvY2suaXNIZWxk
KCkpOworCisgICAgR3N0V2ViUlRDRGF0YUNoYW5uZWxTdGF0ZSBjaGFubmVsU3RhdGU7CisgICAg
Z19vYmplY3RfZ2V0KG1fY2hhbm5lbC5nZXQoKSwgInJlYWR5LXN0YXRlIiwgJmNoYW5uZWxTdGF0
ZSwgbnVsbHB0cik7CisKKyAgICBSVENEYXRhQ2hhbm5lbFN0YXRlIHN0YXRlOworICAgIHN3aXRj
aCAoY2hhbm5lbFN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFU
RV9ORVc6CisgICAgY2FzZSBHU1RfV0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9DT05ORUNUSU5H
OgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3RhdGU6OkNvbm5lY3Rpbmc7CisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRBX0NIQU5ORUxfU1RBVEVfT1BFTjoK
KyAgICAgICAgc3RhdGUgPSBSVENEYXRhQ2hhbm5lbFN0YXRlOjpPcGVuOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIEdTVF9XRUJSVENfREFUQV9DSEFOTkVMX1NUQVRFX0NMT1NJTkc6CisgICAg
ICAgIHN0YXRlID0gUlRDRGF0YUNoYW5uZWxTdGF0ZTo6Q2xvc2luZzsKKyAgICAgICAgYnJlYWs7
CisgICAgY2FzZSBHU1RfV0VCUlRDX0RBVEFfQ0hBTk5FTF9TVEFURV9DTE9TRUQ6CisgICAgICAg
IHN0YXRlID0gUlRDRGF0YUNoYW5uZWxTdGF0ZTo6Q2xvc2VkOworICAgICAgICBicmVhazsKKyAg
ICB9CisKKyAgICBpZiAoIW1fY2xpZW50KSB7CisgICAgICAgIEdTVF9ERUJVRygiTm8gY2xpZW50
IHlldCwgcXVldWVpbmcgc3RhdGUiKTsKKyAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5k
KFN0YXRlQ2hhbmdlIHsgc3RhdGUsIHsgfSB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIGlmICghKm1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfREVCVUcoIkRp
c3BhdGNoaW5nIHN0YXRlIGNoYW5nZSB0byAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdGUpKTsK
KyAgICBwb3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnQsIHN0YXRlXSB7CisgICAgICAgIGlmICgh
KmNsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgY2xpZW50LnZhbHVlKCktPmRp
ZENoYW5nZVJlYWR5U3RhdGUoc3RhdGUpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckRh
dGFDaGFubmVsSGFuZGxlcjo6cmVhZHlTdGF0ZUNoYW5nZWQoKQoreworICAgIExvY2tlciBsb2Nr
ZXIgeyBtX2NsaWVudExvY2sgfTsKKyAgICBjaGVja1N0YXRlKCk7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbk1lc3NhZ2VEYXRhKEdCeXRlcyogYnl0ZXMpCit7Cisg
ICAgTG9ja2VyIGxvY2tlciB7IG1fY2xpZW50TG9jayB9OworCisgICAgaWYgKCFtX2NsaWVudCkg
eworICAgICAgICBtX3BlbmRpbmdNZXNzYWdlcy5hcHBlbmQoRnJhZ21lbnRlZFNoYXJlZEJ1ZmZl
cjo6Y3JlYXRlKGJ5dGVzKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoISpt
X2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xp
ZW50LCBieXRlcyA9IEdSZWZQdHI8R0J5dGVzPihieXRlcyldIHsKKyAgICAgICAgaWYgKCEqY2xp
ZW50KQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBnc2l6ZSBzaXplID0gMDsKKyAgICAg
ICAgY29uc3QgYXV0byogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgdWludDhfdCo+KGdf
Ynl0ZXNfZ2V0X2RhdGEoYnl0ZXMuZ2V0KCksICZzaXplKSk7CisgICAgICAgIGNsaWVudC52YWx1
ZSgpLT5kaWRSZWNlaXZlUmF3RGF0YShkYXRhLCBzaXplKTsKKyAgICB9KTsKK30KKwordm9pZCBH
U3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uTWVzc2FnZVN0cmluZyhjb25zdCBjaGFyKiBt
ZXNzYWdlKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKworICAgIEdT
VF9ERUJVRygiSW5jb21pbmcgc3RyaW5nOiAlcyIsIG1lc3NhZ2UpOworICAgIGlmICghbV9jbGll
bnQpIHsKKyAgICAgICAgR1NUX0RFQlVHKCJObyBjbGllbnQgeWV0LCBrZWVwaW5nIGFzIGJ1ZmZl
cmVkIG1lc3NhZ2UiKTsKKyAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBwZW5kKFN0cmluZzo6
ZnJvbVVURjgobWVzc2FnZSkpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKCEq
bV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVRygiRGlzcGF0Y2hpbmcg
cGF5bG9hZCIpOworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudCwgc3RyaW5nID0gU3Ry
aW5nOjpmcm9tVVRGOChtZXNzYWdlKV0geworICAgICAgICBpZiAoISpjbGllbnQpCisgICAgICAg
ICAgICByZXR1cm47CisKKyAgICAgICAgY2xpZW50LnZhbHVlKCktPmRpZFJlY2VpdmVTdHJpbmdE
YXRhKHN0cmluZyk7CisgICAgICAgIEdTVF9ERUJVRygiRG9uZSIpOworICAgIH0pOworfQorCit2
b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25FcnJvcihHRXJyb3IqIGVycm9yKQor
eworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKyAgICBpZiAoIW1fY2xpZW50
KQorICAgICAgICByZXR1cm47CisKKyAgICBHU1RfV0FSTklORygiR290IGRhdGEtY2hhbm5lbCBl
cnJvciAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICBHVW5pcXVlUHRyPEdFcnJvcj4gZXJyb3JD
b3B5KGdfZXJyb3JfY29weShlcnJvcikpOworICAgIHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVu
dCwgZXJyb3IgPSBXVEZNb3ZlKGVycm9yQ29weSldIHsKKyAgICAgICAgaWYgKCFjbGllbnQgfHwg
IWVycm9yKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gcnRjRXJyb3IgPSB0
b1JUQ0Vycm9yKGVycm9yLmdldCgpKTsKKyAgICAgICAgaWYgKCFydGNFcnJvcikKKyAgICAgICAg
ICAgIHJ0Y0Vycm9yID0gUlRDRXJyb3I6OmNyZWF0ZShSVENFcnJvcjo6SW5pdCB7IFJUQ0Vycm9y
RGV0YWlsVHlwZTo6RGF0YUNoYW5uZWxGYWlsdXJlLCB7IH0sIHsgfSwgeyB9LCB7IH0gfSwgeyB9
KTsKKyAgICAgICAgY2xpZW50LnZhbHVlKCktPmRpZERldGVjdEVycm9yKHJ0Y0Vycm9yLnJlbGVh
c2VOb25OdWxsKCkpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcjo6b25CdWZmZXJlZEFtb3VudExvdygpCit7CisgICAgTG9ja2VyIGxvY2tlciB7IG1fY2xp
ZW50TG9jayB9OworICAgIGlmICghbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAgIHBv
c3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudF0geworICAgICAgICBpZiAoIWNsaWVudCkKKyAgICAg
ICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBGSVhNRTogUGFzcyBhbW91bnQgdG8gaGFuZGxl
ciBpbnN0ZWFkIG9mIDAuCisgICAgICAgIGNsaWVudC52YWx1ZSgpLT5idWZmZXJlZEFtb3VudElz
RGVjcmVhc2luZygwKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhh
bmRsZXI6OnBvc3RUYXNrKEZ1bmN0aW9uPHZvaWQoKT4mJiBmdW5jdGlvbikKK3sKKyAgICBBU1NF
UlQobV9jbGllbnRMb2NrLmlzSGVsZCgpKTsKKworICAgIGlmICghbV9jb250ZXh0SWRlbnRpZmll
cikgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFdURk1vdmUoZnVuY3Rpb24pKTsKKyAgICAg
ICAgcmV0dXJuOworICAgIH0KKyAgICBTY3JpcHRFeGVjdXRpb25Db250ZXh0Ojpwb3N0VGFza1Rv
KG1fY29udGV4dElkZW50aWZpZXIsIFdURk1vdmUoZnVuY3Rpb24pKTsKK30KKworfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJEYXRhQ2hhbm5lbEhhbmRsZXIuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhm
MzMyYmRlMjRjZWVjOTIxZmQ0NjE2MmM1MDYwZWEwMjU5M2NlMWQKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJE
YXRhQ2hhbm5lbEhhbmRsZXIuaApAQCAtMCwwICsxLDg2IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
CisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdVbmlxdWVQdHJHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKKyNpbmNsdWRlICJS
VENEYXRhQ2hhbm5lbFN0YXRlLmgiCisjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCisKKyNpbmNs
dWRlIDx3dGYvQ29uZGl0aW9uLmg+CisjaW5jbHVkZSA8d3RmL0xvY2suaD4KKyNpbmNsdWRlIDx3
dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIERvY3VtZW50Owor
Y2xhc3MgUlRDRGF0YUNoYW5uZWxFdmVudDsKK2NsYXNzIFJUQ0RhdGFDaGFubmVsSGFuZGxlckNs
aWVudDsKK3N0cnVjdCBSVENEYXRhQ2hhbm5lbEluaXQ7CisKK2NsYXNzIEdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlciBmaW5hbCA6IHB1YmxpYyBSVENEYXRhQ2hhbm5lbEhhbmRsZXIgeworICAg
IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOworcHVibGljOgorICAgIGV4cGxpY2l0IEdTdHJlYW1l
ckRhdGFDaGFubmVsSGFuZGxlcihHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmKTsKKyAg
ICB+R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKCk7CisKKyAgICBzdGF0aWMgR1VuaXF1ZVB0
cjxHc3RTdHJ1Y3R1cmU+IGZyb21SVENEYXRhQ2hhbm5lbEluaXQoY29uc3QgUlRDRGF0YUNoYW5u
ZWxJbml0Jik7CisgICAgc3RhdGljIFJlZjxSVENEYXRhQ2hhbm5lbEV2ZW50PiBjcmVhdGVEYXRh
Q2hhbm5lbEV2ZW50KERvY3VtZW50JiwgR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4mJik7
CisKK3ByaXZhdGU6CisgICAgLy8gUlRDRGF0YUNoYW5uZWxIYW5kbGVyIEFQSQorICAgIHZvaWQg
c2V0Q2xpZW50KFJUQ0RhdGFDaGFubmVsSGFuZGxlckNsaWVudCYsIFNjcmlwdEV4ZWN1dGlvbkNv
bnRleHRJZGVudGlmaWVyKSBmaW5hbDsKKyAgICBib29sIHNlbmRTdHJpbmdEYXRhKGNvbnN0IENT
dHJpbmcmKSBmaW5hbDsKKyAgICBib29sIHNlbmRSYXdEYXRhKGNvbnN0IHVpbnQ4X3QqLCBzaXpl
X3QpIGZpbmFsOworICAgIHZvaWQgY2xvc2UoKSBmaW5hbDsKKworICAgIHZvaWQgb25NZXNzYWdl
RGF0YShHQnl0ZXMqKTsKKyAgICB2b2lkIG9uTWVzc2FnZVN0cmluZyhjb25zdCBjaGFyKik7Cisg
ICAgdm9pZCBvbkVycm9yKEdFcnJvciopOworICAgIHZvaWQgb25CdWZmZXJlZEFtb3VudExvdygp
OworICAgIHZvaWQgcmVhZHlTdGF0ZUNoYW5nZWQoKTsKKworICAgIHZvaWQgY2hlY2tTdGF0ZSgp
OworICAgIHZvaWQgcG9zdFRhc2soRnVuY3Rpb248dm9pZCgpPiYmKTsKKworICAgIHN0cnVjdCBT
dGF0ZUNoYW5nZSB7CisgICAgICAgIFJUQ0RhdGFDaGFubmVsU3RhdGUgc3RhdGU7CisgICAgICAg
IHN0ZDo6b3B0aW9uYWw8R0Vycm9yKj4gZXJyb3I7CisgICAgfTsKKyAgICB1c2luZyBNZXNzYWdl
ID0gc3RkOjp2YXJpYW50PFN0YXRlQ2hhbmdlLCBTdHJpbmcsIFJlZjxGcmFnbWVudGVkU2hhcmVk
QnVmZmVyPj47CisgICAgdXNpbmcgUGVuZGluZ01lc3NhZ2VzID0gVmVjdG9yPE1lc3NhZ2U+Owor
CisgICAgTG9jayBtX2NsaWVudExvY2s7CisgICAgR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hhbm5l
bD4gbV9jaGFubmVsOworICAgIHN0ZDo6b3B0aW9uYWw8V2Vha1B0cjxSVENEYXRhQ2hhbm5lbEhh
bmRsZXJDbGllbnQ+PiBtX2NsaWVudCBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fY2xpZW50TG9jayk7
CisgICAgU2NyaXB0RXhlY3V0aW9uQ29udGV4dElkZW50aWZpZXIgbV9jb250ZXh0SWRlbnRpZmll
cjsKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBtX3ByZXZpb3VzQnVmZmVyZWRBbW91bnQ7
CisgICAgUGVuZGluZ01lc3NhZ2VzIG1fcGVuZGluZ01lc3NhZ2VzIFdURl9HVUFSREVEX0JZX0xP
Q0sobV9jbGllbnRMb2NrKTsKKworICAgIExvY2sgbV9vcGVuTG9jazsKKyAgICBDb25kaXRpb24g
bV9vcGVuQ29uZGl0aW9uIFdURl9HVUFSREVEX0JZX0xPQ0sobV9vcGVuTG9jayk7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNw
cApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5kZDE0NDkyMGZjZDQwMDFkNWY1ZmVhYzMyZWIzNmUyMGFiMzVmYzYxCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsOTQgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdF
Ql9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVySWNl
VHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisj
aW5jbHVkZSA8SmF2YVNjcmlwdENvcmUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyRHRsc1Ry
YW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kKGNvbnN0IEdSZWZQ
dHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mIHRyYW5zcG9ydCkKKyAgICA6IG1fYmFja2VuZCh0
cmFuc3BvcnQpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7CisgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKK30KKworR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6On5HU3RyZWFtZXJE
dGxzVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgdW5yZWdpc3RlckNsaWVudCgpOworfQorCitV
bmlxdWVSZWY8UlRDSWNlVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQ6OmljZVRyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIHJldHVybiBtYWtlVW5pcXVlUmVm
PEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ+KG1fYmFja2VuZCk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KENsaWVudCYgY2xpZW50
KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0gY2xpZW50OworICAg
IGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCksICJub3RpZnk6OnN0YXRl
IiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQp
IHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworfQor
Cit2b2lkIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjp1bnJlZ2lzdGVyQ2xpZW50KCkK
K3sKKyAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9iYWNrZW5kLmdl
dCgpLCB0aGlzKTsKKyAgICBtX2NsaWVudC5jbGVhcigpOworfQorCit2b2lkIEdTdHJlYW1lckR0
bHNUcmFuc3BvcnRCYWNrZW5kOjpzdGF0ZUNoYW5nZWQoKSBjb25zdAoreworICAgIGNhbGxPbk1h
aW5UaHJlYWRBbmRXYWl0KFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyB0aGlzIH1dIHsKKyAgICAgICAg
aWYgKCF3ZWFrVGhpcykKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKCF3ZWFrVGhp
cy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgR1VuaXF1ZU91dFB0
cjxjaGFyPiByZW1vdGVDZXJ0aWZpY2F0ZTsKKyAgICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBj
ZXJ0aWZpY2F0ZTsKKyAgICAgICAgR3N0V2ViUlRDRFRMU1RyYW5zcG9ydFN0YXRlIHN0YXRlOwor
ICAgICAgICBnX29iamVjdF9nZXQod2Vha1RoaXMtPm1fYmFja2VuZC5nZXQoKSwgInN0YXRlIiwg
JnN0YXRlLCAicmVtb3RlLWNlcnRpZmljYXRlIiwgJnJlbW90ZUNlcnRpZmljYXRlLm91dFB0cigp
LCAiY2VydGlmaWNhdGUiLCAmY2VydGlmaWNhdGUub3V0UHRyKCksIG51bGxwdHIpOworCisgICAg
ICAgIFZlY3RvcjxSZWY8SlNDOjpBcnJheUJ1ZmZlcj4+IGNlcnRpZmljYXRlczsKKyAgICAgICAg
Y2VydGlmaWNhdGVzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoMik7CisgICAgICAgIGlmIChyZW1v
dGVDZXJ0aWZpY2F0ZSkgeworICAgICAgICAgICAgYXV0byByZW1vdGVDZXJ0aWZpY2F0ZVN0cmlu
ZyA9IG1ha2VTdHJpbmcocmVtb3RlQ2VydGlmaWNhdGUuZ2V0KCkpOworICAgICAgICAgICAgYXV0
byBqc1JlbW90ZUNlcnRpZmljYXRlID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKHJlbW90ZUNl
cnRpZmljYXRlU3RyaW5nLmNoYXJhY3RlcnM4KCksIHJlbW90ZUNlcnRpZmljYXRlU3RyaW5nLnNp
emVJbkJ5dGVzKCkpOworICAgICAgICAgICAgY2VydGlmaWNhdGVzLnVuY2hlY2tlZEFwcGVuZChX
VEZNb3ZlKGpzUmVtb3RlQ2VydGlmaWNhdGUpKTsKKworICAgICAgICAgICAgYXV0byBjZXJ0aWZp
Y2F0ZVN0cmluZyA9IG1ha2VTdHJpbmcoY2VydGlmaWNhdGUuZ2V0KCkpOworICAgICAgICAgICAg
YXV0byBqc0NlcnRpZmljYXRlID0gSlNDOjpBcnJheUJ1ZmZlcjo6Y3JlYXRlKGNlcnRpZmljYXRl
U3RyaW5nLmNoYXJhY3RlcnM4KCksIGNlcnRpZmljYXRlU3RyaW5nLnNpemVJbkJ5dGVzKCkpOwor
ICAgICAgICAgICAgY2VydGlmaWNhdGVzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGpzQ2VydGlm
aWNhdGUpKTsKKyAgICAgICAgfQorICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVD
aGFuZ2VkKHRvUlRDRHRsc1RyYW5zcG9ydFN0YXRlKHN0YXRlKSwgV1RGTW92ZShjZXJ0aWZpY2F0
ZXMpKTsKKyAgICB9KTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRHRsc1Ry
YW5zcG9ydEJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMmMxZGM4
ODQwODI3NzZiMzBiMDBhMjkyYTE5NjA3NTA4ZTA0NDFkYwotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNU
cmFuc3BvcnRCYWNrZW5kLmgKQEAgLTAsMCArMSw1MyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjEtMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdT
VFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiUlRDRHRsc1Ry
YW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kIGZpbmFsIDog
cHVibGljIFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kLCBwdWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1N0
cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQsIFdlYWtQdHJGYWN0b3J5SW5pdGlhbGl6YXRpb246
OkVhZ2VyPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoKKyAgICBl
eHBsaWNpdCBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdl
YlJUQ0RUTFNUcmFuc3BvcnQ+Jik7CisgICAgfkdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5k
KCk7CisKK3ByaXZhdGU6CisgICAgLy8gUlRDRHRsc1RyYW5zcG9ydEJhY2tlbmQKKyAgICBjb25z
dCB2b2lkKiBiYWNrZW5kKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgpOyB9
CisgICAgVW5pcXVlUmVmPFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQ+IGljZVRyYW5zcG9ydEJhY2tl
bmQoKSBmaW5hbDsKKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAg
IHZvaWQgdW5yZWdpc3RlckNsaWVudCgpIGZpbmFsOworCisgICAgdm9pZCBzdGF0ZUNoYW5nZWQo
KSBjb25zdDsKKworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gbV9iYWNrZW5k
OworICAgIFdlYWtQdHI8Q2xpZW50PiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNwYWNlIFdl
YkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5j
cHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uNTNiZTZlNjcwNDI1ZGY4Njc4YTQwZjRmOTZlYjQ5Njc1N2Y3YjQ3YQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwCkBAIC0wLDAgKzEsMTIzIEBA
CisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMg
cmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYu
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZy
ZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNl
bnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1
bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGll
ZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExp
Y2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVk
IGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxv
bmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUK
KyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBC
b3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdF
Ql9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyV2Vi
UlRDVXRpbHMuaCIKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BcnJheUJ1ZmZlci5oPgorI2lu
Y2x1ZGUgPHd0Zi9nbGliL0dVbmlxdWVQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitH
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5k
KGNvbnN0IEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mIHRyYW5zcG9ydCkKKyAgICA6
IG1fYmFja2VuZCh0cmFuc3BvcnQpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7CisKKyAgICBp
Y2VUcmFuc3BvcnRDaGFuZ2VkKCk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fYmFj
a2VuZC5nZXQoKSwgIm5vdGlmeTo6dHJhbnNwb3J0IiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVy
SWNlVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5kLT5pY2VUcmFu
c3BvcnRDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworfQorCitHU3RyZWFtZXJJY2VUcmFuc3Bv
cnRCYWNrZW5kOjp+R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgaWYgKEdf
SVNfT0JKRUNUKG1faWNlVHJhbnNwb3J0LmdldCgpKSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxl
cnNfZGlzY29ubmVjdF9ieV9kYXRhKG1faWNlVHJhbnNwb3J0LmdldCgpLCB0aGlzKTsKKyAgICBn
X3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9iYWNrZW5kLmdldCgpLCB0aGlz
KTsKK30KKwordm9pZCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjppY2VUcmFuc3BvcnRD
aGFuZ2VkKCkKK3sKKyAgICBpZiAoR19JU19PQkpFQ1QobV9pY2VUcmFuc3BvcnQuZ2V0KCkpKQor
ICAgICAgICBnX3NpZ25hbF9oYW5kbGVyc19kaXNjb25uZWN0X2J5X2RhdGEobV9pY2VUcmFuc3Bv
cnQuZ2V0KCksIHRoaXMpOworCisgICAgbV9pY2VUcmFuc3BvcnQuY2xlYXIoKTsKKyAgICBnX29i
amVjdF9nZXQobV9iYWNrZW5kLmdldCgpLCAidHJhbnNwb3J0IiwgJm1faWNlVHJhbnNwb3J0Lm91
dFB0cigpLCBudWxscHRyKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2ljZVRy
YW5zcG9ydC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJJ
Y2VUcmFuc3BvcnRCYWNrZW5kKiBiYWNrZW5kKSB7CisgICAgICAgIGJhY2tlbmQtPnN0YXRlQ2hh
bmdlZCgpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9p
Y2VUcmFuc3BvcnQuZ2V0KCksICJub3RpZnk6OmdhdGhlcmluZy1zdGF0ZSIsIEdfQ0FMTEJBQ0so
K1tdKEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFj
a2VuZC0+Z2F0aGVyaW5nU3RhdGVDaGFuZ2VkKCk7CisgICAgfSksIHRoaXMpOworfQorCit2b2lk
IEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KENsaWVudCYgY2xp
ZW50KQoreworICAgIEFTU0VSVCghbV9jbGllbnQpOworICAgIG1fY2xpZW50ID0gY2xpZW50Owor
CisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHRyYW5zcG9ydFN0YXRlOworICAgIEdz
dFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIGdhdGhlcmluZ1N0YXRlOworICAgIGdfb2JqZWN0X2dl
dChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0YXRlLCAiZ2F0aGVy
aW5nLXN0YXRlIiwgJmdhdGhlcmluZ1N0YXRlLCBudWxscHRyKTsKKworICAgIGNhbGxPbk1haW5U
aHJlYWQoW3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH0sIHRyYW5zcG9ydFN0YXRlLCBnYXRo
ZXJpbmdTdGF0ZV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV9jbGll
bnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gV2Ugc3RhcnQgb2JzZXJ2aW5n
IGEgYml0IGxhdGUgYW5kIG1pZ2h0IG1pc3MgdGhlIGNoZWNraW5nIHN0YXRlLiBTeW50aGVzaXpl
IGl0IGFzIG5lZWRlZC4KKyAgICAgICAgaWYgKHRyYW5zcG9ydFN0YXRlID4gR1NUX1dFQlJUQ19J
Q0VfQ09OTkVDVElPTl9TVEFURV9DSEVDS0lORyAmJiB0cmFuc3BvcnRTdGF0ZSAhPSBHU1RfV0VC
UlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NMT1NFRCkKKyAgICAgICAgICAgIHdlYWtUaGlzLT5t
X2NsaWVudC0+b25TdGF0ZUNoYW5nZWQoUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5nKTsK
KworICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9uU3RhdGVDaGFuZ2VkKHRvUlRDSWNlVHJh
bnNwb3J0U3RhdGUodHJhbnNwb3J0U3RhdGUpKTsKKyAgICAgICAgd2Vha1RoaXMtPm1fY2xpZW50
LT5vbkdhdGhlcmluZ1N0YXRlQ2hhbmdlZCh0b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKGdhdGhlcmlu
Z1N0YXRlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZDo6dW5yZWdpc3RlckNsaWVudCgpCit7CisgICAgQVNTRVJUKG1fY2xpZW50KTsKKyAgICBtX2Ns
aWVudC5jbGVhcigpOworfQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OnN0
YXRlQ2hhbmdlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJu
OworCisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHRyYW5zcG9ydFN0YXRlOworICAg
IGdfb2JqZWN0X2dldChtX2ljZVRyYW5zcG9ydC5nZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0
YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIg
eyAqdGhpcyB9LCB0cmFuc3BvcnRTdGF0ZV0geworICAgICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3
ZWFrVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIHdlYWtUaGlz
LT5tX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENJY2VUcmFuc3BvcnRTdGF0ZSh0cmFuc3Bv
cnRTdGF0ZSkpOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tl
bmQ6OmdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpIGNvbnN0Cit7CisgICAgaWYgKCFtX2NsaWVudCkK
KyAgICAgICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgZ2F0aGVy
aW5nU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1faWNlVHJhbnNwb3J0LmdldCgpLCAiZ2F0aGVy
aW5nLXN0YXRlIiwgJmdhdGhlcmluZ1N0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFt3ZWFrVGhpcyA9IFdlYWtQdHIgeyAqdGhpcyB9LCBnYXRoZXJpbmdTdGF0ZV0geworICAg
ICAgICBpZiAoIXdlYWtUaGlzIHx8ICF3ZWFrVGhpcy0+bV9jbGllbnQpCisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIHdlYWtUaGlzLT5tX2NsaWVudC0+b25HYXRoZXJpbmdTdGF0ZUNoYW5n
ZWQodG9SVENJY2VHYXRoZXJpbmdTdGF0ZShnYXRoZXJpbmdTdGF0ZSkpOworICAgIH0pOworfQor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmggYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VU
cmFuc3BvcnRCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTk3YTM5NTdlMzJlMWExYTFhMzE1NTRmMDlk
MGY2NjZlOTE1MmJkOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaApAQCAt
MCwwICsxLDU1IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNh
bCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3Ug
Y2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1z
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNo
ZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAy
IG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgor
ICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3
aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZl
biB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVy
YWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBo
YXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZy
ZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZp
ZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9u
Y2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2lu
Y2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRCYWNr
ZW5kLmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0lj
ZVRyYW5zcG9ydEJhY2tlbmQsIHB1YmxpYyBDYW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJJY2VUcmFu
c3BvcnRCYWNrZW5kPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CisKK3B1YmxpYzoK
KyAgICBleHBsaWNpdCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kKGNvbnN0IEdSZWZQdHI8
R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4mKTsKKyAgICB+R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQKKyAgICBj
b25zdCB2b2lkKiBiYWNrZW5kKCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9iYWNrZW5kLmdldCgp
OyB9CisKKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAgIHZvaWQg
dW5yZWdpc3RlckNsaWVudCgpIGZpbmFsOworCisgICAgdm9pZCBzdGF0ZUNoYW5nZWQoKSBjb25z
dDsKKyAgICB2b2lkIGdhdGhlcmluZ1N0YXRlQ2hhbmdlZCgpIGNvbnN0OworICAgIHZvaWQgaWNl
VHJhbnNwb3J0Q2hhbmdlZCgpOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0
PiBtX2JhY2tlbmQ7CisgICAgR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IG1faWNlVHJh
bnNwb3J0OworICAgIFdlYWtQdHI8Q2xpZW50PiBtX2NsaWVudDsKK307CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNzA5MDdkMDEzN2IyYzg2ODQzYjM1OWJiMTUwN2FiNDE3ZjM4OTI3YgotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuY3BwCkBAIC0wLDAgKzEsMTI2OSBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdT
dHJlYW1lck1lZGlhRW5kcG9pbnQuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisj
aW5jbHVkZSAiRG9jdW1lbnQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJS
dHBSZWNlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiSlNET01Qcm9taXNlRGVm
ZXJyZWQuaCIKKyNpbmNsdWRlICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisjaW5jbHVkZSAiTG9nZ2lu
Zy5oIgorI2luY2x1ZGUgIk1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAi
Tm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbC5oIgorI2luY2x1ZGUg
IlJUQ0RhdGFDaGFubmVsRXZlbnQuaCIKKyNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGUuaCIKKyNp
bmNsdWRlICJSVENPZmZlck9wdGlvbnMuaCIKKyNpbmNsdWRlICJSVENQZWVyQ29ubmVjdGlvbi5o
IgorI2luY2x1ZGUgIlJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uLmgiCisjaW5jbHVkZSAiUlRDU3RhdHNSZXBvcnQuaCIKKyNpbmNsdWRl
ICJSVENUcmFja0V2ZW50LmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNl
R1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisKKyNp
bmNsdWRlIDxnc3Qvc2RwL3NkcC5oPgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisjaW5j
bHVkZSA8d3RmL1Njb3BlLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvUnVuTG9vcFNvdXJjZVByaW9y
aXR5Lmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4
dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWSh3ZWJr
aXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtp
dF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50KEdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZCYgcGVlckNvbm5lY3Rpb24pCisgICAgOiBtX3BlZXJDb25uZWN0aW9uQmFj
a2VuZChwZWVyQ29ubmVjdGlvbikKKyAgICAsIG1fc3RhdHNDb2xsZWN0b3IoR1N0cmVhbWVyU3Rh
dHNDb2xsZWN0b3I6OmNyZWF0ZSgpKQorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICwg
bV9zdGF0c0xvZ1RpbWVyKCp0aGlzLCAmR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Z2F0aGVyU3Rh
dHNGb3JMb2dnaW5nKQorICAgICwgbV9sb2dnZXIocGVlckNvbm5lY3Rpb24ubG9nZ2VyKCkpCisg
ICAgLCBtX2xvZ0lkZW50aWZpZXIocGVlckNvbm5lY3Rpb24ubG9nSWRlbnRpZmllcigpKQorI2Vu
ZGlmCit7CisgICAgZW5zdXJlR1N0cmVhbWVySW5pdGlhbGl6ZWQoKTsKKworICAgIHN0YXRpYyBz
dGQ6Om9uY2VfZmxhZyBkZWJ1Z1JlZ2lzdGVyZWRGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKGRl
YnVnUmVnaXN0ZXJlZEZsYWcsIFtdIHsKKyAgICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQo
d2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1ZywgIndlYmtpdHdlYnJ0Y2VuZHBvaW50IiwgMCwg
IldlYktpdCBXZWJSVEMgZW5kLXBvaW50Iik7CisgICAgfSk7Cit9CisKK2Jvb2wgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6aW5pdGlhbGl6ZVBpcGVsaW5lKCkKK3sKKyAgICBzdGF0aWMgdWludDMy
X3QgblBpcGVsaW5lID0gMDsKKyAgICBhdXRvIHBpcGVsaW5lTmFtZSA9IG1ha2VTdHJpbmcoIndl
YmtpdC13ZWJydC1waXBlbGluZS0iLCBuUGlwZWxpbmUpOworICAgIG1fcGlwZWxpbmUgPSBnc3Rf
cGlwZWxpbmVfbmV3KHBpcGVsaW5lTmFtZS5hc2NpaSgpLmRhdGEoKSk7CisKKyAgICBjb25uZWN0
U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCksIFt0aGlzXShHc3RNZXNz
YWdlKiBtZXNzYWdlKSB7CisgICAgICAgIGhhbmRsZU1lc3NhZ2UobWVzc2FnZSk7CisgICAgfSk7
CisKKyAgICBhdXRvIGJpbk5hbWUgPSBtYWtlU3RyaW5nKCJ3ZWJraXQtd2VicnRjYmluLSIsIG5Q
aXBlbGluZSsrKTsKKyAgICBtX3dlYnJ0Y0JpbiA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJ3ZWJy
dGNiaW4iLCBiaW5OYW1lLmFzY2lpKCkuZGF0YSgpKTsKKyAgICBpZiAoIW1fd2VicnRjQmluKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICBtX3N0YXRzQ29sbGVjdG9yLT5zZXRFbGVtZW50
KG1fd2VicnRjQmluLmdldCgpKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJy
dGNCaW4uZ2V0KCksICJub3RpZnk6OmljZS1jb25uZWN0aW9uLXN0YXRlIiwgR19DQUxMQkFDSygr
W10oR1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQpIHsKKyAgICAgICAgZW5kUG9pbnQt
Pm9uSWNlQ29ubmVjdGlvbkNoYW5nZSgpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9j
b25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJub3RpZnk6OmljZS1nYXRoZXJpbmct
c3RhdGUiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCkg
eworICAgICAgICBlbmRQb2ludC0+b25JY2VHYXRoZXJpbmdDaGFuZ2UoKTsKKyAgICB9KSwgdGhp
cyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAib24t
bmVnb3RpYXRpb24tbmVlZGVkIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dCogZW5kUG9pbnQpIHsKKyAgICAgICAgZW5kUG9pbnQtPm9uTmVnb3RpYXRpb25OZWVkZWQoKTsK
KyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmlu
LmdldCgpLCAib24taWNlLWNhbmRpZGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQqIGVuZFBvaW50LCBndWludCBzZHBNTGluZUluZGV4LCBnY2hhcmFycmF5IGNhbmRp
ZGF0ZSkgeworICAgICAgICBlbmRQb2ludC0+b25JY2VDYW5kaWRhdGUoc2RwTUxpbmVJbmRleCwg
Y2FuZGlkYXRlKTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVk
KG1fd2VicnRjQmluLmdldCgpLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVy
TWVkaWFFbmRwb2ludCogZW5kUG9pbnQsIEdzdFBhZCogcGFkKSB7CisgICAgICAgIC8vIElnbm9y
ZSBvdXRnb2luZyBwYWQgbm90aWZpY2F0aW9ucy4KKyAgICAgICAgaWYgKEdTVF9QQURfRElSRUNU
SU9OKHBhZCkgIT0gR1NUX1BBRF9TUkMpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Y2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3Byb3RlY3RlZFRoaXMgPSBSZWYoKmVuZFBvaW50KSwg
cGFkXSB7CisgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBwcm90ZWN0ZWRUaGlzLT5hZGRSZW1v
dGVTdHJlYW0ocGFkKTsKKyAgICAgICAgfSk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFs
X2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInBhZC1yZW1vdmVkIiwgR19DQUxM
QkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2ludCogZW5kUG9pbnQsIEdzdFBhZCogcGFkKSB7
CisgICAgICAgIC8vIElnbm9yZSBvdXRnb2luZyBwYWQgbm90aWZpY2F0aW9ucy4KKyAgICAgICAg
aWYgKEdTVF9QQURfRElSRUNUSU9OKHBhZCkgIT0gR1NUX1BBRF9TUkMpCisgICAgICAgICAgICBy
ZXR1cm47CisKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZEFuZFdhaXQoW3Byb3RlY3RlZFRoaXMg
PSBSZWYoKmVuZFBvaW50KSwgcGFkXSB7CisgICAgICAgICAgICBpZiAocHJvdGVjdGVkVGhpcy0+
aXNTdG9wcGVkKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgICAgICBwcm90
ZWN0ZWRUaGlzLT5yZW1vdmVSZW1vdGVTdHJlYW0ocGFkKTsKKyAgICAgICAgfSk7CisgICAgfSks
IHRoaXMpOworCisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgp
LCAib24tZGF0YS1jaGFubmVsIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dCogZW5kUG9pbnQsIEdzdFdlYlJUQ0RhdGFDaGFubmVsKiBjaGFubmVsKSB7CisgICAgICAgIGVu
ZFBvaW50LT5vbkRhdGFDaGFubmVsKGNoYW5uZWwpOworICAgIH0pLCB0aGlzKTsKKworICAgIGdz
dF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgbV93ZWJydGNCaW4uZ2V0
KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp+R1N0
cmVhbWVyTWVkaWFFbmRwb2ludCgpCit7CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIHRl
YXJkb3duUGlwZWxpbmUoKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp0ZWFy
ZG93blBpcGVsaW5lKCkKK3sKKyAgICBBU1NFUlQobV9waXBlbGluZSk7CisjaWYgIVJFTEVBU0Vf
TE9HX0RJU0FCTEVECisgICAgc3RvcExvZ2dpbmdTdGF0cygpOworI2VuZGlmCisgICAgbV9zdGF0
c0NvbGxlY3Rvci0+c2V0RWxlbWVudChudWxscHRyKTsKKworICAgIGdfc2lnbmFsX2hhbmRsZXJz
X2Rpc2Nvbm5lY3RfYnlfZGF0YShtX3dlYnJ0Y0Jpbi5nZXQoKSwgdGhpcyk7CisgICAgZGlzY29u
bmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdldCgpKTsKKyAgICBnc3Rf
ZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOworCisg
ICAgbV9zb3VyY2VzLmNsZWFyKCk7CisgICAgbV9yZW1vdGVNTGluZUluZm9zLmNsZWFyKCk7Cisg
ICAgbV9yZW1vdGVTdHJlYW1zQnlJZC5jbGVhcigpOworICAgIG1fd2VicnRjQmluID0gbnVsbHB0
cjsKKyAgICBtX3BpcGVsaW5lID0gbnVsbHB0cjsKK30KKworYm9vbCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpoYW5kbGVNZXNzYWdlKEdzdE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgc3dpdGNo
IChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpKSB7CisgICAgY2FzZSBHU1RfTUVTU0FHRV9FT1M6
CisgICAgICAgIEdTVF9ERUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOX0NBU1Qo
bV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgImVvcyIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VMRU1FTlQ6IHsKKyAgICAgICAgY29u
c3QgYXV0byogZGF0YSA9IGdzdF9tZXNzYWdlX2dldF9zdHJ1Y3R1cmUobWVzc2FnZSk7CisgICAg
ICAgIGlmICghZ19zdHJjbXAwKGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoZGF0YSksICJHc3RCaW5G
b3J3YXJkZWQiKSkgeworICAgICAgICAgICAgR1JlZlB0cjxHc3RNZXNzYWdlPiBzdWJNZXNzYWdl
OworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQoZGF0YSwgIm1lc3NhZ2UiLCBHU1RfVFlQ
RV9NRVNTQUdFLCAmc3ViTWVzc2FnZS5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBp
ZiAoR1NUX01FU1NBR0VfVFlQRShzdWJNZXNzYWdlLmdldCgpKSA9PSBHU1RfTUVTU0FHRV9FT1Mp
CisgICAgICAgICAgICAgICAgZGlzcG9zZUVsZW1lbnRDaGFpbihHU1RfRUxFTUVOVF9DQVNUKEdT
VF9NRVNTQUdFX1NSQyhzdWJNZXNzYWdlLmdldCgpKSkpOworICAgICAgICB9CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBicmVhazsKKyAgICB9CisgICAgcmV0
dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZGlzcG9zZUVsZW1l
bnRDaGFpbihHc3RFbGVtZW50KiBlbGVtZW50KQoreworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9w
aXBlbGluZS5nZXQoKSwgIkdvdCBlbGVtZW50IEVPUyBtZXNzYWdlIGZyb20gJSIgR1NUX1BUUl9G
T1JNQVQsIGVsZW1lbnQpOworCisgICAgYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3N0YXRpY19wYWQoZWxlbWVudCwgInNpbmsiKSk7CisgICAgYXV0byBwZWVyID0gYWRvcHRH
UmVmKGdzdF9wYWRfZ2V0X3BlZXIocGFkLmdldCgpKSk7CisKKyAgICBnc3RfZWxlbWVudF9zZXRf
bG9ja2VkX3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIFRSVUUpOworICAgIGdzdF9wYWRfdW5saW5r
KHBlZXIuZ2V0KCksIHBhZC5nZXQoKSk7CisgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNU
KG1fcGlwZWxpbmUuZ2V0KCkpLCBlbGVtZW50KTsKKyAgICBnc3RfZWxlbWVudF9yZWxlYXNlX3Jl
cXVlc3RfcGFkKG1fd2VicnRjQmluLmdldCgpLCBwZWVyLmdldCgpKTsKKyAgICBnc3RfZWxlbWVu
dF9zZXRfc3RhdGUoZWxlbWVudCwgR1NUX1NUQVRFX05VTEwpOworICAgIGdzdF9lbGVtZW50X3Nl
dF9sb2NrZWRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgRkFMU0UpOworfQorCitib29sIEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OnNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3Vy
YXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIHRl
YXJkb3duUGlwZWxpbmUoKTsKKworICAgIGlmICghaW5pdGlhbGl6ZVBpcGVsaW5lKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIGF1dG8gYnVuZGxlUG9saWN5ID0gYnVuZGxlUG9saWN5
RnJvbUNvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7CisgICAgYXV0byBpY2VUcmFuc3BvcnRQ
b2xpY3kgPSBpY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29uZmlndXJhdGlvbihjb25maWd1cmF0aW9u
KTsKKyAgICBnX29iamVjdF9zZXQobV93ZWJydGNCaW4uZ2V0KCksICJidW5kbGUtcG9saWN5Iiwg
YnVuZGxlUG9saWN5LCAiaWNlLXRyYW5zcG9ydC1wb2xpY3kiLCBpY2VUcmFuc3BvcnRQb2xpY3ks
IG51bGxwdHIpOworCisgICAgZm9yIChhdXRvJiBzZXJ2ZXIgOiBjb25maWd1cmF0aW9uLmljZVNl
cnZlcnMpIHsKKyAgICAgICAgYm9vbCBzdHVuU2V0ID0gZmFsc2U7CisgICAgICAgIGZvciAoYXV0
byYgdXJsIDogc2VydmVyLnVybHMpIHsKKyAgICAgICAgICAgIGlmICh1cmwucHJvdG9jb2woKS5z
dGFydHNXaXRoKCJ0dXJuIikpIHsKKyAgICAgICAgICAgICAgICBhdXRvIHZhbGlkID0gdXJsLnN0
cmluZygpLmlzb2xhdGVkQ29weSgpLnJlcGxhY2UoInR1cm46IiwgInR1cm46Ly8iKS5yZXBsYWNl
KCJ0dXJuczoiLCAidHVybnM6Ly8iKTsKKyAgICAgICAgICAgICAgICBVUkwgdmFsaWRVUkwoVVJM
KCksIHZhbGlkKTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogbGlibmljZSBjdXJyZW50bHkg
ZG9lc24ndCBzZWVtIHRvIGhhbmRsZSBJUHY2IGFkZHJlc3NlcyB2ZXJ5IHdlbGwuCisgICAgICAg
ICAgICAgICAgaWYgKHZhbGlkVVJMLmhvc3QoKS5zdGFydHNXaXRoKCdbJykpCisgICAgICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgICAgIHZhbGlkVVJMLnNldFVzZXIoc2Vy
dmVyLnVzZXJuYW1lKTsKKyAgICAgICAgICAgICAgICB2YWxpZFVSTC5zZXRQYXNzd29yZChzZXJ2
ZXIuY3JlZGVudGlhbCk7CisgICAgICAgICAgICAgICAgZ2Jvb2xlYW4gcmVzdWx0ID0gRkFMU0U7
CisgICAgICAgICAgICAgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgp
LCAiYWRkLXR1cm4tc2VydmVyIiwgdmFsaWRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgJnJl
c3VsdCk7CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQpCisgICAgICAgICAgICAgICAgICAg
IEdTVF9XQVJOSU5HKCJVbmFibGUgdG8gdXNlIFRVUk4gc2VydmVyOiAlcyIsIHZhbGlkVVJMLnN0
cmluZygpLnV0ZjgoKS5kYXRhKCkpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKCFz
dHVuU2V0ICYmIHVybC5wcm90b2NvbCgpLnN0YXJ0c1dpdGgoInN0dW4iKSkgeworICAgICAgICAg
ICAgICAgIGF1dG8gdmFsaWQgPSB1cmwuc3RyaW5nKCkuaXNvbGF0ZWRDb3B5KCkucmVwbGFjZSgi
c3R1bjoiLCAic3R1bjovLyIpOworICAgICAgICAgICAgICAgIFVSTCB2YWxpZFVSTChVUkwoKSwg
dmFsaWQpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBsaWJuaWNlIGN1cnJlbnRseSBkb2Vz
bid0IHNlZW0gdG8gaGFuZGxlIElQdjYgYWRkcmVzc2VzIHZlcnkgd2VsbC4KKyAgICAgICAgICAg
ICAgICBpZiAodmFsaWRVUkwuaG9zdCgpLnN0YXJ0c1dpdGgoJ1snKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdmFsaWRVUkwuc2V0VXNlcihzZXJ2ZXIu
dXNlcm5hbWUpOworICAgICAgICAgICAgICAgIHZhbGlkVVJMLnNldFBhc3N3b3JkKHNlcnZlci5j
cmVkZW50aWFsKTsKKyAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV93ZWJydGNCaW4uZ2V0
KCksICJzdHVuLXNlcnZlciIsIHZhbGlkVVJMLnN0cmluZygpLnV0ZjgoKS5kYXRhKCksIG51bGxw
dHIpOworICAgICAgICAgICAgICAgIHN0dW5TZXQgPSB0cnVlOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgfQorCisgICAgLy8gV0lQOiBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5v
cmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3RzLzMwMgorICAgIEdT
VF9GSVhNRSgiJXp1IGN1c3RvbSBjZXJ0aWZpY2F0ZXMgbm90IHByb3BhZ2F0ZWQgdG8gd2VicnRj
YmluIiwgY29uZmlndXJhdGlvbi5jZXJ0aWZpY2F0ZXMuc2l6ZSgpKTsKKworICAgIGdzdF9lbGVt
ZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUExBWUlORyk7CisgICAg
R1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiRW5kLXBvaW50IHJlYWR5Iik7Cisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVzdGFy
dEljZSgpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAicmVzdGFy
dGluZyBJQ0UiKTsKKyAgICAvLyBXSVAgaW4gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3Jn
L2dzdHJlYW1lci9nc3QtcGx1Z2lucy1iYWQvLS9tZXJnZV9yZXF1ZXN0cy8xODc3CisgICAgaW5p
dGlhdGUodHJ1ZSwgZ3N0X3N0cnVjdHVyZV9uZXcoIndlYnJ0Y2Jpbi1vZmZlci1vcHRpb25zIiwg
ImljZS1yZXN0YXJ0IiwgR19UWVBFX0JPT0xFQU4sIFRSVUUsIG51bGxwdHIpKTsKK30KKworc3Rh
dGljIHN0ZDo6b3B0aW9uYWw8c3RkOjpwYWlyPFJUQ1NkcFR5cGUsIFN0cmluZz4+IGZldGNoRGVz
Y3JpcHRpb24oR3N0RWxlbWVudCogd2VicnRjQmluLCBjb25zdCBjaGFyKiBuYW1lKQoreworICAg
IGlmICghd2VicnRjQmluKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgR1VuaXF1ZU91dFB0
cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+IGRlc2NyaXB0aW9uOworICAgIGdfb2JqZWN0
X2dldCh3ZWJydGNCaW4sIG1ha2VTdHJpbmcobmFtZSwgIi1kZXNjcmlwdGlvbiIpLnV0ZjgoKS5k
YXRhKCksICZkZXNjcmlwdGlvbi5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgaWYgKCFkZXNjcmlw
dGlvbikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIEdVbmlxdWVQdHI8Y2hhcj4gc2RwU3Ry
aW5nKGdzdF9zZHBfbWVzc2FnZV9hc190ZXh0KGRlc2NyaXB0aW9uLT5zZHApKTsKKyAgICBHU1Rf
VFJBQ0VfT0JKRUNUKHdlYnJ0Y0JpbiwgIiVzLWRlc2NyaXB0aW9uIFNEUDogJXMiLCBuYW1lLCBz
ZHBTdHJpbmcuZ2V0KCkpOworICAgIHJldHVybiB7IHsgZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5
cGUoKmRlc2NyaXB0aW9uLmdldCgpKSwgc2RwU3RyaW5nLmdldCgpIH0gfTsKK30KKworc3RhdGlj
IEdzdFdlYlJUQ1NpZ25hbGluZ1N0YXRlIGZldGNoU2lnbmFsaW5nU3RhdGUoR3N0RWxlbWVudCog
d2VicnRjQmluKQoreworICAgIEdzdFdlYlJUQ1NpZ25hbGluZ1N0YXRlIHN0YXRlOworICAgIGdf
b2JqZWN0X2dldCh3ZWJydGNCaW4sICJzaWduYWxpbmctc3RhdGUiLCAmc3RhdGUsIG51bGxwdHIp
OworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICBHVW5pcXVlUHRyPGNoYXI+IGRl
c2MoZ19lbnVtX3RvX3N0cmluZyhHU1RfVFlQRV9XRUJSVENfU0lHTkFMSU5HX1NUQVRFLCBzdGF0
ZSkpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qod2VicnRjQmluLCAiU2lnbmFsaW5nIHN0YXRlIHNl
dCB0byAlcyIsIGRlc2MuZ2V0KCkpOworI2VuZGlmCisgICAgcmV0dXJuIHN0YXRlOworfQorCitl
bnVtIGNsYXNzIEdhdGhlclNpZ25hbGluZ1N0YXRlIHsgTm8sIFllcyB9Oworc3RhdGljIHN0ZDo6
b3B0aW9uYWw8UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpEZXNjcmlwdGlvblN0YXRlcz4gZGVzY3Jp
cHRpb25zRnJvbVdlYlJUQ0JpbihHc3RFbGVtZW50KiB3ZWJydGNCaW4sIEdhdGhlclNpZ25hbGlu
Z1N0YXRlIGdhdGhlclNpZ25hbGluZ1N0YXRlID0gR2F0aGVyU2lnbmFsaW5nU3RhdGU6Ok5vKQor
eworICAgIHN0ZDo6b3B0aW9uYWw8UlRDU2RwVHlwZT4gY3VycmVudExvY2FsRGVzY3JpcHRpb25T
ZHBUeXBlLCBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvblNkcFR5cGUsIGN1cnJlbnRSZW1vdGVEZXNj
cmlwdGlvblNkcFR5cGUsIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvblNkcFR5cGU7CisgICAgU3Ry
aW5nIGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uU2RwLCBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvblNk
cCwgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwLCBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25T
ZHA7CisgICAgaWYgKGF1dG8gY3VycmVudExvY2FsRGVzY3JpcHRpb24gPSBmZXRjaERlc2NyaXB0
aW9uKHdlYnJ0Y0JpbiwgImN1cnJlbnQtbG9jYWwiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBl
LCBkZXNjcmlwdGlvbl0gPSAqY3VycmVudExvY2FsRGVzY3JpcHRpb247CisgICAgICAgIGN1cnJl
bnRMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSA9IHNkcFR5cGU7CisgICAgICAgIGN1cnJlbnRMb2Nh
bERlc2NyaXB0aW9uU2RwID0gV1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChh
dXRvIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uID0gZmV0Y2hEZXNjcmlwdGlvbih3ZWJydGNCaW4s
ICJwZW5kaW5nLWxvY2FsIikpIHsKKyAgICAgICAgYXV0byBbc2RwVHlwZSwgZGVzY3JpcHRpb25d
ID0gKnBlbmRpbmdMb2NhbERlc2NyaXB0aW9uOworICAgICAgICBwZW5kaW5nTG9jYWxEZXNjcmlw
dGlvblNkcFR5cGUgPSBzZHBUeXBlOworICAgICAgICBwZW5kaW5nTG9jYWxEZXNjcmlwdGlvblNk
cCA9IFdURk1vdmUoZGVzY3JpcHRpb24pOworICAgIH0KKyAgICBpZiAoYXV0byBjdXJyZW50UmVt
b3RlRGVzY3JpcHRpb24gPSBmZXRjaERlc2NyaXB0aW9uKHdlYnJ0Y0JpbiwgImN1cnJlbnQtcmVt
b3RlIikpIHsKKyAgICAgICAgYXV0byBbc2RwVHlwZSwgZGVzY3JpcHRpb25dID0gKmN1cnJlbnRS
ZW1vdGVEZXNjcmlwdGlvbjsKKyAgICAgICAgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwVHlw
ZSA9IHNkcFR5cGU7CisgICAgICAgIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvblNkcCA9IFdURk1v
dmUoZGVzY3JpcHRpb24pOworICAgIH0KKyAgICBpZiAoYXV0byBwZW5kaW5nUmVtb3RlRGVzY3Jp
cHRpb24gPSBmZXRjaERlc2NyaXB0aW9uKHdlYnJ0Y0JpbiwgInBlbmRpbmctcmVtb3RlIikpIHsK
KyAgICAgICAgYXV0byBbc2RwVHlwZSwgZGVzY3JpcHRpb25dID0gKnBlbmRpbmdSZW1vdGVEZXNj
cmlwdGlvbjsKKyAgICAgICAgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwVHlwZSA9IHNkcFR5
cGU7CisgICAgICAgIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvblNkcCA9IFdURk1vdmUoZGVzY3Jp
cHRpb24pOworICAgIH0KKworICAgIHN0ZDo6b3B0aW9uYWw8UlRDU2lnbmFsaW5nU3RhdGU+IHNp
Z25hbGluZ1N0YXRlOworICAgIGlmIChnYXRoZXJTaWduYWxpbmdTdGF0ZSA9PSBHYXRoZXJTaWdu
YWxpbmdTdGF0ZTo6WWVzKQorICAgICAgICBzaWduYWxpbmdTdGF0ZSA9IHRvU2lnbmFsaW5nU3Rh
dGUoZmV0Y2hTaWduYWxpbmdTdGF0ZSh3ZWJydGNCaW4pKTsKKworICAgIHJldHVybiBQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OkRlc2NyaXB0aW9uU3RhdGVzIHsKKyAgICAgICAgc2lnbmFsaW5nU3Rh
dGUsCisgICAgICAgIGN1cnJlbnRMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSwgY3VycmVudExvY2Fs
RGVzY3JpcHRpb25TZHAsCisgICAgICAgIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSwg
cGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHAsCisgICAgICAgIGN1cnJlbnRSZW1vdGVEZXNjcmlw
dGlvblNkcFR5cGUsIGN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvblNkcCwKKyAgICAgICAgcGVuZGlu
Z1JlbW90ZURlc2NyaXB0aW9uU2RwVHlwZSwgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwCisg
ICAgfTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb1NldExvY2FsRGVzY3Jp
cHRpb24oY29uc3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uKiBkZXNjcmlwdGlvbikKK3sKKyAgICBz
ZXREZXNjcmlwdGlvbihkZXNjcmlwdGlvbiwgdHJ1ZSwgW3Byb3RlY3RlZFRoaXMgPSBSZWYoKnRo
aXMpLCB0aGlzXSB7CisgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlv
bnNGcm9tV2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgpLCBHYXRoZXJTaWduYWxpbmdTdGF0ZTo6
WWVzKTsKKyAgICAgICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiB0cmFuc3BvcnQ7
CisgICAgICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInNjdHAtdHJhbnNwb3J0
IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgIG1fcGVlckNvbm5lY3Rp
b25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRpb25TdWNjZWVkZWQoV1RGTW92ZShkZXNjcmlwdGlv
bnMpLCB0cmFuc3BvcnQgPyBtYWtlVW5pcXVlPEdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5k
PihXVEZNb3ZlKHRyYW5zcG9ydCkpIDogbnVsbHB0cik7CisgICAgfSwgW3Byb3RlY3RlZFRoaXMg
PSBSZWYoKnRoaXMpLCB0aGlzXShjb25zdCBHRXJyb3IqIGVycm9yKSB7CisgICAgICAgIGlmIChw
cm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAg
aWYgKGVycm9yICYmIGVycm9yLT5jb2RlID09IEdTVF9XRUJSVENfRVJST1JfSU5WQUxJRF9TVEFU
RSkKKyAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLnNldExvY2FsRGVzY3JpcHRp
b25GYWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8gc2V0IGxv
Y2FsIGFuc3dlciBzZHA6IG5vIHBlbmRpbmcgcmVtb3RlIGRlc2NyaXB0aW9uLiJfcyB9KTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuc2V0TG9jYWxE
ZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgIlVuYWJsZSB0byBh
cHBseSBzZXNzaW9uIGxvY2FsIGRlc2NyaXB0aW9uIl9zIH0pOworICAgIH0pOworfQorCit2b2lk
IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvU2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBzZXREZXNjcmlwdGlvbigm
ZGVzY3JpcHRpb24sIGZhbHNlLCBbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRoaXNdIHsK
KyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBY2tpbmcg
cmVtb3RlIGRlc2NyaXB0aW9uIik7CisgICAgICAgIGF1dG8gZGVzY3JpcHRpb25zID0gZGVzY3Jp
cHRpb25zRnJvbVdlYlJUQ0JpbihtX3dlYnJ0Y0Jpbi5nZXQoKSwgR2F0aGVyU2lnbmFsaW5nU3Rh
dGU6Olllcyk7CisgICAgICAgIEdSZWZQdHI8R3N0V2ViUlRDU0NUUFRyYW5zcG9ydD4gdHJhbnNw
b3J0OworICAgICAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCksICJzY3RwLXRyYW5z
cG9ydCIsICZ0cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5zZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZChXVEZNb3ZlKGRlc2Ny
aXB0aW9ucyksIHRyYW5zcG9ydCA/IG1ha2VVbmlxdWU8R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJh
Y2tlbmQ+KFdURk1vdmUodHJhbnNwb3J0KSkgOiBudWxscHRyKTsKKyAgICB9LCBbcHJvdGVjdGVk
VGhpcyA9IFJlZigqdGhpcyksIHRoaXNdKGNvbnN0IEdFcnJvciogZXJyb3IpIHsKKyAgICAgICAg
aWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBpZiAoZXJyb3IgJiYgZXJyb3ItPmNvZGUgPT0gR1NUX1dFQlJUQ19FUlJPUl9JTlZBTElE
X1NUQVRFKQorICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuc2V0UmVtb3RlRGVz
Y3JpcHRpb25GYWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJGYWlsZWQgdG8g
c2V0IHJlbW90ZSBhbnN3ZXIgc2RwIl9zIH0pOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRSZW1vdGVEZXNjcmlwdGlvbkZhaWxlZChFeGNlcHRp
b24geyBPcGVyYXRpb25FcnJvciwgIlVuYWJsZSB0byBhcHBseSBzZXNzaW9uIHJlbW90ZSBkZXNj
cmlwdGlvbiJfcyB9KTsKKyAgICB9KTsKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBz
dGFydExvZ2dpbmdTdGF0cygpOworI2VuZGlmCit9CisKK3N0cnVjdCBTZXREZXNjcmlwdGlvbkNh
bGxEYXRhIHsKKyAgICBGdW5jdGlvbjx2b2lkKCk+IHN1Y2Nlc3NDYWxsYmFjazsKKyAgICBGdW5j
dGlvbjx2b2lkKGNvbnN0IEdFcnJvciopPiBmYWlsdXJlQ2FsbGJhY2s7Cit9OworCitXRUJLSVRf
REVGSU5FX0FTWU5DX0RBVEFfU1RSVUNUKFNldERlc2NyaXB0aW9uQ2FsbERhdGEpOworCit2b2lk
IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldERlc2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25E
ZXNjcmlwdGlvbiogZGVzY3JpcHRpb24sIGJvb2wgaXNMb2NhbCwgRnVuY3Rpb248dm9pZCgpPiYm
IHN1Y2Nlc3NDYWxsYmFjaywgRnVuY3Rpb248dm9pZChjb25zdCBHRXJyb3IqKT4mJiBmYWlsdXJl
Q2FsbGJhY2spCit7CisgICAgR3N0U0RQTWVzc2FnZSogbWVzc2FnZTsKKyAgICBhdXRvIHNkcFR5
cGUgPSBSVENTZHBUeXBlOjpPZmZlcjsKKworICAgIGlmIChkZXNjcmlwdGlvbikgeworICAgICAg
ICBpZiAoZ3N0X3NkcF9tZXNzYWdlX25ld19mcm9tX3RleHQocmVpbnRlcnByZXRfY2FzdDxjb25z
dCBjaGFyKj4oZGVzY3JpcHRpb24tPnNkcCgpLmNoYXJhY3RlcnM4KCkpLCAmbWVzc2FnZSkgIT0g
R1NUX1NEUF9PSykgeworICAgICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKG51bGxwdHIpOworICAg
ICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIHNkcFR5cGUgPSBkZXNjcmlwdGlv
bi0+dHlwZSgpOworICAgIH0gZWxzZSBpZiAoZ3N0X3NkcF9tZXNzYWdlX25ldygmbWVzc2FnZSkg
IT0gR1NUX1NEUF9PSykgeworICAgICAgICBmYWlsdXJlQ2FsbGJhY2sobnVsbHB0cik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoIWlzTG9jYWwpCisgICAgICAgIHN0b3JlUmVt
b3RlTUxpbmVJbmZvKG1lc3NhZ2UpOworCisgICAgYXV0byB0eXBlID0gdG9TZXNzaW9uRGVzY3Jp
cHRpb25UeXBlKHNkcFR5cGUpOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIkNyZWF0aW5nICVzIHNlc3Npb24gZm9yIFNEUCAlcyIsIGlzTG9jYWwgPyAibG9jYWwiIDog
InJlbW90ZSIsIGdzdF93ZWJydGNfc2RwX3R5cGVfdG9fc3RyaW5nKHR5cGUpKTsKKworICAgIEdV
bmlxdWVQdHI8R3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBzZXNzaW9uRGVzY3JpcHRpb24o
Z3N0X3dlYnJ0Y19zZXNzaW9uX2Rlc2NyaXB0aW9uX25ldyh0eXBlLCBtZXNzYWdlKSk7CisgICAg
YXV0byBzaWduYWxOYW1lID0gbWFrZVN0cmluZygic2V0LSIsIGlzTG9jYWwgPyAibG9jYWwiIDog
InJlbW90ZSIsICItZGVzY3JpcHRpb24iKTsKKyAgICBhdXRvKiBkYXRhID0gY3JlYXRlU2V0RGVz
Y3JpcHRpb25DYWxsRGF0YSgpOworICAgIGRhdGEtPnN1Y2Nlc3NDYWxsYmFjayA9IFdURk1vdmUo
c3VjY2Vzc0NhbGxiYWNrKTsKKyAgICBkYXRhLT5mYWlsdXJlQ2FsbGJhY2sgPSBXVEZNb3ZlKGZh
aWx1cmVDYWxsYmFjayk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdl
dCgpLCBzaWduYWxOYW1lLmFzY2lpKCkuZGF0YSgpLCBzZXNzaW9uRGVzY3JpcHRpb24uZ2V0KCks
IGdzdF9wcm9taXNlX25ld193aXRoX2NoYW5nZV9mdW5jKFtdKEdzdFByb21pc2UqIHJhd1Byb21p
c2UsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8qIGRhdGEgPSBzdGF0aWNfY2Fz
dDxTZXREZXNjcmlwdGlvbkNhbGxEYXRhKj4odXNlckRhdGEpOworICAgICAgICBhdXRvIHByb21p
c2UgPSBhZG9wdEdSZWYocmF3UHJvbWlzZSk7CisgICAgICAgIGF1dG8gcmVzdWx0ID0gZ3N0X3By
b21pc2Vfd2FpdChwcm9taXNlLmdldCgpKTsKKyAgICAgICAgY29uc3QgYXV0byogcmVwbHkgPSBn
c3RfcHJvbWlzZV9nZXRfcmVwbHkocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIGlmIChyZXN1bHQg
IT0gR1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQgfHwgKHJlcGx5ICYmIGdzdF9zdHJ1Y3R1cmVf
aGFzX2ZpZWxkKHJlcGx5LCAiZXJyb3IiKSkpIHsKKyAgICAgICAgICAgIHN0ZDo6b3B0aW9uYWw8
R1VuaXF1ZVB0cjxHRXJyb3I+PiBlcnJvckhvbGRlcjsKKyAgICAgICAgICAgIGlmIChyZXBseSkg
eworICAgICAgICAgICAgICAgIEdVbmlxdWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAg
ICAgICAgICBnc3Rfc3RydWN0dXJlX2dldChyZXBseSwgImVycm9yIiwgR19UWVBFX0VSUk9SLCAm
ZXJyb3Iub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICAgICAgICAgIEdTVF9FUlJPUigiVW5h
YmxlIHRvIHNldCBkZXNjcmlwdGlvbiwgZXJyb3I6ICVzIiwgZXJyb3ItPm1lc3NhZ2UpOworICAg
ICAgICAgICAgICAgIGVycm9ySG9sZGVyID0gR1VuaXF1ZVB0cjxHRXJyb3I+KGVycm9yLnJlbGVh
c2UoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtlcnJv
ciA9IFdURk1vdmUoZXJyb3JIb2xkZXIpLCBmYWlsdXJlQ2FsbGJhY2sgPSBXVEZNb3ZlKGRhdGEt
PmZhaWx1cmVDYWxsYmFjayldIHsKKyAgICAgICAgICAgICAgICBmYWlsdXJlQ2FsbGJhY2soZXJy
b3IgPyBlcnJvci0+Z2V0KCkgOiBudWxscHRyKTsKKyAgICAgICAgICAgIH0pOworICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAgIGNhbGxPbk1haW5UaHJlYWQoW3N1Y2Nlc3ND
YWxsYmFjayA9IFdURk1vdmUoZGF0YS0+c3VjY2Vzc0NhbGxiYWNrKV0geworICAgICAgICAgICAg
c3VjY2Vzc0NhbGxiYWNrKCk7CisgICAgICAgIH0pOworICAgIH0sIGRhdGEsIHJlaW50ZXJwcmV0
X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+KGRlc3Ryb3lTZXREZXNjcmlwdGlvbkNhbGxEYXRhKSkpOwor
fQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN0b3JlUmVtb3RlTUxpbmVJbmZvKEdz
dFNEUE1lc3NhZ2UqIG1lc3NhZ2UpCit7CisgICAgbV9yZW1vdGVNTGluZUluZm9zLmNsZWFyKCk7
CisgICAgdW5zaWduZWQgdG90YWxNZWRpYXMgPSBnc3Rfc2RwX21lc3NhZ2VfbWVkaWFzX2xlbiht
ZXNzYWdlKTsKKyAgICBtX3JlbW90ZU1MaW5lSW5mb3MucmVzZXJ2ZUNhcGFjaXR5KHRvdGFsTWVk
aWFzKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTdG9yaW5nICV1
IHJlbW90ZSBwZW5kaW5nIG1saW5lcyIsIHRvdGFsTWVkaWFzKTsKKyAgICBmb3IgKHVuc2lnbmVk
IG1lZGlhSW5kZXggPSAwOyBtZWRpYUluZGV4IDwgdG90YWxNZWRpYXM7IG1lZGlhSW5kZXgrKykg
eworICAgICAgICBjb25zdCBhdXRvKiBtZWRpYSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEo
bWVzc2FnZSwgbWVkaWFJbmRleCk7CisgICAgICAgIGNvbnN0IGNoYXIqIG1lZGlhVHlwZSA9IGdz
dF9zZHBfbWVkaWFfZ2V0X21lZGlhKG1lZGlhKTsKKyAgICAgICAgaWYgKCFnX3N0cl9lcXVhbCht
ZWRpYVR5cGUsICJhdWRpbyIpICYmICFnX3N0cl9lcXVhbChtZWRpYVR5cGUsICJ2aWRlbyIpKQor
ICAgICAgICAgICAgY29udGludWU7CisKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisg
ICAgICAgIEdVbmlxdWVQdHI8Y2hhcj4gbWVkaWFSZXByZXNlbnRhdGlvbihnc3Rfc2RwX21lZGlh
X2FzX3RleHQobWVkaWEpKTsKKyAgICAgICAgR1NUX0xPR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIlByb2Nlc3NpbmcgbWVkaWE6XG4lcyIsIG1lZGlhUmVwcmVzZW50YXRpb24uZ2V0KCkpOwor
I2VuZGlmCisgICAgICAgIGNvbnN0IGNoYXIqIG1pZCA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJp
YnV0ZV92YWwobWVkaWEsICJtaWQiKTsKKyAgICAgICAgaWYgKCFtaWQpCisgICAgICAgICAgICBj
b250aW51ZTsKKworICAgICAgICBib29sIGlzSW5hY3RpdmUgPSBmYWxzZTsKKyAgICAgICAgdW5z
aWduZWQgdG90YWxBdHRyaWJ1dGVzID0gZ3N0X3NkcF9tZWRpYV9hdHRyaWJ1dGVzX2xlbihtZWRp
YSk7CisgICAgICAgIGZvciAodW5zaWduZWQgYXR0cmlidXRlSW5kZXggPSAwOyBhdHRyaWJ1dGVJ
bmRleCA8IHRvdGFsQXR0cmlidXRlczsgYXR0cmlidXRlSW5kZXgrKykgeworICAgICAgICAgICAg
Y29uc3QgYXV0byogYXR0cmlidXRlID0gZ3N0X3NkcF9tZWRpYV9nZXRfYXR0cmlidXRlKG1lZGlh
LCBhdHRyaWJ1dGVJbmRleCk7CisgICAgICAgICAgICBpZiAoIWdfc3RyY21wMChhdHRyaWJ1dGUt
PmtleSwgImluYWN0aXZlIikpIHsKKyAgICAgICAgICAgICAgICBpc0luYWN0aXZlID0gdHJ1ZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAg
ICBpZiAoaXNJbmFjdGl2ZSkgeworICAgICAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVs
aW5lLmdldCgpLCAiU2tpcHBpbmcgaW5hY3RpdmUgbWVkaWEiKTsKKyAgICAgICAgICAgIGNvbnRp
bnVlOworICAgICAgICB9CisKKyAgICAgICAgbV9tZWRpYUZvck1pZC5zZXQoeyBtaWQgfSwgZ19z
dHJfZXF1YWwobWVkaWFUeXBlLCAiYXVkaW8iKSA/IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6
OkF1ZGlvIDogUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6VmlkZW8pOworCisgICAgICAgIC8v
IGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFk
Ly0vbWVyZ2VfcmVxdWVzdHMvMTkwNworICAgICAgICBpZiAoc2RwTWVkaWFIYXNBdHRyaWJ1dGVL
ZXkobWVkaWEsICJpY2UtbGl0ZSIpKSB7CisgICAgICAgICAgICBHUmVmUHRyPEdPYmplY3Q+IGlj
ZTsKKyAgICAgICAgICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImljZS1hZ2Vu
dCIsICZpY2Uub3V0UHRyKCksIG51bGxwdHIpOworICAgICAgICAgICAgZ19vYmplY3Rfc2V0KGlj
ZS5nZXQoKSwgImljZS1saXRlIiwgVFJVRSwgbnVsbHB0cik7CisgICAgICAgIH0KKworICAgICAg
ICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2VtcHR5KCkpOworICAgICAgICBW
ZWN0b3I8aW50PiBwYXlsb2FkVHlwZXM7CisgICAgICAgIHVuc2lnbmVkIHRvdGFsRm9ybWF0cyA9
IGdzdF9zZHBfbWVkaWFfZm9ybWF0c19sZW4obWVkaWEpOworICAgICAgICBHU1RfREVCVUdfT0JK
RUNUKG1fcGlwZWxpbmUuZ2V0KCksICJNZWRpYSAlcyBoYXMgJXUgZm9ybWF0cyIsIG1lZGlhVHlw
ZSwgdG90YWxGb3JtYXRzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBmb3JtYXRJbmRleCA9IDA7
IGZvcm1hdEluZGV4IDwgdG90YWxGb3JtYXRzOyBmb3JtYXRJbmRleCsrKSB7CisgICAgICAgICAg
ICBhdXRvIGZvcm1hdCA9IG1ha2VTdHJpbmcoZ3N0X3NkcF9tZWRpYV9nZXRfZm9ybWF0KG1lZGlh
LCBmb3JtYXRJbmRleCkpOworICAgICAgICAgICAgYXV0byBwYXlsb2FkVHlwZSA9IHBhcnNlSW50
ZWdlcjxpbnQ+KGZvcm1hdCk7CisgICAgICAgICAgICBpZiAoIXBheWxvYWRUeXBlIHx8ICEqcGF5
bG9hZFR5cGUpIHsKKyAgICAgICAgICAgICAgICBHU1RfV0FSTklOR19PQkpFQ1QobV9waXBlbGlu
ZS5nZXQoKSwgIkludmFsaWQgcGF5bG9hZCB0eXBlOiAlcyIsIGZvcm1hdC51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGF1dG8gZm9ybWF0Q2FwcyA9IGFkb3B0R1JlZihnc3Rfc2RwX21lZGlhX2dldF9jYXBzX2Zyb21f
bWVkaWEobWVkaWEsICpwYXlsb2FkVHlwZSkpOworICAgICAgICAgICAgaWYgKCFmb3JtYXRDYXBz
KSB7CisgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICJObyBjYXBzIGZvdW5kIGZvciBwYXlsb2FkIHR5cGUgJWQiLCAqcGF5bG9hZFR5cGUpOworICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgfQorCisgICAgICAgICAgICAvLyBS
ZWxheSBTRFAgYXR0cmlidXRlcyB0byB0aGUgY2FwcywgdGhpcyBpcyBzcGVjaWFsbHkgdXNlZnVs
IHNvIHRoYXQgZWxlbWVudHMgaW4KKyAgICAgICAgICAgIC8vIHdlYnJ0Y2JpbiB3aWxsIGJlIGFi
bGUgdG8gZW5hYmxlIFJUUCBoZWFkZXIgZXh0ZW5zaW9ucy4KKyAgICAgICAgICAgIGdzdF9zZHBf
bWVkaWFfYXR0cmlidXRlc190b19jYXBzKG1lZGlhLCBmb3JtYXRDYXBzLmdldCgpKTsKKworICAg
ICAgICAgICAgZ3N0X2NhcHNfYXBwZW5kKGNhcHMuZ2V0KCksIGZvcm1hdENhcHMubGVha1JlZigp
KTsKKyAgICAgICAgICAgIG1fcHRDb3VudGVyID0gc3RkOjptYXgobV9wdENvdW50ZXIsICpwYXls
b2FkVHlwZSArIDEpOworICAgICAgICAgICAgcGF5bG9hZFR5cGVzLmFwcGVuZCgqcGF5bG9hZFR5
cGUpOworICAgICAgICB9CisKKyAgICAgICAgdW5zaWduZWQgdG90YWxDYXBzID0gZ3N0X2NhcHNf
Z2V0X3NpemUoY2Fwcy5nZXQoKSk7CisgICAgICAgIGlmICh0b3RhbENhcHMpIHsKKyAgICAgICAg
ICAgIGZvciAodW5zaWduZWQgY2Fwc0luZGV4ID0gMDsgY2Fwc0luZGV4IDwgdG90YWxDYXBzOyBj
YXBzSW5kZXgrKykgeworICAgICAgICAgICAgICAgIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlID0g
Z3N0X2NhcHNfZ2V0X3N0cnVjdHVyZShjYXBzLmdldCgpLCBjYXBzSW5kZXgpOworICAgICAgICAg
ICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0X25hbWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1y
dHAiKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBl
bGluZS5nZXQoKSwgIkNhY2hpbmcgcGF5bG9hZCBjYXBzOiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fw
cy5nZXQoKSk7CisgICAgICAgICAgICBtX3JlbW90ZU1MaW5lSW5mb3MudW5jaGVja2VkQXBwZW5k
KHsgV1RGTW92ZShjYXBzKSwgZmFsc2UsIFdURk1vdmUocGF5bG9hZFR5cGVzKSB9KTsKKyAgICAg
ICAgfQorICAgIH0KK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb25maWd1cmVB
bmRMaW5rU291cmNlKFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciYgc291cmNl
KQoreworICAgIGF1dG8gY2FwcyA9IHNvdXJjZS5hbGxvd2VkQ2FwcygpOworICAgIHN0ZDo6b3B0
aW9uYWw8c3RkOjpwYWlyPFBlbmRpbmdNTGluZUluZm8sIEdSZWZQdHI8R3N0Q2Fwcz4+PiBmb3Vu
ZDsKKyAgICBmb3IgKGF1dG8mIG1MaW5lSW5mbyA6IG1fcmVtb3RlTUxpbmVJbmZvcykgeworICAg
ICAgICBpZiAobUxpbmVJbmZvLmlzVXNlZCkKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAg
ICAgIHVuc2lnbmVkIHRvdGFsQ2FwcyA9IGdzdF9jYXBzX2dldF9zaXplKG1MaW5lSW5mby5jYXBz
LmdldCgpKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBjYXBzSW5kZXggPSAwOyBjYXBzSW5kZXgg
PCB0b3RhbENhcHM7IGNhcHNJbmRleCsrKSB7CisgICAgICAgICAgICBhdXRvKiBzdHJ1Y3R1cmUg
PSBnc3RfY2Fwc19nZXRfc3RydWN0dXJlKG1MaW5lSW5mby5jYXBzLmdldCgpLCBjYXBzSW5kZXgp
OworICAgICAgICAgICAgYXV0byBjYXBzMiA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZnVsbChn
c3Rfc3RydWN0dXJlX2NvcHkoc3RydWN0dXJlKSwgbnVsbHB0cikpOworICAgICAgICAgICAgYXV0
byBpbnRlcnNlY3RlZCA9IGFkb3B0R1JlZihnc3RfY2Fwc19pbnRlcnNlY3QoY2Fwcy5nZXQoKSwg
Y2FwczIuZ2V0KCkpKTsKKyAgICAgICAgICAgIGlmICghZ3N0X2NhcHNfaXNfZW1wdHkoaW50ZXJz
ZWN0ZWQuZ2V0KCkpKSB7CisgICAgICAgICAgICAgICAgZm91bmQgPSBzdGQ6Om1ha2VfcGFpciht
TGluZUluZm8sIFdURk1vdmUoaW50ZXJzZWN0ZWQpKTsKKyAgICAgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgICAgICBpZiAoZm91bmQuaGFzX3ZhbHVlKCkp
CisgICAgICAgICAgICBicmVhazsKKyAgICB9CisKKyAgICBib29sIHBheWxvYWRUeXBlV2FzU2V0
ID0gZmFsc2U7CisgICAgaWYgKGZvdW5kKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9w
aXBlbGluZS5nZXQoKSwgIlVudXNlZCBhbmQgY29tcGF0aWJsZSBjYXBzIGZvdW5kIGZvciAlIiBH
U1RfUFRSX0ZPUk1BVCAiLi4uICUiIEdTVF9QVFJfRk9STUFULCBjYXBzLmdldCgpLCBmb3VuZC0+
c2Vjb25kLmdldCgpKTsKKyAgICAgICAgcGF5bG9hZFR5cGVXYXNTZXQgPSBzb3VyY2Uuc2V0UGF5
bG9hZFR5cGUoZm91bmQtPnNlY29uZCk7CisgICAgICAgIGZvdW5kLT5maXJzdC5pc1VzZWQgPSB0
cnVlOworICAgIH0gZWxzZQorICAgICAgICBwYXlsb2FkVHlwZVdhc1NldCA9IHNvdXJjZS5zZXRQ
YXlsb2FkVHlwZShjYXBzKTsKKworICAgIGlmICghcGF5bG9hZFR5cGVXYXNTZXQpCisgICAgICAg
IHJldHVybjsKKworICAgIGlmICghc291cmNlLnBhZCgpKSB7CisgICAgICAgIHNvdXJjZS5zZXRT
aW5rUGFkKHJlcXVlc3RQYWQobV9yZXF1ZXN0UGFkQ291bnRlciwgc291cmNlLmFsbG93ZWRDYXBz
KCkpKTsKKyAgICAgICAgbV9yZXF1ZXN0UGFkQ291bnRlcisrOworICAgIH0KKworICAgIGF1dG8m
IHNpbmtQYWQgPSBzb3VyY2UucGFkKCk7CisgICAgQVNTRVJUKCFnc3RfcGFkX2lzX2xpbmtlZChz
aW5rUGFkLmdldCgpKSk7CisgICAgaWYgKGdzdF9wYWRfaXNfbGlua2VkKHNpbmtQYWQuZ2V0KCkp
KSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiUmVhbHRpbWVNZWRpYVNvdXJjZSBhbHJlYWR5IGxp
bmtlZCwgdGhpcyBzaG91bGQgbm90IGhhcHBlbi4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0K
KworICAgIGF1dG8gc291cmNlQmluID0gc291cmNlLmJpbigpOworICAgIGdzdF9iaW5fYWRkKEdT
VF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgc291cmNlQmluLmdldCgpKTsKKyAgICBzb3Vy
Y2UubGluaygpOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gcGFkSWQoZ3N0X3BhZF9nZXRfbmFtZShzaW5rUGFkLmdldCgpKSk7CisgICAgYXV0
byBkb3RGaWxlTmFtZSA9IG1ha2VTdHJpbmcoR1NUX09CSkVDVF9OQU1FKG1fcGlwZWxpbmUuZ2V0
KCkpLCAiLm91dGdvaW5nLSIsIHBhZElkLmdldCgpKTsKKyAgICBHU1RfREVCVUdfQklOX1RPX0RP
VF9GSUxFX1dJVEhfVFMoR1NUX0JJTihtX3BpcGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBI
X1NIT1dfQUxMLCBkb3RGaWxlTmFtZS51dGY4KCkuZGF0YSgpKTsKKyNlbmRpZgorfQorCitHUmVm
UHRyPEdzdFBhZD4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVxdWVzdFBhZCh1bnNpZ25lZCBt
bGluZUluZGV4LCBjb25zdCBHUmVmUHRyPEdzdENhcHM+JiBhbGxvd2VkQ2FwcykKK3sKKyAgICBh
dXRvIHBhZElkID0gbWFrZVN0cmluZygic2lua18iLCBtbGluZUluZGV4KTsKKyAgICBhdXRvIGNh
cHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfY29weShhbGxvd2VkQ2Fwcy5nZXQoKSkpOworCisgICAg
Z3N0X2NhcHNfbWFwX2luX3BsYWNlKGNhcHMuZ2V0KCksIFtdKEdzdENhcHNGZWF0dXJlcyosIEdz
dFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4gewor
ICAgICAgICBhdXRvKiBlbmRQb2ludCA9IHJlaW50ZXJwcmV0X2Nhc3Q8R1N0cmVhbWVyTWVkaWFF
bmRwb2ludCo+KHVzZXJEYXRhKTsKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoc3RydWN0dXJl
LCAicGF5bG9hZCIsIEdfVFlQRV9JTlQsIGVuZFBvaW50LT5tX3B0Q291bnRlcisrLCBudWxscHRy
KTsKKyAgICAgICAgcmV0dXJuIFRSVUU7CisgICAgfSwgdGhpcyk7CisKKyAgICAvLyBGSVhNRTog
UmVzdHJpY3RpbmcgY2FwcyBhbmQgY29kZWMtcHJlZmVyZW5jZXMgYnJlYWtzIGNhcHMgbmVnb3Rp
YXRpb24gb2Ygb3V0Z29pbmcgc291cmNlcyBpbgorICAgIC8vIHNvbWUgY2FzZSAoaml0c2kpLgor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIlJlcXVlc3RpbmcgcGFkICVz
IHJlc3RyaWN0ZWQgdG8gJSIgR1NUX1BUUl9GT1JNQVQsIHBhZElkLnV0ZjgoKS5kYXRhKCksIGNh
cHMuZ2V0KCkpOworICAgIGF1dG8qIHBhZFRlbXBsYXRlID0gZ3N0X2VsZW1lbnRfZ2V0X3BhZF90
ZW1wbGF0ZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgInNpbmtfJXUiKTsKKyAgICBhdXRvIHNpbmtQYWQg
PSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfcmVxdWVzdF9wYWQobV93ZWJydGNCaW4uZ2V0KCksIHBh
ZFRlbXBsYXRlLCBwYWRJZC51dGY4KCkuZGF0YSgpLCBjYXBzLmdldCgpKSk7CisgICAgR1JlZlB0
cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gdHJhbnNjZWl2ZXI7CisgICAgZ19vYmplY3RfZ2V0
KHNpbmtQYWQuZ2V0KCksICJ0cmFuc2NlaXZlciIsICZ0cmFuc2NlaXZlci5vdXRQdHIoKSwgbnVs
bHB0cik7CisgICAgZ19vYmplY3Rfc2V0KHRyYW5zY2VpdmVyLmdldCgpLCAiY29kZWMtcHJlZmVy
ZW5jZXMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gc2lua1BhZDsKK30KKwor
Ym9vbCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjphZGRUcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJC
YWNrZW5kJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBjb25zdCBGaXhlZFZlY3Rv
cjxTdHJpbmc+JikKK3sKKyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2Ugc291
cmNlOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBydGNTZW5kZXI7CisKKyAgICBp
ZiAodHJhY2sucHJpdmF0ZVRyYWNrKCkuaGFzQXVkaW8oKSkgeworICAgICAgICBHU1RfREVCVUdf
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBZGRpbmcgb3V0Z29pbmcgYXVkaW8gc291cmNlIik7
CisgICAgICAgIGF1dG8gYXVkaW9Tb3VyY2UgPSBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXI6OmNyZWF0ZSh0cmFjay5wcml2YXRlVHJhY2soKSk7CisgICAgICAgIGNvbmZpZ3Vy
ZUFuZExpbmtTb3VyY2UoYXVkaW9Tb3VyY2UpOworCisgICAgICAgIHJ0Y1NlbmRlciA9IGF1ZGlv
U291cmNlLT5zZW5kZXIoKTsKKyAgICAgICAgc291cmNlID0gV1RGTW92ZShhdWRpb1NvdXJjZSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKHRyYWNrLnByaXZhdGVUcmFjaygpLmhhc1Zp
ZGVvKCkpOworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBZGRp
bmcgb3V0Z29pbmcgdmlkZW8gc291cmNlIik7CisgICAgICAgIGF1dG8gdmlkZW9Tb3VyY2UgPSBS
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSh0cmFjay5wcml2YXRl
VHJhY2soKSk7CisgICAgICAgIGNvbmZpZ3VyZUFuZExpbmtTb3VyY2UodmlkZW9Tb3VyY2UpOwor
CisgICAgICAgIHJ0Y1NlbmRlciA9IHZpZGVvU291cmNlLT5zZW5kZXIoKTsKKyAgICAgICAgc291
cmNlID0gV1RGTW92ZSh2aWRlb1NvdXJjZSk7CisgICAgfQorCisgICAgc2VuZGVyLnNldFNvdXJj
ZShXVEZNb3ZlKHNvdXJjZSkpOworCisgICAgaWYgKGF1dG8gcnRwU2VuZGVyID0gc2VuZGVyLnJ0
Y1NlbmRlcigpKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwg
IkFscmVhZHkgaGFzIGEgc2VuZGVyLiIpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisK
KyAgICBzZW5kZXIuc2V0UlRDU2VuZGVyKFdURk1vdmUocnRjU2VuZGVyKSk7CisKKyAgICBHU1Rf
REVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJTZW5kZXIgY29uZmlndXJlZCIpOworICAg
IHJldHVybiB0cnVlOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlbW92ZVRy
YWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIHNlbmRlcikKK3sKKyAgICBHU1RfREVCVUdf
T0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJSZW1vdmluZyB0cmFjayIpOworICAgIGlmIChhdXRv
IGJpbiA9IHNlbmRlci5zdG9wU291cmNlKCkpCisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9C
SU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgYmluLmdldCgpKTsKKyAgICBzZW5kZXIuY2xlYXJT
b3VyY2UoKTsKKyAgICBvbk5lZ290aWF0aW9uTmVlZGVkKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVPZmZlcihjb25zdCBSVENPZmZlck9wdGlvbnMmIG9wdGlv
bnMpCit7CisgICAgLy8gaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9n
c3QtcGx1Z2lucy1iYWQvLS9tZXJnZV9yZXF1ZXN0cy8xODc3CisgICAgLy8gRklYTUU6IFBsdW1i
IG9wdGlvbnMudm9pY2VBY3Rpdml0eURldGVjdGlvbi4KKyAgICBpbml0aWF0ZSh0cnVlLCBnc3Rf
c3RydWN0dXJlX25ldygid2VicnRjYmluLW9mZmVyLW9wdGlvbnMiLCAiaWNlLXJlc3RhcnQiLCBH
X1RZUEVfQk9PTEVBTiwgb3B0aW9ucy5pY2VSZXN0YXJ0LCBudWxscHRyKSk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVBbnN3ZXIoKQoreworICAgIGluaXRpYXRl
KGZhbHNlLCBudWxscHRyKTsKK30KKworc3RydWN0IEdTdHJlYW1lck1lZGlhRW5kcG9pbnRIb2xk
ZXIgeworICAgIFJlZlB0cjxHU3RyZWFtZXJNZWRpYUVuZHBvaW50PiBlbmRQb2ludDsKK307CitX
RUJLSVRfREVGSU5FX0FTWU5DX0RBVEFfU1RSVUNUKEdTdHJlYW1lck1lZGlhRW5kcG9pbnRIb2xk
ZXIpOworCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYXRlKGJvb2wgaXNJbml0
aWF0b3IsIEdzdFN0cnVjdHVyZSogcmF3T3B0aW9ucykKK3sKKyAgICBtX2lzSW5pdGlhdG9yID0g
aXNJbml0aWF0b3I7CisgICAgY29uc3QgY2hhciogdHlwZSA9IGlzSW5pdGlhdG9yID8gIm9mZmVy
IiA6ICJhbnN3ZXIiOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNy
ZWF0aW5nICVzIiwgdHlwZSk7CisgICAgYXV0byBzaWduYWxOYW1lID0gbWFrZVN0cmluZygiY3Jl
YXRlLSIsIHR5cGUpOworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBvcHRpb25zKHJhd09w
dGlvbnMpOworICAgIGF1dG8qIGhvbGRlciA9IGNyZWF0ZUdTdHJlYW1lck1lZGlhRW5kcG9pbnRI
b2xkZXIoKTsKKyAgICBob2xkZXItPmVuZFBvaW50ID0gdGhpczsKKyAgICBnX3NpZ25hbF9lbWl0
X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksIHNpZ25hbE5hbWUuYXNjaWkoKS5kYXRhKCksIG9w
dGlvbnMuZ2V0KCksIGdzdF9wcm9taXNlX25ld193aXRoX2NoYW5nZV9mdW5jKFtdKEdzdFByb21p
c2UqIHJhd1Byb21pc2UsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8qIGhvbGRl
ciA9IHN0YXRpY19jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnRIb2xkZXIqPih1c2VyRGF0YSk7
CisgICAgICAgIGF1dG8gcHJvbWlzZSA9IGFkb3B0R1JlZihyYXdQcm9taXNlKTsKKyAgICAgICAg
YXV0byByZXN1bHQgPSBnc3RfcHJvbWlzZV93YWl0KHByb21pc2UuZ2V0KCkpOworICAgICAgICBp
ZiAocmVzdWx0ICE9IEdTVF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEKSB7CisgICAgICAgICAgICBo
b2xkZXItPmVuZFBvaW50LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoeyB9KTsKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGF1dG8qIHJlcGx5
ID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UuZ2V0KCkpOworICAgICAgICBBU1NFUlQo
cmVwbHkpOworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQocmVwbHksICJlcnJv
ciIpKSB7CisgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gcHJvbWlzZUVycm9yOwor
ICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksICJlcnJvciIsIEdfVFlQRV9FUlJP
UiwgJnByb21pc2VFcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBob2xkZXIt
PmVuZFBvaW50LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1ZVB0cjxHRXJy
b3I+KHByb21pc2VFcnJvci5yZWxlYXNlKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgfQorCisgICAgICAgIGNvbnN0IGNoYXIqIHR5cGUgPSBob2xkZXItPmVuZFBvaW50LT5tX2lz
SW5pdGlhdG9yID8gIm9mZmVyIiA6ICJhbnN3ZXIiOworICAgICAgICBHVW5pcXVlT3V0UHRyPEdz
dFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gc2Vzc2lvbkRlc2NyaXB0aW9uOworICAgICAgICBn
c3Rfc3RydWN0dXJlX2dldChyZXBseSwgdHlwZSwgR1NUX1RZUEVfV0VCUlRDX1NFU1NJT05fREVT
Q1JJUFRJT04sICZzZXNzaW9uRGVzY3JpcHRpb24ub3V0UHRyKCksIG51bGxwdHIpOworCisjaWZu
ZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHNkcChn
c3Rfc2RwX21lc3NhZ2VfYXNfdGV4dChzZXNzaW9uRGVzY3JpcHRpb24tPnNkcCkpOworICAgICAg
ICBHU1RfREVCVUdfT0JKRUNUKGhvbGRlci0+ZW5kUG9pbnQtPnBpcGVsaW5lKCksICJDcmVhdGVk
ICVzOiAlcyIsIHR5cGUsIHNkcC5nZXQoKSk7CisjZW5kaWYKKyAgICAgICAgaG9sZGVyLT5lbmRQ
b2ludC0+Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVkKEdVbmlxdWVQdHI8R3N0V2Vi
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uPihzZXNzaW9uRGVzY3JpcHRpb24ucmVsZWFzZSgpKSk7Cisg
ICAgfSwgaG9sZGVyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZXN0cm95R1N0
cmVhbWVyTWVkaWFFbmRwb2ludEhvbGRlcikpKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpnZXRTdGF0cyhHc3RQYWQqIHBhZCwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9t
aXNlKQoreworICAgIG1fc3RhdHNDb2xsZWN0b3ItPmdldFN0YXRzKFtwcm9taXNlID0gV1RGTW92
ZShwcm9taXNlKSwgcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyldKGF1dG8mJiByZXBvcnQpIG11
dGFibGUgeworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAocHJv
dGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkgfHwgIXJlcG9ydCkKKyAgICAgICAgICAgIHJldHVybjsK
KworICAgICAgICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxSVENTdGF0c1JlcG9ydD4+
KHJlcG9ydC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9LCBwYWQpOworfQorCitNZWRpYVN0cmVh
bSYgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6bWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFtKFN0cmlu
ZyBsYWJlbCkKK3sKKyAgICBhdXRvIG1lZGlhU3RyZWFtID0gbV9yZW1vdGVTdHJlYW1zQnlJZC5l
bnN1cmUobGFiZWwsIFtsYWJlbCwgdGhpc10oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byYgZG9j
dW1lbnQgPSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNvbm5l
Y3Rpb24oKS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICByZXR1cm4gTWVkaWFT
dHJlYW06OmNyZWF0ZShkb2N1bWVudCwgTWVkaWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoZG9jdW1l
bnQubG9nZ2VyKCksIHsgfSwgV1RGTW92ZShsYWJlbCkpKTsKKyAgICB9KTsKKyAgICByZXR1cm4g
Km1lZGlhU3RyZWFtLml0ZXJhdG9yLT52YWx1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjphZGRSZW1vdGVTdHJlYW0oR3N0UGFkKiBwYWQpCit7CisgICAgbV9wZW5kaW5nSW5j
b21pbmdTdHJlYW1zKys7CisKKyAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRf
Y3VycmVudF9jYXBzKHBhZCkpOworICAgIGlmICghY2FwcykKKyAgICAgICAgY2FwcyA9IGFkb3B0
R1JlZihnc3RfcGFkX3F1ZXJ5X2NhcHMocGFkLCBudWxscHRyKSk7CisKKyAgICBjb25zdCBjaGFy
KiBtZWRpYVR5cGUgPSBjYXBzTWVkaWFUeXBlKGNhcHMuZ2V0KCkpOworICAgIEdTVF9ERUJVR19P
QkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyByZW1vdGUgJXMgc3RyZWFtIHRvICUiIEdT
VF9QVFJfRk9STUFUICIgJXUgcGVuZGluZyBpbmNvbWluZyBzdHJlYW1zLCBjYXBzOiAlIiBHU1Rf
UFRSX0ZPUk1BVCwgbWVkaWFUeXBlLCBwYWQsIG1fcGVuZGluZ0luY29taW5nU3RyZWFtcywgY2Fw
cy5nZXQoKSk7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBydGNUcmFu
c2NlaXZlcjsKKyAgICBnX29iamVjdF9nZXQocGFkLCAidHJhbnNjZWl2ZXIiLCAmcnRjVHJhbnNj
ZWl2ZXIub3V0UHRyKCksIG51bGxwdHIpOworCisgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBtX3Bl
ZXJDb25uZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0cmFuc2Nl
aXZlckJhY2tlbmQpIHsKKyAgICAgICAgcmV0dXJuIHJ0Y1RyYW5zY2VpdmVyLmdldCgpID09IHRy
YW5zY2VpdmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgIH0pOworICAgIGlmICghdHJh
bnNjZWl2ZXIpIHsKKyAgICAgICAgYXV0byB0eXBlID0gZG9DYXBzSGF2ZVR5cGUoY2Fwcy5nZXQo
KSwgImF1ZGlvIikgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1l
TWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvOworICAgICAgICB0cmFuc2NlaXZlciA9ICZtX3BlZXJD
b25uZWN0aW9uQmFja2VuZC5uZXdSZW1vdGVUcmFuc2NlaXZlcihtYWtlVW5pcXVlPEdTdHJlYW1l
clJ0cFRyYW5zY2VpdmVyQmFja2VuZD4oV1RGTW92ZShydGNUcmFuc2NlaXZlcikpLCB0eXBlKTsK
KyAgICB9CisKKyAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4g
ZGVzY3JpcHRpb247CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAicmVtb3Rl
LWRlc2NyaXB0aW9uIiwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKworICAgIHVu
c2lnbmVkIG1MaW5lSW5kZXg7CisgICAgZ19vYmplY3RfZ2V0KHJ0Y1RyYW5zY2VpdmVyLmdldCgp
LCAibWxpbmVpbmRleCIsICZtTGluZUluZGV4LCBudWxscHRyKTsKKyAgICBjb25zdCBhdXRvKiBt
ZWRpYSA9IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEoZGVzY3JpcHRpb24tPnNkcCwgbUxpbmVJ
bmRleCk7CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHAoZ3N0X3NkcF9tZWRpYV9hc190ZXh0KG1l
ZGlhKSk7CisgICAgYXV0byBzZHBTdHJpbmcgPSBtYWtlU3RyaW5nKHNkcC5nZXQoKSk7CisKKyAg
ICBHVW5pcXVlUHRyPGdjaGFyPiBuYW1lKGdzdF9wYWRfZ2V0X25hbWUocGFkKSk7CisgICAgU3Ry
aW5nIGxhYmVsKG5hbWUuZ2V0KCkpOworICAgIGF1dG8ga2V5ID0gbWFrZVN0cmluZygibXNpZDoi
KTsKKyAgICBhdXRvIGxpbmVzID0gc2RwU3RyaW5nLnNwbGl0KCdcbicpOworICAgIGZvciAoYXV0
byYgbGluZSA6IGxpbmVzKSB7CisgICAgICAgIGF1dG8gaSA9IGxpbmUuZmluZChrZXkpOworICAg
ICAgICBpZiAoaSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgYXV0byB0bXAgPSBsaW5lLnN1
YnN0cmluZyhpICsga2V5LmFzY2lpKCkubGVuZ3RoKCkpOworICAgICAgICAgICAgbGFiZWwgPSB0
bXAuc3Vic3RyaW5nKDAsIHRtcC5maW5kKCcgJykpOworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIH0KKyAgICB9CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJt
c2lkOiAlcyIsIGxhYmVsLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIEdzdEVsZW1lbnQqIGJpbiA9
IG51bGxwdHI7CisgICAgYXV0byYgdHJhY2sgPSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKS50cmFj
aygpOworICAgIGF1dG8mIHNvdXJjZSA9IHRyYWNrLnByaXZhdGVUcmFjaygpLnNvdXJjZSgpOwor
ICAgIGlmIChzb3VyY2UuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0
YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSku
YmluKCk7CisgICAgZWxzZSBpZiAoc291cmNlLmlzSW5jb21pbmdWaWRlb1NvdXJjZSgpKQorICAg
ICAgICBiaW4gPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXImPihzb3VyY2UpLmJpbigpOworICAgIEFTU0VSVChiaW4pOworCisgICAgZ3N0X2Jpbl9hZGQo
R1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBiaW4pOworICAgIGF1dG8gc2lua1BhZCA9
IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChiaW4sICJzaW5rIikpOworICAg
IGdzdF9wYWRfbGluayhwYWQsIHNpbmtQYWQuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNf
c3RhdGVfd2l0aF9wYXJlbnQoYmluKTsKKworICAgIHRyYWNrLnNldEVuYWJsZWQodHJ1ZSk7Cisg
ICAgc291cmNlLnNldE11dGVkKGZhbHNlKTsKKworICAgIGF1dG8mIG1lZGlhU3RyZWFtID0gbWVk
aWFTdHJlYW1Gcm9tUlRDU3RyZWFtKGxhYmVsKTsKKyAgICBtZWRpYVN0cmVhbS5hZGRUcmFja0Zy
b21QbGF0Zm9ybSh0cmFjayk7CisKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPj4gcGVu
ZGluZ1N0cmVhbXM7CisgICAgcGVuZGluZ1N0cmVhbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgx
KTsKKyAgICBwZW5kaW5nU3RyZWFtcy51bmNoZWNrZWRBcHBlbmQoJm1lZGlhU3RyZWFtKTsKKwor
ICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmFkZFBlbmRpbmdUcmFja0V2ZW50KHsgUmVmKHRy
YW5zY2VpdmVyLT5yZWNlaXZlcigpKSwgUmVmKHRyYW5zY2VpdmVyLT5yZWNlaXZlcigpLnRyYWNr
KCkpLCBXVEZNb3ZlKHBlbmRpbmdTdHJlYW1zKSwgUmVmKCp0cmFuc2NlaXZlcikgfSk7CisKKyAg
ICBpZiAobV9wZW5kaW5nSW5jb21pbmdTdHJlYW1zID09IGdzdF9zZHBfbWVzc2FnZV9tZWRpYXNf
bGVuKGRlc2NyaXB0aW9uLT5zZHApKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBl
bGluZS5nZXQoKSwgIkluY29taW5nIHN0cmVhbXMgZ2F0aGVyZWQsIG5vdyBmaXJpbmcgdHJhY2sg
ZXZlbnRzIik7CisgICAgICAgIG1fcGVuZGluZ0luY29taW5nU3RyZWFtcyA9IDA7CisgICAgICAg
IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmRpc3BhdGNoUGVuZGluZ1RyYWNrRXZlbnRzKCk7Cisg
ICAgfQorCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIGF1dG8gZG90RmlsZU5h
bWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwgIi5pbmNv
bWluZy0iLCBtZWRpYVR5cGUsICctJywgR1NUX09CSkVDVF9OQU1FKHBhZCkpOworICAgIEdTVF9E
RUJVR19CSU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBH
U1RfREVCVUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2Vu
ZGlmCit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVtb3ZlUmVtb3RlU3RyZWFt
KEdzdFBhZCopCit7CisgICAgR1NUX0ZJWE1FX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAicmVt
b3ZlUmVtb3RlU3RyZWFtIik7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RkOjpvcHRp
b25hbDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVyTWVkaWFFbmRw
b2ludDo6Y3JlYXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0
IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCwgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6
U291cmNlJiYgc291cmNlKQoreworICAgIGlmICghbV93ZWJydGNCaW4pCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCks
ICIlenUgc3RyZWFtcyBpbiBpbml0IGRhdGEiLCBpbml0LnN0cmVhbXMuc2l6ZSgpKTsKKworICAg
IC8vIEZJWE1FOiBTaG91bGQgd2UgYnVpbGQgdGhlIGNhcHMgZnJvbSB0aGUgaW5pdC5zZW5kRW5j
b2RpbmdzPyBQcm9ibGVtIGlzIHRoZXJlIGlzIG5vCisgICAgLy8gZW5jb2RpbmdOYW1lIG9yIGNs
b2NrUmF0ZSBpbiBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMuCisgICAgVmVjdG9yPHN0ZDo6cGFp
cjxjb25zdCBjaGFyKiwgaW50Pj4gZW5jb2RpbmdzOworICAgIGNvbnN0IGNoYXIqIG1lZGlhID0g
a2luZC51dGY4KCkuZGF0YSgpOworICAgIGlmIChraW5kID09ICJ2aWRlbyJfcykgeworICAgICAg
ICBlbmNvZGluZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzKTsKKyAgICAgICAgZW5jb2Rpbmdz
LnVuY2hlY2tlZEFwcGVuZCh7ICJWUDgiLCA5MDAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVu
Y2hlY2tlZEFwcGVuZCh7ICJWUDkiLCA5MDAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hl
Y2tlZEFwcGVuZCh7ICJIMjY0IiwgOTAwMDAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5j
b2RpbmdzLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7CisgICAgICAgIGVuY29kaW5ncy51bmNo
ZWNrZWRBcHBlbmQoeyAiT1BVUyIsIDQ4MDAwIH0pOworICAgICAgICBlbmNvZGluZ3MudW5jaGVj
a2VkQXBwZW5kKHsgIkc3MjIiLCA4MDAwIH0pOworICAgICAgICBlbmNvZGluZ3MudW5jaGVja2Vk
QXBwZW5kKHsgIlBDTUEiLCA4MDAwIH0pOworICAgICAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBw
ZW5kKHsgIlBDTVUiLCA4MDAwIH0pOworICAgIH0KKworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1Jl
Zihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZm9yIChhdXRvJiBbZW5jb2RpbmdOYW1lLCBj
bG9ja1JhdGVdIDogZW5jb2RpbmdzKSB7CisgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1
cmUoY2Fwcy5nZXQoKSwgZ3N0X3N0cnVjdHVyZV9uZXcoImFwcGxpY2F0aW9uL3gtcnRwIiwgIm1l
ZGlhIiwgR19UWVBFX1NUUklORywgbWVkaWEsICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklO
RywgZW5jb2RpbmdOYW1lLAorICAgICAgICAgICAgInBheWxvYWQiLCBHX1RZUEVfSU5ULCBtX3B0
Q291bnRlcisrLCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIGNsb2NrUmF0ZSwgbnVsbHB0cikp
OworICAgIH0KKworICAgIGF1dG8gZGlyZWN0aW9uID0gZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGly
ZWN0aW9uKGluaXQuZGlyZWN0aW9uKTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisg
ICAgR1VuaXF1ZVB0cjxjaGFyPiBkZXNjKGdfZW51bV90b19zdHJpbmcoR1NUX1RZUEVfV0VCUlRD
X1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT04sIGRpcmVjdGlvbikpOworICAgIEdTVF9ERUJVR19P
QkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyAlcyB0cmFuc2NlaXZlciBmb3IgcGF5bG9h
ZCAlIiBHU1RfUFRSX0ZPUk1BVCwgZGVzYy5nZXQoKSwgY2Fwcy5nZXQoKSk7CisjZW5kaWYKKwor
ICAgIC8vIEZJWE1FOiBOb25lIG9mIHRoaXMgKGV4Y2VwdGVkIGRpcmVjdGlvbikgaXMgcGFzc2Vk
IHRvIHdlYnJ0Y2JpbiB5ZXQuCisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGluaXREYXRh
KGdzdF9zdHJ1Y3R1cmVfbmV3KCJ0cmFuc2NlaXZlci1pbml0LWRhdGEiLCAiZGlyZWN0aW9uIiwg
R1NUX1RZUEVfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT04sIGRpcmVjdGlvbiwgbnVs
bHB0cikpOworCisgICAgR1ZhbHVlIHN0cmVhbUlkc1ZhbHVlID0gR19WQUxVRV9JTklUOworICAg
IGdfdmFsdWVfaW5pdCgmc3RyZWFtSWRzVmFsdWUsIEdTVF9UWVBFX0xJU1QpOworICAgIGZvciAo
YXV0byYgc3RyZWFtIDogaW5pdC5zdHJlYW1zKSB7CisgICAgICAgIEdWYWx1ZSB2YWx1ZSA9IEdf
VkFMVUVfSU5JVDsKKyAgICAgICAgZ192YWx1ZV9pbml0KCZ2YWx1ZSwgR19UWVBFX1NUUklORyk7
CisgICAgICAgIGdfdmFsdWVfc2V0X3N0cmluZygmdmFsdWUsIHN0cmVhbS0+aWQoKS51dGY4KCku
ZGF0YSgpKTsKKyAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlKCZzdHJlYW1JZHNW
YWx1ZSwgJnZhbHVlKTsKKyAgICAgICAgZ192YWx1ZV91bnNldCgmdmFsdWUpOworICAgIH0KKyAg
ICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUoaW5pdERhdGEuZ2V0KCksICJzdHJlYW0taWRzIiwg
JnN0cmVhbUlkc1ZhbHVlKTsKKworICAgIEdWYWx1ZSBlbmNvZGluZ3NWYWx1ZSA9IEdfVkFMVUVf
SU5JVDsKKyAgICBnX3ZhbHVlX2luaXQoJmVuY29kaW5nc1ZhbHVlLCBHU1RfVFlQRV9MSVNUKTsK
KyAgICBpZiAoa2luZCA9PSAiYXVkaW8iKSB7CisgICAgICAgIGlmICghaW5pdC5zZW5kRW5jb2Rp
bmdzLmlzRW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBlbmNvZGluZ0RhdGEgPSBmcm9tUlRD
RW5jb2RpbmdQYXJhbWV0ZXJzKGluaXQuc2VuZEVuY29kaW5nc1swXSk7CisgICAgICAgICAgICBH
VmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgICAgICAgICBnX3ZhbHVlX2luaXQoJnZh
bHVlLCBHU1RfVFlQRV9TVFJVQ1RVUkUpOworICAgICAgICAgICAgZ3N0X3ZhbHVlX3NldF9zdHJ1
Y3R1cmUoJnZhbHVlLCBlbmNvZGluZ0RhdGEuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X3ZhbHVl
X2xpc3RfYXBwZW5kX3ZhbHVlKCZlbmNvZGluZ3NWYWx1ZSwgJnZhbHVlKTsKKyAgICAgICAgICAg
IGdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAg
IGZvciAoYXV0byYgZW5jb2RpbmcgOiBpbml0LnNlbmRFbmNvZGluZ3MpIHsKKyAgICAgICAgICAg
IGF1dG8gZW5jb2RpbmdEYXRhID0gZnJvbVJUQ0VuY29kaW5nUGFyYW1ldGVycyhlbmNvZGluZyk7
CisgICAgICAgICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgICAgICAgICBn
X3ZhbHVlX2luaXQoJnZhbHVlLCBHU1RfVFlQRV9TVFJVQ1RVUkUpOworICAgICAgICAgICAgZ3N0
X3ZhbHVlX3NldF9zdHJ1Y3R1cmUoJnZhbHVlLCBlbmNvZGluZ0RhdGEuZ2V0KCkpOworICAgICAg
ICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlKCZlbmNvZGluZ3NWYWx1ZSwgJnZhbHVl
KTsKKyAgICAgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKKyAgICAgICAgfQorICAgIH0K
KyAgICBnc3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUoaW5pdERhdGEuZ2V0KCksICJlbmNvZGluZ3Mi
LCAmZW5jb2RpbmdzVmFsdWUpOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZl
cj4gcnRjVHJhbnNjZWl2ZXI7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmlu
LmdldCgpLCAiYWRkLXRyYW5zY2VpdmVyIiwgZGlyZWN0aW9uLCBjYXBzLmdldCgpLCAmcnRjVHJh
bnNjZWl2ZXIub3V0UHRyKCkpOworICAgIGlmICghcnRjVHJhbnNjZWl2ZXIpCisgICAgICAgIHJl
dHVybiBzdGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIHRyYW5zY2VpdmVyID0gbWFrZVVuaXF1ZTxH
U3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KFdURk1vdmUocnRjVHJhbnNjZWl2ZXIpKTsK
KyAgICByZXR1cm4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6QmFja2VuZHMgeyB0cmFuc2NlaXZl
ci0+Y3JlYXRlU2VuZGVyQmFja2VuZChtX3BlZXJDb25uZWN0aW9uQmFja2VuZCwgV1RGTW92ZShz
b3VyY2UpLCBXVEZNb3ZlKGluaXREYXRhKSksIHRyYW5zY2VpdmVyLT5jcmVhdGVSZWNlaXZlckJh
Y2tlbmQoKSwgV1RGTW92ZSh0cmFuc2NlaXZlcikgfTsKK30KKworc3RkOjpvcHRpb25hbDxHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRk
VHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2Vp
dmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyh0
cmFja0tpbmQsIGluaXQsIG51bGxwdHIpOworfQorCitHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5k
OjpTb3VyY2UgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlU291cmNlRm9yVHJhY2soTWVk
aWFTdHJlYW1UcmFjayYgdHJhY2spCit7CisgICAgaWYgKHRyYWNrLnByaXZhdGVUcmFjaygpLmhh
c0F1ZGlvKCkpCisgICAgICAgIHJldHVybiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXI6OmNyZWF0ZSh0cmFjay5wcml2YXRlVHJhY2soKSk7CisKKyAgICBBU1NFUlQodHJhY2su
cHJpdmF0ZVRyYWNrKCkuaGFzVmlkZW8oKSk7CisgICAgcmV0dXJuIFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsKK30KKwor
c3RkOjpvcHRpb25hbDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6YWRkVHJhbnNjZWl2ZXIoTWVkaWFTdHJlYW1UcmFjayYgdHJhY2ssIGNv
bnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlVHJh
bnNjZWl2ZXJCYWNrZW5kcyh0cmFjay5raW5kKCksIGluaXQsIGNyZWF0ZVNvdXJjZUZvclRyYWNr
KHRyYWNrKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0U2VuZGVyU291
cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNr
JikKK3sKKyAgICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJzZXRTZW5kZXJT
b3VyY2VGcm9tVHJhY2siKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50Ojp0cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQmIGJhY2tlbmQpCit7CisgICAgR1JlZlB0cjxHQXJyYXk+IHRyYW5zY2VpdmVyczsKKyAgICBn
X3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJnZXQtdHJhbnNjZWl2ZXJz
IiwgJnRyYW5zY2VpdmVycy5vdXRQdHIoKSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlw
ZWxpbmUuZ2V0KCksICJMb29raW5nIGZvciBzZW5kZXIgJXAgaW4gJXUgZXhpc3RpbmcgdHJhbnNj
ZWl2ZXJzIiwgYmFja2VuZC5ydGNTZW5kZXIoKSwgdHJhbnNjZWl2ZXJzLT5sZW4pOworICAgIGZv
ciAodW5zaWduZWQgdHJhbnNjZWl2ZXJJbmRleCA9IDA7IHRyYW5zY2VpdmVySW5kZXggPCB0cmFu
c2NlaXZlcnMtPmxlbjsgdHJhbnNjZWl2ZXJJbmRleCsrKSB7CisgICAgICAgIEdzdFdlYlJUQ1JU
UFRyYW5zY2VpdmVyKiBjdXJyZW50ID0gZ19hcnJheV9pbmRleCh0cmFuc2NlaXZlcnMuZ2V0KCks
IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiwgdHJhbnNjZWl2ZXJJbmRleCk7CisgICAgICAgIEdS
ZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXI7CisgICAgICAgIGdfb2JqZWN0X2dldChj
dXJyZW50LCAic2VuZGVyIiwgJnNlbmRlci5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICAgICAg
aWYgKCFzZW5kZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHNlbmRlci5n
ZXQoKSA9PSBiYWNrZW5kLnJ0Y1NlbmRlcigpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bWFr
ZVVuaXF1ZTxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KGN1cnJlbnQpOworICAgIH0K
KworICAgIHJldHVybiBudWxscHRyOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmFkZEljZUNhbmRpZGF0ZShHU3RyZWFtZXJJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgUGVlckNv
bm5lY3Rpb25CYWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQorewor
ICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyBJQ0UgY2FuZGlk
YXRlICVzIiwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICgh
Y2FuZGlkYXRlLmNhbmRpZGF0ZS5zdGFydHNXaXRoKCJjYW5kaWRhdGU6IikpIHsKKyAgICAgICAg
Y2FsbE9uTWFpblRocmVhZChbdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxiYWNr
KSldKCkgbXV0YWJsZSB7CisgICAgICAgICAgICB0YXNrLT5ydW4oRXhjZXB0aW9uIHsgT3BlcmF0
aW9uRXJyb3IsICJFeHBlY3QgbGluZTogY2FuZGlkYXRlOjxjYW5kaWRhdGUtc3RyPiIgfSk7Cisg
ICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBwYXJzZWRDYW5k
aWRhdGUgPSBwYXJzZUljZUNhbmRpZGF0ZVNEUChjYW5kaWRhdGUuY2FuZGlkYXRlKTsKKyAgICBp
ZiAoIXBhcnNlZENhbmRpZGF0ZSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0g
Y3JlYXRlU2hhcmVkVGFzazxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNh
bGxiYWNrRnVuY3Rpb24+KFdURk1vdmUoY2FsbGJhY2spKV0oKSBtdXRhYmxlIHsKKyAgICAgICAg
ICAgIHRhc2stPnJ1bihFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgIkVycm9yIHByb2Nlc3Np
bmcgSUNFIGNhbmRpZGF0ZSIgfSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAg
fQorCisgICAgLy8gRklYTUU6IGludmFsaWQgc2RwTUxpbmVJbmRleCBleGNlcHRpb24gbm90IHJl
bGF5ZWQgZnJvbSB3ZWJydGNiaW4uCisgICAgLy8gRklYTUU6IElkZWFsbHkgdGhpcyBzaG91bGQg
cGFzcyB0aGUgcmVzdWx0L2Vycm9yIHRvIGEgR3N0UHJvbWlzZSBvYmplY3QuCisgICAgZ19zaWdu
YWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiYWRkLWljZS1jYW5kaWRhdGUiLCBj
YW5kaWRhdGUuc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0YSgp
KTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gY3JlYXRlU2hhcmVkVGFzazxQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrRnVuY3Rpb24+KFdURk1vdmUo
Y2FsbGJhY2spKSwgZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0JpbihtX3dl
YnJ0Y0Jpbi5nZXQoKSldKCkgbXV0YWJsZSB7CisgICAgICAgIHRhc2stPnJ1bihXVEZNb3ZlKGRl
c2NyaXB0aW9ucykpOworICAgIH0pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5u
ZWxIYW5kbGVyPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbChjb25z
dCBTdHJpbmcmIGxhYmVsLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmIG9wdGlvbnMpCit7Cisg
ICAgaWYgKCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRv
IGluaXQgPSBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmZyb21SVENEYXRhQ2hhbm5lbElu
aXQob3B0aW9ucyk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ3Jl
YXRpbmcgZGF0YSBjaGFubmVsIGZvciBpbml0IG9wdGlvbnMgJSIgR1NUX1BUUl9GT1JNQVQsIGlu
aXQuZ2V0KCkpOworICAgIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGNoYW5uZWw7Cisg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiY3JlYXRlLWRhdGEt
Y2hhbm5lbCIsIGxhYmVsLnV0ZjgoKS5kYXRhKCksIGluaXQuZ2V0KCksICZjaGFubmVsLm91dFB0
cigpKTsKKyAgICBpZiAoIWNoYW5uZWwpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAg
cmV0dXJuIFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI+KFdURk1v
dmUoY2hhbm5lbCkpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uRGF0YUNo
YW5uZWwoR3N0V2ViUlRDRGF0YUNoYW5uZWwqIGRhdGFDaGFubmVsKQoreworICAgIEdSZWZQdHI8
R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGNoYW5uZWwgPSBkYXRhQ2hhbm5lbDsKKyAgICBjYWxsT25N
YWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywgZGF0YUNoYW5uZWwg
PSBXVEZNb3ZlKGNoYW5uZWwpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoaXNTdG9wcGVkKCkp
CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGlu
ZS5nZXQoKSwgIkluY29taW5nIGRhdGEgY2hhbm5lbCIpOworICAgICAgICBhdXRvJiBjb25uZWN0
aW9uID0gbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29ubmVjdGlvbigpOworICAgICAgICBjb25u
ZWN0aW9uLmRpc3BhdGNoRXZlbnQoR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjcmVhdGVE
YXRhQ2hhbm5lbEV2ZW50KCpjb25uZWN0aW9uLmRvY3VtZW50KCksIFdURk1vdmUoZGF0YUNoYW5u
ZWwpKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y2xvc2Uo
KQoreworICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0
LXBsdWdpbnMtYmFkLy0vaXNzdWVzLzExODEKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxp
bmUuZ2V0KCksICJDbG9zaW5nIik7CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIGdzdF9l
bGVtZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUkVBRFkpOworCisj
aWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3RvcExvZ2dpbmdTdGF0cygpOworI2VuZGlm
Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcCgpCit7CisjaWYgIVJFTEVB
U0VfTE9HX0RJU0FCTEVECisgICAgc3RvcExvZ2dpbmdTdGF0cygpOworI2VuZGlmCisKKyAgICBp
ZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIlN0b3BwaW5nIik7CisgICAgdGVhcmRvd25QaXBlbGluZSgpOwor
fQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN1c3BlbmQoKQoreworICAgIGlmIChp
c1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3Bp
cGVsaW5lLmdldCgpLCAiU3VzcGVuZGluZyIpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZSht
X3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUEFVU0VEKTsKK30KKwordm9pZCBHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpyZXN1bWUoKQoreworICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAg
cmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVzdW1p
bmciKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NU
QVRFX1BMQVlJTkcpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uTmVnb3Rp
YXRpb25OZWVkZWQoKQoreworICAgIG1faXNOZWdvdGlhdGlvbk5lZWRlZCA9IHRydWU7CisKKyAg
ICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpc10gewor
ICAgICAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIk5lZ290aWF0aW9uIG5lZWRlZCEiKTsK
KyAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQubWFya0FzTmVlZGluZ05lZ290aWF0aW9u
KDApOworICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlQ29u
bmVjdGlvbkNoYW5nZSgpCit7CisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHN0YXRl
OworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImljZS1jb25uZWN0aW9uLXN0
YXRlIiwgJnN0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRU
aGlzID0gUmVmKCp0aGlzKSwgdGhpcywgY29ubmVjdGlvblN0YXRlID0gdG9SVENJY2VDb25uZWN0
aW9uU3RhdGUoc3RhdGUpXSB7CisgICAgICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgYXV0byYgY29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25CYWNr
ZW5kLmNvbm5lY3Rpb24oKTsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0
YXRlKCkgIT0gY29ubmVjdGlvblN0YXRlKQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJ
Y2VDb25uZWN0aW9uU3RhdGUoY29ubmVjdGlvblN0YXRlKTsKKyAgICB9KTsKK30KKwordm9pZCBH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkljZUdhdGhlcmluZ0NoYW5nZSgpCit7CisgICAgR3N0
V2ViUlRDSUNFR2F0aGVyaW5nU3RhdGUgc3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRj
QmluLmdldCgpLCAiaWNlLWdhdGhlcmluZy1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0cik7CisgICAg
Y2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRoaXMsIHN0YXRl
XSB7CisgICAgICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgYXV0byYgY29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNvbm5lY3Rpb24o
KTsKKyAgICAgICAgaWYgKHN0YXRlID09IEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9D
T01QTEVURSkKKyAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmRvbmVHYXRoZXJp
bmdDYW5kaWRhdGVzKCk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlID09IEdTVF9XRUJSVENfSUNF
X0dBVEhFUklOR19TVEFURV9HQVRIRVJJTkcpCisgICAgICAgICAgICBjb25uZWN0aW9uLnVwZGF0
ZUljZUdhdGhlcmluZ1N0YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpHYXRoZXJpbmcpOworICAg
ICAgICBlbHNlIGlmIChzdGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfTkVX
KQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShSVENJY2VH
YXRoZXJpbmdTdGF0ZTo6TmV3KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpvbkljZUNhbmRpZGF0ZShndWludCBzZHBNTGluZUluZGV4LCBnY2hhcmFycmF5IGNh
bmRpZGF0ZSkKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAg
IC8vIEZJWE1FOiBHZXQgbWlkIGZyb20gY2FuZGlkYXRlPworICAgIEdVbmlxdWVPdXRQdHI8R3N0
V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbjsKKyAgICBnX29iamVjdF9nZXQo
bV93ZWJydGNCaW4uZ2V0KCksICJsb2NhbC1kZXNjcmlwdGlvbiIsICZkZXNjcmlwdGlvbi5vdXRQ
dHIoKSwgbnVsbHB0cik7CisgICAgaWYgKCFkZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuOwor
CisgICAgY29uc3QgYXV0byogbWVkaWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0X21lZGlhKGRlc2Ny
aXB0aW9uLT5zZHAsIHNkcE1MaW5lSW5kZXgpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3Rl
Y3RlZFRoaXMgPSBSZWYoKnRoaXMpLCB0aGlzLCBtaWQgPSBtYWtlU3RyaW5nKGdzdF9zZHBfbWVk
aWFfZ2V0X2F0dHJpYnV0ZV92YWwobWVkaWEsICJtaWQiKSksIHNkcCA9IG1ha2VTdHJpbmcoY2Fu
ZGlkYXRlKSwgc2RwTUxpbmVJbmRleF0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKGlzU3RvcHBl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGRlc2NyaXB0aW9ucyA9IGRl
c2NyaXB0aW9uc0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCkpOworICAgICAgICBtX3Bl
ZXJDb25uZWN0aW9uQmFja2VuZC5uZXdJQ0VDYW5kaWRhdGUoV1RGTW92ZShzZHApLCBXVEZNb3Zl
KG1pZCksIHNkcE1MaW5lSW5kZXgsIHsgfSwgV1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAgICB9
KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3Jp
cHRpb25TdWNjZWVkZWQoR1VuaXF1ZVB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYg
ZGVzY3JpcHRpb24pCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJl
ZigqdGhpcyksIHRoaXMsIGRlc2NyaXB0aW9uID0gV1RGTW92ZShkZXNjcmlwdGlvbildIHsKKyAg
ICAgICAgaWYgKGlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEdV
bmlxdWVQdHI8Y2hhcj4gc2RwKGdzdF9zZHBfbWVzc2FnZV9hc190ZXh0KGRlc2NyaXB0aW9uLT5z
ZHApKTsKKyAgICAgICAgaWYgKG1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlclN1Y2NlZWRlZChzZHAuZ2V0KCkpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJTdWNj
ZWVkZWQoc2RwLmdldCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1ZVB0cjxHRXJyb3I+JiYg
ZXJyb3IpCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhp
cyksIHRoaXMsIGVycm9yID0gV1RGTW92ZShlcnJvcildIHsKKyAgICAgICAgaWYgKGlzU3RvcHBl
ZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gZXhjID0gRXhjZXB0aW9u
IHsgT3BlcmF0aW9uRXJyb3IsIGVycm9yID8gZXJyb3ItPm1lc3NhZ2UgOiAiVW5rbm93biBFcnJv
ciIgfTsKKyAgICAgICAgaWYgKG1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5jcmVhdGVPZmZlckZhaWxlZChXVEZNb3ZlKGV4YykpOworICAgICAgICBl
bHNlCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJGYWls
ZWQoV1RGTW92ZShleGMpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBv
aW50Ojpjb2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAgICBHUmVmUHRyPEdBcnJheT4gdHJhbnNj
ZWl2ZXJzOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdl
dC10cmFuc2NlaXZlcnMiLCAmdHJhbnNjZWl2ZXJzLm91dFB0cigpKTsKKyAgICBmb3IgKHVuc2ln
bmVkIGkgPSAwOyBpIDwgdHJhbnNjZWl2ZXJzLT5sZW47IGkrKykgeworICAgICAgICBHc3RXZWJS
VENSVFBUcmFuc2NlaXZlciogY3VycmVudCA9IGdfYXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdl
dCgpLCBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciosIGkpOworCisgICAgICAgIGF1dG8qIGV4aXN0
aW5nVHJhbnNjZWl2ZXIgPSBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2Vp
dmVyKFsmXShhdXRvJiB0cmFuc2NlaXZlckJhY2tlbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBj
dXJyZW50ID09IHRyYW5zY2VpdmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgICAgICB9
KTsKKyAgICAgICAgaWYgKGV4aXN0aW5nVHJhbnNjZWl2ZXIpCisgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiByZWNlaXZlcjsKKyAg
ICAgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBtaWQ7CisgICAgICAgIGdfb2JqZWN0X2dldChjdXJy
ZW50LCAicmVjZWl2ZXIiLCAmcmVjZWl2ZXIub3V0UHRyKCksICJtaWQiLCAmbWlkLm91dFB0cigp
LCBudWxscHRyKTsKKworICAgICAgICBpZiAoIXJlY2VpdmVyIHx8ICFtaWQpCisgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5uZXdSZW1vdGVU
cmFuc2NlaXZlcihXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
PihXVEZNb3ZlKGN1cnJlbnQpKSwgbV9tZWRpYUZvck1pZC5nZXQobWlkLmdldCgpKSk7CisgICAg
fQorfQorCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZygpCit7CisgICAgYXV0byogaG9sZGVyID0gY3Jl
YXRlR1N0cmVhbWVyTWVkaWFFbmRwb2ludEhvbGRlcigpOworICAgIGhvbGRlci0+ZW5kUG9pbnQg
PSB0aGlzOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdl
dC1zdGF0cyIsIG51bGxwdHIsIGdzdF9wcm9taXNlX25ld193aXRoX2NoYW5nZV9mdW5jKFtdKEdz
dFByb21pc2UqIHJhd1Byb21pc2UsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8g
cHJvbWlzZSA9IGFkb3B0R1JlZihyYXdQcm9taXNlKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBn
c3RfcHJvbWlzZV93YWl0KHByb21pc2UuZ2V0KCkpOworICAgICAgICBpZiAocmVzdWx0ICE9IEdT
VF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAg
IGNvbnN0IGF1dG8qIHJlcGx5ID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UuZ2V0KCkp
OworICAgICAgICBBU1NFUlQocmVwbHkpOworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNf
ZmllbGQocmVwbHksICJlcnJvciIpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1
dG8qIGhvbGRlciA9IHN0YXRpY19jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnRIb2xkZXIqPih1
c2VyRGF0YSk7CisgICAgICAgIGhvbGRlci0+ZW5kUG9pbnQtPm9uU3RhdHNEZWxpdmVyZWQocmVw
bHkpOworICAgIH0sIGhvbGRlciwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZGVz
dHJveUdTdHJlYW1lck1lZGlhRW5kcG9pbnRIb2xkZXIpKSk7Cit9CisKK2NsYXNzIFJUQ1N0YXRz
TG9nZ2VyIHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSVENTdGF0c0xvZ2dlcihjb25zdCBHc3RT
dHJ1Y3R1cmUqIHN0YXRzKQorICAgICAgICA6IG1fc3RhdHMoc3RhdHMpCisgICAgeyB9CisKKyAg
ICBTdHJpbmcgdG9KU09OU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gZ3N0U3RydWN0dXJlVG9KU09O
U3RyaW5nKG1fc3RhdHMpOyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgR3N0U3RydWN0dXJlKiBt
X3N0YXRzOworfTsKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpwcm9jZXNzU3RhdHMo
Y29uc3QgR1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAoIUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RV
UkUodmFsdWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSA9IGdzdF92YWx1ZV9nZXRfc3RydWN0dXJlKHZhbHVlKTsKKyAgICBHc3RXZWJSVENT
dGF0c1R5cGUgc3RhdHNUeXBlOworICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXQoc3RydWN0dXJl
LCAidHlwZSIsIEdTVF9UWVBFX1dFQlJUQ19TVEFUU19UWVBFLCAmc3RhdHNUeXBlLCBudWxscHRy
KSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gSnVzdCBjaGVjayBhIHNpbmdsZSB0aW1lc3Rh
bXAsIGluYm91bmQgUlRQIGZvciBpbnN0YW5jZS4KKyAgICBpZiAoIW1fc3RhdHNGaXJzdERlbGl2
ZXJlZFRpbWVzdGFtcCAmJiBzdGF0c1R5cGUgPT0gR1NUX1dFQlJUQ19TVEFUU19JTkJPVU5EX1JU
UCkgeworICAgICAgICBkb3VibGUgdGltZXN0YW1wOworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVy
ZV9nZXRfZG91YmxlKHN0cnVjdHVyZSwgInRpbWVzdGFtcCIsICZ0aW1lc3RhbXApKSB7CisgICAg
ICAgICAgICBhdXRvIHRzID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyh0aW1lc3RhbXApOwor
ICAgICAgICAgICAgbV9zdGF0c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wID0gdHM7CisKKyAgICAg
ICAgICAgIGlmICghaXNTdG9wcGVkKCkgJiYgbV9zdGF0c0xvZ1RpbWVyLnJlcGVhdEludGVydmFs
KCkgIT0gc3RhdHNMb2dJbnRlcnZhbCh0cykpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRzTG9n
VGltZXIuc3RvcCgpOworICAgICAgICAgICAgICAgIG1fc3RhdHNMb2dUaW1lci5zdGFydFJlcGVh
dGluZyhzdGF0c0xvZ0ludGVydmFsKHRzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBpZiAobG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIFdURkxvZ0xldmVs
OjpEZWJ1ZykpIHsKKyAgICAgICAgLy8gU3RhdHMgYXJlIHZlcnkgdmVyYm9zZSwgbGV0J3Mgb25s
eSBkaXNwbGF5IHRoZW0gaW4gaW5zcGVjdG9yIGNvbnNvbGUgaW4gdmVyYm9zZSBtb2RlLgorICAg
ICAgICBsb2dnZXIoKS5kZWJ1ZyhMb2dXZWJSVEMsCisgICAgICAgICAgICBMb2dnZXI6OkxvZ1Np
dGVJZGVudGlmaWVyKCJHU3RyZWFtZXJNZWRpYUVuZHBvaW50IiwgIm9uU3RhdHNEZWxpdmVyZWQi
LCBsb2dJZGVudGlmaWVyKCkpLAorICAgICAgICAgICAgUlRDU3RhdHNMb2dnZXIgeyBzdHJ1Y3R1
cmUgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nZ2VyKCkubG9nQWx3YXlzKExvZ1dlYlJU
Q1N0YXRzLAorICAgICAgICAgICAgTG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcigiR1N0cmVhbWVy
TWVkaWFFbmRwb2ludCIsICJvblN0YXRzRGVsaXZlcmVkIiwgbG9nSWRlbnRpZmllcigpKSwKKyAg
ICAgICAgICAgIFJUQ1N0YXRzTG9nZ2VyIHsgc3RydWN0dXJlIH0pOworICAgIH0KK30KKwordm9p
ZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvblN0YXRzRGVsaXZlcmVkKGNvbnN0IEdzdFN0cnVj
dHVyZSogc3RhdHMpCit7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IHN0YXRzQ29weShn
c3Rfc3RydWN0dXJlX2NvcHkoc3RhdHMpKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0
ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywgc3RhdHMgPSBXVEZNb3ZlKHN0YXRzQ29weSldIHsK
KyAgICAgICAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoKHN0YXRzLmdldCgpLCBzdGF0aWNfY2FzdDxH
c3RTdHJ1Y3R1cmVGb3JlYWNoRnVuYz4oW10oR1F1YXJrLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBn
cG9pbnRlciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4geworICAgICAgICAgICAgYXV0byogZW5kUG9p
bnQgPSByZWludGVycHJldF9jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqPih1c2VyRGF0YSk7
CisgICAgICAgICAgICBlbmRQb2ludC0+cHJvY2Vzc1N0YXRzKHZhbHVlKTsKKyAgICAgICAgICAg
IHJldHVybiBUUlVFOworICAgICAgICB9KSwgdGhpcyk7CisgICAgfSk7Cit9CisjZW5kaWYKKwor
I2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpz
dGFydExvZ2dpbmdTdGF0cygpCit7CisgICAgaWYgKG1fc3RhdHNMb2dUaW1lci5pc0FjdGl2ZSgp
KQorICAgICAgICBtX3N0YXRzTG9nVGltZXIuc3RvcCgpOworICAgIG1fc3RhdHNMb2dUaW1lci5z
dGFydFJlcGVhdGluZyhzdGF0c0xvZ0ludGVydmFsKFNlY29uZHM6Om5hbigpKSk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcExvZ2dpbmdTdGF0cygpCit7CisgICAgbV9z
dGF0c0xvZ1RpbWVyLnN0b3AoKTsKK30KKworV1RGTG9nQ2hhbm5lbCYgR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6bG9nQ2hhbm5lbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIExvZ1dlYlJUQzsKK30K
KworU2Vjb25kcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdGF0c0xvZ0ludGVydmFsKFNlY29u
ZHMgcmVwb3J0VGltZXN0YW1wKSBjb25zdAoreworICAgIGlmIChsb2dnZXIoKS53aWxsTG9nKGxv
Z0NoYW5uZWwoKSwgV1RGTG9nTGV2ZWw6OkluZm8pKQorICAgICAgICByZXR1cm4gMl9zOworCisg
ICAgaWYgKHJlcG9ydFRpbWVzdGFtcCAtIG1fc3RhdHNGaXJzdERlbGl2ZXJlZFRpbWVzdGFtcCA+
IDE1X3MpCisgICAgICAgIHJldHVybiAxMF9zOworCisgICAgcmV0dXJuIDRfczsKK30KKyNlbmRp
ZgorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmdhdGhlckRlY29kZXJJbXBsZW1lbnRh
dGlvbk5hbWUoRnVuY3Rpb248dm9pZChTdHJpbmcmJik+JiYgY2FsbGJhY2spCit7CisgICAgLy8g
VE9ETzogY29sbGVjdCBzdGF0cyBhbmQgbG9va3VwIEluYm91bmRSdHAgImRlY29kZXJfaW1wbGVt
ZW50YXRpb24iIGZpZWxkLgorICAgIGNhbGxiYWNrKHsgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorbmFtZXNwYWNlIFdURiB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFR5cGU+CitzdHJ1Y3QgTG9nQXJndW1lbnQ7CisKK3RlbXBsYXRl
IDw+CitzdHJ1Y3QgTG9nQXJndW1lbnQ8V2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI+IHsKKyAgICBz
dGF0aWMgU3RyaW5nIHRvU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyJiBsb2dn
ZXIpCisgICAgeworICAgICAgICByZXR1cm4gU3RyaW5nKGxvZ2dlci50b0pTT05TdHJpbmcoKSk7
CisgICAgfQorfTsKKworfTsgLy8gbmFtZXNwYWNlIFdURgorI2VuZGlmIC8vICFSRUxFQVNFX0xP
R19ESVNBQkxFRAorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJN
ZWRpYUVuZHBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg2NWIzNDlhZWEyYWM5
Yjk3MjQ1Njk1MTI2NGEyODk4NTFmODRhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQu
aApAQCAtMCwwICsxLDE4NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2Fs
aWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQ
dHJHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0
cmVhbWVyU3RhdHNDb2xsZWN0b3IuaCIKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgi
CisjaW5jbHVkZSAiUlRDUnRwUmVjZWl2ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxw
ZXIuaD4KKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0
cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kOworY2xhc3MgTWVkaWFTdHJlYW1UcmFjazsKK2NsYXNzIFJUQ1Nlc3Npb25EZXNjcmlw
dGlvbjsKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjsKKworY2xh
c3MgR1N0cmVhbWVyTWVkaWFFbmRwb2ludCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxH
U3RyZWFtZXJNZWRpYUVuZHBvaW50LCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPgorI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgICwgcHJpdmF0ZSBMb2dnZXJIZWxwZXIKKyNlbmRp
ZgoreworcHVibGljOgorICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gY3Jl
YXRlKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgcGVlckNvbm5lY3Rpb24pIHsgcmV0
dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyTWVkaWFFbmRwb2ludChwZWVyQ29ubmVjdGlvbikp
OyB9CisgICAgdmlydHVhbCB+R1N0cmVhbWVyTWVkaWFFbmRwb2ludCgpOworCisgICAgYm9vbCBz
ZXRDb25maWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJik7CisgICAgdm9pZCBy
ZXN0YXJ0SWNlKCk7CisKKyAgICB2b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENT
ZXNzaW9uRGVzY3JpcHRpb24qKTsKKyAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRpb24oY29u
c3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJik7CisgICAgdm9pZCBkb0NyZWF0ZU9mZmVyKGNvbnN0
IFJUQ09mZmVyT3B0aW9ucyYpOworICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoKTsKKworICAgIHZv
aWQgZ2V0U3RhdHMoR3N0UGFkKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CisKKyAgICBzdGQ6
OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbChjb25z
dCBTdHJpbmcmLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKTsKKyAgICB2b2lkIG9uRGF0YUNo
YW5uZWwoR3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsKKworICAgIHZvaWQgYWRkSWNlQ2FuZGlkYXRl
KEdTdHJlYW1lckljZUNhbmRpZGF0ZSYsIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2Fu
ZGlkYXRlQ2FsbGJhY2smJik7CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBzdG9wKCk7
CisgICAgYm9vbCBpc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiAhbV9waXBlbGluZTsgfQorCisg
ICAgdm9pZCBzdXNwZW5kKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKworICAgIHZvaWQgZ2F0aGVy
RGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJik7Cisg
ICAgYm9vbCBpc05lZ290aWF0aW9uTmVlZGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc05lZ290aWF0
aW9uTmVlZGVkOyB9CisKKyAgICB2b2lkIGNvbmZpZ3VyZUFuZExpbmtTb3VyY2UoUmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyJik7CisKKyAgICBib29sIGFkZFRyYWNrKEdTdHJl
YW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJiwgY29uc3QgRml4ZWRWZWN0
b3I8U3RyaW5nPiYpOworICAgIHZvaWQgcmVtb3ZlVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFj
a2VuZCYpOworCisgICAgc3RydWN0IEJhY2tlbmRzIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRy
PEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+IHNlbmRlckJhY2tlbmQ7CisgICAgICAgIHN0ZDo6
dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+IHJlY2VpdmVyQmFja2VuZDsK
KyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4g
dHJhbnNjZWl2ZXJCYWNrZW5kOworICAgIH07CisgICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4g
YWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5z
Y2VpdmVySW5pdCYpOworICAgIHN0ZDo6b3B0aW9uYWw8QmFja2VuZHM+IGFkZFRyYW5zY2VpdmVy
KE1lZGlhU3RyZWFtVHJhY2smLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmKTsKKyAgICBz
dGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiB0cmFuc2NlaXZl
ckJhY2tlbmRGcm9tU2VuZGVyKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmKTsKKworICAgIHZv
aWQgc2V0U2VuZGVyU291cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBN
ZWRpYVN0cmVhbVRyYWNrJik7CisKKyAgICB2b2lkIGNvbGxlY3RUcmFuc2NlaXZlcnMoKTsKKwor
ICAgIHZvaWQgY3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVkKEdVbmlxdWVQdHI8R3N0
V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uPiYmKTsKKyAgICB2b2lkIGNyZWF0ZVNlc3Npb25EZXNj
cmlwdGlvbkZhaWxlZChHVW5pcXVlUHRyPEdFcnJvcj4mJik7CisKKyAgICBHc3RFbGVtZW50KiBw
aXBlbGluZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0KCk7IH0KKyAgICBib29sIGhh
bmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSopOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisg
ICAgdm9pZCBwcm9jZXNzU3RhdHMoY29uc3QgR1ZhbHVlKik7CisjZW5kaWYKKworcHJvdGVjdGVk
OgorI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHZvaWQgb25TdGF0c0RlbGl2ZXJlZChj
b25zdCBHc3RTdHJ1Y3R1cmUqKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJik7CisKKyAgICBib29s
IGluaXRpYWxpemVQaXBlbGluZSgpOworICAgIHZvaWQgdGVhcmRvd25QaXBlbGluZSgpOworICAg
IHZvaWQgZGlzcG9zZUVsZW1lbnRDaGFpbihHc3RFbGVtZW50Kik7CisKKyAgICB2b2lkIHNldERl
c2NyaXB0aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiosIGJvb2wgaXNMb2NhbCwgRnVu
Y3Rpb248dm9pZCgpPiYmIHN1Y2Nlc3NDYWxsYmFjaywgRnVuY3Rpb248dm9pZChjb25zdCBHRXJy
b3IqKT4mJiBmYWlsdXJlQ2FsbGJhY2spOworICAgIHZvaWQgaW5pdGlhdGUoYm9vbCBpc0luaXRp
YXRvciwgR3N0U3RydWN0dXJlKik7CisKKyAgICB2b2lkIG9uTmVnb3RpYXRpb25OZWVkZWQoKTsK
KyAgICB2b2lkIG9uSWNlQ29ubmVjdGlvbkNoYW5nZSgpOworICAgIHZvaWQgb25JY2VHYXRoZXJp
bmdDaGFuZ2UoKTsKKyAgICB2b2lkIG9uSWNlQ2FuZGlkYXRlKGd1aW50IHNkcE1MaW5lSW5kZXgs
IGdjaGFyYXJyYXkgY2FuZGlkYXRlKTsKKworICAgIE1lZGlhU3RyZWFtJiBtZWRpYVN0cmVhbUZy
b21SVENTdHJlYW0oU3RyaW5nIGxhYmVsKTsKKworICAgIHZvaWQgYWRkUmVtb3RlU3RyZWFtKEdz
dFBhZCopOworICAgIHZvaWQgcmVtb3ZlUmVtb3RlU3RyZWFtKEdzdFBhZCopOworCisgICAgc3Rk
OjpvcHRpb25hbDxCYWNrZW5kcz4gY3JlYXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyhjb25zdCBTdHJp
bmcmIGtpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYsIEdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ6OlNvdXJjZSYmKTsKKyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3Vy
Y2UgY3JlYXRlU291cmNlRm9yVHJhY2soTWVkaWFTdHJlYW1UcmFjayYpOworCisgICAgdm9pZCBz
dG9yZVJlbW90ZU1MaW5lSW5mbyhHc3RTRFBNZXNzYWdlKik7CisKKyAgICBHUmVmUHRyPEdzdFBh
ZD4gcmVxdWVzdFBhZCh1bnNpZ25lZCBtbGluZUluZGV4LCBjb25zdCBHUmVmUHRyPEdzdENhcHM+
Jik7CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICB2b2lkIGdhdGhlclN0YXRzRm9y
TG9nZ2luZygpOworICAgIHZvaWQgc3RhcnRMb2dnaW5nU3RhdHMoKTsKKyAgICB2b2lkIHN0b3BM
b2dnaW5nU3RhdHMoKTsKKworICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmluYWwg
eyByZXR1cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVy
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CisgICAgY29uc3QgY2hh
ciogbG9nQ2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQiOyB9CisgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsOwor
CisgICAgU2Vjb25kcyBzdGF0c0xvZ0ludGVydmFsKFNlY29uZHMpIGNvbnN0OworI2VuZGlmCisK
KyAgICBIYXNoTWFwPFN0cmluZywgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZT4gbV9tZWRpYUZv
ck1pZDsKKyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIG1lZGlhVHlwZUZvck1pZChjb25z
dCBjaGFyKiBtaWQpOworCisgICAgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBtX3Bl
ZXJDb25uZWN0aW9uQmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fd2VicnRjQmlu
OworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKworICAgIEhhc2hNYXA8U3Ry
aW5nLCBSZWZQdHI8TWVkaWFTdHJlYW0+PiBtX3JlbW90ZVN0cmVhbXNCeUlkOworCisgICAgc3Ry
dWN0IFBlbmRpbmdNTGluZUluZm8geworICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHM7Cisg
ICAgICAgIGJvb2wgaXNVc2VkOworICAgICAgICBWZWN0b3I8aW50PiBwYXlsb2FkVHlwZXM7Cisg
ICAgfTsKKyAgICBWZWN0b3I8UGVuZGluZ01MaW5lSW5mbz4gbV9yZW1vdGVNTGluZUluZm9zOwor
CisgICAgUmVmPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yPiBtX3N0YXRzQ29sbGVjdG9yOworCisg
ICAgdW5zaWduZWQgbV9yZXF1ZXN0UGFkQ291bnRlciB7IDAgfTsKKyAgICBpbnQgbV9wdENvdW50
ZXIgeyA5NiB9OworICAgIHVuc2lnbmVkIG1fbWxpbmVJbmRleCB7IDAgfTsKKyAgICBWZWN0b3I8
UmVmPFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcj4+IG1fc291cmNlczsKKyAg
ICB1bnNpZ25lZCBtX3BlbmRpbmdJbmNvbWluZ1N0cmVhbXMgeyAwIH07CisgICAgYm9vbCBtX2lz
SW5pdGlhdG9yIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNOZWdvdGlhdGlvbk5lZWRlZCB7IGZh
bHNlIH07CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBUaW1lciBtX3N0YXRzTG9n
VGltZXI7CisgICAgU2Vjb25kcyBtX3N0YXRzRmlyc3REZWxpdmVyZWRUaW1lc3RhbXA7CisgICAg
UmVmPGNvbnN0IExvZ2dlcj4gbV9sb2dnZXI7CisgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlm
aWVyOworI2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1NjRlOWE0NjQ4MDhiYjA4Y2I0
MDYzY2FhYzYxMjQwMmJkZmQ1YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQuY3BwCkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkRvY3Vt
ZW50LmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
TWVkaWFFbmRwb2ludC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5o
IgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJY2VDYW5kaWRhdGUuaCIK
KyNpbmNsdWRlICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENv
bmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJU
Q0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCisjaW5jbHVk
ZSAiUlRDUnRwQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiUlRDUnRwUmVjZWl2ZXIuaCIKKyNp
bmNsdWRlICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29t
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRy
PFBlZXJDb25uZWN0aW9uQmFja2VuZD4gY3JlYXRlR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kKFJUQ1BlZXJDb25uZWN0aW9uJiBwZWVyQ29ubmVjdGlvbikKK3sKKyAgICBlbnN1cmVHU3Ry
ZWFtZXJJbml0aWFsaXplZCgpOworICAgIGlmICghaXNHU3RyZWFtZXJQbHVnaW5BdmFpbGFibGUo
IndlYnJ0YyIpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiR3N0V2ViUlRDIHBsdWdpbiBub3Qg
Zm91bmQuIE1ha2Ugc3VyZSB0byBpbnN0YWxsIGdzdC1wbHVnaW5zLWJhZCA+PSAxLjIwIHdpdGgg
dGhlIHdlYnJ0YyBwbHVnaW4gZW5hYmxlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7Cisg
ICAgfQorICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kPihwZWVyQ29ubmVjdGlvbik7Cit9CisKK0NyZWF0ZVBlZXJDb25uZWN0aW9uQmFja2Vu
ZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZSA9IGNyZWF0ZUdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDsKKworc3RhdGljIFJUQ1J0cENhcGFiaWxpdGllcyBnc3RyZWFtZXJSdHBD
YXBhdGlibGl0aWVzKGNvbnN0IFN0cmluZyYga2luZCkKK3sKKyAgICBSVENSdHBDYXBhYmlsaXRp
ZXMgY2FwYWJpbGl0aWVzOworICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVu
ZCh7ICJodHRwOi8vd3d3LmlldGYub3JnL2lkL2RyYWZ0LWhvbG1lci1ybWNhdC10cmFuc3BvcnQt
d2lkZS1jYy1leHRlbnNpb25zLTAxIiB9KTsKKyAgICBpZiAoa2luZCA9PSAiYXVkaW8iX3MpIHsK
KyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5yZXNlcnZlQ2FwYWNpdHkoNCk7CisgICAgICAg
IGNhcGFiaWxpdGllcy5jb2RlY3MudW5jaGVja2VkQXBwZW5kKHsgLm1pbWVUeXBlID0gImF1ZGlv
L09QVVMiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDQ4MDAwLAorICAgICAgICAgICAgLmNo
YW5uZWxzID0gMiwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgICAgICBj
YXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJhdWRpby9H
NzIyIiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4MDAwLAorICAgICAgICAgICAgLmNoYW5u
ZWxzID0gMSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgICAgICBjYXBh
YmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJhdWRpby9QQ01B
IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxz
ID0gMSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgICAgICBjYXBhYmls
aXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJhdWRpby9QQ01VIiwK
KyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0g
MSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgIH0gZWxzZSB7CisgICAg
ICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJ1cm46M2dwcDp2aWRl
by1vcmllbnRhdGlvbiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MucmVzZXJ2ZUNh
cGFjaXR5KDQpOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7
IC5taW1lVHlwZSA9ICJ2aWRlby9WUDgiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAw
LAorICAgICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGll
cy5jb2RlY3MudW5jaGVja2VkQXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL1ZQOSIsCisgICAg
ICAgICAgICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAi
cHJvZmlsZS1pZD0wIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy51bmNoZWNrZWRB
cHBlbmQoeyAubWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUg
PSA5MDAwMCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlkPTEiIH0pOwor
ICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9
ICJ2aWRlby9IMjY0IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAg
ICAgIC5zZHBGbXRwTGluZSA9ICJwYWNrZXRpemF0aW9uLW1vZGU9MTtwcm9maWxlLWxldmVsLWlk
PTQyZTAxZiIgfSk7CisgICAgfQorICAgIHJldHVybiBjYXBhYmlsaXRpZXM7Cit9CisKK3N0ZDo6
b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlY2Vp
dmVyQ2FwYWJpbGl0aWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIGtp
bmQpCit7CisgICAgcmV0dXJuIGdzdHJlYW1lclJ0cENhcGF0aWJsaXRpZXMoa2luZCk7Cit9CisK
K3N0ZDo6b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OnNlbmRlckNhcGFiaWxpdGllcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5n
JiBraW5kKQoreworICAgIHJldHVybiBnc3RyZWFtZXJSdHBDYXBhdGlibGl0aWVzKGtpbmQpOwor
fQorCitHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZChSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCisgICAgOiBQZWVy
Q29ubmVjdGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCisgICAgLCBtX2VuZHBvaW50KEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSgqdGhpcykpCit7CisgICAgZGlzYWJsZUlDRUNhbmRp
ZGF0ZUZpbHRlcmluZygpOworfQorCitHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6On5H
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzdXNwZW5kKCkKK3sKKyAgICBtX2VuZHBvaW50LT5z
dXNwZW5kKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN1
bWUoKQoreworICAgIG1fZW5kcG9pbnQtPnJlc3VtZSgpOworfQorCit2b2lkIEdTdHJlYW1lclBl
ZXJDb25uZWN0aW9uQmFja2VuZDo6cmVzdGFydEljZSgpCit7CisgICAgbV9lbmRwb2ludC0+cmVz
dGFydEljZSgpOworfQorCitib29sIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0
Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24p
Cit7CisgICAgcmV0dXJuIG1fZW5kcG9pbnQtPnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlv
bik7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyhS
ZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7CisgICAgbV9lbmRwb2ludC0+Z2V0U3Rh
dHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVh
bWVyUnRwU2VuZGVyQmFja2VuZCYgYmFja2VuZEZyb21SVFBTZW5kZXIoUlRDUnRwU2VuZGVyJiBz
ZW5kZXIpCit7CisgICAgQVNTRVJUKCFzZW5kZXIuaXNTdG9wcGVkKCkpOworICAgIHJldHVybiBz
dGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJj4oKnNlbmRlci5iYWNrZW5kKCkp
OworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRD
UnRwU2VuZGVyJiBzZW5kZXIsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3sKKyAg
ICBpZiAoIXNlbmRlci5iYWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMo
bnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvJiBiYWNrZW5kID0gYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKTsKKyAgICBHUmVm
UHRyPEdzdFBhZD4gcGFkOworICAgIGlmIChSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQuYXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291
cmNlLT5wYWQoKTsKKyAgICBlbHNlIGlmIChSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIqIHNvdXJjZSA9IGJhY2tlbmQudmlkZW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291
cmNlLT5wYWQoKTsKKyAgICBtX2VuZHBvaW50LT5nZXRTdGF0cyhwYWQuZ2V0KCksIFdURk1vdmUo
cHJvbWlzZSkpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0
U3RhdHMoUlRDUnRwUmVjZWl2ZXImIHJlY2VpdmVyLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHBy
b21pc2UpCit7CisgICAgaWYgKCFyZWNlaXZlci5iYWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRw
b2ludC0+Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBHc3RFbGVtZW50KiBiaW4gPSBudWxscHRyOworICAgIGF1dG8mIHNv
dXJjZSA9IHJlY2VpdmVyLnRyYWNrKCkucHJpdmF0ZVRyYWNrKCkuc291cmNlKCk7CisgICAgaWYg
KHNvdXJjZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgYmluID0gc3RhdGljX2Nh
c3Q8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4oc291cmNlKS5iaW4oKTsK
KyAgICBlbHNlIGlmIChzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkpCisgICAgICAgIGJp
biA9IHN0YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciY+KHNv
dXJjZSkuYmluKCk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hF
RCgpOworCisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0
aWNfcGFkKGJpbiwgInNpbmsiKSk7CisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X3Bh
ZF9nZXRfcGVlcihzaW5rUGFkLmdldCgpKSk7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMoc3Jj
UGFkLmdldCgpLCBXVEZNb3ZlKHByb21pc2UpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVz
Y3JpcHRpb24qIGRlc2NyaXB0aW9uKQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0TG9jYWxEZXNj
cmlwdGlvbihkZXNjcmlwdGlvbik7CisgICAgbV9pc0xvY2FsRGVzY3JpcHRpb25TZXQgPSB0cnVl
OworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRSZW1vdGVE
ZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQorewor
ICAgIG1fZW5kcG9pbnQtPmRvU2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOworICAg
IG1faXNSZW1vdGVEZXNjcmlwdGlvblNldCA9IHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYmIG9wdGlv
bnMpCit7CisgICAgbV9lbmRwb2ludC0+ZG9DcmVhdGVPZmZlcihvcHRpb25zKTsKK30KKwordm9p
ZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dl
ck9wdGlvbnMmJikKK3sKKyAgICBpZiAoIW1faXNSZW1vdGVEZXNjcmlwdGlvblNldCkgeworICAg
ICAgICBjcmVhdGVBbnN3ZXJGYWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJO
byByZW1vdGUgZGVzY3JpcHRpb24gc2V0IiB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBtX2VuZHBvaW50LT5kb0NyZWF0ZUFuc3dlcigpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJD
b25uZWN0aW9uQmFja2VuZDo6Y2xvc2UoKQoreworICAgIG1fZW5kcG9pbnQtPmNsb3NlKCk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb1N0b3AoKQoreworICAg
IG1fZW5kcG9pbnQtPnN0b3AoKTsKKyAgICBtX3BlbmRpbmdSZWNlaXZlcnMuY2xlYXIoKTsKK30K
Kwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2FuZGlkYXRl
KFJUQ0ljZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNh
bGxiYWNrKQoreworICAgIHVuc2lnbmVkIHNkcE1MaW5lSW5kZXggPSBjYW5kaWRhdGUuc2RwTUxp
bmVJbmRleCgpID8gY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgoKS52YWx1ZSgpIDogMDsKKyAgICBh
dXRvIHJ0Y0NhbmRpZGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJJY2VDYW5kaWRhdGU+
KCpuZXcgR1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsgc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNh
bmRpZGF0ZSgpIH0pOworICAgIG1fZW5kcG9pbnQtPmFkZEljZUNhbmRpZGF0ZSgqcnRjQ2FuZGlk
YXRlLCBXVEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKK1JlZjxSVENSdHBSZWNlaXZlcj4gR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8
R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiYmIGJhY2tlbmQsIGNvbnN0IFN0cmluZyYgdHJh
Y2tLaW5kLCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCit7CisgICAgYXV0byYgZG9jdW1lbnQgPSBk
b3duY2FzdDxEb2N1bWVudD4oKm1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4
dCgpKTsKKworICAgIGF1dG8gc291cmNlID0gYmFja2VuZC0+Y3JlYXRlU291cmNlKHRyYWNrS2lu
ZCwgdHJhY2tJZCk7CisgICAgLy8gUmVtb3RlIHNvdXJjZSBpcyBpbml0aWFsbHkgbXV0ZWQgYW5k
IHdpbGwgYmUgdW5tdXRlZCB3aGVuIHJlY2VpdmluZyB0aGUgZmlyc3QgcGFja2V0LgorICAgIHNv
dXJjZS0+c2V0TXV0ZWQodHJ1ZSk7CisgICAgYXV0byB0cmFja0lEID0gc291cmNlLT5wZXJzaXN0
ZW50SUQoKTsKKyAgICBhdXRvIHJlbW90ZVRyYWNrUHJpdmF0ZSA9IE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlOjpjcmVhdGUoZG9jdW1lbnQubG9nZ2VyKCksIFdURk1vdmUoc291cmNlKSwgV1RGTW92
ZSh0cmFja0lEKSk7CisgICAgYXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFtVHJhY2s6OmNy
ZWF0ZShkb2N1bWVudCwgV1RGTW92ZShyZW1vdGVUcmFja1ByaXZhdGUpKTsKKworICAgIHJldHVy
biBSVENSdHBSZWNlaXZlcjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHJlbW90ZVRyYWNrKSwgV1RG
TW92ZShiYWNrZW5kKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRs
ZXI+IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5k
bGVyKGNvbnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYgb3B0aW9u
cykKK3sKKyAgICByZXR1cm4gbV9lbmRwb2ludC0+Y3JlYXRlRGF0YUNoYW5uZWwobGFiZWwsIG9w
dGlvbnMpOworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxSVENSdHBTZW5kZXI+IGZpbmRFeGlz
dGluZ1NlbmRlcihjb25zdCBWZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj4mIHRyYW5z
Y2VpdmVycywgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgc2VuZGVyQmFja2VuZCkKK3sKKyAg
ICBBU1NFUlQoc2VuZGVyQmFja2VuZC5ydGNTZW5kZXIoKSk7CisgICAgZm9yIChhdXRvJiB0cmFu
c2NlaXZlciA6IHRyYW5zY2VpdmVycykgeworICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFuc2Nl
aXZlci0+c2VuZGVyKCk7CisgICAgICAgIGlmICghc2VuZGVyLmlzU3RvcHBlZCgpICYmIHNlbmRl
ckJhY2tlbmQucnRjU2VuZGVyKCkgPT0gYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKS5ydGNT
ZW5kZXIoKSkKKyAgICAgICAgICAgIHJldHVybiBSZWYoc2VuZGVyKTsKKyAgICB9CisgICAgcmV0
dXJuIG51bGxwdHI7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+PiBHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2smIHRyYWNr
LCBGaXhlZFZlY3RvcjxTdHJpbmc+JiYgbWVkaWFTdHJlYW1JZHMpCit7CisgICAgYXV0byBzZW5k
ZXJCYWNrZW5kID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+KCp0
aGlzLCBudWxscHRyLCBudWxscHRyKTsKKyAgICBpZiAoIW1fZW5kcG9pbnQtPmFkZFRyYWNrKCpz
ZW5kZXJCYWNrZW5kLCB0cmFjaywgbWVkaWFTdHJlYW1JZHMpKQorICAgICAgICByZXR1cm4gRXhj
ZXB0aW9uIHsgVHlwZUVycm9yLCAiVW5hYmxlIHRvIGFkZCB0cmFjayJfcyB9OworCisgICAgaWYg
KGF1dG8gc2VuZGVyID0gZmluZEV4aXN0aW5nU2VuZGVyKG1fcGVlckNvbm5lY3Rpb24uY3VycmVu
dFRyYW5zY2VpdmVycygpLCAqc2VuZGVyQmFja2VuZCkpIHsKKyAgICAgICAgYmFja2VuZEZyb21S
VFBTZW5kZXIoKnNlbmRlcikudGFrZVNvdXJjZSgqc2VuZGVyQmFja2VuZCk7CisgICAgICAgIHNl
bmRlci0+c2V0VHJhY2soUmVmKHRyYWNrKSk7CisgICAgICAgIHNlbmRlci0+c2V0TWVkaWFTdHJl
YW1JZHMoV1RGTW92ZShtZWRpYVN0cmVhbUlkcykpOworICAgICAgICByZXR1cm4gc2VuZGVyLnJl
bGVhc2VOb25OdWxsKCk7CisgICAgfQorCisgICAgYXV0byB0cmFuc2NlaXZlckJhY2tlbmQgPSBt
X2VuZHBvaW50LT50cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKCpzZW5kZXJCYWNrZW5kKTsK
KworICAgIGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlv
biwgUmVmKHRyYWNrKSwgV1RGTW92ZShzZW5kZXJCYWNrZW5kKSk7CisgICAgc2VuZGVyLT5zZXRN
ZWRpYVN0cmVhbUlkcyhXVEZNb3ZlKG1lZGlhU3RyZWFtSWRzKSk7CisgICAgYXV0byByZWNlaXZl
ciA9IGNyZWF0ZVJlY2VpdmVyKHRyYW5zY2VpdmVyQmFja2VuZC0+Y3JlYXRlUmVjZWl2ZXJCYWNr
ZW5kKCksIHRyYWNrLmtpbmQoKSwgdHJhY2suaWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9
IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVhdGUoc2VuZGVyLmNvcHlSZWYoKSwgV1RGTW92ZShyZWNl
aXZlciksIFdURk1vdmUodHJhbnNjZWl2ZXJCYWNrZW5kKSk7CisgICAgbV9wZWVyQ29ubmVjdGlv
bi5hZGRJbnRlcm5hbFRyYW5zY2VpdmVyKFdURk1vdmUodHJhbnNjZWl2ZXIpKTsKKyAgICByZXR1
cm4gc2VuZGVyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorRXhjZXB0aW9uT3I8UmVmPFJU
Q1J0cFRyYW5zY2VpdmVyPj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFu
c2NlaXZlckZyb21UcmFja09yS2luZChUJiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5z
Y2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICBhdXRvIGJhY2tlbmRzID0gbV9lbmRwb2ludC0+YWRk
VHJhbnNjZWl2ZXIodHJhY2tPcktpbmQsIGluaXQpOworICAgIGlmICghYmFja2VuZHMpCisgICAg
ICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsICJVbmFibGUgdG8gYWRk
IHRyYW5zY2VpdmVyIl9zIH07CisKKyAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3Jl
YXRlKG1fcGVlckNvbm5lY3Rpb24sIFdURk1vdmUodHJhY2tPcktpbmQpLCBXVEZNb3ZlKGJhY2tl
bmRzLT5zZW5kZXJCYWNrZW5kKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVy
KFdURk1vdmUoYmFja2VuZHMtPnJlY2VpdmVyQmFja2VuZCksIHNlbmRlci0+dHJhY2tLaW5kKCks
IHNlbmRlci0+dHJhY2tJZCgpKTsKKyAgICBhdXRvIHRyYW5zY2VpdmVyID0gUlRDUnRwVHJhbnNj
ZWl2ZXI6OmNyZWF0ZShXVEZNb3ZlKHNlbmRlciksIFdURk1vdmUocmVjZWl2ZXIpLCBXVEZNb3Zl
KGJhY2tlbmRzLT50cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFk
ZEludGVybmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4g
dHJhbnNjZWl2ZXI7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5n
JiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICBy
ZXR1cm4gYWRkVHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQoU3RyaW5nIHsgdHJhY2tLaW5kIH0s
IGluaXQpOworfQorCitFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2VpdmVyKFJlZjxNZWRpYVN0cmVhbVRy
YWNrPiYmIHRyYWNrLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQpCit7CisgICAg
cmV0dXJuIGFkZFRyYW5zY2VpdmVyRnJvbVRyYWNrT3JLaW5kKFdURk1vdmUodHJhY2spLCBpbml0
KTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFNlbmRlclNv
dXJjZUZyb21UcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIsIE1lZGlhU3Ry
ZWFtVHJhY2smIHRyYWNrKQoreworICAgIG1fZW5kcG9pbnQtPnNldFNlbmRlclNvdXJjZUZyb21U
cmFjayhzZW5kZXIsIHRyYWNrKTsKK30KKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQmIGJhY2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIoUlRDUnRwVHJhbnNjZWl2
ZXImIHRyYW5zY2VpdmVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBU
cmFuc2NlaXZlckJhY2tlbmQmPigqdHJhbnNjZWl2ZXIuYmFja2VuZCgpKTsKK30KKworUlRDUnRw
VHJhbnNjZWl2ZXIqIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZXhpc3RpbmdUcmFu
c2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
Jik+JiYgbWF0Y2hpbmdGdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDog
bV9wZWVyQ29ubmVjdGlvbi5jdXJyZW50VHJhbnNjZWl2ZXJzKCkpIHsKKyAgICAgICAgaWYgKG1h
dGNoaW5nRnVuY3Rpb24oYmFja2VuZEZyb21SVFBUcmFuc2NlaXZlcigqdHJhbnNjZWl2ZXIpKSkK
KyAgICAgICAgICAgIHJldHVybiB0cmFuc2NlaXZlci5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJu
IG51bGxwdHI7Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVyJiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6Om5ld1JlbW90ZVRyYW5zY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQ+JiYgdHJhbnNjZWl2ZXJCYWNrZW5kLCBSZWFsdGltZU1lZGlh
U291cmNlOjpUeXBlIHR5cGUpCit7CisgICAgYXV0byB0cmFja0tpbmQgPSB0eXBlID09IFJlYWx0
aW1lTWVkaWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1ZGlvIl9zIDogInZpZGVvIl9zOworICAg
IGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgdHJh
Y2tLaW5kLCB0cmFuc2NlaXZlckJhY2tlbmQtPmNyZWF0ZVNlbmRlckJhY2tlbmQoKnRoaXMsIG51
bGxwdHIsIG51bGxwdHIpKTsKKyAgICBhdXRvIHJlY2VpdmVyID0gY3JlYXRlUmVjZWl2ZXIodHJh
bnNjZWl2ZXJCYWNrZW5kLT5jcmVhdGVSZWNlaXZlckJhY2tlbmQoKSwgdHJhY2tLaW5kLCBzZW5k
ZXItPnRyYWNrSWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVy
OjpjcmVhdGUoV1RGTW92ZShzZW5kZXIpLCBXVEZNb3ZlKHJlY2VpdmVyKSwgV1RGTW92ZSh0cmFu
c2NlaXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNj
ZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2ZXIuZ2V0
KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJh
bnNjZWl2ZXJzKCkKK3sKKyAgICBtX2VuZHBvaW50LT5jb2xsZWN0VHJhbnNjZWl2ZXJzKCk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRQZW5kaW5nVHJhY2tF
dmVudChQZW5kaW5nVHJhY2tFdmVudCYmIGV2ZW50KQoreworICAgIG1fcGVuZGluZ1RyYWNrRXZl
bnRzLmFwcGVuZChXVEZNb3ZlKGV2ZW50KSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpkaXNwYXRjaFBlbmRpbmdUcmFja0V2ZW50cygpCit7CisgICAgYXV0byBl
dmVudHMgPSBXVEZNb3ZlKG1fcGVuZGluZ1RyYWNrRXZlbnRzKTsKKyAgICBmb3IgKGF1dG8mIGV2
ZW50IDogZXZlbnRzKQorICAgICAgICBkaXNwYXRjaFRyYWNrRXZlbnQoZXZlbnQpOworfQorCit2
b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVtb3ZlVHJhY2soUlRDUnRwU2Vu
ZGVyJiBzZW5kZXIpCit7CisgICAgbV9lbmRwb2ludC0+cmVtb3ZlVHJhY2soYmFja2VuZEZyb21S
VFBTZW5kZXIoc2VuZGVyKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKQoreworICAgIGZvciAo
YXV0byYgdHJhbnNjZWl2ZXIgOiBtX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRUcmFuc2NlaXZlcnMo
KSkgeworICAgICAgICBpZiAoIXRyYW5zY2VpdmVyLT5zZW5kZXIoKS5pc1N0b3BwZWQoKSkgewor
ICAgICAgICAgICAgaWYgKGF1dG8qIHZpZGVvU291cmNlID0gYmFja2VuZEZyb21SVFBTZW5kZXIo
dHJhbnNjZWl2ZXItPnNlbmRlcigpKS52aWRlb1NvdXJjZSgpKQorICAgICAgICAgICAgICAgIHZp
ZGVvU291cmNlLT5zZXRBcHBseVJvdGF0aW9uKHRydWUpOworICAgICAgICB9CisgICAgfQorfQor
Cit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2F0aGVyRGVjb2RlckltcGxl
bWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJiBjYWxsYmFjaykKK3sKKyAg
ICBtX2VuZHBvaW50LT5nYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKFdURk1vdmUoY2Fs
bGJhY2spKTsKK30KKworYm9vbCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmlzTmVn
b3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZW5kcG9pbnQt
PmlzTmVnb3RpYXRpb25OZWVkZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisj
ZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzODgzMzhjMDU4YTM3
ODM3YTYwNmY3ZGY2NDE4N2FlMWY5YTA3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTct
MjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1
ZGUgIlBlZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3Vy
Y2UuaCIKKyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OworY2xh
c3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOworY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVy
QmFja2VuZDsKK2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDsKK2NsYXNzIFJU
Q1J0cFJlY2VpdmVyOworY2xhc3MgUlRDUnRwUmVjZWl2ZXJCYWNrZW5kOworY2xhc3MgUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uOworY2xhc3MgUlRDU3RhdHNSZXBvcnQ7CitjbGFzcyBSZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU1lZGlhU291cmNlR1N0cmVhbWVyOworY2xh
c3MgUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOworY2xhc3MgUmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOworCitzdHJ1Y3QgR1N0cmVhbWVySWNlQ2FuZGlk
YXRlIHsKKyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgdW5zaWduZWQg
c2RwTUxpbmVJbmRleDsKKyAgICBTdHJpbmcgY2FuZGlkYXRlOworfTsKKworY2xhc3MgR1N0cmVh
bWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kIGZpbmFsIDogcHVibGljIFBlZXJDb25uZWN0aW9uQmFj
a2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGlj
aXQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKFJUQ1BlZXJDb25uZWN0aW9uJik7Cisg
ICAgfkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIHZv
aWQgY2xvc2UoKSBmaW5hbDsKKyAgICB2b2lkIGRvQ3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25z
JiYpIGZpbmFsOworICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoUlRDQW5zd2VyT3B0aW9ucyYmKSBm
aW5hbDsKKyAgICB2b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVz
Y3JpcHRpb24qKSBmaW5hbDsKKyAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3Qg
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uJikgZmluYWw7CisgICAgdm9pZCBkb0FkZEljZUNhbmRpZGF0
ZShSVENJY2VDYW5kaWRhdGUmLCBBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmKSBmaW5hbDsKKyAg
ICB2b2lkIGRvU3RvcCgpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5l
bEhhbmRsZXI+IGNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcihjb25zdCBTdHJpbmcmLCBjb25zdCBS
VENEYXRhQ2hhbm5lbEluaXQmKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RhcnRJY2UoKSBmaW5hbDsK
KyAgICBib29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikg
ZmluYWw7CisgICAgdm9pZCBnZXRTdGF0cyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsK
KyAgICB2b2lkIGdldFN0YXRzKFJUQ1J0cFNlbmRlciYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYp
IGZpbmFsOworICAgIHZvaWQgZ2V0U3RhdHMoUlRDUnRwUmVjZWl2ZXImLCBSZWY8RGVmZXJyZWRQ
cm9taXNlPiYmKSBmaW5hbDsKKworICAgIHZvaWQgZW11bGF0ZVBsYXRmb3JtRXZlbnQoY29uc3Qg
U3RyaW5nJikgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRl
b1NvdXJjZXMoKSBmaW5hbDsKKworICAgIHZvaWQgZ2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9u
TmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJikgZmluYWw7CisKKyAgICBib29sIGlzTmVn
b3RpYXRpb25OZWVkZWQodWludDMyX3QpIGNvbnN0IGZpbmFsOworCisgICAgc3RkOjpvcHRpb25h
bDxib29sPiBjYW5Ucmlja2xlSWNlQ2FuZGlkYXRlcygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH07
CisKKyAgICBmcmllbmQgY2xhc3MgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDsKKyAgICBmcmllbmQg
Y2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDsKKyAgICBSVENQZWVyQ29ubmVjdGlvbiYg
Y29ubmVjdGlvbigpIHsgcmV0dXJuIG1fcGVlckNvbm5lY3Rpb247IH0KKworICAgIHZvaWQgZ2V0
U3RhdHNTdWNjZWVkZWQoY29uc3QgRGVmZXJyZWRQcm9taXNlJiwgUmVmPFJUQ1N0YXRzUmVwb3J0
PiYmKTsKKworICAgIEV4Y2VwdGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+PiBhZGRUcmFjayhNZWRp
YVN0cmVhbVRyYWNrJiwgRml4ZWRWZWN0b3I8U3RyaW5nPiYmKSBmaW5hbDsKKyAgICB2b2lkIHJl
bW92ZVRyYWNrKFJUQ1J0cFNlbmRlciYpIGZpbmFsOworCisgICAgRXhjZXB0aW9uT3I8UmVmPFJU
Q1J0cFRyYW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRD
UnRwVHJhbnNjZWl2ZXJJbml0JikgZmluYWw7CisgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRy
YW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIoUmVmPE1lZGlhU3RyZWFtVHJhY2s+JiYsIGNvbnN0
IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpIGZpbmFsOworICAgIHZvaWQgc2V0U2VuZGVyU291cmNl
RnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJik7
CisKKyAgICBSVENSdHBUcmFuc2NlaXZlciogZXhpc3RpbmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0
aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJik+JiYpOworICAgIFJUQ1J0
cFRyYW5zY2VpdmVyJiBuZXdSZW1vdGVUcmFuc2NlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiYmLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlKTsK
KworICAgIHZvaWQgY29sbGVjdFRyYW5zY2VpdmVycygpIGZpbmFsOworCisgICAgdm9pZCBhZGRQ
ZW5kaW5nVHJhY2tFdmVudChQZW5kaW5nVHJhY2tFdmVudCYmKTsKKyAgICB2b2lkIGRpc3BhdGNo
UGVuZGluZ1RyYWNrRXZlbnRzKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvY2FsRGVzY3Jp
cHRpb25TZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzTG9jYWxEZXNjcmlwdGlvblNldDsg
fQorCisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRw
VHJhbnNjZWl2ZXI+PiBhZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChUJiYgdHJhY2tPcktp
bmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpOworCisgICAgUmVmPFJUQ1J0cFJlY2Vp
dmVyPiBjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kPiYmLCBjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lk
KTsKKworICAgIHZvaWQgc3VzcGVuZCgpIGZpbmFsOworICAgIHZvaWQgcmVzdW1lKCkgZmluYWw7
CisKKyAgICBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gbV9lbmRwb2ludDsKKyAgICBib29s
IG1faXNMb2NhbERlc2NyaXB0aW9uU2V0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNSZW1vdGVE
ZXNjcmlwdGlvblNldCB7IGZhbHNlIH07CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdT
dHJlYW1lckljZUNhbmRpZGF0ZT4+IG1fcGVuZGluZ0NhbmRpZGF0ZXM7CisgICAgVmVjdG9yPFJl
ZjxSVENSdHBSZWNlaXZlcj4+IG1fcGVuZGluZ1JlY2VpdmVyczsKKyAgICBWZWN0b3I8UGVuZGlu
Z1RyYWNrRXZlbnQ+IG1fcGVuZGluZ1RyYWNrRXZlbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBS
ZWNlaXZlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzEz
NDNiMTM5ZjViYTkyZjQxNTVmM2QwNTA1MDVkMmNmYWZjZDc0Ci0tLSAvZGV2L251bGwKKysrIGIv
U291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRw
UmVjZWl2ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogIENvcHlyaWdodCAo
QykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJp
Z2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBt
b2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv
bjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRp
b24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0
ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBB
TlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExl
c3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7
IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMu
LCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAx
ICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRw
UmVjZWl2ZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIK
KyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNs
dWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3
dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUlRDUnRwUGFy
YW1ldGVycyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPFJUQ1J0
cENvbnRyaWJ1dGluZ1NvdXJjZT4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRDb250
cmlidXRpbmdTb3VyY2VzKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiB7IH07Cit9CisKK1ZlY3RvcjxSVENSdHBTeW5jaHJvbml6YXRpb25Tb3VyY2U+IEdTdHJl
YW1lclJ0cFJlY2VpdmVyQmFja2VuZDo6Z2V0U3luY2hyb25pemF0aW9uU291cmNlcygpIGNvbnN0
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitSZWY8UmVh
bHRpbWVNZWRpYVNvdXJjZT4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpjcmVhdGVTb3Vy
Y2UoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCkKK3sKKyAg
ICBpZiAodHJhY2tLaW5kID09ICJ2aWRlbyJfcykKKyAgICAgICAgcmV0dXJuIFJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrSWQuaXNvbGF0ZWRDb3B5KCkp
OworCisgICAgUkVMRUFTRV9BU1NFUlQodHJhY2tLaW5kID09ICJhdWRpbyJfcyk7CisgICAgcmV0
dXJuIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrSWQu
aXNvbGF0ZWRDb3B5KCkpOworfQorCitSZWY8UlRDUnRwVHJhbnNmb3JtQmFja2VuZD4gR1N0cmVh
bWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkKK3sKKyAgICBy
ZXR1cm4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpjcmVhdGUobV9ydGNS
ZWNlaXZlcik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4g
R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCgpCit7Cisg
ICAgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiB0cmFuc3BvcnQ7CisgICAgZ19vYmpl
Y3RfZ2V0KG1fcnRjUmVjZWl2ZXIuZ2V0KCksICJ0cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0
cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFt
ZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KSA6IG51bGxwdHI7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIGIvU291cmNlL1dl
YkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJC
YWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uZjYzYTc1OTdiOTgyNzY3NmRlMDMzYTE5YmM0M2ZjZGEyZjgx
MzMwNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFJlY2VpdmVyQmFja2VuZC5oIgorI2lu
Y2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDUnRwUmVj
ZWl2ZXJCYWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAg
ICBleHBsaWNpdCBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENS
VFBSZWNlaXZlcj4mJiBydGNSZWNlaXZlcikKKyAgICAgICAgOiBtX3J0Y1JlY2VpdmVyKFdURk1v
dmUocnRjUmVjZWl2ZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBHc3RXZWJSVENSVFBSZWNlaXZl
ciogcnRjUmVjZWl2ZXIoKSB7IHJldHVybiBtX3J0Y1JlY2VpdmVyLmdldCgpOyB9CisgICAgUmVm
PFJlYWx0aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZVNvdXJjZShjb25zdCBTdHJpbmcmIHRyYWNrS2lu
ZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKTsKKworcHJpdmF0ZToKKyAgICBSVENSdHBQYXJhbWV0
ZXJzIGdldFBhcmFtZXRlcnMoKSBmaW5hbDsKKyAgICBWZWN0b3I8UlRDUnRwQ29udHJpYnV0aW5n
U291cmNlPiBnZXRDb250cmlidXRpbmdTb3VyY2VzKCkgY29uc3QgZmluYWw7CisgICAgVmVjdG9y
PFJUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZT4gZ2V0U3luY2hyb25pemF0aW9uU291cmNlcygp
IGNvbnN0IGZpbmFsOworICAgIFJlZjxSVENSdHBUcmFuc2Zvcm1CYWNrZW5kPiBydGNSdHBUcmFu
c2Zvcm1CYWNrZW5kKCkgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3Bv
cnRCYWNrZW5kPiBkdGxzVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworCisgICAgR1JlZlB0cjxH
c3RXZWJSVENSVFBSZWNlaXZlcj4gbV9ydGNSZWNlaXZlcjsKK307CisKK30gLy8gbmFtZXNwYWNl
IFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZl
clRyYW5zZm9ybUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyOTA4MmZlY2E0ZDQ4YTgzNzAzNjk3
OTE3NjdkYmFkYWUzM2Y5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJh
Y2tlbmQuY3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIw
MjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlclRy
YW5zZm9ybUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tl
bmQ6Ok1lZGlhVHlwZSBtZWRpYVR5cGVGcm9tUmVjZWl2ZXIoY29uc3QgR3N0V2ViUlRDUlRQUmVj
ZWl2ZXImKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJUQ1J0cFRyYW5z
Zm9ybUJhY2tlbmQ6Ok1lZGlhVHlwZTo6VmlkZW87Cit9CisKK0dTdHJlYW1lclJ0cFJlY2VpdmVy
VHJhbnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKGNv
bnN0IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+JiBydGNSZWNlaXZlcikKKyAgICA6IEdT
dHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQobWVkaWFUeXBlRnJvbVJlY2VpdmVyKCpydGNSZWNl
aXZlciksIFNpZGU6OlJlY2VpdmVyKQorICAgICwgbV9ydGNSZWNlaXZlcihydGNSZWNlaXZlcikK
K3sKK30KKworR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0cmVhbWVy
UnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKCkKK3sKK30KKwordm9pZCBHU3RyZWFtZXJSdHBS
ZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKENh
bGxiYWNrJiYgY2FsbGJhY2spCit7CisgICAgc2V0SW5wdXRDYWxsYmFjayhXVEZNb3ZlKGNhbGxi
YWNrKSk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBSZWNl
aXZlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSgpCit7CisgICAgQVNTRVJUKG1l
ZGlhVHlwZSgpID09IE1lZGlhVHlwZTo6VmlkZW8pOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFj
a2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU4NjY3NmEw
NmI3YWI5ZWIwYjMyZTdkZjdjNjM0ODE1YThjOTc5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2Vp
dmVyVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5
cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICog
IG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0
aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9w
dGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VU
IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAg
TUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2Vl
IHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRh
aWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUg
TGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFy
eTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIElu
Yy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEz
MDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFt
ZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kIGZp
bmFsIDogcHVibGljIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQgeworcHVibGljOgorICAg
IHN0YXRpYyBSZWY8R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kPiBjcmVhdGUo
Y29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4mIHJlY2VpdmVyKSB7IHJldHVybiBh
ZG9wdFJlZigqbmV3IEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZChyZWNlaXZl
cikpOyB9CisgICAgfkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCgpOworCitw
cml2YXRlOgorICAgIGV4cGxpY2l0IEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2Vu
ZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiYpOworCisgICAgLy8gUlRDUnRw
VHJhbnNmb3JtQmFja2VuZAorICAgIHZvaWQgc2V0VHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2so
Q2FsbGJhY2smJikgZmluYWw7CisgICAgdm9pZCByZXF1ZXN0S2V5RnJhbWUoKSBmaW5hbDsKKwor
ICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IG1fcnRjUmVjZWl2ZXI7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5NmJjYmE5MjVmZTlkZmY3ZjZlNTZhNTUxNjUyZDg1
ZTJiODMwYzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNwcApAQCAtMCwwICsx
LDE0MSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3Jv
dXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiBy
ZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5
IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0
aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBi
ZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhl
IGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1Ig
QSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1
YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSBy
ZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNv
ZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBG
bG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKworI2lmIEVOQUJM
RShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1l
ckRUTUZTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAi
R1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5o
IgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rp
b24uaCIKKyNpbmNsdWRlICJSVENSdHBTZW5kZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdv
aW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgi
CisjaW5jbHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK3RlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCB1cGRh
dGVUcmFja1NvdXJjZShTb3VyY2UmIHNvdXJjZSwgTWVkaWFTdHJlYW1UcmFjayogdHJhY2spCit7
CisgICAgaWYgKCF0cmFjaykgeworICAgICAgICBzb3VyY2Uuc3RvcCgpOworICAgICAgICByZXR1
cm4gdHJ1ZTsKKyAgICB9CisgICAgcmV0dXJuIHNvdXJjZS5zZXRUcmFjayh0cmFjay0+cHJpdmF0
ZVRyYWNrKCkpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0YXJ0U291
cmNlKCkKK3sKKyAgICBzd2l0Y2hPbihtX3NvdXJjZSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0YXJ0KCk7
CisgICAgfSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNv
dXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0YXJ0KCk7CisgICAgfSwgW10oc3RkOjpudWxscHRy
X3QmKSB7CisgICAgfSk7Cit9CisKK1dBUk5fVU5VU0VEX1JFVFVSTiBHUmVmUHRyPEdzdEVsZW1l
bnQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0b3BTb3VyY2UoKQoreworICAgIHN3aXRj
aE9uKG1fc291cmNlLCBbXShSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVy
PiYgc291cmNlKSB7CisgICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAgICByZXR1cm4gR1Jl
ZlB0cjxHc3RFbGVtZW50Pihzb3VyY2UtPmJpbigpKTsKKyAgICB9LCBbXShSZWY8UmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7CisgICAgICAgIHNvdXJjZS0+
c3RvcCgpOworICAgICAgICByZXR1cm4gR1JlZlB0cjxHc3RFbGVtZW50Pihzb3VyY2UtPmJpbigp
KTsKKyAgICB9LCBbXShzdGQ6Om51bGxwdHJfdCYpIHsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8
R3N0RWxlbWVudD4obnVsbHB0cik7CisgICAgfSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisK
K2Jvb2wgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRl
ciYgc2VuZGVyLCBNZWRpYVN0cmVhbVRyYWNrKiB0cmFjaykKK3sKKyAgICBpZiAoIXRyYWNrKSB7
CisgICAgICAgIGF1dG8gc3RvcHBlZFNvdXJjZSA9IHN0b3BTb3VyY2UoKTsKKyAgICAgICAgcmV0
dXJuIHRydWU7CisgICAgfQorCisgICAgaWYgKHNlbmRlci50cmFjaygpKSB7CisgICAgICAgIHN3
aXRjaE9uKG1fc291cmNlLCBbJl0oUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcj4mIHNvdXJjZSkgeworICAgICAgICAgICAgQVNTRVJUKHRyYWNrLT5zb3VyY2UoKS50eXBl
KCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pOworICAgICAgICAgICAgc291
cmNlLT5zdG9wKCk7CisgICAgICAgICAgICBzb3VyY2UtPnNldFNvdXJjZSh0cmFjay0+cHJpdmF0
ZVRyYWNrKCkpOworICAgICAgICAgICAgc291cmNlLT5zdGFydCgpOworICAgICAgICB9LCBbJl0o
UmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAg
ICAgICAgICAgQVNTRVJUKHRyYWNrLT5zb3VyY2UoKS50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNv
dXJjZTo6VHlwZTo6VmlkZW8pOworICAgICAgICAgICAgc291cmNlLT5zdG9wKCk7CisgICAgICAg
ICAgICBzb3VyY2UtPnNldFNvdXJjZSh0cmFjay0+cHJpdmF0ZVRyYWNrKCkpOworICAgICAgICAg
ICAgc291cmNlLT5zdGFydCgpOworICAgICAgICB9LCBbXShzdGQ6Om51bGxwdHJfdCYpIHsKKyAg
ICAgICAgfSk7CisgICAgfQorCisgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQtPnNldFNlbmRl
clNvdXJjZUZyb21UcmFjaygqdGhpcywgKnRyYWNrKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwor
UlRDUnRwU2VuZFBhcmFtZXRlcnMgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6Z2V0UGFyYW1l
dGVycygpIGNvbnN0Cit7CisgICAgcmV0dXJuIHRvUlRDUnRwU2VuZFBhcmFtZXRlcnMobV9pbml0
RGF0YS5nZXQoKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c2V0UGFy
YW1ldGVycyhjb25zdCBSVENSdHBTZW5kUGFyYW1ldGVycyYsIERPTVByb21pc2VEZWZlcnJlZDx2
b2lkPiYmIHByb21pc2UpCit7CisgICAgaWYgKCFtX3J0Y1NlbmRlcikgeworICAgICAgICBwcm9t
aXNlLnJlamVjdChOb3RTdXBwb3J0ZWRFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHByb21pc2UucmVzb2x2ZSgpOworfQorCitzdGQ6
OnVuaXF1ZV9wdHI8UlRDRFRNRlNlbmRlckJhY2tlbmQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQ6OmNyZWF0ZURUTUZCYWNrZW5kKCkKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxHU3RyZWFt
ZXJEVE1GU2VuZGVyQmFja2VuZD4oKTsKK30KKworUmVmPFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ+
IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQoKQorewor
ICAgIHJldHVybiBHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpjcmVhdGUobV9y
dGNTZW5kZXIpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnNldE1lZGlh
U3RyZWFtSWRzKGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIEdS
ZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJhbnNwb3J0OworICAgIGdfb2JqZWN0X2dl
dChtX3J0Y1NlbmRlci5nZXQoKSwgInRyYW5zcG9ydCIsICZ0cmFuc3BvcnQub3V0UHRyKCksIG51
bGxwdHIpOworICAgIHJldHVybiB0cmFuc3BvcnQgPyBtYWtlVW5pcXVlPEdTdHJlYW1lckR0bHNU
cmFuc3BvcnRCYWNrZW5kPih0cmFuc3BvcnQpIDogbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oCm5l
dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAuLjkzMzEwODFjZjdiMjI0YWI1NjU1Y2MzNjg5NTgxM2EwYjMyNjZlZmIKLS0tIC9k
ZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAg
Q29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEg
IDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNv
bm5lY3Rpb25CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2lu
Y2x1ZGUgIlJUQ1J0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2Ug
V2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDsKKworY2xh
c3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENSdHBTZW5kZXJC
YWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHU3Ry
ZWFtZXJSdHBTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgYmFj
a2VuZCwgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYgcnRjU2VuZGVyLCBHVW5pcXVlUHRy
PEdzdFN0cnVjdHVyZT4mJiBpbml0RGF0YSkKKyAgICAgICAgOiBtX3BlZXJDb25uZWN0aW9uQmFj
a2VuZChXZWFrUHRyIHsgJmJhY2tlbmQgfSkKKyAgICAgICAgLCBtX3J0Y1NlbmRlcihXVEZNb3Zl
KHJ0Y1NlbmRlcikpCisgICAgICAgICwgbV9pbml0RGF0YShXVEZNb3ZlKGluaXREYXRhKSkKKyAg
ICB7CisgICAgfQorCisgICAgdXNpbmcgU291cmNlID0gc3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0
cl90LCBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiwgUmVmPFJlYWx0
aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4+OworICAgIEdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBiYWNrZW5kLCBHUmVmUHRy
PEdzdFdlYlJUQ1JUUFNlbmRlcj4mJiBydGNTZW5kZXIsIFNvdXJjZSYmIHNvdXJjZSwgR1VuaXF1
ZVB0cjxHc3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEpCisgICAgICAgIDogbV9wZWVyQ29ubmVjdGlv
bkJhY2tlbmQoV2Vha1B0ciB7ICZiYWNrZW5kIH0pCisgICAgICAgICwgbV9ydGNTZW5kZXIoV1RG
TW92ZShydGNTZW5kZXIpKQorICAgICAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKKyAg
ICAgICAgLCBtX2luaXREYXRhKFdURk1vdmUoaW5pdERhdGEpKQorICAgIHsKKyAgICB9CisKKyAg
ICB2b2lkIHNldFJUQ1NlbmRlcihHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mJiBydGNTZW5k
ZXIpIHsgbV9ydGNTZW5kZXIgPSBXVEZNb3ZlKHJ0Y1NlbmRlcik7IH0KKyAgICBHc3RXZWJSVENS
VFBTZW5kZXIqIHJ0Y1NlbmRlcigpIHsgcmV0dXJuIG1fcnRjU2VuZGVyLmdldCgpOyB9CisKKyAg
ICBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIqIGF1ZGlvU291cmNlKCkKKyAg
ICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLAorICAgICAgICAgICAg
W10gKFJlZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsg
cmV0dXJuIHNvdXJjZS5wdHIoKTsgfSwKKyAgICAgICAgICAgIFtdIChjb25zdCBhdXRvJikgLT4g
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKiB7IHJldHVybiBudWxscHRyOyB9
CisgICAgICAgICk7CisgICAgfQorCisgICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0
cmVhbWVyKiB2aWRlb1NvdXJjZSgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hP
bihtX3NvdXJjZSwKKyAgICAgICAgICAgIFtdIChSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291
cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7IHJldHVybiBzb3VyY2UucHRyKCk7IH0sCisgICAgICAg
ICAgICBbXSAoY29uc3QgYXV0byYpIC0+IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lciogeyByZXR1cm4gbnVsbHB0cjsgfQorICAgICAgICApOworICAgIH0KKworICAgIGJvb2wg
aGFzU291cmNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1f
c291cmNlLAorICAgICAgICAgICAgW10gKGNvbnN0IHN0ZDo6bnVsbHB0cl90JikgeyByZXR1cm4g
ZmFsc2U7IH0sCisgICAgICAgICAgICBbXSAoY29uc3QgYXV0byYpIHsgcmV0dXJuIHRydWU7IH0K
KyAgICAgICAgKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyU291cmNlKCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVChoYXNTb3VyY2UoKSk7CisgICAgICAgIG1fc291cmNlID0gbnVsbHB0cjsKKyAg
ICB9CisKKyAgICB2b2lkIHNldFNvdXJjZShTb3VyY2UmJiBzb3VyY2UpCisgICAgeworICAgICAg
ICBBU1NFUlQoIWhhc1NvdXJjZSgpKTsKKyAgICAgICAgbV9zb3VyY2UgPSBXVEZNb3ZlKHNvdXJj
ZSk7CisgICAgICAgIEFTU0VSVChoYXNTb3VyY2UoKSk7CisgICAgfQorCisgICAgdm9pZCB0YWtl
U291cmNlKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIGJhY2tlbmQpCisgICAgeworICAgICAg
ICBBU1NFUlQoYmFja2VuZC5oYXNTb3VyY2UoKSk7CisgICAgICAgIHNldFNvdXJjZShXVEZNb3Zl
KGJhY2tlbmQubV9zb3VyY2UpKTsKKyAgICB9CisKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gR1Jl
ZlB0cjxHc3RFbGVtZW50PiBzdG9wU291cmNlKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCByZXBs
YWNlVHJhY2soUlRDUnRwU2VuZGVyJiwgTWVkaWFTdHJlYW1UcmFjayopIGZpbmFsOworICAgIFJU
Q1J0cFNlbmRQYXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lk
IHNldFBhcmFtZXRlcnMoY29uc3QgUlRDUnRwU2VuZFBhcmFtZXRlcnMmLCBET01Qcm9taXNlRGVm
ZXJyZWQ8dm9pZD4mJikgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RUTUZTZW5kZXJC
YWNrZW5kPiBjcmVhdGVEVE1GQmFja2VuZCgpIGZpbmFsOworICAgIFJlZjxSVENSdHBUcmFuc2Zv
cm1CYWNrZW5kPiBydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkgZmluYWw7CisgICAgdm9pZCBzZXRN
ZWRpYVN0cmVhbUlkcyhjb25zdCBGaXhlZFZlY3RvcjxTdHJpbmc+JikgZmluYWw7CisgICAgc3Rk
Ojp1bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBkdGxzVHJhbnNwb3J0QmFja2Vu
ZCgpIGZpbmFsOworCisgICAgdm9pZCBzdGFydFNvdXJjZSgpOworCisgICAgV2Vha1B0cjxHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kOworICAg
IEdSZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBtX3J0Y1NlbmRlcjsKKyAgICBTb3VyY2UgbV9z
b3VyY2U7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IG1faW5pdERhdGE7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2NmM0ZGVjMWJiMDNh
MzI3N2Q5MmIwNjU0MjljNjQwNzJiZTE0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFu
c2Zvcm1CYWNrZW5kLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdodCAoQykg
MjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0
IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2Rp
ZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsg
ZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24p
IGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQg
aW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkg
V0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNI
QU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUg
R05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4K
KyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlm
IG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1
MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBV
U0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2Vu
ZGVyVHJhbnNmb3JtQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJh
Y2tlbmQ6Ok1lZGlhVHlwZSBtZWRpYVR5cGVGcm9tU2VuZGVyKGNvbnN0IEdzdFdlYlJUQ1JUUFNl
bmRlciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNm
b3JtQmFja2VuZDo6TWVkaWFUeXBlOjpWaWRlbzsKK30KKworR1N0cmVhbWVyUnRwU2VuZGVyVHJh
bnNmb3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBH
UmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mIHJ0Y1NlbmRlcikKKyAgICA6IEdTdHJlYW1lclJ0
cFRyYW5zZm9ybUJhY2tlbmQobWVkaWFUeXBlRnJvbVNlbmRlcigqcnRjU2VuZGVyKSwgU2lkZTo6
U2VuZGVyKQorICAgICwgbV9ydGNTZW5kZXIocnRjU2VuZGVyKQoreworfQorCitHU3RyZWFtZXJS
dHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFj
a2VuZCgpCit7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6
c2V0VHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAg
ICBzZXRJbnB1dENhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVl
c3RLZXlGcmFtZSgpCit7CisgICAgQVNTRVJUKG1lZGlhVHlwZSgpID09IE1lZGlhVHlwZTo6Vmlk
ZW8pOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tl
bmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi42YjBhNTc2ZGIxMjY4M2U3NTg5Nzg0MmQxNGE3OTU4YTQ5MGU5MjZm
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEs
NTEgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tl
bmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9G
b3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyU2VuZGVy
VHJhbnNmb3JtZXI7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQg
ZmluYWwgOiBwdWJsaWMgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCB7CisgICAgV1RGX01B
S0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxHU3RyZWFtZXJSdHBT
ZW5kZXJUcmFuc2Zvcm1CYWNrZW5kPiBjcmVhdGUoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBT
ZW5kZXI+JiBzZW5kZXIpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyUnRwU2VuZGVy
VHJhbnNmb3JtQmFja2VuZChzZW5kZXIpKTsgfQorICAgIH5HU3RyZWFtZXJSdHBTZW5kZXJUcmFu
c2Zvcm1CYWNrZW5kKCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUnRwU2Vu
ZGVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mKTsK
KworICAgIC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lkIHNldFRyYW5zZm9ybWFi
bGVGcmFtZUNhbGxiYWNrKENhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVxdWVzdEtleUZy
YW1lKCkgZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9ydGNTZW5k
ZXI7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VC
X1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJh
Y2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDQ5YWU4NWYx
NmRkNDFiMWEzOWEyMDgwYjQ2M2E1ODY3MDA4NDljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisj
aW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1l
cldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJS
VENSdHBDb2RlY0NhcGFiaWxpdHkuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+
CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1
Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVn
CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
OjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFu
c2NlaXZlcj4mJiBydGNUcmFuc2NlaXZlcikKKyAgICA6IG1fcnRjVHJhbnNjZWl2ZXIoV1RGTW92
ZShydGNUcmFuc2NlaXZlcikpCit7CisgICAgZ19vYmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIu
Z2V0KCksICJkby1uYWNrIiwgVFJVRSwgImZlYy10eXBlIiwgR1NUX1dFQlJUQ19GRUNfVFlQRV9V
TFBfUkVELCBudWxscHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2Vp
dmVyQmFja2VuZD4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVSZWNlaXZl
ckJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IHJlY2VpdmVy
OworICAgIGdfb2JqZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAicmVjZWl2ZXIiLCAm
cmVjZWl2ZXIub3V0UHRyKCksIG51bGxwdHIpOworICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8
R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJlY2VpdmVyKSk7Cit9CisKK3N0
ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPiBHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQ6OmNyZWF0ZVNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kJiBiYWNrZW5kLCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmJiBz
b3VyY2UsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmIGluaXREYXRhKQoreworICAgIEdSZWZQ
dHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXI7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJh
bnNjZWl2ZXIuZ2V0KCksICJzZW5kZXIiLCAmc2VuZGVyLm91dFB0cigpLCBudWxscHRyKTsKKyAg
ICByZXR1cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+KGJhY2tl
bmQsIFdURk1vdmUoc2VuZGVyKSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKGluaXREYXRhKSk7
Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZDo6ZGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZl
ckRpcmVjdGlvbiBnc3REaXJlY3Rpb247CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2
ZXIuZ2V0KCksICJkaXJlY3Rpb24iLCAmZ3N0RGlyZWN0aW9uLCBudWxscHRyKTsKKyAgICByZXR1
cm4gdG9SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihnc3REaXJlY3Rpb24pOworfQorCitzdGQ6
Om9wdGlvbmFsPFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uPiBHU3RyZWFtZXJSdHBUcmFuc2Nl
aXZlckJhY2tlbmQ6OmN1cnJlbnREaXJlY3Rpb24oKSBjb25zdAoreworICAgIEdzdFdlYlJUQ1JU
UFRyYW5zY2VpdmVyRGlyZWN0aW9uIGdzdERpcmVjdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV9y
dGNUcmFuc2NlaXZlci5nZXQoKSwgImN1cnJlbnQtZGlyZWN0aW9uIiwgJmdzdERpcmVjdGlvbiwg
bnVsbHB0cik7CisgICAgaWYgKCFnc3REaXJlY3Rpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51
bGxvcHQ7CisgICAgcmV0dXJuIHRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZ3N0RGlyZWN0
aW9uKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNldERpcmVj
dGlvbihSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgZ19vYmpl
Y3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJkaXJlY3Rpb24iLCBmcm9tUlRDUnRwVHJh
bnNjZWl2ZXJEaXJlY3Rpb24oZGlyZWN0aW9uKSwgbnVsbHB0cik7Cit9CisKK1N0cmluZyBHU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6Om1pZCgpCit7CisgICAgR1VuaXF1ZU91dFB0cjxj
aGFyPiBtaWQ7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJtaWQi
LCAmbWlkLm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gbWlkLmdldCgpOworfQorCit2
b2lkIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c3RvcCgpCit7CisgICAgLy8gRklY
TUU6IHdlYnJ0Y2JpbiB0cmFuc2NlaXZlcnMgY2FuJ3QgYmUgc3RvcHBlZCB5ZXQuCisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKworYm9vbCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6
OnN0b3BwZWQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiB3ZWJydGNiaW4gdHJhbnNjZWl2ZXJz
IGNhbid0IGJlIHN0b3BwZWQgeWV0LgorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlu
bGluZSBXQVJOX1VOVVNFRF9SRVRVUk4gRXhjZXB0aW9uT3I8R3N0Q2Fwcyo+IHRvUnRwQ29kZWND
YXBhYmlsaXR5KGNvbnN0IFJUQ1J0cENvZGVjQ2FwYWJpbGl0eSYgY29kZWMpCit7CisgICAgaWYg
KCFjb2RlYy5taW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSAmJiAhY29kZWMubWltZVR5cGUu
c3RhcnRzV2l0aCgiYXVkaW8vIikpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlk
TW9kaWZpY2F0aW9uRXJyb3IsICJSVENSdHBDb2RlY0NhcGFiaWxpdHkgYmFkIG1pbWVUeXBlIiB9
OworCisgICAgYXV0byBjb21wb25lbnRzID0gY29kZWMubWltZVR5cGUuc3BsaXQoJy8nKTsKKyAg
ICBhdXRvKiBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXBwbGljYXRpb24veC1ydHAiLCAi
bWVkaWEiLCBHX1RZUEVfU1RSSU5HLCBjb21wb25lbnRzWzBdLmFzY2lpKCkuZGF0YSgpLCAiZW5j
b2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGNvbXBvbmVudHNbMV0uYXNjaWkoKS5kYXRhKCks
IG51bGxwdHIpOworICAgIGdzdF9jYXBzX3NldF9zaW1wbGUoY2FwcywgImNsb2NrLXJhdGUiLCBH
X1RZUEVfSU5ULCBjb2RlYy5jbG9ja1JhdGUsIG51bGxwdHIpOworICAgIGlmIChjb2RlYy5jaGFu
bmVscykKKyAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShjYXBzLCAiY2hhbm5lbHMiLCBHX1RZ
UEVfSU5ULCAqY29kZWMuY2hhbm5lbHMsIG51bGxwdHIpOworCisgICAgaWYgKCFjb2RlYy5zZHBG
bXRwTGluZS5pc0VtcHR5KCkpCisgICAgICAgIEdTVF9GSVhNRSgiVW5wcm9jZXNzZWQgU0RQIEZt
dHBMaW5lOiAlcyIsIGNvZGVjLnNkcEZtdHBMaW5lLnV0ZjgoKS5kYXRhKCkpOworICAgIEdTVF9E
RUJVRygiQ29kZWMgY2FwYWJpbGl0eTogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOworICAgIHJl
dHVybiBjYXBzOworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZl
ckJhY2tlbmQ6OnNldENvZGVjUHJlZmVyZW5jZXMoY29uc3QgVmVjdG9yPFJUQ1J0cENvZGVjQ2Fw
YWJpbGl0eT4mIGNvZGVjcykKK3sKKyAgICBhdXRvIGdzdENvZGVjcyA9IGFkb3B0R1JlZihnc3Rf
Y2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZm9yIChhdXRvJiBjb2RlYyA6IGNvZGVjcykgeworICAg
ICAgICBhdXRvIHJlc3VsdCA9IHRvUnRwQ29kZWNDYXBhYmlsaXR5KGNvZGVjKTsKKyAgICAgICAg
aWYgKHJlc3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVs
ZWFzZUV4Y2VwdGlvbigpOworICAgICAgICBnc3RfY2Fwc19hcHBlbmQoZ3N0Q29kZWNzLmdldCgp
LCByZXN1bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIH0KKyAgICBnX29iamVjdF9zZXQo
bV9ydGNUcmFuc2NlaXZlci5nZXQoKSwgImNvZGVjLXByZWZlcmVuY2VzIiwgZ3N0Q29kZWNzLmdl
dCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4geyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRlYTc3MzA0YjA2ZTQxODBmYzcwNzE0N2Y1NDg4Njk4NTg4MTZhNjkKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaApAQCAtMCwwICsxLDU3IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJM
RShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5j
bHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFRyYW5zY2VpdmVy
QmFja2VuZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJl
Y2VpdmVyQmFja2VuZDsKKworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kIGZp
bmFsIDogcHVibGljIFJUQ1J0cFRyYW5zY2VpdmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
KEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+JiYpOworCisgICAgc3RkOjp1bmlxdWVf
cHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4gY3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCk7
CisgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+IGNyZWF0ZVNl
bmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiwgR1N0cmVhbWVyUnRw
U2VuZGVyQmFja2VuZDo6U291cmNlJiYsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmKTsKKwor
ICAgIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBydGNUcmFuc2NlaXZlcigpIHsgcmV0dXJuIG1f
cnRjVHJhbnNjZWl2ZXIuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBSVENSdHBUcmFuc2NlaXZl
ckRpcmVjdGlvbiBkaXJlY3Rpb24oKSBjb25zdCBmaW5hbDsKKyAgICBzdGQ6Om9wdGlvbmFsPFJU
Q1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uPiBjdXJyZW50RGlyZWN0aW9uKCkgY29uc3QgZmluYWw7
CisgICAgdm9pZCBzZXREaXJlY3Rpb24oUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24pIGZpbmFs
OworICAgIFN0cmluZyBtaWQoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKyAgICBi
b29sIHN0b3BwZWQoKSBjb25zdCBmaW5hbDsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRDb2Rl
Y1ByZWZlcmVuY2VzKGNvbnN0IFZlY3RvcjxSVENSdHBDb2RlY0NhcGFiaWxpdHk+JikgZmluYWw7
CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBtX3J0Y1RyYW5zY2VpdmVy
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2Vu
ZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWI0YTZhMzdlNWZiMDNj
ZTk4MzYzMDZjYmVmY2RmZDlhNWEwZjUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFj
a2VuZC5jcHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJh
Y2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
dm9pZCBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpzZXRJbnB1dENhbGxiYWNrKENhbGxi
YWNrJiYgY2FsbGJhY2spCit7CisgICAgTG9ja2VyIGhvbGRMb2NrIHsgbV9pbnB1dENhbGxiYWNr
TG9jayB9OworICAgIG1faW5wdXRDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworfQorCit2
b2lkIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OmNsZWFyVHJhbnNmb3JtYWJsZUZyYW1l
Q2FsbGJhY2soKQoreworICAgIHNldElucHV0Q2FsbGJhY2soeyB9KTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpwcm9jZXNzVHJhbnNmb3JtZWRGcmFtZShSVENSdHBU
cmFuc2Zvcm1hYmxlRnJhbWUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9y
bUJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xOTU0NDhmYzdkMzI2MThmNzhlN2U4MTVmYzE1ZTE0OTYx
MWIyYjNiCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEs
NjAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3Vw
IEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVk
aXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0
aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhl
IExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUg
dXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBp
bXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVj
ZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0
d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxv
b3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisj
aWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
UlRDUnRwVHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCA6IHB1
YmxpYyBSVENSdHBUcmFuc2Zvcm1CYWNrZW5kIHsKK3Byb3RlY3RlZDoKKyAgICBHU3RyZWFtZXJS
dHBUcmFuc2Zvcm1CYWNrZW5kKE1lZGlhVHlwZSwgU2lkZSk7CisgICAgdm9pZCBzZXRJbnB1dENh
bGxiYWNrKENhbGxiYWNrJiYpOworCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFUeXBlIG1lZGlhVHlw
ZSgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fbWVkaWFUeXBlOyB9CisKK3ByaXZhdGU6CisgICAg
Ly8gUlRDUnRwVHJhbnNmb3JtQmFja2VuZAorICAgIHZvaWQgcHJvY2Vzc1RyYW5zZm9ybWVkRnJh
bWUoUlRDUnRwVHJhbnNmb3JtYWJsZUZyYW1lJikgZmluYWw7CisgICAgdm9pZCBjbGVhclRyYW5z
Zm9ybWFibGVGcmFtZUNhbGxiYWNrKCkgZmluYWw7CisgICAgU2lkZSBzaWRlKCkgY29uc3QgZmlu
YWwgeyByZXR1cm4gbV9zaWRlOyB9CisKKyAgICBNZWRpYVR5cGUgbV9tZWRpYVR5cGU7CisgICAg
U2lkZSBtX3NpZGU7CisKKyAgICBMb2NrIG1faW5wdXRDYWxsYmFja0xvY2s7CisgICAgQ2FsbGJh
Y2sgbV9pbnB1dENhbGxiYWNrOworCisgICAgTG9jayBtX291dHB1dENhbGxiYWNrTG9jazsKK307
CisKK2lubGluZSBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBUcmFu
c2Zvcm1CYWNrZW5kKE1lZGlhVHlwZSBtZWRpYVR5cGUsIFNpZGUgc2lkZSkKKyAgICA6IG1fbWVk
aWFUeXBlKG1lZGlhVHlwZSkKKyAgICAsIG1fc2lkZShzaWRlKQoreworfQorCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZmY3OTIxM2QxNzhkZGI1MDliZmEyY2JkNmY2YzZiYjgz
OTBjMjQxNAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmNwcApAQCAtMCww
ICsxLDk3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBH
cm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2Fu
IHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQg
YnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9m
IHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxs
IGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0
aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwg
UHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZl
IHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUg
U29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRo
IEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29u
ZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaCIKKworI2lm
IEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdT
dHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRD
VXRpbHMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIFJUQ1NjdHBU
cmFuc3BvcnRTdGF0ZSB0b1JUQ1NjdHBUcmFuc3BvcnRTdGF0ZShHc3RXZWJSVENTQ1RQVHJhbnNw
b3J0U3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dF
QlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9ORVc6CisgICAgY2FzZSBHU1RfV0VCUlRDX1NDVFBf
VFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgIHJldHVybiBSVENTY3RwVHJhbnNw
b3J0U3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NDVFBfVFJBTlNQT1JU
X1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ1NjdHBUcmFuc3BvcnRTdGF0ZTo6
Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9DTE9T
RUQ6CisgICAgICAgIHJldHVybiBSVENTY3RwVHJhbnNwb3J0U3RhdGU6OkNsb3NlZDsKKyAgICB9
CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitHU3RyZWFtZXJTY3Rw
VHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoR1JlZlB0cjxH
c3RXZWJSVENTQ1RQVHJhbnNwb3J0PiYmIHRyYW5zcG9ydCkKKyAgICA6IG1fYmFja2VuZChXVEZN
b3ZlKHRyYW5zcG9ydCkpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7Cit9CisKK0dTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoKQor
eworICAgIHVucmVnaXN0ZXJDbGllbnQoKTsKK30KKworVW5pcXVlUmVmPFJUQ0R0bHNUcmFuc3Bv
cnRCYWNrZW5kPiBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJh
Y2tlbmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJhbnNwb3J0
OworICAgIGdfb2JqZWN0X2dldChtX2JhY2tlbmQuZ2V0KCksICJ0cmFuc3BvcnQiLCAmdHJhbnNw
b3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHU3RyZWFt
ZXJEdGxzVHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KTsKK30KKwordm9pZCBHU3RyZWFtZXJT
Y3RwVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQpCit7Cisg
ICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgZ19zaWdu
YWxfY29ubmVjdF9zd2FwcGVkKG1fYmFja2VuZC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NB
TExCQUNLKCtbXShHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAg
ICAgICBiYWNrZW5kLT5zdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQg
R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQoKQoreworICAg
IGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2JhY2tlbmQuZ2V0KCksIHRo
aXMpOworICAgIG1fY2xpZW50LmNsZWFyKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyU2N0cFRyYW5z
cG9ydEJhY2tlbmQ6OnN0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAg
ICAgcmV0dXJuOworCisgICAgR3N0V2ViUlRDU0NUUFRyYW5zcG9ydFN0YXRlIHRyYW5zcG9ydFN0
YXRlOworICAgIGd1aW50MTYgbWF4Q2hhbm5lbHM7CisgICAgdWludDY0X3QgbWF4TWVzc2FnZVNp
emU7CisgICAgZ19vYmplY3RfZ2V0KG1fYmFja2VuZC5nZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9y
dFN0YXRlLCAibWF4LW1lc3NhZ2Utc2l6ZSIsICZtYXhNZXNzYWdlU2l6ZSwgIm1heC1jaGFubmVs
cyIsICZtYXhDaGFubmVscywgbnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbY2xpZW50
ID0gbV9jbGllbnQsIHRyYW5zcG9ydFN0YXRlLCBtYXhDaGFubmVscywgbWF4TWVzc2FnZVNpemVd
IHsKKyAgICAgICAgaWYgKCFjbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAg
Y2xpZW50LT5vblN0YXRlQ2hhbmdlZCh0b1JUQ1NjdHBUcmFuc3BvcnRTdGF0ZSh0cmFuc3BvcnRT
dGF0ZSksIG1heE1lc3NhZ2VTaXplLCBtYXhDaGFubmVscyk7CisgICAgfSk7Cit9CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ5ODBmYzg0OThjMDVjMzk3ZGNiMDZjNzBjNDMzMDhi
MDI5MGYwMjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oCkBAIC0wLDAg
KzEsNTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVk
ZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5k
LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJU
Q1NDVFBUcmFuc3BvcnQgR3N0V2ViUlRDU0NUUFRyYW5zcG9ydDsKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCBmaW5hbCA6IHB1Ymxp
YyBSVENTY3RwVHJhbnNwb3J0QmFja2VuZCwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdTdHJlYW1l
clNjdHBUcmFuc3BvcnRCYWNrZW5kPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7Citw
dWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoR1JlZlB0
cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiYmKTsKKyAgICB+R1N0cmVhbWVyU2N0cFRyYW5zcG9y
dEJhY2tlbmQoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgc3RhdGVDaGFuZ2VkKCk7CisKK3By
aXZhdGUgOgorICAgIC8vIFJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kCisgICAgY29uc3Qgdm9pZCog
YmFja2VuZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorICAgIFVu
aXF1ZVJlZjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBm
aW5hbDsKKyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAgIHZvaWQg
dW5yZWdpc3RlckNsaWVudCgpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJh
bnNwb3J0PiBtX2JhY2tlbmQ7CisgICAgV2Vha1B0cjxDbGllbnQ+IG1fY2xpZW50OworfTsKKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xs
ZWN0b3IuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjc2YjAwN2IxNTYzY2EwYjgyOWI1ODYwZjkzYTI3ODI3ODM0
NmJmOWQKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5jcHAKQEAgLTAsMCArMSwyODYg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KyNpbmNsdWRlICJHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oIgorCisjaWYgRU5BQkxFKFdFQl9S
VEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJl
YW1lci5oIgorI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5oIgorI2luY2x1ZGUgIkpTUlRDU3RhdHNS
ZXBvcnQuaCIKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93
ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKworR1NU
X0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNk
ZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1N0YXRzKFJUQ1N0
YXRzUmVwb3J0OjpTdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQor
eworICAgIGRvdWJsZSB0aW1lc3RhbXA7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJs
ZShzdHJ1Y3R1cmUsICJ0aW1lc3RhbXAiLCAmdGltZXN0YW1wKSkKKyAgICAgICAgc3RhdHMudGlt
ZXN0YW1wID0gdGltZXN0YW1wOworICAgIHN0YXRzLmlkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3Ry
aW5nKHN0cnVjdHVyZSwgImlkIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDUlRQ
U3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlJ0cFN0cmVhbVN0YXRzJiBzdGF0cywgY29uc3Qg
R3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZmlsbFJUQ1N0YXRzKHN0YXRzLCBzdHJ1
Y3R1cmUpOworCisgICAgc3RhdHMudHJhbnNwb3J0SWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJp
bmcoc3RydWN0dXJlLCAidHJhbnNwb3J0LWlkIik7CisgICAgc3RhdHMuY29kZWNJZCA9IGdzdF9z
dHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJjb2RlYy1pZCIpOworCisgICAgdW5zaWdu
ZWQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAic3Ny
YyIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnNzcmMgPSB2YWx1ZTsKKworICAgIC8vIEZJWE1F
OgorICAgIC8vIHN0YXRzLnRyYW5zcG9ydElkCisgICAgLy8gc3RhdHMuY29kZWNJZAorICAgIC8v
IHN0YXRzLm1lZGlhVHlwZQorICAgIC8vIHN0YXRzLmtpbmQKK30KKworc3RhdGljIGlubGluZSB2
b2lkIGZpbGxSVENDb2RlY1N0YXRzKFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzJiBzdGF0cywg
Y29uc3QgR3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZmlsbFJUQ1N0YXRzKHN0YXRz
LCBzdHJ1Y3R1cmUpOworCisgICAgdW5zaWduZWQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1
cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAicGF5bG9hZC10eXBlIiwgJnZhbHVlKSkKKyAgICAgICAg
c3RhdHMucGF5bG9hZFR5cGUgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWlu
dChzdHJ1Y3R1cmUsICJjbG9jay1yYXRlIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuY2xvY2tS
YXRlID0gdmFsdWU7CisKKyAgICAvLyBGSVhNRToKKyAgICAvLyBzdGF0cy5taW1lVHlwZSA9Cisg
ICAgLy8gc3RhdHMuY2hhbm5lbHMgPQorICAgIC8vIHN0YXRzLnNkcEZtdHBMaW5lID0KKyAgICAv
LyBzdGF0cy5pbXBsZW1lbnRhdGlvbiA9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsSW5i
b3VuZFJUUFN0cmVhbVN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMm
IHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDUlRQ
U3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICB1aW50NjRfdCB2YWx1ZTsKKyAg
ICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgInBhY2tldHMtcmVjZWl2
ZWQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5wYWNrZXRzUmVjZWl2ZWQgPSB2YWx1ZTsKKyAg
ICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgImJ5dGVzLXJlY2VpdmVk
IiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuYnl0ZXNSZWNlaXZlZCA9IHZhbHVlOworCisgICAg
dW5zaWduZWQgcGFja2V0c0xvc3Q7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3Ry
dWN0dXJlLCAicGFja2V0cy1sb3N0IiwgJnBhY2tldHNMb3N0KSkKKyAgICAgICAgc3RhdHMucGFj
a2V0c0xvc3QgPSBwYWNrZXRzTG9zdDsKKworICAgIGRvdWJsZSBqaXR0ZXI7CisgICAgaWYgKGdz
dF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShzdHJ1Y3R1cmUsICJqaXR0ZXIiLCAmaml0dGVyKSkKKyAg
ICAgICAgc3RhdHMuaml0dGVyID0gaml0dGVyOworCisgICAgLy8gRklYTUU6CisgICAgLy8gc3Rh
dHMuZnJhY3Rpb25Mb3N0ID0KKyAgICAvLyBzdGF0cy5wYWNrZXRzRGlzY2FyZGVkID0KKyAgICAv
LyBzdGF0cy5wYWNrZXRzUmVwYWlyZWQgPQorICAgIC8vIHN0YXRzLmJ1cnN0UGFja2V0c0xvc3Qg
PQorICAgIC8vIHN0YXRzLmJ1cnN0UGFja2V0c0Rpc2NhcmRlZCA9CisgICAgLy8gc3RhdHMuYnVy
c3RMb3NzQ291bnQgPQorICAgIC8vIHN0YXRzLmJ1cnN0RGlzY2FyZENvdW50ID0KKyAgICAvLyBz
dGF0cy5idXJzdExvc3NSYXRlID0KKyAgICAvLyBzdGF0cy5idXJzdERpc2NhcmRSYXRlID0KKyAg
ICAvLyBzdGF0cy5nYXBMb3NzUmF0ZSA9CisgICAgLy8gc3RhdHMuZ2FwRGlzY2FyZFJhdGUgPQor
ICAgIC8vIHN0YXRzLmZyYW1lc0RlY29kZWQgPQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmls
bE91dGJvdW5kUlRQU3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFt
U3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxs
UlRDUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICB1aW50NjRfdCB2YWx1
ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgInBhY2tldHMt
c2VudCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnBhY2tldHNTZW50ID0gdmFsdWU7CisgICAg
aWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChzdHJ1Y3R1cmUsICJieXRlcy1zZW50IiwgJnZh
bHVlKSkKKyAgICAgICAgc3RhdHMuYnl0ZXNTZW50ID0gdmFsdWU7CisKKyAgICAvLyBGSVhNRQor
ICAgIC8vIHN0YXRzLnRhcmdldEJpdHJhdGUgPQorICAgIC8vIHN0YXRzLmZyYW1lc0VuY29kZWQg
PQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1BlZXJDb25uZWN0aW9uU3RhdHMoUlRD
U3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1
cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisK
KyAgICBpbnQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUs
ICJkYXRhLWNoYW5uZWxzLW9wZW5lZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLmRhdGFDaGFu
bmVsc09wZW5lZCA9IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0
dXJlLCAiZGF0YS1jaGFubmVscy1jbG9zZWQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5kYXRh
Q2hhbm5lbHNDbG9zZWQgPSB2YWx1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENU
cmFuc3BvcnRTdGF0cyhSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHMmIHN0YXRzLCBjb25z
dCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0
cnVjdHVyZSk7CisKKyAgICAvLyBGSVhNRQorICAgIC8vIHN0YXRzLmJ5dGVzU2VudCA9CisgICAg
Ly8gc3RhdHMuYnl0ZXNSZWNlaXZlZCA9CisgICAgLy8gc3RhdHMucnRjcFRyYW5zcG9ydFN0YXRz
SWQgPQorICAgIC8vIHN0YXRzLnNlbGVjdGVkQ2FuZGlkYXRlUGFpcklkID0KKyAgICAvLyBzdGF0
cy5sb2NhbENlcnRpZmljYXRlSWQgPQorICAgIC8vIHN0YXRzLnJlbW90ZUNlcnRpZmljYXRlSWQg
PQorICAgIC8vIHN0YXRzLmR0bHNTdGF0ZSA9CisgICAgLy8gc3RhdHMudGxzVmVyc2lvbiA9Cisg
ICAgLy8gc3RhdHMuZHRsc0NpcGhlciA9CisgICAgLy8gc3RhdHMuc3J0cENpcGhlciA9Cit9CisK
K3N0YXRpYyBnYm9vbGVhbiBmaWxsUmVwb3J0Q2FsbGJhY2soR1F1YXJrLCBjb25zdCBHVmFsdWUq
IHZhbHVlLCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBpZiAoIUdTVF9WQUxVRV9IT0xEU19T
VFJVQ1RVUkUodmFsdWUpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIGNvbnN0IEdzdFN0
cnVjdHVyZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUodmFsdWUpOworICAg
IEdzdFdlYlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dl
dChzdHJ1Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VCUlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5
cGUsIG51bGxwdHIpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIERPTU1hcEFkYXB0ZXIm
IHJlcG9ydCA9ICpyZWludGVycHJldF9jYXN0PERPTU1hcEFkYXB0ZXIqPih1c2VyRGF0YSk7CisK
KyAgICBzd2l0Y2ggKHN0YXRzVHlwZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DT0RF
QzogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6Q29kZWNTdGF0cyBzdGF0czsKKyAgICAgICAg
ZmlsbFJUQ0NvZGVjU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8
SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzPj4o
c3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNh
c2UgR1NUX1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUDogeworICAgICAgICBSVENTdGF0c1JlcG9y
dDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzIHN0YXRzOworICAgICAgICBmaWxsSW5ib3VuZFJUUFN0
cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0
cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRz
Pj4oc3RhdHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAg
IGNhc2UgR1NUX1dFQlJUQ19TVEFUU19PVVRCT1VORF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNS
ZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxPdXRib3Vu
ZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElE
TERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJl
YW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAg
IH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUkVNT1RFX0lOQk9VTkRfUlRQOiB7CisgICAg
ICAgIFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAg
IGZpbGxJbmJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJl
cG9ydC5zZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpJbmJv
dW5kUnRwU3RyZWFtU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBi
cmVhazsKKyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1JFTU9URV9PVVRCT1VORF9S
VFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3Rh
dHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUp
OworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0
c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRz
KSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfQ1NS
QzoKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0YXRzOiBjc3JjIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19QRUVSX0NPTk5FQ1RJT046IHsKKyAg
ICAgICAgUlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHMgc3RhdHM7CisgICAgICAg
IGZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICBy
ZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6UGVl
ckNvbm5lY3Rpb25TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJy
ZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfVFJBTlNQT1JUOiB7CisgICAg
ICAgIFJUQ1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJU
Q1RyYW5zcG9ydFN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElE
TERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHM+
PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAg
Y2FzZSBHU1RfV0VCUlRDX1NUQVRTX1NUUkVBTToKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNh
dGVkIHN0YXRzOiBzdHJlYW0iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRD
X1NUQVRTX0RBVEFfQ0hBTk5FTDoKKyAgICAgICAgR1NUX0ZJWE1FKCJNaXNzaW5nIGRhdGEtY2hh
bm5lbCBzdGF0cyBzdXBwb3J0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJU
Q19TVEFUU19DQU5ESURBVEVfUEFJUjoKKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfTE9DQUxf
Q0FORElEQVRFOgorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19SRU1PVEVfQ0FORElEQVRFOgor
ICAgICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2FuZGlkYXRlIHN0YXRzIHN1cHBvcnQiKTsKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX0NFUlRJRklDQVRFOgorICAg
ICAgICBHU1RfRklYTUUoIk1pc3NpbmcgY2VydGlmaWNhdGUgc3RhdHMgc3VwcG9ydCIpOworICAg
ICAgICBicmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RydWN0IENhbGxi
YWNrSG9sZGVyIHsKKyAgICBHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Q29sbGVjdG9yQ2FsbGJh
Y2sgY2FsbGJhY2s7Cit9OworCitXRUJLSVRfREVGSU5FX0FTWU5DX0RBVEFfU1RSVUNUKENhbGxi
YWNrSG9sZGVyKTsKKwordm9pZCBHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Z2V0U3RhdHMoQ29s
bGVjdG9yQ2FsbGJhY2smJiBjYWxsYmFjaywgR3N0UGFkKiBwYWQpCit7CisgICAgaWYgKCFtX3dl
YnJ0Y0JpbikgeworICAgICAgICBjYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIGF1dG8qIGhvbGRlciA9IGNyZWF0ZUNhbGxiYWNrSG9sZGVyKCk7CisgICAg
aG9sZGVyLT5jYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworICAgIGdfc2lnbmFsX2VtaXRf
YnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC1zdGF0cyIsIHBhZCwgZ3N0X3Byb21pc2Vf
bmV3X3dpdGhfY2hhbmdlX2Z1bmMoW10oR3N0UHJvbWlzZSogcmF3UHJvbWlzZSwgZ3BvaW50ZXIg
dXNlckRhdGEpIHsKKyAgICAgICAgYXV0byBwcm9taXNlID0gYWRvcHRHUmVmKHJhd1Byb21pc2Up
OworICAgICAgICBhdXRvKiBob2xkZXIgPSBzdGF0aWNfY2FzdDxDYWxsYmFja0hvbGRlcio+KHVz
ZXJEYXRhKTsKKyAgICAgICAgaWYgKGdzdF9wcm9taXNlX3dhaXQocHJvbWlzZS5nZXQoKSkgIT0g
R1NUX1BST01JU0VfUkVTVUxUX1JFUExJRUQpIHsKKyAgICAgICAgICAgIGhvbGRlci0+Y2FsbGJh
Y2sobnVsbHB0cik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKworICAgICAgICBj
b25zdCBhdXRvKiBzdGF0cyA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9taXNlLmdldCgpKTsK
KyAgICAgICAgaWYgKCFzdGF0cykgeworICAgICAgICAgICAgaG9sZGVyLT5jYWxsYmFjayhudWxs
cHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChnc3Rf
c3RydWN0dXJlX2hhc19maWVsZChzdGF0cywgImVycm9yIikpIHsKKyAgICAgICAgICAgIEdVbmlx
dWVPdXRQdHI8R0Vycm9yPiBlcnJvcjsKKyAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZ2V0KHN0
YXRzLCAiZXJyb3IiLCBHX1RZUEVfRVJST1IsICZlcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7Cisg
ICAgICAgICAgICBHU1RfV0FSTklORygiVW5hYmxlIHRvIGdldCBzdGF0cywgZXJyb3I6ICVzIiwg
ZXJyb3ItPm1lc3NhZ2UpOworICAgICAgICAgICAgaG9sZGVyLT5jYWxsYmFjayhudWxscHRyKTsK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNhbGxPbk1haW5UaHJl
YWRBbmRXYWl0KFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKSwgaG9sZGVyXSB7CisgICAgICAg
ICAgICAvLyBIb2xkIGFuIGFkZGl0aW9uYWwgcmVmIHRvIHRoZSBwcm9taXNlIGJlY2F1c2UgaXQg
aXMgYXN5bmNocm9ub3VzbHkgdXNlZCBmcm9tIHRoZSBKUyBiaW5kaW5ncy4KKyAgICAgICAgICAg
IGhvbGRlci0+Y2FsbGJhY2soUlRDU3RhdHNSZXBvcnQ6OmNyZWF0ZShbcHJvbWlzZSA9IEdSZWZQ
dHI8R3N0UHJvbWlzZT4ocHJvbWlzZS5nZXQoKSldKGF1dG8mIG1hcEFkYXB0ZXIpIHsKKyAgICAg
ICAgICAgICAgICBjb25zdCBhdXRvKiBzdGF0cyA9IGdzdF9wcm9taXNlX2dldF9yZXBseShwcm9t
aXNlLmdldCgpKTsKKyAgICAgICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2ZvcmVhY2goc3RhdHMs
IGZpbGxSZXBvcnRDYWxsYmFjaywgJm1hcEFkYXB0ZXIpOworICAgICAgICAgICAgfSkpOworICAg
ICAgICB9KTsKKyAgICB9LCBob2xkZXIsIHJlaW50ZXJwcmV0X2Nhc3Q8R0Rlc3Ryb3lOb3RpZnk+
KGRlc3Ryb3lDYWxsYmFja0hvbGRlcikpKTsKK30KKworfTsgLy8gbmFtZXNwYWNlIFdlYkNvcmUK
KworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lclN0YXRzQ29sbGVjdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0Mjcz
NTUzZjgyNTEzNzI2MWZhOTQ3NmJmZTBhZTE3MmJkMDgxYjYKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0
c0NvbGxlY3Rvci5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5
LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMp
IDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZy
ZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBp
dCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRo
ZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55
IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0
aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJS
QU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRB
QklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUK
KyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK
KyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90
LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZy
YW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQor
ICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorCisjaW5jbHVkZSA8
d3RmL0NvbXBsZXRpb25IYW5kbGVyLmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1
ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K2NsYXNzIFJUQ1N0YXRzUmVwb3J0OworCitjbGFzcyBHU3RyZWFtZXJTdGF0c0NvbGxlY3RvciA6
IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHU3RyZWFtZXJTdGF0c0NvbGxlY3RvciwgV1RG
OjpEZXN0cnVjdGlvblRocmVhZDo6TWFpbj4geworcHVibGljOgorICAgIHVzaW5nIENvbGxlY3Rv
ckNhbGxiYWNrID0gQ29tcGxldGlvbkhhbmRsZXI8dm9pZChSZWZQdHI8UlRDU3RhdHNSZXBvcnQ+
JiYpPjsKKyAgICBzdGF0aWMgUmVmPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yPiBjcmVhdGUoKSB7
IHJldHVybiBhZG9wdFJlZigqbmV3IEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yKCkpOyB9CisKKyAg
ICB2b2lkIHNldEVsZW1lbnQoR3N0RWxlbWVudCogZWxlbWVudCkgeyBtX3dlYnJ0Y0JpbiA9IGVs
ZW1lbnQ7IH0KKyAgICB2b2lkIGdldFN0YXRzKENvbGxlY3RvckNhbGxiYWNrJiYsIEdzdFBhZCop
OworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV93ZWJydGNCaW47Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGls
cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uNTRiOTc0ZDNhNzJkNmI3YTQ5ZDMyOGMxMmIzYTE0MmIxYTFlYTNk
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcApAQCAtMCwwICsxLDQ0NyBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIkdTdHJl
YW1lcldlYlJUQ1V0aWxzLmgiCisKKyNpbmNsdWRlICJSVENJY2VDYW5kaWRhdGUuaCIKKyNpbmNs
dWRlICJSVENJY2VQcm90b2NvbC5oIgorCisjaW5jbHVkZSA8b3BlbnNzbC9ibi5oPgorI2luY2x1
ZGUgPG9wZW5zc2wvcnNhLmg+CisjaW5jbHVkZSA8b3BlbnNzbC9zc2wuaD4KKyNpbmNsdWRlIDx3
dGYvQ3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21OdW1iZXIuaD4KKyNpbmNsdWRlIDx3dGYvU2NvcGUu
aD4KKyNpbmNsdWRlIDx3dGYvV2FsbFRpbWUuaD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9CYXNlNjQu
aD4KKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdUb0ludGVnZXJDb252ZXJzaW9uLmg+CisKK0dT
VF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0X3dlYnJ0Y191dGlsc19kZWJ1Zyk7CisjZGVm
aW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX3V0aWxzX2RlYnVnCisKK25hbWVzcGFj
ZSBXZWJDb3JlIHsKKworc3RhdGljIGlubGluZSBSVENJY2VDb21wb25lbnQgdG9SVENJY2VDb21w
b25lbnQoaW50IGNvbXBvbmVudCkKK3sKKyAgICByZXR1cm4gY29tcG9uZW50ID09IDEgPyBSVENJ
Y2VDb21wb25lbnQ6OlJ0cCA6IFJUQ0ljZUNvbXBvbmVudDo6UnRjcDsKK30KKworc3RhdGljIGlu
bGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0ljZVByb3RvY29sPiB0b1JUQ0ljZVByb3RvY29sKGNvbnN0
IFN0cmluZyYgcHJvdG9jb2wpCit7CisgICAgaWYgKHByb3RvY29sLmlzRW1wdHkoKSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKyAgICBpZiAocHJvdG9jb2wgPT0gInVkcCIpCisgICAgICAgIHJldHVy
biBSVENJY2VQcm90b2NvbDo6VWRwOworICAgIEFTU0VSVChwcm90b2NvbCA9PSAidGNwIik7Cisg
ICAgcmV0dXJuIFJUQ0ljZVByb3RvY29sOjpUY3A7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpv
cHRpb25hbDxSVENJY2VUY3BDYW5kaWRhdGVUeXBlPiB0b1JUQ0ljZVRjcENhbmRpZGF0ZVR5cGUo
Y29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICBpZiAodHlwZSA9PSAiYWN0aXZlIikKKyAgICAgICAgcmV0dXJuIFJU
Q0ljZVRjcENhbmRpZGF0ZVR5cGU6OkFjdGl2ZTsKKyAgICBpZiAodHlwZSA9PSAicGFzc2l2ZSIp
CisgICAgICAgIHJldHVybiBSVENJY2VUY3BDYW5kaWRhdGVUeXBlOjpQYXNzaXZlOworICAgIEFT
U0VSVCh0eXBlID09ICJzbyIpOworICAgIHJldHVybiBSVENJY2VUY3BDYW5kaWRhdGVUeXBlOjpT
bzsKK30KKworc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFsPFJUQ0ljZUNhbmRpZGF0ZVR5cGU+
IHRvUlRDSWNlQ2FuZGlkYXRlVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5
cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4geyB9OworICAgIGlmICh0eXBlID09ICJob3N0
IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNhbmRpZGF0ZVR5cGU6Okhvc3Q7CisgICAgaWYgKHR5
cGUgPT0gInNyZmx4IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNhbmRpZGF0ZVR5cGU6OlNyZmx4
OworICAgIGlmICh0eXBlID09ICJwcmZseCIpCisgICAgICAgIHJldHVybiBSVENJY2VDYW5kaWRh
dGVUeXBlOjpQcmZseDsKKyAgICBBU1NFUlQodHlwZSA9PSAicmVsYXkiKTsKKyAgICByZXR1cm4g
UlRDSWNlQ2FuZGlkYXRlVHlwZTo6UmVsYXk7Cit9CisKK1JlZlB0cjxSVENFcnJvcj4gdG9SVENF
cnJvcihHRXJyb3IqIHJ0Y0Vycm9yKQoreworICAgIGF1dG8gZGV0YWlsID0gdG9SVENFcnJvckRl
dGFpbFR5cGUoc3RhdGljX2Nhc3Q8R3N0V2ViUlRDRXJyb3I+KHJ0Y0Vycm9yLT5jb2RlKSk7Cisg
ICAgaWYgKCFkZXRhaWwpCisgICAgICAgIHJldHVybiBudWxscHRyOworICAgIHJldHVybiBSVENF
cnJvcjo6Y3JlYXRlKCpkZXRhaWwsIHJ0Y0Vycm9yLT5tZXNzYWdlKTsKK30KKworc3RhdGljIGlu
bGluZSBkb3VibGUgdG9XZWJSVENCaXRSYXRlUHJpb3JpdHkoUlRDUHJpb3JpdHlUeXBlIHByaW9y
aXR5KQoreworICAgIHN3aXRjaCAocHJpb3JpdHkpIHsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlw
ZTo6VmVyeUxvdzoKKyAgICAgICAgcmV0dXJuIDAuNTsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlw
ZTo6TG93OgorICAgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6TWVk
aXVtOgorICAgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIFJUQ1ByaW9yaXR5VHlwZTo6SGlnaDoK
KyAgICAgICAgcmV0dXJuIDQ7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNI
RUQoKTsKK30KKworR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGZyb21SVENFbmNvZGluZ1BhcmFt
ZXRlcnMoY29uc3QgUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzJiBwYXJhbWV0ZXJzKQoreworICAg
IEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBydGNQYXJhbWV0ZXJzKGdzdF9zdHJ1Y3R1cmVfbmV3
KCJlbmNvZGluZy1wYXJhbWV0ZXJzIiwgImFjdGl2ZSIsIEdfVFlQRV9CT09MRUFOLCBwYXJhbWV0
ZXJzLmFjdGl2ZSwKKyAgICAgICAgInJpZCIsIEdfVFlQRV9TVFJJTkcsIHBhcmFtZXRlcnMucmlk
LnV0ZjgoKS5kYXRhKCksICJiaXRyYXRlLXByaW9yaXR5IiwgR19UWVBFX0RPVUJMRSwgdG9XZWJS
VENCaXRSYXRlUHJpb3JpdHkocGFyYW1ldGVycy5wcmlvcml0eSksIG51bGxwdHIpKTsKKworICAg
IGlmIChwYXJhbWV0ZXJzLnNzcmMpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFt
ZXRlcnMuZ2V0KCksICJzc3JjIiwgR19UWVBFX1VMT05HLCBwYXJhbWV0ZXJzLnNzcmMsIG51bGxw
dHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMubWF4Qml0cmF0ZSkKKyAgICAgICAgZ3N0X3N0cnVj
dHVyZV9zZXQocnRjUGFyYW1ldGVycy5nZXQoKSwgIm1heC1iaXRyYXRlIiwgR19UWVBFX1VMT05H
LCBwYXJhbWV0ZXJzLm1heEJpdHJhdGUsIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMu
bWF4RnJhbWVyYXRlKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdl
dCgpLCAibWF4LWZyYW1lcmF0ZSIsIEdfVFlQRV9VTE9ORywgcGFyYW1ldGVycy5tYXhGcmFtZXJh
dGUsIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMuc2NhbGVSZXNvbHV0aW9uRG93bkJ5
KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAic2NhbGUt
cmVzb2x1dGlvbi1kb3duLWJ5IiwgR19UWVBFX0RPVUJMRSwgcGFyYW1ldGVycy5zY2FsZVJlc29s
dXRpb25Eb3duQnksIG51bGxwdHIpOworCisgICAgaWYgKHBhcmFtZXRlcnMubmV0d29ya1ByaW9y
aXR5KQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChydGNQYXJhbWV0ZXJzLmdldCgpLCAibmV0
d29yay1wcmlvcml0eSIsIEdfVFlQRV9JTlQsICpwYXJhbWV0ZXJzLm5ldHdvcmtQcmlvcml0eSwg
bnVsbHB0cik7CisKKyAgICByZXR1cm4gcnRjUGFyYW1ldGVyczsKK30KKworc3RhdGljIGlubGlu
ZSBSVENQcmlvcml0eVR5cGUgZnJvbVdlYlJUQ0JpdFJhdGVQcmlvcml0eShkb3VibGUgcHJpb3Jp
dHkpCit7CisgICAgaWYgKHByaW9yaXR5IDwgMC43KQorICAgICAgICByZXR1cm4gUlRDUHJpb3Jp
dHlUeXBlOjpWZXJ5TG93OworICAgIGlmIChwcmlvcml0eSA8IDEuNSkKKyAgICAgICAgcmV0dXJu
IFJUQ1ByaW9yaXR5VHlwZTo6TG93OworICAgIGlmIChwcmlvcml0eSA8IDIuNSkKKyAgICAgICAg
cmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6TWVkaXVtOworICAgIHJldHVybiBSVENQcmlvcml0eVR5
cGU6OkhpZ2g7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDUnRwRW5jb2RpbmdQYXJhbWV0ZXJzIHRv
UlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSogcnRjUGFyYW1ldGVycykK
K3sKKyAgICBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMgcGFyYW1ldGVyczsKKworICAgIHVuc2ln
bmVkIHNzcmM7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQocnRjUGFyYW1ldGVycywg
InNzcmMiLCAmc3NyYykpCisgICAgICAgIHBhcmFtZXRlcnMuc3NyYyA9IHNzcmM7CisKKyAgICBn
c3Rfc3RydWN0dXJlX2dldChydGNQYXJhbWV0ZXJzLCAiYWN0aXZlIiwgR19UWVBFX0JPT0xFQU4s
ICYocGFyYW1ldGVycy5hY3RpdmUpLCBudWxscHRyKTsKKworICAgIHVpbnQ2NF90IG1heEJpdHJh
dGU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChydGNQYXJhbWV0ZXJzLCAibWF4
LWJpdHJhdGUiLCAmbWF4Qml0cmF0ZSkpCisgICAgICAgIHBhcmFtZXRlcnMubWF4Qml0cmF0ZSA9
IG1heEJpdHJhdGU7CisKKyAgICB1aW50NjRfdCBtYXhGcmFtZXJhdGU7CisgICAgaWYgKGdzdF9z
dHJ1Y3R1cmVfZ2V0X3VpbnQ2NChydGNQYXJhbWV0ZXJzLCAibWF4LWZyYW1lcmF0ZSIsICZtYXhG
cmFtZXJhdGUpKQorICAgICAgICBwYXJhbWV0ZXJzLm1heEZyYW1lcmF0ZSA9IG1heEZyYW1lcmF0
ZTsKKworICAgIHBhcmFtZXRlcnMucmlkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHJ0Y1Bh
cmFtZXRlcnMsICJyaWQiKTsKKworICAgIGRvdWJsZSBzY2FsZVJlc29sdXRpb25Eb3duQnk7Cisg
ICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShydGNQYXJhbWV0ZXJzLCAic2NhbGUtcmVz
b2x1dGlvbi1kb3duLWJ5IiwgJnNjYWxlUmVzb2x1dGlvbkRvd25CeSkpCisgICAgICAgIHBhcmFt
ZXRlcnMuc2NhbGVSZXNvbHV0aW9uRG93bkJ5ID0gc2NhbGVSZXNvbHV0aW9uRG93bkJ5OworCisg
ICAgZG91YmxlIGJpdHJhdGVQcmlvcml0eTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfZG91
YmxlKHJ0Y1BhcmFtZXRlcnMsICJiaXRyYXRlLXByaW9yaXR5IiwgJmJpdHJhdGVQcmlvcml0eSkp
CisgICAgICAgIHBhcmFtZXRlcnMucHJpb3JpdHkgPSBmcm9tV2ViUlRDQml0UmF0ZVByaW9yaXR5
KGJpdHJhdGVQcmlvcml0eSk7CisKKyAgICBpbnQgbmV0d29ya1ByaW9yaXR5OworICAgIGlmIChn
c3Rfc3RydWN0dXJlX2dldF9pbnQocnRjUGFyYW1ldGVycywgIm5ldHdvcmstcHJpb3JpdHkiLCAm
bmV0d29ya1ByaW9yaXR5KSkKKyAgICAgICAgcGFyYW1ldGVycy5uZXR3b3JrUHJpb3JpdHkgPSBz
dGF0aWNfY2FzdDxSVENQcmlvcml0eVR5cGU+KG5ldHdvcmtQcmlvcml0eSk7CisKKyAgICByZXR1
cm4gcGFyYW1ldGVyczsKK30KKworUlRDUnRwU2VuZFBhcmFtZXRlcnMgdG9SVENSdHBTZW5kUGFy
YW1ldGVycyhjb25zdCBHc3RTdHJ1Y3R1cmUqIHJ0Y1BhcmFtZXRlcnMpCit7CisgICAgaWYgKCFy
dGNQYXJhbWV0ZXJzKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgUlRDUnRwU2VuZFBhcmFt
ZXRlcnMgcGFyYW1ldGVyczsKKyAgICBhdXRvKiBlbmNvZGluZ3MgPSBnc3Rfc3RydWN0dXJlX2dl
dF92YWx1ZShydGNQYXJhbWV0ZXJzLCAiZW5jb2RpbmdzIik7CisgICAgdW5zaWduZWQgc2l6ZSA9
IGdzdF92YWx1ZV9saXN0X2dldF9zaXplKGVuY29kaW5ncyk7CisgICAgZm9yICh1bnNpZ25lZCBp
ID0gMDsgaSA8IHNpemU7IGkrKykgeworICAgICAgICBjb25zdCBhdXRvKiB2YWx1ZSA9IGdzdF92
YWx1ZV9saXN0X2dldF92YWx1ZShlbmNvZGluZ3MsIGkpOworICAgICAgICBwYXJhbWV0ZXJzLmVu
Y29kaW5ncy5hcHBlbmQodG9SVENFbmNvZGluZ1BhcmFtZXRlcnMoR1NUX1NUUlVDVFVSRV9DQVNU
KHZhbHVlKSkpOworICAgIH0KKworICAgIC8vIEZJWE1FOiBIYW5kbGUgcnRjUGFyYW1ldGVycy5k
ZWdyYWRhdGlvbl9wcmVmZXJlbmNlLgorICAgIHJldHVybiBwYXJhbWV0ZXJzOworfQorCisKK3N0
YXRpYyB2b2lkIGVuc3VyZURlYnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpCit7CisgICAgc3RhdGlj
IHN0ZDo6b25jZV9mbGFnIG9uY2VGbGFnOworICAgIHN0ZDo6Y2FsbF9vbmNlKG9uY2VGbGFnLCBb
XSB7CisgICAgICAgIEdTVF9ERUJVR19DQVRFR09SWV9JTklUKHdlYmtpdF93ZWJydGNfdXRpbHNf
ZGVidWcsICJ3ZWJraXR3ZWJydGN1dGlscyIsIDAsICJXZWJLaXQgV2ViUlRDIHV0aWxpdGllcyIp
OworICAgIH0pOworfQorCitzdGQ6Om9wdGlvbmFsPFJUQ0ljZUNhbmRpZGF0ZTo6RmllbGRzPiBw
YXJzZUljZUNhbmRpZGF0ZVNEUChjb25zdCBTdHJpbmcmIHNkcCkKK3sKKyAgICBlbnN1cmVEZWJ1
Z0NhdGVnb3J5SW5pdGlhbGl6ZWQoKTsKKyAgICBHU1RfREVCVUcoIlBhcnNpbmcgSUNFIENhbmRp
ZGF0ZTogJXMiLCBzZHAudXRmOCgpLmRhdGEoKSk7CisgICAgaWYgKCFzZHAuc3RhcnRzV2l0aCgi
Y2FuZGlkYXRlOiIpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgU3RyaW5nIGZvdW5kYXRp
b247CisgICAgdW5zaWduZWQgY29tcG9uZW50SWQgPSAwOworICAgIFN0cmluZyB0cmFuc3BvcnQ7
CisgICAgdW5zaWduZWQgcHJpb3JpdHkgPSAwOworICAgIFN0cmluZyBhZGRyZXNzOworICAgIHVp
bnQzMl90IHBvcnQgPSAwOworICAgIFN0cmluZyB0eXBlOworICAgIFN0cmluZyB0Y3B0eXBlOwor
ICAgIFN0cmluZyByZWxhdGVkQWRkcmVzczsKKyAgICBndWludDE2IHJlbGF0ZWRQb3J0ID0gMDsK
KyAgICBTdHJpbmcgdXNlcm5hbWVGcmFnbWVudDsKKyAgICBhdXRvIHRva2VucyA9IHNkcC5jb252
ZXJ0VG9BU0NJSUxvd2VyY2FzZSgpLnN1YnN0cmluZygxMCkuc3BsaXQoJyAnKTsKKworICAgIGZv
ciAoYXV0byBpdCA9IHRva2Vucy5iZWdpbigpOyBpdCAhPSB0b2tlbnMuZW5kKCk7ICsraXQpIHsK
KyAgICAgICAgYXV0byBpID0gc3RkOjpkaXN0YW5jZSh0b2tlbnMuYmVnaW4oKSwgaXQpOworICAg
ICAgICBhdXRvIHRva2VuID0gKml0OworICAgICAgICBzd2l0Y2ggKGkpIHsKKyAgICAgICAgY2Fz
ZSAwOgorICAgICAgICAgICAgZm91bmRhdGlvbiA9IHRva2VuOworICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgIGNhc2UgMToKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRl
Z2VyPHVuc2lnbmVkPih0b2tlbikpCisgICAgICAgICAgICAgICAgY29tcG9uZW50SWQgPSAqdmFs
dWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDI6CisgICAgICAgICAgICB0cmFuc3BvcnQgPSB0
b2tlbjsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDM6CisgICAgICAgICAgICBp
ZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlcjx1bnNpZ25lZD4odG9rZW4pKQorICAgICAgICAg
ICAgICAgIHByaW9yaXR5ID0gKnZhbHVlOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA0OgorICAg
ICAgICAgICAgYWRkcmVzcyA9IHRva2VuOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNh
c2UgNToKKyAgICAgICAgICAgIGlmIChhdXRvIHZhbHVlID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVk
Pih0b2tlbikpCisgICAgICAgICAgICAgICAgcG9ydCA9ICp2YWx1ZTsKKyAgICAgICAgICAgIGVs
c2UKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBpZiAoaXQgKyAxID09IHRva2Vucy5lbmQoKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4geyB9OworCisgICAgICAgICAgICBpdCsrOworICAgICAgICAg
ICAgaWYgKHRva2VuID09ICJ0eXAiKQorICAgICAgICAgICAgICAgIHR5cGUgPSAqaXQ7CisgICAg
ICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAicmFkZHIiKQorICAgICAgICAgICAgICAgIHJlbGF0
ZWRBZGRyZXNzID0gKml0OworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gPT0gInJwb3J0IikK
KyAgICAgICAgICAgICAgICByZWxhdGVkUG9ydCA9IHBhcnNlSW50ZWdlcjx1bnNpZ25lZD4oKml0
KS52YWx1ZV9vcigwKTsKKyAgICAgICAgICAgIGVsc2UgaWYgKHRva2VuID09ICJ0Y3B0eXBlIikK
KyAgICAgICAgICAgICAgICB0Y3B0eXBlID0gKml0OworICAgICAgICAgICAgZWxzZSBpZiAodG9r
ZW4gPT0gInVmcmFnIikKKyAgICAgICAgICAgICAgICB1c2VybmFtZUZyYWdtZW50ID0gKml0Owor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9CisKKyAgICBpZiAodHlwZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBSVENJY2VDYW5kaWRhdGU6OkZpZWxk
cyBmaWVsZHM7CisgICAgZmllbGRzLmZvdW5kYXRpb24gPSBmb3VuZGF0aW9uOworICAgIGZpZWxk
cy5jb21wb25lbnQgPSB0b1JUQ0ljZUNvbXBvbmVudChjb21wb25lbnRJZCk7CisgICAgZmllbGRz
LnByaW9yaXR5ID0gcHJpb3JpdHk7CisgICAgZmllbGRzLnByb3RvY29sID0gdG9SVENJY2VQcm90
b2NvbCh0cmFuc3BvcnQpOworICAgIGlmICghYWRkcmVzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAg
ZmllbGRzLmFkZHJlc3MgPSBhZGRyZXNzOworICAgICAgICBmaWVsZHMucG9ydCA9IHBvcnQ7Cisg
ICAgfQorICAgIGZpZWxkcy50eXBlID0gdG9SVENJY2VDYW5kaWRhdGVUeXBlKHR5cGUpOworICAg
IGZpZWxkcy50Y3BUeXBlID0gdG9SVENJY2VUY3BDYW5kaWRhdGVUeXBlKHRjcHR5cGUpOworICAg
IGlmICghcmVsYXRlZEFkZHJlc3MuaXNFbXB0eSgpKSB7CisgICAgICAgIGZpZWxkcy5yZWxhdGVk
QWRkcmVzcyA9IHJlbGF0ZWRBZGRyZXNzOworICAgICAgICBmaWVsZHMucmVsYXRlZFBvcnQgPSBy
ZWxhdGVkUG9ydDsKKyAgICB9CisgICAgZmllbGRzLnVzZXJuYW1lRnJhZ21lbnQgPSB1c2VybmFt
ZUZyYWdtZW50OworICAgIHJldHVybiBmaWVsZHM7Cit9CisKK3N0YXRpYyBTdHJpbmcgeDUwOVNl
cmlhbGl6ZShYNTA5KiB4NTA5KQoreworICAgIEJJTyogYmlvID0gQklPX25ldyhCSU9fc19tZW0o
KSk7CisgICAgaWYgKCFiaW8pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBhdXRvIHNjb3Bl
RXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChbJl0geworICAgICAgICBCSU9fZnJlZShiaW8pOwor
ICAgIH0pOworCisgICAgaWYgKCFQRU1fd3JpdGVfYmlvX1g1MDkoYmlvLCB4NTA5KSkKKyAgICAg
ICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxjaGFyPiBidWZmZXI7CisgICAgYnVmZmVyLnJl
c2VydmVDYXBhY2l0eSg0MDk2KTsKKyAgICBpbnQgbGVuZ3RoID0gQklPX3JlYWQoYmlvLCBidWZm
ZXIuZGF0YSgpLCA0MDk2KTsKKyAgICBpZiAoIWxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsK
KworICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLmRhdGEoKSwgbGVuZ3RoKTsKK30KKworc3RhdGlj
IFN0cmluZyBwcml2YXRlS2V5U2VyaWFsaXplKEVWUF9QS0VZKiBwcml2YXRlS2V5KQoreworICAg
IEJJTyogYmlvID0gQklPX25ldyhCSU9fc19tZW0oKSk7CisgICAgaWYgKCFiaW8pCisgICAgICAg
IHJldHVybiB7IH07CisKKyAgICBhdXRvIHNjb3BlRXhpdCA9IFdURjo6bWFrZVNjb3BlRXhpdChb
Jl0geworICAgICAgICBCSU9fZnJlZShiaW8pOworICAgIH0pOworCisgICAgaWYgKCFQRU1fd3Jp
dGVfYmlvX1ByaXZhdGVLZXkoYmlvLCBwcml2YXRlS2V5LCBudWxscHRyLCBudWxscHRyLCAwLCBu
dWxscHRyLCBudWxscHRyKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFZlY3RvcjxjaGFy
PiBidWZmZXI7CisgICAgYnVmZmVyLnJlc2VydmVDYXBhY2l0eSg0MDk2KTsKKyAgICBpbnQgbGVu
Z3RoID0gQklPX3JlYWQoYmlvLCBidWZmZXIuZGF0YSgpLCA0MDk2KTsKKyAgICBpZiAoIWxlbmd0
aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiBTdHJpbmcoYnVmZmVyLmRhdGEo
KSwgbGVuZ3RoKTsKK30KKworc3RkOjpvcHRpb25hbDxSZWY8UlRDQ2VydGlmaWNhdGU+PiBnZW5l
cmF0ZUNlcnRpZmljYXRlKFJlZjxTZWN1cml0eU9yaWdpbj4mJiBvcmlnaW4sIGNvbnN0IFBlZXJD
b25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJbmZvcm1hdGlvbiYgaW5mbykKK3sKKyAgICBl
bnN1cmVEZWJ1Z0NhdGVnb3J5SW5pdGlhbGl6ZWQoKTsKKyAgICBFVlBfUEtFWSogcHJpdmF0ZUtl
eSA9IEVWUF9QS0VZX25ldygpOworICAgIGlmICghcHJpdmF0ZUtleSkgeworICAgICAgICBHU1Rf
V0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBwcml2YXRlIGtleSIpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIGF1dG8gc2NvcGVFeGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsm
XSB7CisgICAgICAgIEVWUF9QS0VZX2ZyZWUocHJpdmF0ZUtleSk7CisgICAgfSk7CisKKyAgICBz
d2l0Y2ggKGluZm8udHlwZSkgeworICAgIGNhc2UgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0
aWZpY2F0ZUluZm9ybWF0aW9uOjpUeXBlOjpFQ0RTQVAyNTY6IHsKKyAgICAgICAgRUNfS0VZKiBl
Y0tleSA9IEVDX0tFWV9uZXdfYnlfY3VydmVfbmFtZShOSURfWDlfNjJfcHJpbWUyNTZ2MSk7Cisg
ICAgICAgIC8vIEVuc3VyZSBjdXJ2ZSBuYW1lIGlzIGluY2x1ZGVkIHdoZW4gRUMga2V5IGlzIHNl
cmlhbGl6ZWQuCisgICAgICAgIC8vIFdpdGhvdXQgdGhpcyBjYWxsLCBPcGVuU1NMIHZlcnNpb25z
IGJlZm9yZSAxLjEuMCB3aWxsIGNyZWF0ZQorICAgICAgICAvLyBjZXJ0aWZpY2F0ZXMgdGhhdCBk
b24ndCB3b3JrIGZvciBUTFMuCisgICAgICAgIC8vIFRoaXMgaXMgYSBuby1vcCBmb3IgQm9yaW5n
U1NMIGFuZCBPcGVuU1NMIDEuMS4wKworICAgICAgICBFQ19LRVlfc2V0X2FzbjFfZmxhZyhlY0tl
eSwgT1BFTlNTTF9FQ19OQU1FRF9DVVJWRSk7CisgICAgICAgIGlmICghcHJpdmF0ZUtleSB8fCAh
ZWNLZXkgfHwgIUVDX0tFWV9nZW5lcmF0ZV9rZXkoZWNLZXkpIHx8ICFFVlBfUEtFWV9hc3NpZ25f
RUNfS0VZKHByaXZhdGVLZXksIGVjS2V5KSkgeworICAgICAgICAgICAgRUNfS0VZX2ZyZWUoZWNL
ZXkpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRlSW5mb3Jt
YXRpb246OlR5cGU6OlJTQVNTQVBLQ1MxdjE1OiB7CisgICAgICAgIFJTQSogcnNhID0gUlNBX25l
dygpOworICAgICAgICBpZiAoIXJzYSkKKyAgICAgICAgICAgIHJldHVybiB7IH07CisKKyAgICAg
ICAgQklHTlVNKiBleHBvbmVudCA9IEJOX25ldygpOworICAgICAgICBpbnQgcHVibGljRXhwb25l
bnQgPSBpbmZvLnJzYVBhcmFtZXRlcnMgPyBpbmZvLnJzYVBhcmFtZXRlcnMtPnB1YmxpY0V4cG9u
ZW50IDogNjU1Mzc7CisgICAgICAgIGF1dG8gbW9kdWx1c0xlbmd0aCA9IGluZm8ucnNhUGFyYW1l
dGVycyA/IGluZm8ucnNhUGFyYW1ldGVycy0+bW9kdWx1c0xlbmd0aCA6IDIwNDg7CisgICAgICAg
IGlmICghQk5fc2V0X3dvcmQoZXhwb25lbnQsIHB1YmxpY0V4cG9uZW50KSB8fCAhUlNBX2dlbmVy
YXRlX2tleV9leChyc2EsIG1vZHVsdXNMZW5ndGgsIGV4cG9uZW50LCBudWxscHRyKQorICAgICAg
ICAgICAgfHwgIUVWUF9QS0VZX2Fzc2lnbl9SU0EocHJpdmF0ZUtleSwgcnNhKSkgeworICAgICAg
ICAgICAgUlNBX2ZyZWUocnNhKTsKKyAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgIH0K
KyAgICAgICAgQk5fZnJlZShleHBvbmVudCk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICB9
CisKKyAgICBYNTA5KiB4NTA5ID0gWDUwOV9uZXcoKTsKKyAgICBpZiAoIXg1MDkpIHsKKyAgICAg
ICAgR1NUX1dBUk5JTkcoIkZhaWxlZCB0byBjcmVhdGUgY2VydGlmaWNhdGUiKTsKKyAgICAgICAg
cmV0dXJuIHsgfTsKKyAgICB9CisKKyAgICBhdXRvIGNlcnRTY29wZUV4aXQgPSBXVEY6Om1ha2VT
Y29wZUV4aXQoWyZdIHsKKyAgICAgICAgWDUwOV9mcmVlKHg1MDkpOworICAgIH0pOworCisgICAg
WDUwOV9zZXRfdmVyc2lvbih4NTA5LCAyKTsKKworICAgIC8vIFNldCBhIHJhbmRvbSA2NCBiaXQg
aW50ZWdlciBhcyBzZXJpYWwgbnVtYmVyLgorICAgIEJJR05VTSogc2VyaWFsTnVtYmVyID0gQk5f
bmV3KCk7CisgICAgQk5fcHNldWRvX3JhbmQoc2VyaWFsTnVtYmVyLCA2NCwgMCwgMCk7CisgICAg
QVNOMV9JTlRFR0VSKiBhc24xU2VyaWFsTnVtYmVyID0gWDUwOV9nZXRfc2VyaWFsTnVtYmVyKHg1
MDkpOworICAgIEJOX3RvX0FTTjFfSU5URUdFUihzZXJpYWxOdW1iZXIsIGFzbjFTZXJpYWxOdW1i
ZXIpOworICAgIEJOX2ZyZWUoc2VyaWFsTnVtYmVyKTsKKworICAgIC8vIFNldCBhIHJhbmRvbSA4
IGJ5dGUgYmFzZTY0IHN0cmluZyBhcyBpc3N1ZXIvc3ViamVjdC4KKyAgICBYNTA5X05BTUUqIG5h
bWUgPSBYNTA5X05BTUVfbmV3KCk7CisgICAgVmVjdG9yPHVpbnQ4X3Q+IGJ1ZmZlcig4KTsKKyAg
ICBXVEY6OmNyeXB0b2dyYXBoaWNhbGx5UmFuZG9tVmFsdWVzKGJ1ZmZlci5kYXRhKCksIGJ1ZmZl
ci5zaXplKCkpOworICAgIGF1dG8gY29tbW9uTmFtZSA9IGJhc2U2NEVuY29kZVRvU3RyaW5nKGJ1
ZmZlcik7CisgICAgWDUwOV9OQU1FX2FkZF9lbnRyeV9ieV9OSUQobmFtZSwgTklEX2NvbW1vbk5h
bWUsIE1CU1RSSU5HX0FTQywgKGNvbnN0IGd1Y2hhciopY29tbW9uTmFtZS5hc2NpaSgpLmRhdGEo
KSwgLTEsIC0xLCAwKTsKKyAgICBYNTA5X3NldF9zdWJqZWN0X25hbWUoeDUwOSwgbmFtZSk7Cisg
ICAgWDUwOV9zZXRfaXNzdWVyX25hbWUoeDUwOSwgbmFtZSk7CisgICAgWDUwOV9OQU1FX2ZyZWUo
bmFtZSk7CisKKyAgICAvLyBGYWxsYmFjayB0byAzMCBkYXlzLCBtYXggb3V0IGF0IG9uZSB5ZWFy
LgorICAgIHVpbnQ2NF90IGV4cGlyZXMgPSBpbmZvLmV4cGlyZXMudmFsdWVfb3IoMjU5MjAwMCk7
CisgICAgZXhwaXJlcyA9IHN0ZDo6bWluPHVpbnQ2NF90PihleHBpcmVzLCAzMTUzNjAwMDAwMCk7
CisgICAgWDUwOV9nbXRpbWVfYWRqKFg1MDlfZ2V0bV9ub3RCZWZvcmUoeDUwOSksIDApOworICAg
IFg1MDlfZ210aW1lX2FkaihYNTA5X2dldG1fbm90QWZ0ZXIoeDUwOSksIGV4cGlyZXMpOworICAg
IFg1MDlfc2V0X3B1YmtleSh4NTA5LCBwcml2YXRlS2V5KTsKKworICAgIGlmICghWDUwOV9zaWdu
KHg1MDksIHByaXZhdGVLZXksIEVWUF9zaGEyNTYoKSkpIHsKKyAgICAgICAgR1NUX1dBUk5JTkco
IkZhaWxlZCB0byBzaWduIGNlcnRpZmljYXRlIik7CisgICAgICAgIHJldHVybiB7IH07CisgICAg
fQorCisgICAgYXV0byBwZW0gPSB4NTA5U2VyaWFsaXplKHg1MDkpOworICAgIEdTVF9ERUJVRygi
R2VuZXJhdGVkIGNlcnRpZmljYXRlIFBFTTogJXMiLCBwZW0uYXNjaWkoKS5kYXRhKCkpOworICAg
IGF1dG8gc2VyaWFsaXplZFByaXZhdGVLZXkgPSBwcml2YXRlS2V5U2VyaWFsaXplKHByaXZhdGVL
ZXkpOworICAgIFZlY3RvcjxSVENDZXJ0aWZpY2F0ZTo6RHRsc0ZpbmdlcnByaW50PiBmaW5nZXJw
cmludHM7CisgICAgLy8gRklYTUU6IEZpbGwgZmluZ2VycHJpbnRzLgorICAgIGF1dG8gZXhwaXJh
dGlvblRpbWUgPSBXVEY6OldhbGxUaW1lOjpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpICsgV1RG
OjpTZWNvbmRzKGV4cGlyZXMpOworICAgIHJldHVybiBSVENDZXJ0aWZpY2F0ZTo6Y3JlYXRlKFdU
Rk1vdmUob3JpZ2luKSwgZXhwaXJhdGlvblRpbWUubWlsbGlzZWNvbmRzKCksIFdURk1vdmUoZmlu
Z2VycHJpbnRzKSwgV1RGTW92ZShwZW0pLCBXVEZNb3ZlKHNlcmlhbGl6ZWRQcml2YXRlS2V5KSk7
Cit9CisKK2Jvb2wgc2RwTWVkaWFIYXNBdHRyaWJ1dGVLZXkoY29uc3QgR3N0U0RQTWVkaWEqIG1l
ZGlhLCBjb25zdCBjaGFyKiBrZXkpCit7CisgICAgdW5zaWduZWQgbGVuID0gZ3N0X3NkcF9tZWRp
YV9hdHRyaWJ1dGVzX2xlbihtZWRpYSk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGxl
bjsgaSsrKSB7CisgICAgICAgIGNvbnN0IGF1dG8qIGF0dHJpYnV0ZSA9IGdzdF9zZHBfbWVkaWFf
Z2V0X2F0dHJpYnV0ZShtZWRpYSwgaSk7CisgICAgICAgIGlmICghZ19zdHJjbXAwKGF0dHJpYnV0
ZS0+a2V5LCBrZXkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAgcmV0
dXJuIGZhbHNlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyV2ViUlRDVXRpbHMuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWI4OGZhNGRiMDQ3YWZm
OGFkYWI4ZDkyOTljNTdiOWVjYzVkYTE4ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmgK
QEAgLTAsMCArMSwyNjcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlh
IFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9s
b2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7
IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUg
dGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1
Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJz
aW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNp
b24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0
IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91
dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJ
VE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hv
dWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGlj
CisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0
aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVl
dCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFn
bWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
CisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIk1lZGlhRW5kcG9p
bnRDb25maWd1cmF0aW9uLmgiCisjaW5jbHVkZSAiUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgiCisj
aW5jbHVkZSAiUlRDQnVuZGxlUG9saWN5LmgiCisjaW5jbHVkZSAiUlRDQ2VydGlmaWNhdGUuaCIK
KyNpbmNsdWRlICJSVENEdGxzVHJhbnNwb3J0LmgiCisjaW5jbHVkZSAiUlRDRXJyb3IuaCIKKyNp
bmNsdWRlICJSVENJY2VDb25uZWN0aW9uU3RhdGUuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3Bv
cnRQb2xpY3kuaCIKKyNpbmNsdWRlICJSVENJY2VUcmFuc3BvcnRTdGF0ZS5oIgorI2luY2x1ZGUg
IlJUQ1J0cFNlbmRQYXJhbWV0ZXJzLmgiCisjaW5jbHVkZSAiUlRDUnRwVHJhbnNjZWl2ZXJEaXJl
Y3Rpb24uaCIKKyNpbmNsdWRlICJSVENTZHBUeXBlLmgiCisjaW5jbHVkZSAiUlRDU2lnbmFsaW5n
U3RhdGUuaCIKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93
ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitpbmxpbmUgUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24gdG9SVENSdHBU
cmFuc2NlaXZlckRpcmVjdGlvbihHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJl
Y3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBjYXNlIEdTVF9XRUJSVENf
UlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9OT05FOgorICAgICAgICAvLyDCr1xfKOODhClfL8Kv
CisgICAgICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6SW5hY3RpdmU7Cisg
ICAgY2FzZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fSU5BQ1RJVkU6Cisg
ICAgICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6SW5hY3RpdmU7CisgICAg
Y2FzZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fU0VORE9OTFk6CisgICAg
ICAgIHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6U2VuZG9ubHk7CisgICAgY2Fz
ZSBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fUkVDVk9OTFk6CisgICAgICAg
IHJldHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6UmVjdm9ubHk7CisgICAgY2FzZSBH
U1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT05fU0VORFJFQ1Y6CisgICAgICAgIHJl
dHVybiBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbjo6U2VuZHJlY3Y7CisgICAgfQorICAgIFJF
TEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVy
RGlyZWN0aW9uOjpJbmFjdGl2ZTsKK30KKworaW5saW5lIEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVy
RGlyZWN0aW9uIGZyb21SVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihSVENSdHBUcmFuc2NlaXZl
ckRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgc3dpdGNoIChkaXJlY3Rpb24pIHsKKyAgICBj
YXNlIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZToKKyAgICAgICAgcmV0dXJu
IEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9JTkFDVElWRTsKKyAgICBjYXNl
IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kb25seToKKyAgICAgICAgcmV0dXJuIEdT
VF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5ET05MWTsKKyAgICBjYXNlIFJU
Q1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpSZWN2b25seToKKyAgICAgICAgcmV0dXJuIEdTVF9X
RUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9SRUNWT05MWTsKKyAgICBjYXNlIFJUQ1J0
cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kcmVjdjoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJS
VENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5EUkVDVjsKKyAgICB9CisgICAgUkVMRUFT
RV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBfVFJBTlND
RUlWRVJfRElSRUNUSU9OX05PTkU7Cit9CisKK3N0YXRpYyBpbmxpbmUgR3N0V2ViUlRDU0RQVHlw
ZSB0b1Nlc3Npb25EZXNjcmlwdGlvblR5cGUoUlRDU2RwVHlwZSBzZHBUeXBlKQoreworICAgIHN3
aXRjaCAoc2RwVHlwZSkgeworICAgIGNhc2UgUlRDU2RwVHlwZTo6T2ZmZXI6CisgICAgICAgIHJl
dHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX09GRkVSOworICAgIGNhc2UgUlRDU2RwVHlwZTo6UHJh
bnN3ZXI6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX1BSQU5TV0VSOworICAg
IGNhc2UgUlRDU2RwVHlwZTo6QW5zd2VyOgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19TRFBf
VFlQRV9BTlNXRVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpSb2xsYmFjazoKKyAgICAgICAgcmV0
dXJuIEdTVF9XRUJSVENfU0RQX1RZUEVfUk9MTEJBQ0s7CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dFQlJUQ19TRFBfVFlQRV9PRkZF
UjsKK30KKworc3RhdGljIGlubGluZSBSVENTZHBUeXBlIGZyb21TZXNzaW9uRGVzY3JpcHRpb25U
eXBlKGNvbnN0IEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiYgZGVzY3JpcHRpb24pCit7Cisg
ICAgYXV0byB0eXBlID0gZGVzY3JpcHRpb24udHlwZTsKKyAgICBpZiAodHlwZSA9PSBHU1RfV0VC
UlRDX1NEUF9UWVBFX09GRkVSKQorICAgICAgICByZXR1cm4gUlRDU2RwVHlwZTo6T2ZmZXI7Cisg
ICAgaWYgKHR5cGUgPT0gR1NUX1dFQlJUQ19TRFBfVFlQRV9BTlNXRVIpCisgICAgICAgIHJldHVy
biBSVENTZHBUeXBlOjpBbnN3ZXI7CisgICAgQVNTRVJUKHR5cGUgPT0gR1NUX1dFQlJUQ19TRFBf
VFlQRV9QUkFOU1dFUik7CisgICAgcmV0dXJuIFJUQ1NkcFR5cGU6OlByYW5zd2VyOworfQorCitz
dGF0aWMgaW5saW5lIFJUQ1NpZ25hbGluZ1N0YXRlIHRvU2lnbmFsaW5nU3RhdGUoR3N0V2ViUlRD
U2lnbmFsaW5nU3RhdGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2Ug
R1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfU1RBQkxFOgorICAgICAgICByZXR1cm4gUlRDU2ln
bmFsaW5nU3RhdGU6OlN0YWJsZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NUQVRF
X0hBVkVfTE9DQUxfT0ZGRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2
ZUxvY2FsT2ZmZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX0xP
Q0FMX1BSQU5TV0VSOgorICAgICAgICByZXR1cm4gUlRDU2lnbmFsaW5nU3RhdGU6OkhhdmVMb2Nh
bFByYW5zd2VyOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9SRU1P
VEVfT0ZGRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90ZU9m
ZmVyOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9SRU1PVEVfUFJB
TlNXRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZVJlbW90ZVByYW5z
d2VyOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfQ0xPU0VEOgorICAgICAg
ICByZXR1cm4gUlRDU2lnbmFsaW5nU3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNF
X0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6U3Rh
YmxlOworfQorCitzdGF0aWMgaW5saW5lIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZSB0b1JUQ0ljZUNv
bm5lY3Rpb25TdGF0ZShHc3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAg
c3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFU
RV9ORVc6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsKKyAgICBj
YXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJTkc6CisgICAgICAgIHJl
dHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNoZWNraW5nOworICAgIGNhc2UgR1NUX1dFQlJU
Q19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VD
b25uZWN0aW9uU3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5F
Q1RJT05fU1RBVEVfQ09NUExFVEVEOgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0
YXRlOjpDb21wbGV0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRF
X0ZBSUxFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6RmFpbGVkOwor
ICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9ESVNDT05ORUNURUQ6Cisg
ICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkRpc2Nvbm5lY3RlZDsKKyAgICBj
YXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1
cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpO
ZXc7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDRHRsc1RyYW5zcG9ydFN0YXRlIHRvUlRDRHRsc1Ry
YW5zcG9ydFN0YXRlKEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnRTdGF0ZSBzdGF0ZSkKK3sKKyAgICBz
d2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRF
X05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6TmV3OworICAgIGNh
c2UgR1NUX1dFQlJUQ19EVExTX1RSQU5TUE9SVF9TVEFURV9DT05ORUNUSU5HOgorICAgICAgICBy
ZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpDb25uZWN0aW5nOworICAgIGNhc2UgR1NUX1dF
QlJUQ19EVExTX1RSQU5TUE9SVF9TVEFURV9DT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENE
dGxzVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3RlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19U
UkFOU1BPUlRfU1RBVEVfQ0xPU0VEOgorICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0
YXRlOjpDbG9zZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0ZB
SUxFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFuc3BvcnRTdGF0ZTo6RmFpbGVkOworICAg
IH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBpbmxp
bmUgUlRDSWNlVHJhbnNwb3J0U3RhdGUgdG9SVENJY2VUcmFuc3BvcnRTdGF0ZShHc3RXZWJSVENJ
Q0VDb25uZWN0aW9uU3RhdGUgc3RhdGUpCit7CisgICAgLy8gRklYTUU6IE5vIEdzdFdlYlJUQ0lD
RVRyYW5zcG9ydFN0YXRlID8KKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX05FVzoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5z
cG9ydFN0YXRlOjpOZXc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRF
X0NIRUNLSU5HOgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3RhdGU6OkNoZWNraW5n
OworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT05ORUNURUQ6Cisg
ICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2Ug
R1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DT01QTEVURUQ6CisgICAgICAgIHJldHVy
biBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q29tcGxldGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19J
Q0VfQ09OTkVDVElPTl9TVEFURV9GQUlMRUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3Bv
cnRTdGF0ZTo6RmFpbGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFU
RV9ESVNDT05ORUNURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6RGlz
Y29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DTE9T
RUQ6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2xvc2VkOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ0ljZVRy
YW5zcG9ydFN0YXRlOjpOZXc7Cit9CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlR2F0aGVyaW5nU3Rh
dGUgdG9SVENJY2VHYXRoZXJpbmdTdGF0ZShHc3RXZWJSVENJQ0VHYXRoZXJpbmdTdGF0ZSBzdGF0
ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9HQVRI
RVJJTkdfU1RBVEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDSWNlR2F0aGVyaW5nU3RhdGU6Ok5l
dzsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9HQVRIRVJJTkc6Cisg
ICAgICAgIHJldHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6R2F0aGVyaW5nOworICAgIGNhc2Ug
R1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX0NPTVBMRVRFOgorICAgICAgICByZXR1cm4g
UlRDSWNlR2F0aGVyaW5nU3RhdGU6OkNvbXBsZXRlOworICAgIH0KKworICAgIFJFTEVBU0VfQVNT
RVJUX05PVF9SRUFDSEVEKCk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR3N0V2ViUlRDQnVuZGxlUG9s
aWN5IGJ1bmRsZVBvbGljeUZyb21Db25maWd1cmF0aW9uKGNvbnN0IE1lZGlhRW5kcG9pbnRDb25m
aWd1cmF0aW9uJiBjb25maWd1cmF0aW9uKQoreworICAgIHN3aXRjaCAoY29uZmlndXJhdGlvbi5i
dW5kbGVQb2xpY3kpIHsKKyAgICBjYXNlIFJUQ0J1bmRsZVBvbGljeTo6QmFsYW5jZWQ6CisgICAg
ICAgIHJldHVybiBHU1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfQkFMQU5DRUQ7CisgICAgY2FzZSBS
VENCdW5kbGVQb2xpY3k6Ok1heENvbXBhdDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVO
RExFX1BPTElDWV9NQVhfQ09NUEFUOworICAgIGNhc2UgUlRDQnVuZGxlUG9saWN5OjpNYXhCdW5k
bGU6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfTUFYX0JVTkRMRTsK
KyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBH
U1RfV0VCUlRDX0JVTkRMRV9QT0xJQ1lfTk9ORTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJS
VENJQ0VUcmFuc3BvcnRQb2xpY3kgaWNlVHJhbnNwb3J0UG9saWN5RnJvbUNvbmZpZ3VyYXRpb24o
Y29uc3QgTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAg
c3dpdGNoIChjb25maWd1cmF0aW9uLmljZVRyYW5zcG9ydFBvbGljeSkgeworICAgIGNhc2UgUlRD
SWNlVHJhbnNwb3J0UG9saWN5OjpBbGw6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0lDRV9U
UkFOU1BPUlRfUE9MSUNZX0FMTDsKKyAgICBjYXNlIFJUQ0ljZVRyYW5zcG9ydFBvbGljeTo6UmVs
YXk6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX0lDRV9UUkFOU1BPUlRfUE9MSUNZX1JFTEFZ
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IEdTVF9XRUJSVENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lfQUxMOworfQorCitzdGF0aWMgaW5saW5l
IHN0ZDo6b3B0aW9uYWw8UlRDRXJyb3JEZXRhaWxUeXBlPiB0b1JUQ0Vycm9yRGV0YWlsVHlwZShH
c3RXZWJSVENFcnJvciBjb2RlKQoreworICAgIHN3aXRjaCAoY29kZSkgeworICAgIGNhc2UgR1NU
X1dFQlJUQ19FUlJPUl9EQVRBX0NIQU5ORUxfRkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vy
cm9yRGV0YWlsVHlwZTo6RGF0YUNoYW5uZWxGYWlsdXJlOworICAgIGNhc2UgR1NUX1dFQlJUQ19F
UlJPUl9EVExTX0ZBSUxVUkU6CisgICAgICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OkR0
bHNGYWlsdXJlOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9GSU5HRVJQUklOVF9GQUlMVVJF
OgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRhaWxUeXBlOjpGaW5nZXJwcmludEZhaWx1cmU7
CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX1NDVFBfRkFJTFVSRToKKyAgICAgICAgcmV0dXJu
IFJUQ0Vycm9yRGV0YWlsVHlwZTo6U2N0cEZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VS
Uk9SX1NEUF9TWU5UQVhfRVJST1I6CisgICAgICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6
OlNkcFN5bnRheEVycm9yOworICAgIGNhc2UgR1NUX1dFQlJUQ19FUlJPUl9IQVJEV0FSRV9FTkNP
REVSX05PVF9BVkFJTEFCTEU6CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0VOQ09ERVJfRVJS
T1I6CisgICAgICAgIC8vIEZJWE1FCisgICAgZGVmYXVsdDoKKyAgICAgICAgcmV0dXJuIHsgfTsK
KyAgICB9OworfQorCitSZWZQdHI8UlRDRXJyb3I+IHRvUlRDRXJyb3IoR0Vycm9yKik7CisKK0dV
bmlxdWVQdHI8R3N0U3RydWN0dXJlPiBmcm9tUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKGNvbnN0IFJU
Q1J0cEVuY29kaW5nUGFyYW1ldGVycyYpOworUlRDUnRwU2VuZFBhcmFtZXRlcnMgdG9SVENSdHBT
ZW5kUGFyYW1ldGVycyhjb25zdCBHc3RTdHJ1Y3R1cmUqKTsKKworc3RkOjpvcHRpb25hbDxSZWY8
UlRDQ2VydGlmaWNhdGU+PiBnZW5lcmF0ZUNlcnRpZmljYXRlKFJlZjxTZWN1cml0eU9yaWdpbj4m
JiwgY29uc3QgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uJik7
CisKK2Jvb2wgc2RwTWVkaWFIYXNBdHRyaWJ1dGVLZXkoY29uc3QgR3N0U0RQTWVkaWEqLCBjb25z
dCBjaGFyKiBrZXkpOworCit9CisjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL0dTdHJlYW1lci5jbWFrZSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0dTdHJlYW1l
ci5jbWFrZQppbmRleCBiM2RjY2NiZDk3NGM4Nzc3MWZhY2Y1OWEzOTZkNGY0MDgxNjBjYzU5Li43
NGY1YjYxOWJmMTIxZDhiNTQxYjJiOTNjOWI5MTNiOWUwMWY2YjNkIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9HU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlCkBAIC0xLDUgKzEsNiBAQAogaWYgKEVOQUJMRV9WSURF
TyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfUFJJVkFURV9J
TkNMVURFX0RJUkVDVE9SSUVTCisgICAgICAgICIke1dFQkNPUkVfRElSfS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lciIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lciIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9tc2UiCiAgICAgICAgICIke1dFQkNPUkVfRElSfS9wbGF0Zm9ybS9ncmFwaGlj
cy9nc3RyZWFtZXIvZW1lIgpAQCAtNyw3ICs4LDIzIEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5B
QkxFX1dFQl9BVURJTykKICAgICApCiAKICAgICBsaXN0KEFQUEVORCBXZWJDb3JlX1NPVVJDRVMK
KyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKKyAg
ICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAg
ICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRw
U2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcAorICAgICAgICBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNw
cAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJh
bnNwb3J0QmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcAorCiAgICAgICAgIE1vZHVsZXMvd2Vi
YXVkaW8vTWVkaWFTdHJlYW1BdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKKwogICAgICAgICBwbGF0
Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvQXVkaW9UcmFja1ByaXZhdGVHU3RyZWFtZXIuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9ETUFCdWZWaWRlb1NpbmtHU3RyZWFt
ZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HTFZpZGVvU2lua0dT
dHJlYW1lci5jcHAKQEAgLTY1LDYgKzgyLDcgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVf
V0VCX0FVRElPKQogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyQXVkaW9DYXB0dXJlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckNhcHR1cmVEZXZpY2VNYW5hZ2VyLmNwcAogICAgICAgICBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCisgICAgICAgIHBsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAK
ICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRpc3BsYXlD
YXB0dXJlRGV2aWNlTWFuYWdlci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAogICAgICAgICBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9DYXB0dXJlU291cmNlLmNwcApAQCAt
NzIsNyArOTAsMTMgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAg
ICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVy
LmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvTW9ja1JlYWx0aW1l
QXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9Nb2NrUmVhbHRpbWVWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU1lZGlhU291cmNl
Q2VudGVyR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0
Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcAogICAgICkKIAogICAgIGxpc3QoQVBQ
RU5EIFdlYkNvcmVfUFJJVkFURV9GUkFNRVdPUktfSEVBREVSUwpAQCAtMTYyLDcgKzE4Niw3IEBA
IGlmIChFTkFCTEVfVklERU8pCiAgICAgICAgICkKICAgICBlbmRpZiAoKQogCi0gICAgaWYgKEVO
QUJMRV9NRURJQV9TVFJFQU0gT1IgRU5BQkxFX1dFQl9SVEMpCisgICAgaWYgKFVTRV9MSUJXRUJS
VEMpCiAgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJ
RVMKICAgICAgICAgICAgICR7R1NUUkVBTUVSX0NPREVDUEFSU0VSU19JTkNMVURFX0RJUlN9CiAg
ICAgICAgICkKQEAgLTE3MSw2ICsxOTUsMjEgQEAgaWYgKEVOQUJMRV9WSURFTykKICAgICAgICAg
ICAgICAgICAke0dTVFJFQU1FUl9DT0RFQ1BBUlNFUlNfTElCUkFSSUVTfQogICAgICAgICAgICAg
KQogICAgICAgICBlbmRpZiAoKQorICAgIGVsc2VpZiAoVVNFX0dTVFJFQU1FUl9XRUJSVEMpCisg
ICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU1lTVEVNX0lOQ0xVREVfRElSRUNUT1JJRVMKKyAg
ICAgICAgICAgICR7R1NUUkVBTUVSX1JUUF9JTkNMVURFX0RJUlN9CisgICAgICAgICAgICAke0dT
VFJFQU1FUl9TRFBfSU5DTFVERV9ESVJTfQorICAgICAgICAgICAgJHtHU1RSRUFNRVJfV0VCUlRD
X0lOQ0xVREVfRElSU30KKyAgICAgICAgKQorICAgICAgICBpZiAoTk9UIFVTRV9HU1RSRUFNRVJf
RlVMTCkKKyAgICAgICAgICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfTElCUkFSSUVTCisgICAgICAg
ICAgICAgICAgJHtHU1RSRUFNRVJfUlRQX0xJQlJBUklFU30KKyAgICAgICAgICAgICAgICAke0dT
VFJFQU1FUl9TRFBfTElCUkFSSUVTfQorICAgICAgICAgICAgICAgICR7R1NUUkVBTUVSX1dFQlJU
Q19MSUJSQVJJRVN9CisgICAgICAgICAgICApCisgICAgICAgIGVuZGlmICgpCisKKyAgICAgICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMgT3BlblNTTDo6Q3J5cHRvKQogICAgIGVuZGlm
ICgpCiBlbmRpZiAoKQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRp
by9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1l
ci5jcHAKaW5kZXggYjRkNWY2NzAzZTkyOWVkZjE3ZjEwOWVmNjQ4MTMwYWNlMDM4Y2FjNC4uYTFh
Y2U5NzYxZGEyY2UyYWFkNDY0MjFiOWJlNmRmOGQzYTllNTQ5MSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291cmNlUHJvdmlkZXJHU3Ry
ZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9B
dWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcApAQCAtMTAwLDEwICsxMDAsNTggQEAgQXVk
aW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcihN
ZWRpYVN0cmVhbVRyYWNrUHJpdmEKIAogICAgIG1fYXVkaW9TaW5rQmluID0gZ3N0X3BhcnNlX2Jp
bl9mcm9tX2Rlc2NyaXB0aW9uKCJ0ZWUgbmFtZT1hdWRpb1RlZSIsIHRydWUsIG51bGxwdHIpOwog
Ci0gICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9waXBlbGluZS5nZXQoKSksIHNy
YywgbV9hdWRpb1NpbmtCaW4uZ2V0KCksIG51bGxwdHIpOwotICAgIGdzdF9lbGVtZW50X2xpbmso
c3JjLCBtX2F1ZGlvU2lua0Jpbi5nZXQoKSk7CisgICAgYXV0byogZGVjb2RlYmluID0gbWFrZUdT
dHJlYW1lckVsZW1lbnQoImRlY29kZWJpbjMiLCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9jb25u
ZWN0X3N3YXBwZWQoZGVjb2RlYmluLCAicGFkLWFkZGVkIiwgR19DQUxMQkFDSygrW10oQXVkaW9T
b3VyY2VQcm92aWRlckdTdHJlYW1lciogcHJvdmlkZXIsIEdzdFBhZCogcGFkKSB7CisgICAgICAg
IGF1dG8gcGFkQ2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX3F1ZXJ5X2NhcHMocGFkLCBudWxscHRy
KSk7CisgICAgICAgIGJvb2wgaXNBdWRpbyA9IGRvQ2Fwc0hhdmVUeXBlKHBhZENhcHMuZ2V0KCks
ICJhdWRpbyIpOworICAgICAgICBpZiAod2Via2l0R3N0Q2hlY2tWZXJzaW9uKDEsIDE4LCAwKSkK
KyAgICAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGlzQXVkaW8pOworICAgICAgICBlbHNlIGlmICgh
aXNBdWRpbykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBhdXRvIHNpbmtQYWQgPSBh
ZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQocHJvdmlkZXItPm1fYXVkaW9TaW5r
QmluLmdldCgpLCAic2luayIpKTsKKyAgICAgICAgZ3N0X3BhZF9saW5rKHBhZCwgc2lua1BhZC5n
ZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocHJvdmlk
ZXItPm1fYXVkaW9TaW5rQmluLmdldCgpKTsKKyAgICB9KSwgdGhpcyk7CisKKyAgICBnc3RfYmlu
X2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgc3JjLCBkZWNvZGViaW4s
IG1fYXVkaW9TaW5rQmluLmdldCgpLCBudWxscHRyKTsKKyAgICBnc3RfZWxlbWVudF9saW5rKHNy
YywgZGVjb2RlYmluKTsKKworICAgIGF1dG8gYnVzID0gYWRvcHRHUmVmKGdzdF9waXBlbGluZV9n
ZXRfYnVzKEdTVF9QSVBFTElORShtX3BpcGVsaW5lLmdldCgpKSkpOworICAgIEFTU0VSVChidXMp
OworCisgICAgZ3N0X2J1c19zZXRfc3luY19oYW5kbGVyKGJ1cy5nZXQoKSwgW10oR3N0QnVzKiwg
R3N0TWVzc2FnZSogbWVzc2FnZSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IEdzdEJ1c1N5bmNSZXBs
eSB7CisgICAgICAgIGF1dG8qIGRlY29kZWJpbiA9IEdTVF9FTEVNRU5UX0NBU1QodXNlckRhdGEp
OworICAgICAgICBpZiAoR1NUX01FU1NBR0VfVFlQRShtZXNzYWdlKSAhPSBHU1RfTUVTU0FHRV9T
VFJFQU1fQ09MTEVDVElPTiB8fCBHU1RfTUVTU0FHRV9TUkMobWVzc2FnZSkgIT0gR1NUX09CSkVD
VF9DQVNUKGRlY29kZWJpbikpIHsKKyAgICAgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmKG1lc3Nh
Z2UpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAgICAgICAgfQorCisgICAg
ICAgIEdSZWZQdHI8R3N0U3RyZWFtQ29sbGVjdGlvbj4gY29sbGVjdGlvbjsKKyAgICAgICAgZ3N0
X21lc3NhZ2VfcGFyc2Vfc3RyZWFtX2NvbGxlY3Rpb24obWVzc2FnZSwgJmNvbGxlY3Rpb24ub3V0
UHRyKCkpOworICAgICAgICBpZiAoIWNvbGxlY3Rpb24pIHsKKyAgICAgICAgICAgIGdzdF9tZXNz
YWdlX3VucmVmKG1lc3NhZ2UpOworICAgICAgICAgICAgcmV0dXJuIEdTVF9CVVNfRFJPUDsKKyAg
ICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHNpemUgPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25f
Z2V0X3NpemUoY29sbGVjdGlvbi5nZXQoKSk7CisgICAgICAgIEdMaXN0KiBzdHJlYW1zID0gbnVs
bHB0cjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IHNpemU7IGkrKykgeworICAg
ICAgICAgICAgYXV0byogc3RyZWFtID0gZ3N0X3N0cmVhbV9jb2xsZWN0aW9uX2dldF9zdHJlYW0o
Y29sbGVjdGlvbi5nZXQoKSwgaSk7CisgICAgICAgICAgICBhdXRvIHN0cmVhbVR5cGUgPSBnc3Rf
c3RyZWFtX2dldF9zdHJlYW1fdHlwZShzdHJlYW0pOworICAgICAgICAgICAgaWYgKHN0cmVhbVR5
cGUgPT0gR1NUX1NUUkVBTV9UWVBFX0FVRElPKSB7CisgICAgICAgICAgICAgICAgc3RyZWFtcyA9
IGdfbGlzdF9hcHBlbmQoc3RyZWFtcywgY29uc3RfY2FzdDxjaGFyKj4oZ3N0X3N0cmVhbV9nZXRf
c3RyZWFtX2lkKHN0cmVhbSkpKTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgICBpZiAoc3RyZWFtcykgeworICAgICAgICAgICAgZ3N0X2Vs
ZW1lbnRfc2VuZF9ldmVudChkZWNvZGViaW4sIGdzdF9ldmVudF9uZXdfc2VsZWN0X3N0cmVhbXMo
c3RyZWFtcykpOworICAgICAgICAgICAgZ19saXN0X2ZyZWUoc3RyZWFtcyk7CisgICAgICAgIH0K
IAotICAgIGNvbm5lY3RTaW1wbGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5nZXQoKSk7
CisgICAgICAgIGdzdF9tZXNzYWdlX3VucmVmKG1lc3NhZ2UpOworICAgICAgICByZXR1cm4gR1NU
X0JVU19EUk9QOworICAgIH0sIGdzdF9vYmplY3RfcmVmKGRlY29kZWJpbiksIGdzdF9vYmplY3Rf
dW5yZWYpOwogfQogI2VuZGlmCiAKQEAgLTEyMCwxMCArMTY4LDggQEAgQXVkaW9Tb3VyY2VQcm92
aWRlckdTdHJlYW1lcjo6fkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIoKQogCiAgICAgc2V0
Q2xpZW50KG51bGxwdHIpOwogI2lmIEVOQUJMRShNRURJQV9TVFJFQU0pCi0gICAgaWYgKG1fcGlw
ZWxpbmUpIHsKLSAgICAgICAgZGlzY29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3Bp
cGVsaW5lLmdldCgpKTsKKyAgICBpZiAobV9waXBlbGluZSkKICAgICAgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9OVUxMKTsKLSAgICB9CiAjZW5k
aWYKIH0KIApAQCAtMzQ1LDcgKzM5MSw2IEBAIHZvaWQgQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJl
YW1lcjo6aGFuZGxlTmV3RGVpbnRlcmxlYXZlUGFkKEdzdFBhZCogcGFkKQogCiAgICAgR1F1YXJr
IHF1YXJrID0gZ19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoInBlZXIiKTsKICAgICBnX29iamVj
dF9zZXRfcWRhdGEoR19PQkpFQ1QocGFkKSwgcXVhcmssIHNpbmtQYWQuZ2V0KCkpOwotCiAgICAg
bV9kZWludGVybGVhdmVTb3VyY2VQYWRzKys7CiAgICAgR1F1YXJrIGNoYW5uZWxJZFF1YXJrID0g
Z19xdWFya19mcm9tX3N0YXRpY19zdHJpbmcoImNoYW5uZWwtaWQiKTsKICAgICBnX29iamVjdF9z
ZXRfcWRhdGEoR19PQkpFQ1Qoc2luayksIGNoYW5uZWxJZFF1YXJrLCBHSU5UX1RPX1BPSU5URVIo
bV9kZWludGVybGVhdmVTb3VyY2VQYWRzKSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24uaAppbmRleCA2ZjI4ODcyYWZiMTE3NmU1MTNkMmJkZjU1YTYyMjFk
NGY2ZmIwYWU3Li5kZDMxM2IzMTQyNDA2Y2FmNTc5NGVhYzdjYzJhZjhkNjRlNTQ1YWEyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVy
QXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1
ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgKQEAgLTMyLDE5
ICszMiwxNiBAQCBjbGFzcyBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGZpbmFsOiBw
dWJsaWMgQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiB7CiBwdWJsaWM6CiAgICAgR1N0cmVhbWVyQXVk
aW9TdHJlYW1EZXNjcmlwdGlvbihHc3RBdWRpb0luZm8mJiBpbmZvKQogICAgICAgICA6IG1faW5m
byhXVEZNb3ZlKGluZm8pKQotICAgICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2lu
Zm9fdG9fY2FwcygmbV9pbmZvKSkpCiAgICAgewogICAgIH0KIAogICAgIEdTdHJlYW1lckF1ZGlv
U3RyZWFtRGVzY3JpcHRpb24oY29uc3QgR3N0QXVkaW9JbmZvJiBpbmZvKQogICAgICAgICA6IG1f
aW5mbyhpbmZvKQotICAgICAgICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9f
Y2FwcygmbV9pbmZvKSkpCiAgICAgewogICAgIH0KIAogICAgIEdTdHJlYW1lckF1ZGlvU3RyZWFt
RGVzY3JpcHRpb24oR3N0QXVkaW9JbmZvKiBpbmZvKQogICAgICAgICA6IG1faW5mbygqaW5mbykK
LSAgICAgICAgLCBtX2NhcHMoYWRvcHRHUmVmKGdzdF9hdWRpb19pbmZvX3RvX2NhcHMoJm1faW5m
bykpKQogICAgIHsKICAgICB9CiAKQEAgLTk5LDcgKzk2LDEyIEBAIHB1YmxpYzoKICAgICBib29s
IG9wZXJhdG9yPT0oY29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYgb3RoZXIp
IHsgcmV0dXJuIGdzdF9hdWRpb19pbmZvX2lzX2VxdWFsKCZtX2luZm8sICZvdGhlci5tX2luZm8p
OyB9CiAgICAgYm9vbCBvcGVyYXRvciE9KGNvbnN0IEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3Jp
cHRpb24mIG90aGVyKSB7IHJldHVybiAhb3BlcmF0b3IgPT0gKG90aGVyKTsgfQogCi0gICAgY29u
c3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcygpIGNvbnN0IHsgcmV0dXJuIG1fY2FwczsgfQorICAg
IGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mIGNhcHMoKQorICAgIHsKKyAgICAgICAgaWYgKCFtX2Nh
cHMpCisgICAgICAgICAgICBtX2NhcHMgPSBhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2Fw
cygmbV9pbmZvKSk7CisgICAgICAgIHJldHVybiBtX2NhcHM7CisgICAgfQogICAgIGNvbnN0IEdz
dEF1ZGlvSW5mbyYgZ2V0SW5mbygpIGNvbnN0IHsgcmV0dXJuIG1faW5mbzsgfQogCiBwcml2YXRl
OgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dSZWZQdHJHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Z3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuY3BwCmluZGV4IDMxMGJlYWQ3MmE0OGNiZGIzMzBi
NDUzN2VlMDEwNjJhYTdiMmQwMDguLmQxNmI3YzBiMDU5NTRhZTZmMDdlNzM5M2M2MWVkZmMxZWE1
MzgzMmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKQEAgLTI3LDYgKzI3LDEyIEBA
CiAjaW5jbHVkZSA8Z3N0L2dsL2VnbC9nc3RlZ2xpbWFnZS5oPgogI2VuZGlmCiAKKyNpZiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNsdWRl
IDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjZW5k
aWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RNaW5pT2JqZWN0
PiBhZG9wdEdSZWYoR3N0TWluaU9iamVjdCogcHRyKQpAQCAtNTg0LDEzICs1OTAsMTUwIEBAIEdz
dEVuY29kaW5nUHJvZmlsZSogcmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5n
UHJvZmlsZSogcHRyKQogICAgIHJldHVybiBwdHI7CiB9CiAKLXRlbXBsYXRlIDw+Cit0ZW1wbGF0
ZTw+CiB2b2lkIGRlcmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmls
ZSogcHRyKQogewogICAgIGlmIChwdHIpCiAgICAgICAgIGdzdF9lbmNvZGluZ19wcm9maWxlX3Vu
cmVmKHB0cik7CiB9CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwordGVtcGxhdGUgPD4g
R1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFJlY2Vp
dmVyKiBwdHIpCit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KHB0
ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQUmVjZWl2ZXIq
IHJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIp
Cit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIp
KTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdz
dFdlYlJUQ1JUUFJlY2VpdmVyPihHc3RXZWJSVENSVFBSZWNlaXZlciogcHRyKQoreworICAgIGlm
IChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsKK30KKwordGVtcGxhdGUgPD4g
R1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBTZW5kZXIq
IHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+KHB0ciwgR1Jl
ZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQU2VuZGVyKiByZWZHUHRy
PEdzdFdlYlJUQ1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7CisgICAgaWYg
KHB0cikKKyAgICAgICAgZ3N0X29iamVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJl
dHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFNl
bmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAg
Z3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJU
Q1JUUFRyYW5zY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikK
K3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4ocHRyLCBHUmVm
UHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcmVm
R1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0
cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0
cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8
R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBwdHIpCit7
CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1w
bGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBhZG9wdEdSZWYoR3N0V2ViUlRD
RGF0YUNoYW5uZWwqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hh
bm5lbD4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEYXRh
Q2hhbm5lbCogcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5u
ZWwqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnX29iamVjdF9yZWYoR19PQkpFQ1Qo
cHRyKSk7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0
cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRDRGF0YUNoYW5uZWwqIHB0cikKK3sKKyAg
ICBpZiAocHRyKQorICAgICAgICBnX29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8
PiBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJSVENEVExT
VHJhbnNwb3J0KiBwdHIpCit7CisgICAgcmV0dXJuIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5z
cG9ydD4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEVExT
VHJhbnNwb3J0KiByZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNU
cmFuc3BvcnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihH
U1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9p
ZCBkZXJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9y
dCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfdW5yZWYocHRyKTsK
K30KKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IGFkb3B0R1Jl
ZihHc3RXZWJSVENJQ0VUcmFuc3BvcnQqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RX
ZWJSVENJQ0VUcmFuc3BvcnQ+KHB0ciwgR1JlZlB0ckFkb3B0KTsKK30KKwordGVtcGxhdGUgPD4g
R3N0V2ViUlRDSUNFVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0
V2ViUlRDSUNFVHJhbnNwb3J0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29i
amVjdF9yZWYoR1NUX09CSkVDVChwdHIpKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBs
YXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRDSUNF
VHJhbnNwb3J0KiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJl
ZihwdHIpOworfQorCit0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0UHJvbWlzZT4gYWRvcHRHUmVmKEdz
dFByb21pc2UqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RQcm9taXNlPihwdHIsIEdS
ZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlPD4gR3N0UHJvbWlzZSogcmVmR1B0cjxHc3RQcm9t
aXNlPihHc3RQcm9taXNlKiBwdHIpCit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X3Byb21p
c2VfcmVmKHB0cik7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZTw+IHZvaWQgZGVy
ZWZHUHRyPEdzdFByb21pc2U+KEdzdFByb21pc2UqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAg
ICAgICBnc3RfcHJvbWlzZV91bnJlZihwdHIpOworfQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKIH0gLy8gbmFtZXNwYWNlIFdURgogCiAjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
UikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HUmVmUHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
c3RyZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCmluZGV4IDdhMGI1YTExZGRmYTgxNjcwOTY4OGU4
MTM2NmRiN2I1YjM1ZDNhNDEuLmY5ZGVhZWRmNTBmZWI5NTM4OGQyNWY3MzBkYmRjNjgyZmM0ZWFh
MWQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HUmVmUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvZ3N0cmVhbWVyL0dSZWZQdHJHU3RyZWFtZXIuaApAQCAtMzQsNiArMzQsMTYgQEAgdHlwZWRl
ZiBzdHJ1Y3QgX0dzdEdMQ29udGV4dCBHc3RHTENvbnRleHQ7CiB0eXBlZGVmIHN0cnVjdCBfR3N0
RUdMSW1hZ2UgR3N0RUdMSW1hZ2U7CiAjZW5kaWYKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQordHlwZWRlZiBzdHJ1Y3QgX0dzdFByb21pc2UgR3N0UHJvbWlzZTsKK3R5cGVkZWYgc3RydWN0
IF9Hc3RXZWJSVENEVExTVHJhbnNwb3J0IEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ7Cit0eXBlZGVm
IHN0cnVjdCBfR3N0V2ViUlRDRGF0YUNoYW5uZWwgR3N0V2ViUlRDRGF0YUNoYW5uZWw7Cit0eXBl
ZGVmIHN0cnVjdCBfR3N0V2ViUlRDSUNFVHJhbnNwb3J0IEdzdFdlYlJUQ0lDRVRyYW5zcG9ydDsK
K3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENSVFBSZWNlaXZlciBHc3RXZWJSVENSVFBSZWNlaXZl
cjsKK3R5cGVkZWYgc3RydWN0IF9Hc3RXZWJSVENSVFBTZW5kZXIgR3N0V2ViUlRDUlRQU2VuZGVy
OwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyIEdzdFdlYlJUQ1JUUFRy
YW5zY2VpdmVyOworI2VuZGlmCisKIG5hbWVzcGFjZSBXVEYgewogCiB0ZW1wbGF0ZTw+IEdSZWZQ
dHI8R3N0UGx1Z2luPiBhZG9wdEdSZWYoR3N0UGx1Z2luKiBwdHIpOwpAQCAtMTUxLDYgKzE2MSwz
NiBAQCB0ZW1wbGF0ZTw+IEdSZWZQdHI8R3N0RW5jb2RpbmdQcm9maWxlPiBhZG9wdEdSZWYoR3N0
RW5jb2RpbmdQcm9maWxlKik7CiB0ZW1wbGF0ZTw+IEdzdEVuY29kaW5nUHJvZmlsZSogcmVmR1B0
cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmlsZSopOwogdGVtcGxhdGU8PiB2
b2lkIGRlcmVmR1B0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+KEdzdEVuY29kaW5nUHJvZmlsZSopOwog
CisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJU
Q1JUUFJlY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQUmVjZWl2ZXIqKTsKK3RlbXBsYXRl
IDw+IEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiByZWZHUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPihH
c3RXZWJSVENSVFBSZWNlaXZlciopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2Vi
UlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKik7CisKK3RlbXBsYXRlIDw+IEdS
ZWZQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQU2VuZGVyKik7
Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBTZW5kZXIqIHJlZkdQdHI8R3N0V2ViUlRDUlRQU2Vu
ZGVyPihHc3RXZWJSVENSVFBTZW5kZXIqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdz
dFdlYlJUQ1JUUFNlbmRlcj4oR3N0V2ViUlRDUlRQU2VuZGVyKik7CisKK3RlbXBsYXRlIDw+IEdS
ZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBUcmFu
c2NlaXZlciopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHJlZkdQdHI8
R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+KEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKik7Cit0ZW1w
bGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRD
UlRQVHJhbnNjZWl2ZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hh
bm5lbD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RhdGFDaGFubmVsKik7Cit0ZW1wbGF0ZSA8PiBHc3RX
ZWJSVENEYXRhQ2hhbm5lbCogcmVmR1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4oR3N0V2ViUlRD
RGF0YUNoYW5uZWwqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ0RhdGFD
aGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCopOworCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdz
dFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IGFkb3B0R1JlZihHc3RXZWJSVENEVExTVHJhbnNwb3J0Kik7
Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENEVExTVHJhbnNwb3J0KiByZWZHUHRyPEdzdFdlYlJUQ0RU
TFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+IHZvaWQg
ZGVyZWZHUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+KEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQq
KTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+IGFkb3B0R1Jl
ZihHc3RXZWJSVENJQ0VUcmFuc3BvcnQqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0lDRVRyYW5z
cG9ydCogcmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KEdzdFdlYlJUQ0lDRVRyYW5zcG9y
dCopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihH
c3RXZWJSVENJQ0VUcmFuc3BvcnQqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxHc3RQcm9taXNl
PiBhZG9wdEdSZWYoR3N0UHJvbWlzZSopOwordGVtcGxhdGUgPD4gR3N0UHJvbWlzZSogcmVmR1B0
cjxHc3RQcm9taXNlPihHc3RQcm9taXNlKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxH
c3RQcm9taXNlPihHc3RQcm9taXNlKik7CisjZW5kaWYKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAK
ICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAppbmRl
eCBlMGE2ZjkwZDdjN2YzMzA5MjJjYjNmZGE1ZmI1YTc3OGUyNThiZjk4Li45Y2ExYzU4MmI5OWYw
NGNmN2Y4ZGM2NjQ5NGNiYjZjNzg0MTAwZWFjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNw
cApAQCAtMTg4LDYgKzE4OCw5IEBAIGNvbnN0IGNoYXIqIGNhcHNNZWRpYVR5cGUoY29uc3QgR3N0
Q2FwcyogY2FwcykKICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJh
cHBsaWNhdGlvbi94LWNlbmMiKSB8fCBnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwg
ImFwcGxpY2F0aW9uL3gtY2JjcyIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJl
LCAiYXBwbGljYXRpb24veC13ZWJtLWVuYyIpKQogICAgICAgICByZXR1cm4gZ3N0X3N0cnVjdHVy
ZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgIm9yaWdpbmFsLW1lZGlhLXR5cGUiKTsKICNlbmRpZgor
ICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gt
cnRwIikpCisgICAgICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJl
LCAibWVkaWEiKTsKKwogICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9uYW1lKHN0cnVjdHVy
ZSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dz
dHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oCmluZGV4IGJmNzRlY2YwMmNj
MjJmNjA2ZWJjYjlmZTg1YzAzNGIyNmM0MDY0NDEuLmU1MjQ3MWNhN2VhNjJhMzE1OGM1MjMzMzYw
NjM1MmVjNjMxNTJhMzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmgKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaApAQCAtMzAs
NiArMzAsMTIgQEAKICNpbmNsdWRlIDxnc3QvdmlkZW8vdmlkZW8uaD4KICNpbmNsdWRlIDx3dGYv
Z2xpYi9HVW5pcXVlUHRyLmg+CiAKKyNpZiBkZWZpbmVkKEJVSUxESU5HX1dlYkNvcmUpICYmIFVT
RShHU1RSRUFNRVJfV0VCUlRDKQorI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1
ZGUgPGdzdC93ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNl
bmRpZgorCiAjaWYgVVNFKFdQRV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRikKICNpbmNsdWRl
IDx3cGUvZXh0ZW5zaW9ucy92aWRlby1wbGFuZS1kaXNwbGF5LWRtYWJ1Zi5oPgogI2VuZGlmCkBA
IC00OSw2ICs1NSwxMCBAQCBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihHc3RCeXRlUmVhZGVyLCBn
c3RfYnl0ZV9yZWFkZXJfZnJlZSkKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdFZpZGVvQ29u
dmVydGVyLCBnc3RfdmlkZW9fY29udmVydGVyX2ZyZWUpCiBXVEZfREVGSU5FX0dQVFJfREVMRVRF
UihHc3RBdWRpb0NvbnZlcnRlciwgZ3N0X2F1ZGlvX2NvbnZlcnRlcl9mcmVlKQogCisjaWYgZGVm
aW5lZChCVUlMRElOR19XZWJDb3JlKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKK1dURl9ERUZJ
TkVfR1BUUl9ERUxFVEVSKEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbiwgZ3N0X3dlYnJ0Y19z
ZXNzaW9uX2Rlc2NyaXB0aW9uX2ZyZWUpCisjZW5kaWYKKwogI2lmIFVTRShXUEVfVklERU9fUExB
TkVfRElTUExBWV9ETUFCVUYpCiBXVEZfREVGSU5FX0dQVFJfREVMRVRFUihzdHJ1Y3Qgd3BlX3Zp
ZGVvX3BsYW5lX2Rpc3BsYXlfZG1hYnVmX3NvdXJjZSwgd3BlX3ZpZGVvX3BsYW5lX2Rpc3BsYXlf
ZG1hYnVmX3NvdXJjZV9kZXN0cm95KQogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5j
cHAKaW5kZXggZWMzMmJhODVjY2Y4NDcyNTM4MzUyNjgxODU5YzQwNzdlYmQ0OTkyZC4uMTgyNjZm
MTIyYzRiMTg2NzRhMWY3OWJhYjkxZjA1NDk2N2ZjYjcwMCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlLmNwcApAQCAtMzgsNyArMzgsNyBAQAogCiAjaWYgUExBVEZPUk0oQ09DT0EpCiAjaW5j
bHVkZSAiTWVkaWFTdHJlYW1UcmFja0F1ZGlvU291cmNlUHJvdmlkZXJDb2NvYS5oIgotI2VsaWYg
RU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKE1FRElBX1NUUkVBTSkgJiYgVVNFKExJQldFQlJU
QykgJiYgVVNFKEdTVFJFQU1FUikKKyNlbGlmIEVOQUJMRShXRUJfQVVESU8pICYmIEVOQUJMRShN
RURJQV9TVFJFQU0pICYmIFVTRShHU1RSRUFNRVIpCiAjaW5jbHVkZSAiQXVkaW9Tb3VyY2VQcm92
aWRlckdTdHJlYW1lci5oIgogI2Vsc2UKICNpbmNsdWRlICJXZWJBdWRpb1NvdXJjZVByb3ZpZGVy
LmgiCkBAIC0xOTksNyArMTk5LDcgQEAgUmVmUHRyPFdlYkF1ZGlvU291cmNlUHJvdmlkZXI+IE1l
ZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGVBdWRpb1NvdXJjZVByb3ZpZGUKIAogI2lmIFBM
QVRGT1JNKENPQ09BKQogICAgIHJldHVybiBNZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VQcm92
aWRlckNvY29hOjpjcmVhdGUoKnRoaXMpOwotI2VsaWYgVVNFKExJQldFQlJUQykgJiYgVVNFKEdT
VFJFQU1FUikKKyNlbGlmIFVTRShHU1RSRUFNRVIpCiAgICAgcmV0dXJuIEF1ZGlvU291cmNlUHJv
dmlkZXJHU3RyZWFtZXI6OmNyZWF0ZSgqdGhpcyk7CiAjZWxzZQogICAgIHJldHVybiBudWxscHRy
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCmluZGV4IDI2
ZWU0MjYzYjlkYjg3ODFkYmFlNjFlMWEzMDEyZWY3ZGM3MDk3MjUuLjM1ZTY1YzBlYjBiZDQ4MWQz
Zjg1YTlkZDA1YjY2YmY5NTY5MGU3ZTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0NhcHR1cmVyLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
QXVkaW9DYXB0dXJlci5jcHAKQEAgLTI5LDI5ICsyOSw0NiBAQAogI2luY2x1ZGUgIkxpYldlYlJU
Q0F1ZGlvRm9ybWF0LmgiCiAjZW5kaWYKIAotI2luY2x1ZGUgPGdzdC9hcHAvZ3N0YXBwc2luay5o
PgotCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKICNpZiBVU0UoTElCV0VCUlRDKQotc3RhdGljIGNv
bnN0ZXhwciBzaXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IExpYldlYlJUQ0F1ZGlvRm9y
bWF0OjpzYW1wbGVSYXRlOworc3RhdGljIGNvbnN0ZXhwciBzaXplX3Qgc19hdWRpb0NhcHR1cmVT
YW1wbGVSYXRlID0gTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNhbXBsZVJhdGU7CiAjZWxzZQotc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3QgQXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSA9IDQ4MDAwOworc3Rh
dGljIGNvbnN0ZXhwciBzaXplX3Qgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gNDgwMDA7CiAj
ZW5kaWYKIAogR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0dXJlcihH
U3RyZWFtZXJDYXB0dXJlRGV2aWNlIGRldmljZSkKLSAgICA6IEdTdHJlYW1lckNhcHR1cmVyKGRl
dmljZSwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUi
LCBHX1RZUEVfSU5ULCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSkpCisgICAgOiBH
U3RyZWFtZXJDYXB0dXJlcihkZXZpY2UsIGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJh
dWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRl
LCBudWxscHRyKSkpCiB7CiB9CiAKIEdTdHJlYW1lckF1ZGlvQ2FwdHVyZXI6OkdTdHJlYW1lckF1
ZGlvQ2FwdHVyZXIoKQotICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIsIGFkb3B0R1Jl
Zihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lOVCwg
QXVkaW9DYXB0dXJlU2FtcGxlUmF0ZSwgbnVsbHB0cikpLCBDYXB0dXJlRGV2aWNlOjpEZXZpY2VU
eXBlOjpNaWNyb3Bob25lKQorICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoImFwcHNyYyIsIGFkb3B0
R1JlZihnc3RfY2Fwc19uZXdfc2ltcGxlKCJhdWRpby94LXJhdyIsICJyYXRlIiwgR19UWVBFX0lO
VCwgc19hdWRpb0NhcHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSksIENhcHR1cmVEZXZpY2U6OkRl
dmljZVR5cGU6Ok1pY3JvcGhvbmUpCiB7CiB9CiAKIEdzdEVsZW1lbnQqIEdTdHJlYW1lckF1ZGlv
Q2FwdHVyZXI6OmNyZWF0ZUNvbnZlcnRlcigpCiB7Ci0gICAgcmV0dXJuIG1ha2VHU3RyZWFtZXJC
aW4oImF1ZGlvY29udmVydCAhIGF1ZGlvcmVzYW1wbGUiLCB0cnVlKTsKKyAgICBhdXRvKiBiaW4g
PSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBhdXRvKiBhdWRpb2NvbnZlcnQgPSBnc3RfZWxl
bWVudF9mYWN0b3J5X21ha2UoImF1ZGlvY29udmVydCIsIG51bGxwdHIpOworICAgIGF1dG8qIGF1
ZGlvcmVzYW1wbGUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvcmVzYW1wbGUiLCBu
dWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChiaW4pLCBhdWRpb2Nv
bnZlcnQsIGF1ZGlvcmVzYW1wbGUsIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmsoYXVk
aW9jb252ZXJ0LCBhdWRpb3Jlc2FtcGxlKTsKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQor
ICAgIGlmIChhdXRvKiB3ZWJydGNkc3AgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgid2VicnRjZHNw
IiwgbnVsbHB0cikpIHsKKyAgICAgICAgZ19vYmplY3Rfc2V0KHdlYnJ0Y2RzcCwgImVjaG8tY2Fu
Y2VsIiwgZmFsc2UsICJ2b2ljZS1kZXRlY3Rpb24iLCB0cnVlLCBudWxscHRyKTsKKyAgICAgICAg
Z3N0X2Jpbl9hZGQoR1NUX0JJTl9DQVNUKGJpbiksIHdlYnJ0Y2RzcCk7CisgICAgICAgIGdzdF9l
bGVtZW50X2xpbmsod2VicnRjZHNwLCBhdWRpb2NvbnZlcnQpOworICAgIH0KKyNlbmRpZgorCisg
ICAgaWYgKGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxpbmtlZF9wYWQoR1NU
X0JJTl9DQVNUKGJpbiksIEdTVF9QQURfU1JDKSkpCisgICAgICAgIGdzdF9lbGVtZW50X2FkZF9w
YWQoR1NUX0VMRU1FTlRfQ0FTVChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldygic3JjIiwgcGFkLmdl
dCgpKSk7CisgICAgaWYgKGF1dG8gcGFkID0gYWRvcHRHUmVmKGdzdF9iaW5fZmluZF91bmxpbmtl
ZF9wYWQoR1NUX0JJTl9DQVNUKGJpbiksIEdTVF9QQURfU0lOSykpKQorICAgICAgICBnc3RfZWxl
bWVudF9hZGRfcGFkKEdTVF9FTEVNRU5UX0NBU1QoYmluKSwgZ3N0X2dob3N0X3BhZF9uZXcoInNp
bmsiLCBwYWQuZ2V0KCkpKTsKKworICAgIHJldHVybiBiaW47CiB9CiAKIGJvb2wgR1N0cmVhbWVy
QXVkaW9DYXB0dXJlcjo6c2V0U2FtcGxlUmF0ZShpbnQgc2FtcGxlUmF0ZSkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJD
YXB0dXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCmluZGV4IDQ3OGM3NzVlMGUzZjY5ZDdjZTM2ZjY3NWNi
YmY0Y2E2ZmIzYjYzNTEuLjllMDA4ZDhmNDZhNmZkNWQ1MjI4MjZlMDhmYmY3ZmI2Yjk5ZGI3MTQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcApAQCAtMTAwLDcgKzEwMCw3
IEBAIEdzdEVsZW1lbnQqIEdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UoKQogICAgICAg
ICBtX3NyYyA9IG1ha2VFbGVtZW50KG1fc291cmNlRmFjdG9yeSk7CiAgICAgICAgIEFTU0VSVCht
X3NyYyk7CiAgICAgICAgIGlmIChHU1RfSVNfQVBQX1NSQyhtX3NyYy5nZXQoKSkpCi0gICAgICAg
ICAgICBnX29iamVjdF9zZXQobV9zcmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIs
IEdTVF9GT1JNQVRfVElNRSwgbnVsbHB0cik7CisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9z
cmMuZ2V0KCksICJpcy1saXZlIiwgdHJ1ZSwgImZvcm1hdCIsIEdTVF9GT1JNQVRfVElNRSwgImRv
LXRpbWVzdGFtcCIsIHRydWUsIG51bGxwdHIpOwogCiAgICAgICAgIGF1dG8gc3JjUGFkID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fc3JjLmdldCgpLCAic3JjIikpOwog
ICAgICAgICBpZiAobV9kZXZpY2VUeXBlID09IENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6OkNh
bWVyYSkgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmExZGU1MmJkNTgxOTRjNzM3NmE2YTFhNGYzZmZlNGRlZGMxYTcy
YQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHAKQEAgLTAsMCArMSw3NiBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VC
X1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRl
ZC5oIgorI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5k
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitHU3RyZWFtZXJEVE1GU2VuZGVyQmFj
a2VuZDo6fkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCitib29sIEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpjYW5JbnNlcnREVE1G
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxzZTsKK30KKwordm9p
ZCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6cGxheVRvbmUoY29uc3QgU3RyaW5nJiwgc2l6
ZV90LCBzaXplX3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworU3RyaW5nIEdTdHJl
YW1lckRUTUZTZW5kZXJCYWNrZW5kOjp0b25lcygpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNlbmRlckJh
Y2tlbmQ6OmR1cmF0aW9uKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorCitzaXplX3QgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmludGVyVG9u
ZUdhcCgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gMDsKK30K
Kwordm9pZCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6b25Ub25lUGxheWVkKEZ1bmN0aW9u
PHZvaWQoY29uc3QgU3RyaW5nJik+JiYgb25Ub25lUGxheWVkKQoreworICAgIG1fb25Ub25lUGxh
eWVkID0gV1RGTW92ZShvblRvbmVQbGF5ZWQpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmM1Nzk3MDUwY2VjOWI0YjBhYTZkOWVmZTk4MDhhZTVjOTA4OGZiMzMKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlJUQ0RUTUZTZW5kZXJCYWNrZW5k
LmgiCisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCisv
LyBVc2UgZWFnZXIgaW5pdGlhbGl6YXRpb24gZm9yIHRoZSBXZWFrUHRyRmFjdG9yeSBzaW5jZSB3
ZSBjYWxsIG1ha2VXZWFrUHRyKCkgZnJvbSBhbm90aGVyIHRocmVhZC4KK2NsYXNzIEdTdHJlYW1l
ckRUTUZTZW5kZXJCYWNrZW5kIGZpbmFsIDogcHVibGljIFJUQ0RUTUZTZW5kZXJCYWNrZW5kLCBw
dWJsaWMgQ2FuTWFrZVdlYWtQdHI8R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQsIFdlYWtQdHJG
YWN0b3J5SW5pdGlhbGl6YXRpb246OkVhZ2VyPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FU
RUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKTsK
KyAgICB+R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKTsKKworcHJpdmF0ZToKKyAgICAvLyBS
VENEVE1GU2VuZGVyQmFja2VuZAorICAgIGJvb2wgY2FuSW5zZXJ0RFRNRigpIGZpbmFsOworICAg
IHZvaWQgcGxheVRvbmUoY29uc3QgU3RyaW5nJiB0b25lLCBzaXplX3QgZHVyYXRpb24sIHNpemVf
dCBpbnRlclRvbmVHYXApIGZpbmFsOworICAgIHZvaWQgb25Ub25lUGxheWVkKEZ1bmN0aW9uPHZv
aWQoY29uc3QgU3RyaW5nJik+JiYpIGZpbmFsOworICAgIFN0cmluZyB0b25lcygpIGNvbnN0IGZp
bmFsOworICAgIHNpemVfdCBkdXJhdGlvbigpIGNvbnN0IGZpbmFsOworICAgIHNpemVfdCBpbnRl
clRvbmVHYXAoKSBjb25zdCBmaW5hbDsKKworICAgIEZ1bmN0aW9uPHZvaWQoY29uc3QgU3RyaW5n
Jik+IG1fb25Ub25lUGxheWVkOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
ck1lZGlhU3RyZWFtU291cmNlLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5jcHAKaW5kZXggNmFiMWFh
YTExNTE4YTNiNzk3NTdkMDFkZjJhNjlhZmI2NjM2NjBlZC4uMjQzY2FhYTVjNGNmNzFmZWE4NWQ5
MjkyODhjNjkwNzU0YmFmOTQwNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
TWVkaWFTdHJlYW1Tb3VyY2UuY3BwCkBAIC0zNCwxNyArMzQsMjMgQEAKICNpbmNsdWRlICJWaWRl
b0ZyYW1lTWV0YWRhdGFHU3RyZWFtZXIuaCIKICNpbmNsdWRlICJWaWRlb1RyYWNrUHJpdmF0ZU1l
ZGlhU3RyZWFtLmgiCiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyNpbmNsdWRlICJSZWFs
dGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNlbmRpZgorCiAjaW5jbHVkZSA8Z3N0L2Fw
cC9nc3RhcHBzcmMuaD4KKyNpbmNsdWRlIDxnc3QvYmFzZS9nc3RmbG93Y29tYmluZXIuaD4KICNp
bmNsdWRlIDx3dGYvVVVJRC5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL1dURkdUeXBlLmg+CiAKIHVz
aW5nIG5hbWVzcGFjZSBXZWJDb3JlOwogCiBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxhdGUgdmlk
ZW9TcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJ2aWRlb19zcmMldSIsIEdT
VF9QQURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMoInZpZGVv
L3gtcmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwOCIpKTsKKyAgICBHU1RfU1RBVElDX0NBUFMo
InZpZGVvL3gtcmF3O3ZpZGVvL3gtaDI2NDt2aWRlby94LXZwODt2aWRlby94LXZwOTthcHBsaWNh
dGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZyl2aWRlbyIpKTsKIAogc3RhdGljIEdzdFN0YXRpY1Bh
ZFRlbXBsYXRlIGF1ZGlvU3JjVGVtcGxhdGUgPSBHU1RfU1RBVElDX1BBRF9URU1QTEFURSgiYXVk
aW9fc3JjJXUiLCBHU1RfUEFEX1NSQywgR1NUX1BBRF9TT01FVElNRVMsCi0gICAgR1NUX1NUQVRJ
Q19DQVBTKCJhdWRpby94LXJhdyhBTlkpOyIpKTsKKyAgICBHU1RfU1RBVElDX0NBUFMoImF1ZGlv
L3gtcmF3KEFOWSk7YXBwbGljYXRpb24veC1ydHAsIG1lZGlhPShzdHJpbmcpYXVkaW8iKSk7CiAK
IEdTVF9ERUJVR19DQVRFR09SWV9TVEFUSUMod2Via2l0TWVkaWFTdHJlYW1TcmNEZWJ1Zyk7CiAj
ZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnCkBAIC0yMzYs
NyArMjQyLDcgQEAgcHVibGljOgogCiAgICAgICAgIGlmIChkcm9wKSB7CiAgICAgICAgICAgICBt
X25lZWRzRGlzY29udCA9IHRydWU7Ci0gICAgICAgICAgICBHU1RfSU5GT19PQkpFQ1QobV9zcmMu
Z2V0KCksICIlcyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4gbm90IHB1c2hpbmciLCBtX3RyYWNrLmhh
c1ZpZGVvKCkgPyAiVmlkZW8iIDogIkF1ZGlvIik7CisgICAgICAgICAgICBHU1RfVFJBQ0VfT0JK
RUNUKG1fc3JjLmdldCgpLCAiJXMgcXVldWUgZnVsbCBhbHJlYWR5Li4uIG5vdCBwdXNoaW5nIiwg
bV90cmFjay5oYXNWaWRlbygpID8gIlZpZGVvIiA6ICJBdWRpbyIpOwogICAgICAgICAgICAgcmV0
dXJuOwogICAgICAgICB9CiAKQEAgLTY4OCw2ICs2OTQsNyBAQCB2b2lkIHdlYmtpdE1lZGlhU3Ry
ZWFtU3JjQWRkVHJhY2soV2ViS2l0TWVkaWFTdHJlYW1TcmMqIHNlbGYsIE1lZGlhU3RyZWFtVHJh
Y2tQcgogICAgIGNvbnN0IGNoYXIqIHNvdXJjZVR5cGU7CiAgICAgdW5zaWduZWQgY291bnRlcjsK
ICAgICBHc3RTdGF0aWNQYWRUZW1wbGF0ZSogcGFkVGVtcGxhdGU7CisKICAgICBpZiAodHJhY2st
Pmhhc0F1ZGlvKCkpIHsKICAgICAgICAgcGFkVGVtcGxhdGUgPSAmYXVkaW9TcmNUZW1wbGF0ZTsK
ICAgICAgICAgc291cmNlVHlwZSA9ICJhdWRpbyI7CkBAIC02OTksOSArNzA2LDE5IEBAIHZvaWQg
d2Via2l0TWVkaWFTdHJlYW1TcmNBZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwg
TWVkaWFTdHJlYW1UcmFja1ByCiAgICAgICAgIGNvdW50ZXIgPSBzZWxmLT5wcml2LT52aWRlb1Bh
ZENvdW50ZXIuZXhjaGFuZ2VBZGQoMSk7CiAgICAgfQogCi0gICAgYXV0byBwYWROYW1lID0gbWFr
ZVN0cmluZyhzb3VyY2VUeXBlLCAiX3NyYyIsIGNvdW50ZXIpOworI2lmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorICAgIGlmICh0cmFjay0+c291cmNlKCkuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkp
IHsKKyAgICAgICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nhc3Q8UmVhbHRpbWVJbmNvbWluZ0F1
ZGlvU291cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgpKTsKKyAgICAgICAgc291cmNlLnJl
Z2lzdGVyQ2xpZW50KCk7CisgICAgfSBlbHNlIGlmICh0cmFjay0+c291cmNlKCkuaXNJbmNvbWlu
Z1ZpZGVvU291cmNlKCkpIHsKKyAgICAgICAgYXV0byYgc291cmNlID0gc3RhdGljX2Nhc3Q8UmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyJj4odHJhY2stPnNvdXJjZSgpKTsKKyAg
ICAgICAgc291cmNlLnJlZ2lzdGVyQ2xpZW50KCk7CisgICAgfQorI2VuZGlmCisKICAgICBHU1Rf
REVCVUdfT0JKRUNUKHNlbGYsICJTZXR1cCAlcyBzb3VyY2UgZm9yIHRyYWNrICVzLCBvbmx5IHRy
YWNrOiAlcyIsIHNvdXJjZVR5cGUsIHRyYWNrLT5pZCgpLnV0ZjgoKS5kYXRhKCksIGJvb2xGb3JQ
cmludGluZyhvbmx5VHJhY2spKTsKIAorICAgIGF1dG8gcGFkTmFtZSA9IG1ha2VTdHJpbmcoc291
cmNlVHlwZSwgIl9zcmMiLCBjb3VudGVyKTsKICAgICBhdXRvIHNvdXJjZSA9IG1ha2VVbmlxdWU8
SW50ZXJuYWxTb3VyY2U+KEdTVF9FTEVNRU5UX0NBU1Qoc2VsZiksICp0cmFjaywgcGFkTmFtZSk7
CiAgICAgYXV0byogZWxlbWVudCA9IHNvdXJjZS0+Z2V0KCk7CiAgICAgZ3N0X2Jpbl9hZGQoR1NU
X0JJTl9DQVNUKHNlbGYpLCBlbGVtZW50KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZp
ZGVvRW5jb2Rlci5jcHAKaW5kZXggZmFjNDcwNWZiOGE3Y2YyZGMyM2VhNTExYjE1ZmNmNDg1NTJj
ZjMzYS4uYTc2ZWYxZWZmZDE2ZmEyNmI2ZGUzNTc0ZjQ2NGY1ZDIzM2M5NWVmZSAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clZpZGVvRW5jb2Rlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAKQEAgLTI5Nyw5ICsyOTcsMTEg
QEAgc3RhdGljIHZvaWQgd2Via2l0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2NsYXNzX2luaXQoV2Vi
S2l0V2VicnRjVmlkZW9FbmNvZGVyQ2xhc3MKICAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZWxm
LT5wcml2LT5wYXJzZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRyKTsKICAg
ICAgICAgfSwgInRhcmdldC1iaXRyYXRlIiwgc2V0Qml0cmF0ZUJpdFBlclNlYywgImludGVydmFs
LWludHJhZnJhbWVzIik7CiAgICAgRW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihYMjY0LCAieDI2
NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKLSAgICAgICAgInZpZGVvL3gtaDI2
NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRlLXN0cmVhbSxwcm9maWxlPWJhc2VsaW5l
IiwKKyAgICAgICAgInZpZGVvL3gtaDI2NCxhbGlnbm1lbnQ9YXUsc3RyZWFtLWZvcm1hdD1ieXRl
LXN0cmVhbSxwcm9maWxlPWNvbnN0cmFpbmVkLWJhc2VsaW5lIiwKICAgICAgICAgW10oV2ViS2l0
V2VicnRjVmlkZW9FbmNvZGVyKiBzZWxmKSB7CiAgICAgICAgICAgICBnc3RfdXRpbF9zZXRfb2Jq
ZWN0X2FyZyhHX09CSkVDVChzZWxmLT5wcml2LT5lbmNvZGVyLmdldCgpKSwgInR1bmUiLCAiemVy
b2xhdGVuY3kiKTsKKyAgICAgICAgICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJnKEdfT0JKRUNU
KHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAic3BlZWQtcHJlc2V0IiwgInVsdHJhZmFzdCIp
OworICAgICAgICAgICAgZ19vYmplY3Rfc2V0KEdfT0JKRUNUKHNlbGYtPnByaXYtPmVuY29kZXIu
Z2V0KCkpLCAia2V5LWludC1tYXgiLCAxNSwgTlVMTCk7CiAgICAgICAgICAgICBnX29iamVjdF9z
ZXQoc2VsZi0+cHJpdi0+cGFyc2VyLmdldCgpLCAiY29uZmlnLWludGVydmFsIiwgMSwgbnVsbHB0
cik7CiAgICAgICAgIH0sICJiaXRyYXRlIiwgc2V0Qml0cmF0ZUtiaXRQZXJTZWMsICJrZXktaW50
LW1heCIpOwogICAgIEVuY29kZXJzOjpyZWdpc3RlckVuY29kZXIoT3BlbkgyNjQsICJvcGVuaDI2
NGVuYyIsICJoMjY0cGFyc2UiLCAidmlkZW8veC1oMjY0IiwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNTZmNTVhMmQ1ZmEzYjA1NzhmNTQxODAyNmZmOTg1OThiZWRiYTU2MwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9SZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsNzMg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIK
KworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdB
dWRpb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9EYXRhLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbi5oIgorCituYW1lc3Bh
Y2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkK
KyAgICA6IFJlYWx0aW1lTWVkaWFTb3VyY2UoUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVk
aW8sIFdURk1vdmUoYXVkaW9UcmFja0lkKSkKKyAgICAsIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VH
U3RyZWFtZXIoKQoreworICAgIHN0YXJ0KCk7Cit9CisKK1JlYWx0aW1lSW5jb21pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcigpCit7
CisgICAgc3RvcCgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJl
YW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKCkKK3sKKyAgICBvcGVuVmFsdmUoKTsKK30KKwordm9p
ZCBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRh
KCkKK3sKKyAgICBjbG9zZVZhbHZlKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVkaWFTb3VyY2VD
YXBhYmlsaXRpZXMmIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJp
bGl0aWVzKCkKK3sKKyAgICByZXR1cm4gUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllczo6
ZW1wdHlDYXBhYmlsaXRpZXMoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzJiBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzKCkKK3sK
KyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3M7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWlu
Z0F1ZGlvU291cmNlR1N0cmVhbWVyOjpkaXNwYXRjaFNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4m
JiBnc3RTYW1wbGUpCit7CisgICAgYXV0byogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVy
KGdzdFNhbXBsZS5nZXQoKSk7CisgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiBk
ZXNjcmlwdGlvbjsKKyAgICBHU3RyZWFtZXJBdWRpb0RhdGEgZnJhbWVzKFdURk1vdmUoZ3N0U2Ft
cGxlKSwgZGVzY3JpcHRpb24uZ2V0SW5mbygpKTsKKworICAgIGF1ZGlvU2FtcGxlc0F2YWlsYWJs
ZShNZWRpYVRpbWUoR1NUX1RJTUVfQVNfVVNFQ09ORFMoR1NUX0JVRkZFUl9QVFMoYnVmZmVyKSks
IEdfVVNFQ19QRVJfU0VDKSwgZnJhbWVzLCBkZXNjcmlwdGlvbiwgMCk7Cit9CisKK30KKworI2Vu
ZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2
NjhkYjUzYmNmOWMxNmQzMDFiODE3MmU2OGIxOTE4OTA3ZmRhZWMKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJ
bmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1NyBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJSZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
KworY2xhc3MgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyIDogcHVibGljIFJl
YWx0aW1lTWVkaWFTb3VyY2UsIHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcj4gY3JlYXRlKFN0cmluZyYmIGF1ZGlvVHJhY2tJZCkgeyByZXR1cm4gYWRvcHRSZWYo
Km5ldyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZShhdWRpb1Ry
YWNrSWQpKSk7IH0KKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lcihTdHJpbmcmJik7CisgICAgflJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcigpOworCitwcml2YXRlOgorICAgIC8vIFJlYWx0aW1lTWVkaWFTb3VyY2UgQVBJCisg
ICAgdm9pZCBzdGFydFByb2R1Y2luZ0RhdGEoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3BQcm9kdWNp
bmdEYXRhKCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGll
cyYgY2FwYWJpbGl0aWVzKCkgZmluYWw7CisgICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNl
dHRpbmdzJiBzZXR0aW5ncygpIGZpbmFsOworICAgIGJvb2wgaXNJbmNvbWluZ0F1ZGlvU291cmNl
KCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQorCisgICAgLy8gUmVhbHRpbWVJbmNvbWlu
Z1NvdXJjZUdTdHJlYW1lciBBUEkKKyAgICB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0
U2FtcGxlPiYmKSBmaW5hbDsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBtX2N1
cnJlbnRTZXR0aW5nczsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTEla
RV9UWVBFX1RSQUlUU19CRUdJTihXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXIpCisgICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1l
TWVkaWFTb3VyY2UmIHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmlzSW5jb21pbmdBdWRpb1NvdXJj
ZSgpOyB9CitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAvLyBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29t
aW5nU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42NGIxNjU0MmI3NzUxMDJkMjZmMTVk
MjBlNmZlZjVlMzNjOWVkZDcxCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFt
ZXIuY3BwCkBAIC0wLDAgKzEsOTQgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIg
SWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIg
TWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29m
dHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRl
ciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAq
ICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVy
IHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9w
ZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsg
d2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZ
IG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZ
b3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0
ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGlu
IFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisK
KyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1
ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1ZGUgIk1lZGlh
U2FtcGxlR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvV1RGU3RyaW5nLmg+CisKK0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4o
d2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3
ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVh
bHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJl
YW1lcigpCit7CisgICAgbV9iaW4gPSBnc3RfYmluX25ldyhudWxscHRyKTsKKyAgICBtX3ZhbHZl
ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAgIG1fdGVl
ID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ0ZWUiLCBudWxscHRyKTsKKyAgICBnX29iamVj
dF9zZXQobV90ZWUuZ2V0KCksICJhbGxvdy1ub3QtbGlua2VkIiwgdHJ1ZSwgbnVsbHB0cik7CisK
KyAgICBhdXRvKiBxdWV1ZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxs
cHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1f
dmFsdmUuZ2V0KCksIHF1ZXVlLCBtX3RlZS5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBnc3RfZWxl
bWVudF9saW5rX21hbnkobV92YWx2ZS5nZXQoKSwgcXVldWUsIG1fdGVlLmdldCgpLCBudWxscHRy
KTsKKyAgICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fdmFsdmUuZ2V0KCkp
OworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUpOworICAgIGdz
dF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV90ZWUuZ2V0KCkpOworCisgICAgYXV0
byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fdmFsdmUu
Z2V0KCksICJzaW5rIikpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4uZ2V0KCksIGdz
dF9naG9zdF9wYWRfbmV3KCJzaW5rIiwgc2lua1BhZC5nZXQoKSkpOworfQorCit2b2lkIFJlYWx0
aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OmNsb3NlVmFsdmUoKSBjb25zdAoreworICAgIGlm
IChtX3ZhbHZlKQorICAgICAgICBnX29iamVjdF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3AiLCB0
cnVlLCBudWxscHRyKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVy
OjpvcGVuVmFsdmUoKSBjb25zdAoreworICAgIGlmIChtX3ZhbHZlKQorICAgICAgICBnX29iamVj
dF9zZXQobV92YWx2ZS5nZXQoKSwgImRyb3AiLCBmYWxzZSwgbnVsbHB0cik7Cit9CisKK3ZvaWQg
UmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6cmVnaXN0ZXJDbGllbnQoKQoreworICAg
IEdTVF9ERUJVRygiUmVnaXN0ZXJpbmcgbmV3IGNsaWVudCIpOworICAgIGF1dG8qIHF1ZXVlID0g
Z3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIGF1dG8qIHNp
bmsgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImFwcHNpbmsiLCBudWxscHRyKTsKKyAgICBn
X29iamVjdF9zZXQoc2luaywgImVuYWJsZS1sYXN0LXNhbXBsZSIsIEZBTFNFLCAiZW1pdC1zaWdu
YWxzIiwgVFJVRSwgIm1heC1idWZmZXJzIiwgMSwgbnVsbHB0cik7CisgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKHNpbmssICJuZXctc2FtcGxlIiwgR19DQUxMQkFDSygrW10oUmVhbHRpbWVJ
bmNvbWluZ1NvdXJjZUdTdHJlYW1lciogc2VsZiwgR3N0RWxlbWVudCogc2luaykgLT4gR3N0Rmxv
d1JldHVybiB7CisgICAgICAgIGF1dG8gc2FtcGxlID0gYWRvcHRHUmVmKGdzdF9hcHBfc2lua19w
dWxsX3NhbXBsZShHU1RfQVBQX1NJTksoc2luaykpKTsKKyAgICAgICAgc2VsZi0+ZGlzcGF0Y2hT
YW1wbGUoV1RGTW92ZShzYW1wbGUpKTsKKyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAg
IH0pLCB0aGlzKTsKKworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChzaW5rLCAibmV3LXBy
ZXJvbGwiLCBHX0NBTExCQUNLKCtbXShSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKiBz
ZWxmLCBHc3RFbGVtZW50KiBzaW5rKSAtPiBHc3RGbG93UmV0dXJuIHsKKyAgICAgICAgYXV0byBz
YW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfcHJlcm9sbChHU1RfQVBQX1NJTkso
c2luaykpKTsKKyAgICAgICAgc2VsZi0+ZGlzcGF0Y2hTYW1wbGUoV1RGTW92ZShzYW1wbGUpKTsK
KyAgICAgICAgcmV0dXJuIEdTVF9GTE9XX09LOworICAgIH0pLCB0aGlzKTsKKworICAgIGdzdF9i
aW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgcXVldWUsIHNpbmssIG51bGxw
dHIpOworICAgIGdzdF9lbGVtZW50X2xpbmtfbWFueShtX3RlZS5nZXQoKSwgcXVldWUsIHNpbmss
IG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQocXVldWUp
OworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQoc2luayk7CisKKyAgICBh
dXRvIGRvdEZpbGVOYW1lID0gbWFrZVN0cmluZyhHU1RfT0JKRUNUX05BTUUobV9iaW4uZ2V0KCkp
LCAiLmluY29taW5nIik7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdT
VF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9XX0FMTCwgZG90Rmls
ZU5hbWUudXRmOCgpLmRhdGEoKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNmQ2NGM0OTcwY2Ni
OGQxMWI3OWE1YzIwZDdmMTM1MmU2ZjRhZmJiMwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nU291
cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1MCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIw
MTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAo
QykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5
IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICog
IExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVp
dGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBh
bnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGlu
IHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdB
UlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFO
VEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdO
VQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisg
KgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBu
b3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEg
RnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNB
CisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2lu
Y2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBHc3RFbGVt
ZW50KiBiaW4oKSB7IHJldHVybiBtX2Jpbi5nZXQoKTsgfQorICAgIHZvaWQgcmVnaXN0ZXJDbGll
bnQoKTsKKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIo
KTsKKworICAgIHZvaWQgY2xvc2VWYWx2ZSgpIGNvbnN0OworICAgIHZvaWQgb3BlblZhbHZlKCkg
Y29uc3Q7CisKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmFsdmU7CisKK3ByaXZhdGU6Cisg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmKSB7IH0K
KworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9iaW47CisgICAgR1JlZlB0cjxHc3RFbGVtZW50
PiBtX3RlZTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRp
bWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YWNhMDQzOWY0
OWJjYzA2MjkyNDVhZjZiN2E5ZTg1MjkxZjk1ZjFjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSwxMDggQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
ci5oIgorCisjaW5jbHVkZSAiVmlkZW9GcmFtZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlZpZGVv
RnJhbWVNZXRhZGF0YUdTdHJlYW1lci5oIgorI2luY2x1ZGUgPGdzdC9ydHAvcnRwLmg+CisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVy
OjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoU3RyaW5nJiYgdmlkZW9UcmFj
a0lkKQorICAgIDogUmVhbHRpbWVNZWRpYVNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBl
OjpWaWRlbywgV1RGTW92ZSh2aWRlb1RyYWNrSWQpKQorICAgICwgUmVhbHRpbWVJbmNvbWluZ1Nv
dXJjZUdTdHJlYW1lcigpCit7CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVN1cHBvcnRlZENvbnN0
cmFpbnRzIGNvbnN0cmFpbnRzOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzV2lkdGgodHJ1
ZSk7CisgICAgY29uc3RyYWludHMuc2V0U3VwcG9ydHNIZWlnaHQodHJ1ZSk7CisgICAgbV9jdXJy
ZW50U2V0dGluZ3MgPSBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MgeyB9OworICAgIG1fY3Vy
cmVudFNldHRpbmdzLT5zZXRTdXBwb3J0ZWRDb25zdHJhaW50cyhXVEZNb3ZlKGNvbnN0cmFpbnRz
KSk7CisKKyAgICBhdXRvIHNpbmtQYWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRp
Y19wYWQobV92YWx2ZS5nZXQoKSwgInNpbmsiKSk7CisgICAgZ3N0X3BhZF9hZGRfcHJvYmUoc2lu
a1BhZC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3N0UGFkUHJvYmVUeXBlPihHU1RfUEFEX1BST0JFX1RZ
UEVfQlVGRkVSKSwgW10oR3N0UGFkKiwgR3N0UGFkUHJvYmVJbmZvKiBpbmZvLCBncG9pbnRlcikg
LT4gR3N0UGFkUHJvYmVSZXR1cm4geworICAgICAgICBhdXRvIHZpZGVvRnJhbWVUaW1lTWV0YWRh
dGEgPSBzdGQ6Om1ha2Vfb3B0aW9uYWw8VmlkZW9GcmFtZVRpbWVNZXRhZGF0YT4oeyB9KTsKKyAg
ICAgICAgdmlkZW9GcmFtZVRpbWVNZXRhZGF0YS0+cmVjZWl2ZVRpbWUgPSBNb25vdG9uaWNUaW1l
Ojpub3coKS5zZWNvbmRzU2luY2VFcG9jaCgpOworCisgICAgICAgIGF1dG8qIGJ1ZmZlciA9IEdT
VF9CVUZGRVJfQ0FTVChHU1RfUEFEX1BST0JFX0lORk9fREFUQShpbmZvKSk7CisgICAgICAgIEdz
dFJUUEJ1ZmZlciBydHBCdWZmZXIgR1NUX1JUUF9CVUZGRVJfSU5JVDsKKyAgICAgICAgaWYgKGdz
dF9ydHBfYnVmZmVyX21hcChidWZmZXIsIEdTVF9NQVBfUkVBRCwgJnJ0cEJ1ZmZlcikpIHsKKyAg
ICAgICAgICAgIHZpZGVvRnJhbWVUaW1lTWV0YWRhdGEtPnJ0cFRpbWVzdGFtcCA9IGdzdF9ydHBf
YnVmZmVyX2dldF90aW1lc3RhbXAoJnJ0cEJ1ZmZlcik7CisgICAgICAgICAgICBnc3RfcnRwX2J1
ZmZlcl91bm1hcCgmcnRwQnVmZmVyKTsKKyAgICAgICAgfQorICAgICAgICBidWZmZXIgPSB3ZWJr
aXRHc3RCdWZmZXJTZXRWaWRlb0ZyYW1lVGltZU1ldGFkYXRhKGJ1ZmZlciwgV1RGTW92ZSh2aWRl
b0ZyYW1lVGltZU1ldGFkYXRhKSk7CisgICAgICAgIEdTVF9QQURfUFJPQkVfSU5GT19EQVRBKGlu
Zm8pID0gYnVmZmVyOworICAgICAgICByZXR1cm4gR1NUX1BBRF9QUk9CRV9PSzsKKyAgICB9LCBu
dWxscHRyLCBudWxscHRyKTsKKworICAgIHN0YXJ0KCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNv
bWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzdGFydFByb2R1Y2luZ0RhdGEoKQoreworICAgIG9w
ZW5WYWx2ZSgpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1l
cjo6c3RvcFByb2R1Y2luZ0RhdGEoKQoreworICAgIGNsb3NlVmFsdmUoKTsKK30KKworY29uc3Qg
UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyOjpjYXBhYmlsaXRpZXMoKQoreworICAgIHJldHVybiBSZWFsdGltZU1lZGlh
U291cmNlQ2FwYWJpbGl0aWVzOjplbXB0eUNhcGFiaWxpdGllcygpOworfQorCitjb25zdCBSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3MmIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcjo6c2V0dGluZ3MoKQoreworICAgIGlmIChtX2N1cnJlbnRTZXR0aW5ncykKKyAgICAgICAg
cmV0dXJuIG1fY3VycmVudFNldHRpbmdzLnZhbHVlKCk7CisKKyAgICBSZWFsdGltZU1lZGlhU291
cmNlU3VwcG9ydGVkQ29uc3RyYWludHMgY29uc3RyYWludHM7CisgICAgY29uc3RyYWludHMuc2V0
U3VwcG9ydHNXaWR0aCh0cnVlKTsKKyAgICBjb25zdHJhaW50cy5zZXRTdXBwb3J0c0hlaWdodCh0
cnVlKTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyBzZXR0aW5nczsKKyAgICBh
dXRvJiBzaXplID0gdGhpcy0+c2l6ZSgpOworICAgIHNldHRpbmdzLnNldFdpZHRoKHNpemUud2lk
dGgoKSk7CisgICAgc2V0dGluZ3Muc2V0SGVpZ2h0KHNpemUuaGVpZ2h0KCkpOworICAgIHNldHRp
bmdzLnNldFN1cHBvcnRlZENvbnN0cmFpbnRzKGNvbnN0cmFpbnRzKTsKKworICAgIG1fY3VycmVu
dFNldHRpbmdzID0gV1RGTW92ZShzZXR0aW5ncyk7CisgICAgcmV0dXJuIG1fY3VycmVudFNldHRp
bmdzLnZhbHVlKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyOjpzZXR0aW5nc0RpZENoYW5nZShPcHRpb25TZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRp
bmdzOjpGbGFnPiBzZXR0aW5ncykKK3sKKyAgICBpZiAoc2V0dGluZ3MuY29udGFpbnNBbnkoeyBS
ZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc6OldpZHRoLCBSZWFsdGltZU1lZGlhU291
cmNlU2V0dGluZ3M6OkZsYWc6OkhlaWdodCB9KSkKKyAgICAgICAgbV9jdXJyZW50U2V0dGluZ3Mg
PSBzdGQ6Om51bGxvcHQ7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0
cmVhbWVyOjpkaXNwYXRjaFNhbXBsZShHUmVmUHRyPEdzdFNhbXBsZT4mJiBnc3RTYW1wbGUpCit7
CisgICAgYXV0byogYnVmZmVyID0gZ3N0X3NhbXBsZV9nZXRfYnVmZmVyKGdzdFNhbXBsZS5nZXQo
KSk7CisgICAgdmlkZW9TYW1wbGVBdmFpbGFibGUoVmlkZW9GcmFtZUdTdHJlYW1lcjo6Y3JlYXRl
V3JhcHBlZFNhbXBsZShnc3RTYW1wbGUsIGZyb21Hc3RDbG9ja1RpbWUoR1NUX0JVRkZFUl9QVFMo
YnVmZmVyKSkpLCB7IH0pOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAv
LyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOWJjMzAw
NjljZDMzMjA5MjMxOGJiZjc3OGFiOTNkOTE4NDgzMWZiCi0tLSAvZGV2L251bGwKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiUmVhbHRpbWVNZWRpYVNvdXJjZS5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciA6IHB1YmxpYyBSZWFsdGlt
ZU1lZGlhU291cmNlLCBwdWJsaWMgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciB7Citw
dWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXI+IGNyZWF0ZShTdHJpbmcmJiB2aWRlb1RyYWNrSWQpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFdURk1vdmUodmlkZW9UcmFja0lk
KSkpOyB9CisgICAgflJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcigpID0gZGVm
YXVsdDsKKworcHJvdGVjdGVkOgorICAgIFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcihTdHJpbmcmJik7CisKK3ByaXZhdGU6CisgICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZSBB
UEkKKyAgICB2b2lkIHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIHZvaWQgc3RvcFBy
b2R1Y2luZ0RhdGEoKSAgZmluYWw7CisgICAgdm9pZCBzZXR0aW5nc0RpZENoYW5nZShPcHRpb25T
ZXQ8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzOjpGbGFnPikgZmluYWw7CisgICAgY29uc3Qg
UmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxpdGllcyYgY2FwYWJpbGl0aWVzKCkgZmluYWw7Cisg
ICAgY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzJiBzZXR0aW5ncygpIGZpbmFsOwor
ICAgIGJvb2wgaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1
ZTsgfQorCisgICAgLy8gUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lciBBUEkKKyAgICB2
b2lkIGRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmKSBmaW5hbDsKKworICAgIHN0
ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2N1cnJlbnRTZXR0aW5n
czsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlU
U19CRUdJTihXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIpCisg
ICAgc3RhdGljIGJvb2wgaXNUeXBlKGNvbnN0IFdlYkNvcmU6OlJlYWx0aW1lTWVkaWFTb3VyY2Um
IHNvdXJjZSkgeyByZXR1cm4gc291cmNlLmlzSW5jb21pbmdWaWRlb1NvdXJjZSgpOyB9CitTUEVD
SUFMSVpFX1RZUEVfVFJBSVRTX0VORCgpCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRp
b1NvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMWE3NGIyNWQ0ZWZkNThjZjc1YjczY2Zk
NjJiMDc1NzQyZjUyODhmNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTE3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1
ZGUgIkdTdHJlYW1lckF1ZGlvQ2FwdHVyZVNvdXJjZS5oIgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3
ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdl
YmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFs
dGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNlKQorICAg
IDogUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBWZWN0b3I8
c3RkOjpwYWlyPGNvbnN0IGNoYXIqLCBpbnQ+PiBlbmNvZGluZ3M7CisgICAgZW5jb2RpbmdzLnJl
c2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7CisgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVuZCh7
ICJPUFVTIiwgNDgwMDAgfSk7CisgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVuZCh7ICJHNzIy
IiwgODAwMCB9KTsKKyAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBwZW5kKHsgIlBDTUEiLCA4MDAw
IH0pOworICAgIGVuY29kaW5ncy51bmNoZWNrZWRBcHBlbmQoeyAiUENNVSIsIDgwMDAgfSk7Cisg
ICAgbV9hbGxvd2VkQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAg
Zm9yIChhdXRvJiBbZW5jb2RpbmdOYW1lLCBjbG9ja1JhdGVdIDogZW5jb2RpbmdzKQorICAgICAg
ICBnc3RfY2Fwc19hcHBlbmRfc3RydWN0dXJlKG1fYWxsb3dlZENhcHMuZ2V0KCksIGdzdF9zdHJ1
Y3R1cmVfbmV3KCJhcHBsaWNhdGlvbi94LXJ0cCIsICJtZWRpYSIsIEdfVFlQRV9TVFJJTkcsICJh
dWRpbyIsICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklORywgZW5jb2RpbmdOYW1lLCAiY2xv
Y2stcmF0ZSIsIEdfVFlQRV9JTlQsIGNsb2NrUmF0ZSwgbnVsbHB0cikpOworCisgICAgbV9hdWRp
b2NvbnZlcnQgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImF1ZGlvY29udmVydCIsIG51bGxw
dHIpOworICAgIG1fYXVkaW9yZXNhbXBsZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVk
aW9yZXNhbXBsZSIsIG51bGxwdHIpOworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNU
KG1fYmluLmdldCgpKSwgbV9hdWRpb2NvbnZlcnQuZ2V0KCksIG1fYXVkaW9yZXNhbXBsZS5nZXQo
KSwgbnVsbHB0cik7CisgICAgc2V0U291cmNlKFdURk1vdmUoc291cmNlKSk7Cit9CisKK2Jvb2wg
UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpzZXRQYXlsb2FkVHlwZShjb25z
dCBHUmVmUHRyPEdzdENhcHM+JiBjYXBzKQoreworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9iaW4u
Z2V0KCksICJPdXRnb2luZyBhdWRpbyBzb3VyY2UgcGF5bG9hZCBjYXBzOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgY2Fwcy5nZXQoKSk7CisgICAgYXV0byogc3RydWN0dXJlID0gZ3N0X2NhcHNfZ2V0X3N0
cnVjdHVyZShjYXBzLmdldCgpLCAwKTsKKyAgICBpZiAoY29uc3QgY2hhciogZW5jb2RpbmdOYW1l
ID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImVuY29kaW5nLW5hbWUiKSkg
eworICAgICAgICBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiT1BVUyIpKSB7CisgICAgICAgICAg
ICBtX2VuY29kZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgib3B1c2VuYyIsIG51bGxwdHIpOwor
ICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwb3B1c3Bh
eSIsIG51bGxwdHIpOworICAgICAgICAgICAgaWYgKCFtX2VuY29kZXIgfHwgIW1fcGF5bG9hZGVy
KQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAgICAgLy8gRklYTUU6
IEVuYWJsZSBkdHggdG9vPworICAgICAgICAgICAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19P
QkpFQ1QobV9lbmNvZGVyLmdldCgpKSwgImF1ZGlvLXR5cGUiLCAidm9pY2UiKTsKKworICAgICAg
ICAgICAgaWYgKGNvbnN0IGNoYXIqIHVzZUluYmFuZEZlYyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0
cmluZyhzdHJ1Y3R1cmUsICJ1c2VpbmJhbmRmZWMiKSkgeworICAgICAgICAgICAgICAgIGlmICgh
c3RyY21wKHVzZUluYmFuZEZlYywgIjEiKSkKKyAgICAgICAgICAgICAgICAgICAgZ19vYmplY3Rf
c2V0KG1fZW5jb2Rlci5nZXQoKSwgImluYmFuZC1mZWMiLCB0cnVlLCBudWxscHRyKTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChlcXVhbChlbmNvZGluZ05hbWUsICJHNzIyIikp
IHsKKyAgICAgICAgICAgIG1fcGF5bG9hZGVyID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoInJ0cGc3
MjJwYXkiLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmICghbV9wYXlsb2FkZXIpCisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGVuY29kaW5n
TmFtZSwgIlBDTUEiKSB8fCBlcXVhbChlbmNvZGluZ05hbWUsICJQQ01VIikpIHsKKyAgICAgICAg
ICAgIGF1dG8gcGF5bG9hZGVyTmFtZSA9IG1ha2VTdHJpbmcoInJ0cCIsIGVuY29kaW5nTmFtZSwg
InBheSIpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudChw
YXlsb2FkZXJOYW1lLmNvbnZlcnRUb0FTQ0lJTG93ZXJjYXNlKCkuYXNjaWkoKS5kYXRhKCksIG51
bGxwdHIpOworICAgICAgICAgICAgbV9lbmNvZGVyID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoImFs
YXdlbmMiLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmICghbV9wYXlsb2FkZXIgfHwgIW1fZW5j
b2RlcikKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1fYmluLmdldCgpLCAiVW5zdXBwb3J0ZWQgb3V0
Z29pbmcgYXVkaW8gZW5jb2Rpbmc6ICVzIiwgZW5jb2RpbmdOYW1lKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1QobV9iaW4uZ2V0KCksICJlbmNvZGluZy1uYW1lIG5vdCBmb3VuZCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgZ19vYmplY3Rfc2V0KG1fcGF5bG9hZGVyLmdldCgp
LCAiYXV0by1oZWFkZXItZXh0ZW5zaW9uIiwgRkFMU0UsIG51bGxwdHIpOworCisgICAgaWYgKGNv
bnN0IGNoYXIqIG1pblBUaW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwg
Im1pbnB0aW1lIikpIHsKKyAgICAgICAgU3RyaW5nIHRpbWUobWluUFRpbWUpOworICAgICAgICBp
ZiAoYXV0byB2YWx1ZSA9IHBhcnNlSW50ZWdlckFsbG93aW5nVHJhaWxpbmdKdW5rPGludDY0X3Q+
KHRpbWUpKQorICAgICAgICAgICAgZ19vYmplY3Rfc2V0KG1fcGF5bG9hZGVyLmdldCgpLCAibWlu
LXB0aW1lIiwgKnZhbHVlICogR1NUX01TRUNPTkQsIG51bGxwdHIpOworICAgIH0KKworICAgIGlu
dCBwYXlsb2FkVHlwZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfaW50KHN0cnVjdHVyZSwg
InBheWxvYWQiLCAmcGF5bG9hZFR5cGUpKQorICAgICAgICBnX29iamVjdF9zZXQobV9wYXlsb2Fk
ZXIuZ2V0KCksICJwdCIsIHBheWxvYWRUeXBlLCBudWxscHRyKTsKKworICAgIGdfb2JqZWN0X3Nl
dChtX2NhcHNGaWx0ZXIuZ2V0KCksICJjYXBzIiwgY2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAg
ICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3BheWxvYWRlci5nZXQo
KSk7CisgICAgaWYgKG1fZW5jb2RlcikgeworICAgICAgICBnc3RfYmluX2FkZChHU1RfQklOX0NB
U1QobV9iaW4uZ2V0KCkpLCBtX2VuY29kZXIuZ2V0KCkpOworICAgICAgICBnc3RfZWxlbWVudF9s
aW5rX21hbnkobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSwgbV92YWx2ZS5nZXQoKSwgbV9hdWRpb2Nv
bnZlcnQuZ2V0KCksIG1fYXVkaW9yZXNhbXBsZS5nZXQoKSwKKyAgICAgICAgICAgIG1fcHJlRW5j
b2RlclF1ZXVlLmdldCgpLCBtX2VuY29kZXIuZ2V0KCksIG1fcGF5bG9hZGVyLmdldCgpLCBtX3Bv
c3RFbmNvZGVyUXVldWUuZ2V0KCksIG51bGxwdHIpOworICAgIH0gZWxzZSB7CisgICAgICAgIGdz
dF9lbGVtZW50X2xpbmtfbWFueShtX291dGdvaW5nU291cmNlLmdldCgpLCBtX3ZhbHZlLmdldCgp
LCBtX2F1ZGlvY29udmVydC5nZXQoKSwgbV9hdWRpb3Jlc2FtcGxlLmdldCgpLAorICAgICAgICAg
ICAgbV9wYXlsb2FkZXIuZ2V0KCksIG1fcG9zdEVuY29kZXJRdWV1ZS5nZXQoKSwgbnVsbHB0cik7
CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5jMTkwMmI1ZjY5MTQyNTQ4YmExN2M3MDYzNDc2OGVlNWFjOWI1YmExCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsNDQgQEAKKy8qCisg
KiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisg
KiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0
IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIg
R2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0
d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9y
IChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFy
eSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICog
IGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJh
bnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQ
VVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBm
b3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5
IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRo
IHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZv
dW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rvbiwg
TUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXIuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXIgZmluYWwgOiBwdWJsaWMgUmVhbHRpbWVPdXRnb2luZ01lZGlh
U291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lT3V0Z29p
bmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4gY3JlYXRlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0
ZT4mJiBhdWRpb1NvdXJjZSkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZShhdWRpb1NvdXJjZSkpKTsgfQorCisgICAgYm9v
bCBzZXRQYXlsb2FkVHlwZShjb25zdCBHUmVmUHRyPEdzdENhcHM+JikgZmluYWw7CisKK3Byb3Rl
Y3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIo
UmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmKTsKKworcHJpdmF0ZToKKyAgICBHUmVmUHRy
PEdzdEVsZW1lbnQ+IG1fYXVkaW9jb252ZXJ0OworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9h
dWRpb3Jlc2FtcGxlOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjU0MTVl
NTExM2VjNDBiNTViMjhjNGFjZTAyMjI2OWE5YTVlZjg0MTMKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRn
b2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDE1NCBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJDb21tb24uaCIKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJNZWRpYVN0cmVhbVNvdXJjZS5oIgorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJ
CisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxF
X0FQSQorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93ZWJydGNfZW5kcG9pbnRf
ZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dlYnJ0Y19lbmRwb2ludF9k
ZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJj
ZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAg
ICBtX2JpbiA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOworCisgICAgbV92YWx2ZSA9IGdzdF9lbGVt
ZW50X2ZhY3RvcnlfbWFrZSgidmFsdmUiLCBudWxscHRyKTsKKyAgICBnc3RfdXRpbF9zZXRfb2Jq
ZWN0X2FyZyhHX09CSkVDVChtX3ZhbHZlLmdldCgpKSwgImRyb3AtbW9kZSIsICJmb3J3YXJkLXN0
aWNreS1ldmVudHMiKTsKKworICAgIG1fcHJlRW5jb2RlclF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIG1fcG9zdEVuY29kZXJRdWV1ZSA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgicXVldWUiLCBudWxscHRyKTsKKyAgICBtX2NhcHNGaWx0
ZXIgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21ha2UoImNhcHNmaWx0ZXIiLCBudWxscHRyKTsKKwor
ICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV92YWx2ZS5n
ZXQoKSwgbV9wcmVFbmNvZGVyUXVldWUuZ2V0KCksCisgICAgICAgIG1fcG9zdEVuY29kZXJRdWV1
ZS5nZXQoKSwgbV9jYXBzRmlsdGVyLmdldCgpLCBudWxscHRyKTsKKworICAgIGF1dG8gc3JjUGFk
ID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fY2Fwc0ZpbHRlci5nZXQo
KSwgInNyYyIpKTsKKyAgICBnc3RfZWxlbWVudF9hZGRfcGFkKG1fYmluLmdldCgpLCBnc3RfZ2hv
c3RfcGFkX25ldygic3JjIiwgc3JjUGFkLmdldCgpKSk7Cit9CisKK1JlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lcjo6flJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1l
cigpCit7CisgICAgc3RvcCgpOworCisgICAgaWYgKG1fd2VicnRjU2lua1BhZCkgeworICAgICAg
ICBhdXRvIHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2Jp
bi5nZXQoKSwgInNyYyIpKTsKKyAgICAgICAgZ3N0X3BhZF91bmxpbmsoc3JjUGFkLmdldCgpLCBt
X3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworCisgICAgICAgIGF1dG8gcGFyZW50ID0gYWRvcHRHUmVm
KGdzdF9wYWRfZ2V0X3BhcmVudF9lbGVtZW50KG1fd2VicnRjU2lua1BhZC5nZXQoKSkpOworICAg
ICAgICBHU1RfREVCVUdfT0JKRUNUKHBhcmVudC5nZXQoKSwgIlJlbW92aW5nIHBhZCAlIiBHU1Rf
UFRSX0ZPUk1BVCwgbV93ZWJydGNTaW5rUGFkLmdldCgpKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRf
cmVsZWFzZV9yZXF1ZXN0X3BhZChwYXJlbnQuZ2V0KCksIG1fd2VicnRjU2lua1BhZC5nZXQoKSk7
CisgICAgfQorCisgICAgZ3N0X2VsZW1lbnRfc2V0X3N0YXRlKG1fYmluLmdldCgpLCBHU1RfU1RB
VEVfTlVMTCk7CisgICAgaWYgKGF1dG8gcGlwZWxpbmUgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRf
Z2V0X3BhcmVudChtX2Jpbi5nZXQoKSkpKQorICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklO
X0NBU1QocGlwZWxpbmUuZ2V0KCkpLCBtX2Jpbi5nZXQoKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRTb3VyY2UoUmVmPE1lZGlhU3RyZWFtVHJh
Y2tQcml2YXRlPiYmIG5ld1NvdXJjZSkKK3sKKyAgICBpZiAobV9zb3VyY2UgJiYgIW1faW5pdGlh
bFNldHRpbmdzKQorICAgICAgICBtX2luaXRpYWxTZXR0aW5ncyA9IG1fc291cmNlLnZhbHVlKCkt
PnNldHRpbmdzKCk7CisKKyAgICBpZiAobV9zb3VyY2UpCisgICAgICAgIG1fc291cmNlLnZhbHVl
KCktPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBtX3NvdXJjZSA9IFdURk1vdmUobmV3U291
cmNlKTsKKyAgICBpbml0aWFsaXplRnJvbVRyYWNrKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRn
b2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzdGFydCgpCit7CisgICAgbV9zb3VyY2UudmFsdWUo
KS0+YWRkT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1faXNTdG9wcGVkID0gZmFsc2U7CisgICAgZ3N0
X2VsZW1lbnRfbGluayhtX291dGdvaW5nU291cmNlLmdldCgpLCBtX3ZhbHZlLmdldCgpKTsKKyAg
ICBnc3RfZWxlbWVudF9zeW5jX3N0YXRlX3dpdGhfcGFyZW50KG1fYmluLmdldCgpKTsKK30KKwor
dm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnN0b3AoKQoreworICAg
IG1faXNTdG9wcGVkID0gdHJ1ZTsKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm47
CisKKyAgICBtX3NvdXJjZS52YWx1ZSgpLT5yZW1vdmVPYnNlcnZlcigqdGhpcyk7CisgICAgZ3N0
X2VsZW1lbnRfc2VuZF9ldmVudChtX291dGdvaW5nU291cmNlLmdldCgpLCBnc3RfZXZlbnRfbmV3
X2VvcygpKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfbG9ja2VkX3N0YXRlKG1fYmluLmdldCgpLCBU
UlVFKTsKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9vdXRnb2luZ1NvdXJjZS5nZXQoKSwg
R1NUX1NUQVRFX05VTEwpOworICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU5fQ0FTVChtX2Jpbi5n
ZXQoKSksIG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3NldF9sb2Nr
ZWRfc3RhdGUobV9iaW4uZ2V0KCksIEZBTFNFKTsKKyAgICBtX3NvdXJjZS5yZXNldCgpOworfQor
Cit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c291cmNlTXV0ZWRD
aGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fc291cmNlKQorICAgICAgICByZXR1cm47CisgICAgQVNT
RVJUKG1fbXV0ZWQgIT0gbV9zb3VyY2UudmFsdWUoKS0+bXV0ZWQoKSk7CisgICAgbV9tdXRlZCA9
IG1fc291cmNlLnZhbHVlKCktPm11dGVkKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2VFbmFibGVkQ2hhbmdlZCgpCit7CisgICAgaWYgKCFt
X3NvdXJjZSkKKyAgICAgICAgcmV0dXJuOworCisgICAgbV9lbmFibGVkID0gbV9zb3VyY2UudmFs
dWUoKS0+ZW5hYmxlZCgpOworICAgIGlmIChtX3ZhbHZlKQorICAgICAgICBnX29iamVjdF9zZXQo
bV92YWx2ZS5nZXQoKSwgImRyb3AiLCAhbV9lbmFibGVkLCBudWxscHRyKTsKK30KKwordm9pZCBS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmluaXRpYWxpemVGcm9tVHJhY2so
KQoreworICAgIG1fbXV0ZWQgPSBtX3NvdXJjZS52YWx1ZSgpLT5tdXRlZCgpOworICAgIG1fZW5h
YmxlZCA9IG1fc291cmNlLnZhbHVlKCktPmVuYWJsZWQoKTsKKyAgICBtX291dGdvaW5nU291cmNl
ID0gd2Via2l0TWVkaWFTdHJlYW1TcmNOZXcoKTsKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NB
U1QobV9iaW4uZ2V0KCkpLCBtX291dGdvaW5nU291cmNlLmdldCgpKTsKKyAgICB3ZWJraXRNZWRp
YVN0cmVhbVNyY0FkZFRyYWNrKFdFQktJVF9NRURJQV9TVFJFQU1fU1JDKG1fb3V0Z29pbmdTb3Vy
Y2UuZ2V0KCkpLCBtX3NvdXJjZS0+cHRyKCksIHRydWUpOworfQorCit2b2lkIFJlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bGluaygpCit7CisgICAgZ3N0X2VsZW1lbnRfbGlu
ayhtX3Bvc3RFbmNvZGVyUXVldWUuZ2V0KCksIG1fY2Fwc0ZpbHRlci5nZXQoKSk7CisKKyAgICBh
dXRvIHNyY1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChtX2Jpbi5n
ZXQoKSwgInNyYyIpKTsKKyAgICBnc3RfcGFkX2xpbmsoc3JjUGFkLmdldCgpLCBtX3dlYnJ0Y1Np
bmtQYWQuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV9i
aW4uZ2V0KCkpOworfQorCit2b2lkIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1l
cjo6c2V0U2lua1BhZChHUmVmUHRyPEdzdFBhZD4mJiBwYWQpCit7CisgICAgbV93ZWJydGNTaW5r
UGFkID0gV1RGTW92ZShwYWQpOworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+
IHRyYW5zY2VpdmVyOworICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCksICJ0
cmFuc2NlaXZlciIsICZ0cmFuc2NlaXZlci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgbV9zZW5k
ZXIuY2xlYXIoKTsKKyAgICBnX29iamVjdF9nZXQodHJhbnNjZWl2ZXIuZ2V0KCksICJzZW5kZXIi
LCAmbV9zZW5kZXIub3V0UHRyKCksIG51bGxwdHIpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi42ZTVjMWNkMmRlNWQ2NGMzNjFhY2VmZTZmNDMwN2ZhZmQ3NDhkYWM2Ci0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5oCkBAIC0wLDAgKzEsODUgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNF
KEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUuaCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2Fm
ZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIgOiBwdWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyPiwgcHVibGljIE1lZGlhU3RyZWFt
VHJhY2tQcml2YXRlOjpPYnNlcnZlciB7CitwdWJsaWM6CisgICAgflJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lcigpOworCisgICAgdm9pZCBzdGFydCgpOworICAgIHZvaWQgc3Rv
cCgpOworICAgIHZvaWQgc2V0U291cmNlKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7
CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmIHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1f
c291cmNlLT5nZXQoKTsgfQorCisgICAgY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgYWxsb3dlZENh
cHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93ZWRDYXBzOyB9CisKKyAgICB2b2lkIGxpbmsoKTsK
KyAgICBjb25zdCBHUmVmUHRyPEdzdFBhZD4mIHBhZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2VicnRj
U2lua1BhZDsgfQorICAgIHZvaWQgc2V0U2lua1BhZChHUmVmUHRyPEdzdFBhZD4mJik7CisKKyAg
ICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gc2VuZGVyKCkgY29uc3QgeyByZXR1cm4gbV9z
ZW5kZXI7IH0KKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IGJpbigpIGNvbnN0IHsgcmV0dXJuIG1f
YmluOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2V0UGF5bG9hZFR5cGUoY29uc3QgR1JlZlB0cjxH
c3RDYXBzPiYpIHsgcmV0dXJuIGZhbHNlOyB9CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKTsKKworICAgIHZvaWQgaW5pdGlh
bGl6ZUZyb21UcmFjaygpOworCisgICAgYm9vbCBtX2VuYWJsZWQgeyB0cnVlIH07CisgICAgYm9v
bCBtX211dGVkIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAg
ICBzdGQ6Om9wdGlvbmFsPFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4+IG1fc291cmNlOwor
ICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzPiBtX2luaXRpYWxT
ZXR0aW5nczsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fYmluOworICAgIEdSZWZQdHI8R3N0
RWxlbWVudD4gbV9vdXRnb2luZ1NvdXJjZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmFs
dmU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3ByZUVuY29kZXJRdWV1ZTsKKyAgICBHUmVm
UHRyPEdzdEVsZW1lbnQ+IG1fZW5jb2RlcjsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGF5
bG9hZGVyOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9wb3N0RW5jb2RlclF1ZXVlOworICAg
IEdSZWZQdHI8R3N0RWxlbWVudD4gbV9jYXBzRmlsdGVyOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4g
bV9hbGxvd2VkQ2FwczsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9zZW5kZXI7
CisgICAgR1JlZlB0cjxHc3RQYWQ+IG1fd2VicnRjU2lua1BhZDsKKworcHJpdmF0ZToKKyAgICB2
b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOworICAgIHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQo
KTsKKworICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciBBUEkKKyAgICB2
b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlJikgb3ZlcnJpZGUg
eyBzb3VyY2VNdXRlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgc291cmNlRW5hYmxlZENoYW5nZWQo
KTsgfQorICAgIHZvaWQgdHJhY2tTZXR0aW5nc0NoYW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZh
dGUmKSBvdmVycmlkZSB7IGluaXRpYWxpemVGcm9tVHJhY2soKTsgfQorICAgIHZvaWQgdHJhY2tF
bmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJyaWRlIHsgfQorfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiOGY2MzRiMjM0MDA3YjFlOTYwYmJhMWU1NjczOTNm
NjEyY2YyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNw
cApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2Fs
aWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdT
dHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3Ry
ZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3
ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdl
YmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFs
dGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNlKQorICAg
IDogUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICByZWdpc3Rl
cldlYktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CisKKyAgICBtX3ZpZGVvQ29udmVydCA9IGdzdF9l
bGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252ZXJ0IiwgbnVsbHB0cik7CisgICAgbV9lbmNv
ZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJ3ZWJydGN2aWRlb2VuY29kZXIiLCBudWxs
cHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1f
dmlkZW9Db252ZXJ0LmdldCgpLCBtX2VuY29kZXIuZ2V0KCksIG51bGxwdHIpOworCisgICAgYXV0
byogcGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9nZXRfcGFkX3RlbXBsYXRlKG1fZW5jb2Rlci5n
ZXQoKSwgInNyYyIpOworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3RfcGFkX3RlbXBsYXRl
X2dldF9jYXBzKHBhZFRlbXBsYXRlKSk7CisgICAgbV9hbGxvd2VkQ2FwcyA9IGFkb3B0R1JlZihn
c3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZ3N0X2NhcHNfZm9yZWFjaChjYXBzLmdldCgpLCBy
ZWludGVycHJldF9jYXN0PEdzdENhcHNGb3JlYWNoRnVuYz4oK1tdKEdzdENhcHNGZWF0dXJlcyos
IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBh
dXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0PFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKKyAgICAgICAgY29uc3QgY2hhciogbmFtZSA9IGdzdF9z
dHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKKyAgICAgICAgY29uc3QgY2hhciogZW5jb2Rp
bmdOYW1lID0gbnVsbHB0cjsKKyAgICAgICAgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LXZwOCIp
KQorICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIlZQOCI7CisgICAgICAgIGVsc2UgaWYgKGVx
dWFsKG5hbWUsICJ2aWRlby94LXZwOSIpKQorICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0gIlZQ
OSI7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LWgyNjQiKSkKKyAgICAg
ICAgICAgIGVuY29kaW5nTmFtZSA9ICJIMjY0IjsKKyAgICAgICAgaWYgKGVuY29kaW5nTmFtZSkK
KyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUoc291cmNlLT5tX2FsbG93ZWRD
YXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygiYXBwbGljYXRpb24veC1ydHAiLCAibWVkaWEi
LCBHX1RZUEVfU1RSSU5HLCAidmlkZW8iLCAiZW5jb2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcs
IGVuY29kaW5nTmFtZSwgImNsb2NrLXJhdGUiLCBHX1RZUEVfSU5ULCA5MDAwMCwgbnVsbHB0cikp
OworICAgIH0pLCB0aGlzKTsKKworICAgIHNldFNvdXJjZShXVEZNb3ZlKHNvdXJjZSkpOworfQor
Citib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5
cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2FwcykKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNU
KG1fYmluLmdldCgpLCAiT3V0Z29pbmcgdmlkZW8gc291cmNlIHBheWxvYWQgY2FwczogJSIgR1NU
X1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAgIGF1dG8qIHN0cnVjdHVyZSA9IGdzdF9jYXBz
X2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgMCk7CisgICAgR1JlZlB0cjxHc3RDYXBzPiBlbmNv
ZGVyQ2FwczsKKyAgICBpZiAoY29uc3QgY2hhciogZW5jb2RpbmdOYW1lID0gZ3N0X3N0cnVjdHVy
ZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImVuY29kaW5nLW5hbWUiKSkgeworICAgICAgICBpZiAo
ZXF1YWwoZW5jb2RpbmdOYW1lLCAiVlA4IikpIHsKKyAgICAgICAgICAgIGVuY29kZXJDYXBzID0g
YWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtdnA4IikpOworICAg
ICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwdnA4cGF5Iiwg
bnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiVlA5Iikp
IHsKKyAgICAgICAgICAgIGVuY29kZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0
eV9zaW1wbGUoInZpZGVvL3gtdnA5IikpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtl
R1N0cmVhbWVyRWxlbWVudCgicnRwdnA5cGF5IiwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBp
ZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiSDI2NCIpKSB7CisgICAgICAgICAgICBlbmNvZGVyQ2Fw
cyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHlfc2ltcGxlKCJ2aWRlby94LWgyNjQiKSk7
CisgICAgICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJydHBoMjY0
cGF5IiwgbnVsbHB0cik7CisgICAgICAgICAgICAvLyBGSVhNRTogaHR0cHM6Ly9naXRsYWIuZnJl
ZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1Z2lucy1nb29kLy0vaXNzdWVzLzg5MworICAg
ICAgICAgICAgLy8gZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1QobV9wYXlsb2FkZXIu
Z2V0KCkpLCAiYWdncmVnYXRlLW1vZGUiLCAiemVyby1sYXRlbmN5Iik7CisgICAgICAgICAgICAv
LyBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwiLCAtMSwg
bnVsbHB0cik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNU
KG1fYmluLmdldCgpLCAiVW5zdXBwb3J0ZWQgb3V0Z29pbmcgdmlkZW8gZW5jb2Rpbmc6ICVzIiwg
ZW5jb2RpbmdOYW1lKTsKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfQorICAg
IH0gZWxzZSB7CisgICAgICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJlbmNvZGlu
Zy1uYW1lIG5vdCBmb3VuZCIpOworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAg
aWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6
IFJlLWVuYWJsZSB0aGlzLiBDdXJyZW50bHkgdHJpZ2dlcnMgY2FwcyBuZWdvdGlhdGlvbiBlcnJv
ci4KKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJhdXRvLWhlYWRlci1leHRl
bnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBnX29iamVjdF9zZXQobV9lbmNvZGVyLmdl
dCgpLCAiZm9ybWF0IiwgZW5jb2RlckNhcHMuZ2V0KCksIG51bGxwdHIpOworCisgICAgaW50IHBh
eWxvYWRUeXBlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAicGF5
bG9hZCIsICZwYXlsb2FkVHlwZSkpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5n
ZXQoKSwgInB0IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIpOworCisgICAgYXV0byBmaWx0ZXJlZENh
cHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVj
dHVyZSksIG51bGxwdHIpKTsKKyAgICBnX29iamVjdF9zZXQobV9jYXBzRmlsdGVyLmdldCgpLCAi
Y2FwcyIsIGZpbHRlcmVkQ2Fwcy5nZXQoKSwgbnVsbHB0cik7CisKKyAgICBnc3RfYmluX2FkZChH
U1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3BheWxvYWRlci5nZXQoKSk7CisgICAgZ3N0X2Vs
ZW1lbnRfbGlua19tYW55KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIG1fdmFsdmUuZ2V0KCksIG1f
dmlkZW9Db252ZXJ0LmdldCgpLCBtX3ByZUVuY29kZXJRdWV1ZS5nZXQoKSwKKyAgICAgICAgbV9l
bmNvZGVyLmdldCgpLCBtX3BheWxvYWRlci5nZXQoKSwgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgp
LCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uODE1MWZkY2EwMjMzMjI0NWFjYzlhZmYyMTVkMjk1MGQxZWY1MzQ3ZgotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaApAQCAtMCwwICsxLDQ3IEBACisv
KgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisg
KgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0
ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNl
LCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3
YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vu
c2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEg
Y29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcg
d2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAq
ICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0
b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyIGZpbmFsIDogcHVibGljIFJlYWx0aW1lT3V0Z29pbmdN
ZWRpYVNvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91
dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+IGNyZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1By
aXZhdGU+JiYgc291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKHNvdXJjZSkpKTsgfQorCisgICAgdm9pZCBzZXRB
cHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlSb3RhdGlvbikgeyBtX3Nob3VsZEFwcGx5Um90
YXRpb24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9CisKKyAgICBib29sIHNldFBheWxvYWRUeXBl
KGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsKKworcHJvdGVjdGVkOgorICAgIGV4cGxp
Y2l0IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU+JiYpOworCisgICAgYm9vbCBtX3Nob3VsZEFwcGx5Um90YXRpb24geyBmYWxz
ZSB9OworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92aWRlb0NvbnZlcnQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2ViUlRDUHJvdmlkZXIuY3BwCmluZGV4IDEwNjQ2
YjdlOTMzZjZhYmJjZmQ1YTU5MjkzNTE4MjY4NmRkNDY0OWUuLmUxZjhlMTQyNGRmYzkxZDExYjc5
NzM0YWY2ZmNmOGVlYjg5ZTQxZGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vbGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVy
LmNwcApAQCAtNTcxLDcgKzU3MSw2IEBAIHN0ZDo6b3B0aW9uYWw8UlRDUnRwQ29kZWNDYXBhYmls
aXR5PiBMaWJXZWJSVENQcm92aWRlcjo6Y29kZWNDYXBhYmlsaXR5KGNvbnN0IENvCiAgICAgfQog
ICAgIHJldHVybiB7IH07CiB9Ci0jZW5kaWYgLy8gVVNFKExJQldFQlJUQykKIAogI2lmICFQTEFU
Rk9STShDT0NPQSkKIC8vIEZJWE1FOiBJbXBsZW1lbnQgdGhlc2Ugcm91dGluZXMuCkBAIC01ODQs
NyArNTgzLDkgQEAgc3RhdGljIGJvb2wgaXNWUFNvZnR3YXJlRGVjb2RlclNtb290aChjb25zdCBW
aWRlb0NvbmZpZ3VyYXRpb24mKQogewogICAgIHJldHVybiB0cnVlOwogfQotI2VuZGlmCisjZW5k
aWYgLy8gIVBMQVRGT1JNKENPQ09BKQorCisjZW5kaWYgLy8gVVNFKExJQldFQlJUQykKIAogdm9p
ZCBMaWJXZWJSVENQcm92aWRlcjo6Y3JlYXRlRGVjb2RpbmdDb25maWd1cmF0aW9uKE1lZGlhRGVj
b2RpbmdDb25maWd1cmF0aW9uJiYgY29uZmlndXJhdGlvbiwgRGVjb2RpbmdDb25maWd1cmF0aW9u
Q2FsbGJhY2smJiBjYWxsYmFjaykKIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3Rp
bmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcApp
bmRleCAxODNjY2UxOTc2MzgyMDFiZTdiNGViY2Q0Nzg3OTMxNjJlNjE0NjNkLi5iNzM1YmYxNDBi
ZTNmN2VlYmQ1MGUzMjU0MjRiNzIwNjhiNGYyMjYxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCkBAIC01OTksNiArNTk5LDkgQEAgdm9pZCBJbnRlcm5hbHM6OnJlc2V0VG9Db25z
aXN0ZW50U3RhdGUoUGFnZSYgcGFnZSkKICAgICBydGNQcm92aWRlci5zZXRIMjY1U3VwcG9ydCh0
cnVlKTsKICAgICBydGNQcm92aWRlci5zZXRWUDlTdXBwb3J0KHRydWUsIHRydWUpOwogICAgIHJ0
Y1Byb3ZpZGVyLmNsZWFyRmFjdG9yeSgpOworI2VsaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisg
ICAgcGFnZS5zZXR0aW5ncygpLnNldFdlYlJUQ0VuY3J5cHRpb25FbmFibGVkKHRydWUpOworICAg
IHBhZ2Uuc2V0dGluZ3MoKS5zZXRQZWVyQ29ubmVjdGlvbkVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYK
IAogICAgIHBhZ2Uuc2V0RnVsbHNjcmVlbkF1dG9IaWRlRHVyYXRpb24oMF9zKTsKQEAgLTE2MTks
NiArMTYyMiw3IEBAIHZvaWQgSW50ZXJuYWxzOjphcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRl
b1NvdXJjZXMoUlRDUGVlckNvbm5lY3Rpb24mIGNvbm5lY3RpCiB7CiAgICAgY29ubmVjdGlvbi5h
cHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKTsKIH0KKwogdm9pZCBJbnRlcm5h
bHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KGJvb2wgdmFsdWUpCiB7CiAjaWYgVVNFKExJQldFQlJU
QykKQEAgLTE2MjYsNiArMTYzMCw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRXZWJSVENIMjY1U3Vw
cG9ydChib29sIHZhbHVlKQogICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLnNldEgy
NjVTdXBwb3J0KHZhbHVlKTsKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5jbGVh
ckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5k
aWYKIH0KIApAQCAtMTYzNiw2ICsxNjQyLDkgQEAgdm9pZCBJbnRlcm5hbHM6OnNldFdlYlJUQ1ZQ
OVN1cHBvcnQoYm9vbCBzdXBwb3J0VlA5UHJvZmlsZTAsIGJvb2wgc3VwcG9ydFZQOVByb2YKICAg
ICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5zZXRWUDlTdXBwb3J0KHN1cHBvcnRWUDlQ
cm9maWxlMCwgc3VwcG9ydFZQOVByb2ZpbGUyKTsKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJv
dmlkZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShz
dXBwb3J0VlA5UHJvZmlsZTApOworICAgIFVOVVNFRF9QQVJBTShzdXBwb3J0VlA5UHJvZmlsZTIp
OwogI2VuZGlmCiB9CiAKQEAgLTE2NDYsNiArMTY1NSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRX
ZWJSVENWUDlWVEJTdXBwb3J0KGJvb2wgdmFsdWUpCiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1By
b3ZpZGVyKCkuc2V0VlA5VlRCU3VwcG9ydCh2YWx1ZSk7CiAgICAgICAgIHBhZ2UtPmxpYldlYlJU
Q1Byb3ZpZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAgICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFS
QU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2ODYsNiArMTY5Nyw4IEBAIHZvaWQgSW50ZXJu
YWxzOjpzZXRFbmFibGVXZWJSVENFbmNyeXB0aW9uKGJvb2wgdmFsdWUpCiAjaWYgVVNFKExJQldF
QlJUQykKICAgICBpZiAoYXV0byogcGFnZSA9IGNvbnRleHREb2N1bWVudCgpLT5wYWdlKCkpCiAg
ICAgICAgIHBhZ2UtPnNldHRpbmdzKCkuc2V0V2ViUlRDRW5jcnlwdGlvbkVuYWJsZWQodmFsdWUp
OworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTYs
NiArMTcwOSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRVc2VEVExTMTAoYm9vbCB1c2VEVExTMTAp
CiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1lbnQtPnBhZ2UoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIGRvY3VtZW50LT5wYWdlKCktPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0VXNlRFRMUzEw
KHVzZURUTFMxMCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTSh1c2VEVExTMTApOwogI2VuZGlm
CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFrZS9GaW5kR1N0cmVhbWVyLmNtYWtlIGIvU291
cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKaW5kZXggMDY2MzNlZDRkODk5ZjI4M2NlZDQ1
OGNkYjgzOTE4MjhiOGJjNWQzZS4uMzIxNmY2OTc0YjUzYzBjNzM4NzRmOWZlZGNhZmYyOWM4YmMw
YTIyYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKKysrIGIv
U291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UKQEAgLTI4LDYgKzI4LDkgQEAKICMgIGdz
dHJlYW1lci1jb2RlY3BhcnNlcjpHU1RSRUFNRVJfQ09ERUNQQVJTRVJTX0lOQ0xVREVfRElSUyBh
bmQgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVMKICMgIGdzdHJlYW1lci1mdWxsOiAg
ICAgICBHU1RSRUFNRVJfRlVMTF9JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9GVUxMX0xJQlJB
UklFUwogIyAgZ3N0cmVhbWVyLXRyYW5zY29kZXI6IEdTVFJFQU1FUl9UUkFOU0NPREVSX0lOQ0xV
REVfRElSUyBhbmQgR1NUUkVBTUVSX1RSQU5TQ09ERVJfTElCUkFSSUVTCisjICBnc3RyZWFtZXIt
cnRwOiAgICAgICAgR1NUUkVBTUVSX1JUUF9JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9SVFBf
TElCUkFSSUVTCisjICBnc3RyZWFtZXItc2RwOiAgICAgICAgR1NUUkVBTUVSX1NEUF9JTkNMVURF
X0RJUlMgYW5kIEdTVFJFQU1FUl9TRFBfTElCUkFSSUVTCisjICBnc3RyZWFtZXItd2VicnRjOiAg
ICAgR1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9XRUJSVENfTElC
UkFSSUVTCiAjCiAjIENvcHlyaWdodCAoQykgMjAxMiBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgPHJh
a3Vjb0B3ZWJraXQub3JnPgogIwpAQCAtMTEwLDYgKzExMyw5IEBAIEZJTkRfR1NUUkVBTUVSX0NP
TVBPTkVOVChHU1RSRUFNRVJfVEFHIGdzdHJlYW1lci10YWctMS4wIGdzdHRhZy0xLjApCiBGSU5E
X0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX1ZJREVPIGdzdHJlYW1lci12aWRlby0xLjAg
Z3N0dmlkZW8tMS4wKQogRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9DT0RFQ1BB
UlNFUlMgZ3N0cmVhbWVyLWNvZGVjcGFyc2Vycy0xLjAgZ3N0Y29kZWNwYXJzZXJzLTEuMCkKIEZJ
TkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVFJBTlNDT0RFUiBnc3RyZWFtZXItdHJh
bnNjb2Rlci0xLjAgZ3N0dHJhbnNjb2Rlci0xLjApCitGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQo
R1NUUkVBTUVSX1JUUCBnc3RyZWFtZXItcnRwLTEuMCBnc3RydHAtMS4wKQorRklORF9HU1RSRUFN
RVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9TRFAgZ3N0cmVhbWVyLXNkcC0xLjAgZ3N0c2RwLTEuMCkK
K0ZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfV0VCUlRDIGdzdHJlYW1lci13ZWJy
dGMtMS4wIGdzdHdlYnJ0Yy0xLjApCiAKICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tCiAjIDMuIFByb2Nlc3MgdGhlIENPTVBPTkVOVFMgcGFzc2VkIHRv
IEZJTkRfUEFDS0FHRQpAQCAtMTU0LDQgKzE2MCw2IEBAIG1hcmtfYXNfYWR2YW5jZWQoCiAgICAg
R1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVMKICAgICBHU1RSRUFNRVJfRlVMTF9JTkNM
VURFX0RJUlMKICAgICBHU1RSRUFNRVJfRlVMTF9MSUJSQVJJRVMKKyAgICBHU1RSRUFNRVJfV0VC
UlRDX0lOQ0xVREVfRElSUworICAgIEdTVFJFQU1FUl9XRUJSVENfTElCUkFSSUVTCiApCmRpZmYg
LS1naXQgYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlIGIvU291cmNlL2NtYWtl
L0dTdHJlYW1lckNoZWNrcy5jbWFrZQppbmRleCA5MTFmNmU2Yzk1YWI4MzBiNmZjMDJlMDFlZGI3
NzU0ZmE5MTJmMzRhLi4xZTc1NmJkMTY3MzQyNTNkNjU4YmFhODZmNTY3MmE2NTljODgzOGFkIDEw
MDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyQ2hlY2tzLmNtYWtlCisrKyBiL1NvdXJj
ZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UKQEAgLTMyLDYgKzMyLDEwIEBAIGlmIChFTkFC
TEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykKICAgICAgICAgICAgICAgbGlzdChBUFBFTkQg
R1NUUkVBTUVSX0NPTVBPTkVOVFMgdHJhbnNjb2RlcikKICAgICAgICAgICBlbmRpZiAoKQogCisg
ICAgICAgICAgaWYgKFVTRV9HU1RSRUFNRVJfV0VCX1JUQykKKyAgICAgICAgICAgICAgbGlzdChB
UFBFTkQgR1NUUkVBTUVSX0NPTVBPTkVOVFMgd2VicnRjKQorICAgICAgICAgIGVuZGlmICgpCisK
ICAgICAgICAgICBmaW5kX3BhY2thZ2UoR1N0cmVhbWVyIDEuMTQuMCBSRVFVSVJFRCBDT01QT05F
TlRTICR7R1NUUkVBTUVSX0NPTVBPTkVOVFN9KQogCiAgICAgICAgICAgaWYgKEVOQUJMRV9XRUJf
QVVESU8pCkBAIC01OCwxMSArNjIsMjMgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VC
X0FVRElPKQogICAgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJHU3RyZWFtZXJUcmFu
c2NvZGVyID49IDEuMjAgaXMgbmVlZGVkIGZvciBVU0VfR1NUUkVBTUVSX1RSQU5TQ09ERVIuIikK
ICAgICAgICAgICBlbmRpZiAoKQogCisgICAgICAgICAgaWYgKFVTRV9HU1RSRUFNRVJfV0VCUlRD
IEFORCAoUENfR1NUUkVBTUVSX1ZFUlNJT04gVkVSU0lPTl9MRVNTICIxLjIwIiBPUiBOT1QgUENf
R1NUUkVBTUVSX1dFQlJUQ19GT1VORCkpCisgICAgICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJS
T1IgIkdTdHJlYW1lcldlYlJUQyA+PSAxLjIwIGlzIG5lZWRlZCBmb3IgVVNFX0dTVFJFQU1FUl9X
RUJSVEMuIikKKyAgICAgICAgICBlbmRpZiAoKQogICAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAK
IGlmIChFTkFCTEVfTUVESUFfU1RSRUFNIEFORCBFTkFCTEVfV0VCX1JUQykKLSAgICBTRVRfQU5E
X0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIFRSVUUpCisgICAgaWYgKFVTRV9HU1RSRUFN
RVJfV0VCUlRDKQorICAgICAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRD
IEZBTFNFKQorCisgICAgICAgIGZpbmRfcGFja2FnZShPcGVuU1NMKQorICAgICAgICBpZiAoTk9U
IE9QRU5TU0xfRk9VTkQpCisgICAgICAgICAgICBtZXNzYWdlKEZBVEFMX0VSUk9SICJPcGVuU1NM
IGlzIG5lZWRlZCBmb3IgVVNFX0dTVFJFQU1FUl9XRUJSVEMuIikKKyAgICAgICAgZW5kaWYgKCkK
KyAgICBlbHNlICgpCisgICAgICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJS
VEMgVFJVRSkKKyAgICBlbmRpZiAoKQogZWxzZSAoKQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JV
SUxEKFVTRV9MSUJXRUJSVEMgRkFMU0UpCiBlbmRpZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2Nt
YWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRl
ZmluaXRpb25zLmNtYWtlCmluZGV4IDM5NGY4MGNhMjQ3ZTU5Y2EzODk5NWUwOTE2YTEwMDg0OGYz
YjY3M2MuLmQ1YWYwZTIyYjA0MThhYzQwODA4MjU5MjFjZGVjNWQ0YjQ4M2QxYjggMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZpbml0aW9ucy5jbWFrZQorKysgYi9Tb3VyY2Uv
Y21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21ha2UKQEAgLTExLDMgKzExLDQgQEAgV0VCS0lU
X09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9OQVRJVkVfVklERU8gIlRvZ2dsZSBuYXRpdmUg
dmlkZW8gc3VwcG9ydCBpbgogV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9OQVRJ
VkVfQVVESU8gIlRvZ2dsZSBuYXRpdmUgYXVkaW8gc3VwcG9ydCBpbiBHU3RyZWFtZXIgbWVkaWEg
cGxheWVyIiBQUklWQVRFIE9GRikKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJf
VEVYVF9TSU5LICJUb2dnbGUgdGV4dCBzaW5rIHN1cHBvcnQgaW4gR1N0cmVhbWVyIG1lZGlhIHBs
YXllciIgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJfVFJB
TlNDT0RFUiAiV2hldGhlciB0byBlbmFibGUgc3VwcG9ydCBmb3IgR1N0cmVhbWVyIE1lZGlhUmVj
b3JkZXIgYmFja2VuZCIgUFJJVkFURSBPTikKK1dFQktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RS
RUFNRVJfV0VCUlRDICJXaGV0aGVyIHRvIGVuYWJsZSBzdXBwb3J0IGZvciBXZWJSVEMiIFBSSVZB
VEUgT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNt
YWtlIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVuZGVuY2llcy5jbWFrZQppbmRleCAyM2Qy
MWY1MmQwNTUwNTMyNTY5NWQzYTFhZmExZjg3MTY3MWMwYTFjLi43M2Y5M2M4MTU3MjZhNzE3N2Uy
Zjk1NGNiMTZjNjRiODNkZDIyYjIxIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVy
RGVwZW5kZW5jaWVzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNp
ZXMuY21ha2UKQEAgLTIsMyArMiw0IEBAIFdFQktJVF9PUFRJT05fREVQRU5EKFVTRV9HU1RSRUFN
RVJfR0wgRU5BQkxFX1ZJREVPKQogV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX0dTVFJFQU1FUl9N
UEVHVFMgRU5BQkxFX1ZJREVPKQogV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX1dQRV9WSURFT19Q
TEFORV9ESVNQTEFZX0RNQUJVRiBVU0VfR1NUUkVBTUVSX0dMKQogV0VCS0lUX09QVElPTl9ERVBF
TkQoVVNFX0dTVFJFQU1FUl9UUkFOU0NPREVSIEVOQUJMRV9NRURJQV9SRUNPUkRFUikKK1dFQktJ
VF9PUFRJT05fREVQRU5EKFVTRV9HU1RSRUFNRVJfV0VCUlRDIEVOQUJMRV9XRUJfUlRDKQpkaWZm
IC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4IGIyYjIyZWJl
MDBkY2I3OWI0NzA2NmNjNGIyZTc0NDk0NDEyNzU5NjEuLjJkMzBkMDExYThlMjUyNGM5ZjY0NGEx
MGQwNGY3NTgwNjA1NGY2YzQgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29s
cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFu
ZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBp
bXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIGZsYXRwYWsvZmxhdHBha3V0aWxzLnB5OgorICAgICAg
ICAoV2Via2l0RmxhdHBhay5ydW5faW5fc2FuZGJveCk6IEFsbG93IGxpYm5pY2UgZGVidWcgbG9n
IGVudmlyb25tZW50IHZhcmlhYmxlIGluIHJ1bnRpbWUgc2FuZGJveC4KKwogMjAyMi0wMy0xOCAg
Q2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0FU
U1BJXSBhY2Nlc3NpYmlsaXR5L2Ryb3Bkb3duLXZhbHVlLmh0bWwgaXMgdGltaW5nIG91dCBzaW5j
ZSBhZGRlZCBpbiAyNDgxNDVAbWFpbgpkaWZmIC0tZ2l0IGEvVG9vbHMvZmxhdHBhay9mbGF0cGFr
dXRpbHMucHkgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQppbmRleCA0YTY5NWMyNmRj
NGNiNWIwNzZkYzNhZmM4YzMyN2UxMTUzNTdlMDEzLi42YzdiYmY5MjQ1YzNhZDk4MmVmYTljOGY3
MzI0NjE1ODliZWE4NjlkIDEwMDY0NAotLS0gYS9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5w
eQorKysgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQpAQCAtODM4LDYgKzgzOCw3IEBA
IGNsYXNzIFdlYmtpdEZsYXRwYWs6CiAgICAgICAgICAgICAiTUVTQSIsCiAgICAgICAgICAgICAi
TElCR0wiLAogICAgICAgICAgICAgIlBJUEVXSVJFIiwKKyAgICAgICAgICAgICJOSUNFIiwKICAg
ICAgICAgICAgICJSVVNUIiwKICAgICAgICAgICAgICJTQ0NBQ0hFIiwKICAgICAgICAgICAgICJT
UEEiLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5b3V0VGVzdHMvQ2hh
bmdlTG9nCmluZGV4IDc2NDA5NjAyYmIxMjY5OTY1NTNlYjUwN2U5MWRmMDg5OTk5NDYxNjEuLmJj
OTBjNjBjYjEwZmY3MjFmNGQ1MWY2ODNhMTA3ZGM4Y2JlZmJjMDggMTAwNjQ0Ci0tLSBhL0xheW91
dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
OCBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBi
YWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAq
IHBsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0aW9uczogRmxhZyBtb3N0IFdlYlJUQyBhcyBmYWls
aW5nLiBEdXJpbmcgdGhpcyBmaXJzdCBkZXZlbG9wbWVudAorICAgICAgICBjeWNsZSBJIGZvY3Vz
ZWQgbW9zdGx5IG9uIGZpeGluZyBjcmFzaGVzIGFuZCBvbmx5IGZpeGVkIGEgZmV3IGZhaWx1cmVz
LiBUaGUgcmVtYWluaW5nIG9uZXMKKyAgICAgICAgd2lsbCBiZSBhZHJlc3NlZCBpbiBmb2xsb3ct
dXAgcGF0Y2hlcy4KKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAg
ICAgICAqIHBsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1y
ZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3Jt
L2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlw
dGlvbi1vZmZlci1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2dsaWIv
ZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0OiBB
ZGRlZC4KKwogMjAyMi0wMy0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxp
YS5jb20+CiAKICAgICAgICAgW0FUU1BJXSBhY2Nlc3NpYmlsaXR5L2Ryb3Bkb3duLXZhbHVlLmh0
bWwgaXMgdGltaW5nIG91dCBzaW5jZSBhZGRlZCBpbiAyNDgxNDVAbWFpbgpkaWZmIC0tZ2l0IGEv
TGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCmluZGV4IDRhMWE1MmFlNDMzNzRhMmEzMTdl
ZmFiYTM3NmYzNGE5MjQzNGVlZGIuLjc4Mzk0YWQ2NmNhYTVkMzE4ZmY0MWU3NmU4NjJjMGUzYjg4
NzBlYjUgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVjdGF0
aW9ucworKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKQEAg
LTg2NCw3ICs4NjQsNiBAQCB3ZWJraXQub3JnL2IvMjI5OTczIG1lZGlhL3RyYWNrL2luLWJhbmQv
dHJhY2staW4tYmFuZC1zcnQtbWt2LWN1ZXMtYWRkZWQtb25jZS5odAogCiB3ZWJraXQub3JnL2Iv
MjMwMDI4IG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Utc2Vlay10d2ljZS5odG1sIFsg
UGFzcyBUaW1lb3V0IF0KIAotd2Via2l0Lm9yZy9iLzIzMTgxMSBmYXN0L21lZGlhc3RyZWFtL01l
ZGlhU3RyZWFtLXZpZGVvLWVsZW1lbnQtZW50ZXItYmFja2dyb3VuZC5odG1sIFsgRmFpbHVyZSBd
CiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL2F1ZGlvLWJhY2tncm91bmQtcGxheWJhY2stcGxh
eWxpc3QuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS9tZWRpYS1z
ZXNzaW9uL2FjdGlvbkhhbmRsZXJJbnRlcm5hbE1hcHBpbmdzLmh0bWwgWyBGYWlsdXJlIF0KIHdl
YmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvbWVkaWEtc2Vzc2lvbi9kZWZhdWx0LWFjdGlvbkhhbmRs
ZXJzLmh0bWwgWyBGYWlsdXJlIF0KQEAgLTg3Myw3ICs4NzIsNiBAQCB3ZWJraXQub3JnL2IvMjMx
ODExIG1lZGlhL3ZpZGVvLWNvbmN1cnJlbnQtcGxheWJhY2suaHRtbCBbIEZhaWx1cmUgXQogd2Vi
a2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS92aWRlby1pbnRlcnJ1cHRpb24td2l0aC1yZXN1bWUtbm90
LWFsbG93aW5nLXBsYXkuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRp
YS92aWRlby1tdWx0aXBsZS1jb25jdXJyZW50LXBsYXliYWNrLmh0bWwgWyBGYWlsdXJlIF0KIHdl
YmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvd2ViYXVkaW8tYmFja2dyb3VuZC1wbGF5YmFjay5odG1s
IFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMjMxODExIHdlYnJ0Yy9jb25jdXJyZW50VmlkZW9Q
bGF5YmFjazIuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS9tZWRp
YS1zZXNzaW9uL2NhbGxBY3Rpb25IYW5kbGVyLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcv
Yi8yMzE4MTEgbWVkaWEvbWVkaWEtc2Vzc2lvbi9wbGF5LWFmdGVyLXNlZWsuaHRtbCBbIFRpbWVv
dXQgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS9yZW1vdGUtY29udHJvbC1jb21tYW5kLWlz
LXVzZXItZ2VzdHVyZS5odG1sIFsgVGltZW91dCBdCkBAIC04ODYsMTAgKzg4NCwxMCBAQCB3ZWJr
aXQub3JnL2IvMjMxODExIG1lZGlhL3ZpZGVvLXN5c3RlbS1zbGVlcC5odG1sIFsgVGltZW91dCBd
CiB3ZWJraXQub3JnL2IvMjMxODExIHdlYmF1ZGlvL2F1ZGlvY29udGV4dC1zdGF0ZS1pbnRlcnJ1
cHRlZC5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMxODExIHdlYmF1ZGlvL3N1c3Bl
bmQtY29udGV4dC13aGlsZS1pbnRlcnJ1cHRlZC5odG1sIFsgVGltZW91dCBdCiAKKyMgcnZmYyBy
ZWxhdGVkIGZhaWx1cmVzCiBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3ZpZGVvLXJ2
ZmMgWyBQYXNzIF0KIGZhc3QvbWVkaWFzdHJlYW0vZ2V0VXNlck1lZGlhLXJ2ZmMuaHRtbCBbIFBh
c3MgRmFpbHVyZSBdCiB3ZWJydGMvcGVlckNvbm5lY3Rpb24tcnZmYy5odG1sIFsgRmFpbHVyZSBd
Ci13ZWJydGMvY2FudmFzLXRvLXBlZXItY29ubmVjdGlvbi5odG1sIFsgRmFpbHVyZSBdCiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3ZpZGVvLXJ2ZmMvcmVxdWVzdC12aWRlby1mcmFt
ZS1jYWxsYmFjay13ZWJydGMuaHR0cHMuaHRtbCBbIFNraXAgXQogaW1wb3J0ZWQvdzNjL3dlYi1w
bGF0Zm9ybS10ZXN0cy92aWRlby1ydmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2stYmVm
b3JlLXhyLXNlc3Npb24uaHR0cHMuaHRtbCBbIFNraXAgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy92aWRlby1ydmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2stZHVyaW5n
LXhyLXNlc3Npb24uaHR0cHMuaHRtbCBbIFNraXAgXQpAQCAtOTA3LDEwICs5MDUsODkgQEAgd2Vi
a2l0Lm9yZy9iLzIzNDA4NCBtZWRpYS90cmFjay9hdWRpby10cmFjay1jb25maWd1cmF0aW9uLmh0
bWwgWyBGYWlsdXJlIF0KICMgYml0cmF0ZSBlc3RpbWF0aW9uLgogd2Via2l0Lm9yZy9iLzIzNDA4
NCBtZWRpYS90cmFjay92aWRlby10cmFjay1jb25maWd1cmF0aW9uLmh0bWwgWyBGYWlsdXJlIF0K
IAotd2Via2l0Lm9yZy9iLzIzNzg3MiB3ZWJydGMvdnA4LXRoZW4taDI2NC5odG1sIFsgQ3Jhc2gg
XQotCiB3ZWJraXQub3JnL2IvMjM3OTAxIG1lZGlhL21lZGlhLXNvdXJjZS9tZWRpYS1zb3VyY2Ut
aW50ZXJydXB0aW9uLXdpdGgtcmVzdW1lLWFsbG93aW5nLXBsYXkuaHRtbCBbIFNsb3cgXQogCisj
IERhdGFDaGFubmVsIEdzdFdlYlJUQyBpbXBsZW1lbnRhdGlvbiBpbmNvbXBsZXRlCit3ZWJraXQu
b3JnL2IvMjM1ODg1IHdlYnJ0Yy9kYXRhY2hhbm5lbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSBodHRwL3dwdC93ZWJydGMvdHJhbnNmZXItZGF0YWNoYW5uZWwtc2VydmljZS13b3JrZXIu
aHR0cHMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLXN0YXRzU2VsZWN0b3IuaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWRhdGFjaGFubmVs
Lmh0bWwgWyBTa2lwIF0KKworIyBUaGUgR3N0V2ViUlRDIGJhY2tlbmQgZG9lc24ndCBzdXBwb3J0
IHRyYW5zZm9ybXMgeWV0Lgord2Via2l0Lm9yZy9iLzIzNTg4NSBodHRwL3dwdC93ZWJydGMvYXVk
aW92aWRlby1zY3JpcHQtdHJhbnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgaHR0cC93cHQvd2VicnRjL3ZpZGVvLXNjcmlwdC10cmFuc2Zvcm0ta2V5ZnJhbWUtb25seS5o
dG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy92aWRlby1z
Y3JpcHQtdHJhbnNmb3JtLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2NyaXB0
LWF1ZGlvLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3Jt
L3NjcmlwdC1jaGFuZ2UtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10
cmFuc2Zvcm0vc2NyaXB0LW1ldGFkYXRhLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRj
LWVuY29kZWQtdHJhbnNmb3JtL3NjcmlwdC10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0
Yy1lbmNvZGVkLXRyYW5zZm9ybS9zY3JpcHQtd3JpdGUtdHdpY2UtdHJhbnNmb3JtLmh0dHBzLmh0
bWwgWyBTa2lwIF0KKworIyBUaGUgZ2VuZXJhdGVkIFNEUCBvZmZlciBjdXJyZW50bHkgZG9lcyBu
b3QgcmVmbGVjdCB0aGUgY29kZWMtcHJlZmVyZW5jZXMgc2V0CisjIG9uIHRyYW5zY2VpdmVycy4g
SW5zdGVhZCB0aGUgbmVnb3RpYXRlZCBvdXRnb2luZyBtZWRpYSBzb3VyY2UgY2FwcyBhcmUgdXNl
ZAorIyBhbmQgb3VyIGN1cnJlbnQgaW1wbGVtZW50YXRpb24gb2Ygb3V0Z29pbmcgc291cmNlIGRv
ZXNuJ3Qgc3VwcG9ydCBtdWx0aXBsZQorIyBwYXlsb2FkIHR5cGVzLgord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvYXVkaW8tcGVlci1jb25uZWN0aW9uLWc3MjIuaHRtbCBbIEZhaWx1cmUgXQor
Cit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
YWRkSWNlQ2FuZGlkYXRlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1hZGRUcmFjay1yZXVzZS1zZW5kZXIuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1Bl
ZXJDb25uZWN0aW9uLWhhdmUtbG9jYWwtb2ZmZXIuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLWxvY2FsLXBy
YW5zd2VyLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24taGF2ZS1yZW1vdGUtb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhh
dmUtcmVtb3RlLXByYW5zd2VyLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZh
c3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taWNlY2FuZGlkYXRlLWV2ZW50Lmh0bWwg
WyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1pbnNwZWN0LWFuc3dlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1vZmZlci5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24tbWVkaWEtc2V0dXAtY2FsbGJhY2tzLXNpbmdsZS1kaWFsb2cuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLW1lZGlhLXNldHVwLXR3by1kaWFsb2dzLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tb25uZWdvdGlh
dGlvbm5lZWRlZC5odG1sIFsgUGFzcyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1wYWdlLWNhY2hlLmh0bWwgWyBDcmFzaCBd
Cit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
cmVtb3RlbHktYXNzaWduZWQtdHJhbnNjZWl2ZXItbWlkLmh0bWwgWyBQYXNzIEZhaWx1cmUgVGlt
ZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5l
Y3Rpb24tc2V0TG9jYWxEZXNjcmlwdGlvbi1vZmZlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3Rl
RGVzY3JpcHRpb24tb2ZmZXIuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0
cC93cHQvd2VicnRjL3RoaXJkLXBhcnR5LWZyYW1lLWljZS1jYW5kaWRhdGUtZmlsdGVyaW5nLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJydGMtZXh0ZW5zaW9ucy9SVENSdHBQYXJhbWV0ZXJzLW1heEZyYW1lcmF0
ZS5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWIt
cGxhdGZvcm0tdGVzdHMvd2VicnRjLWV4dGVuc2lvbnMvUlRDUnRwU3luY2hyb25pemF0aW9uU291
cmNlLWNhcHR1cmVUaW1lc3RhbXAuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4
NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1wcmlvcml0eS9SVENSdHBQ
YXJhbWV0ZXJzLWVuY29kaW5ncy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IGluc3BlY3Rvci9wYWdlL292ZXJyaWRlU2V0dGluZy1JQ0VDYW5kaWRhdGVGaWx0ZXJpbmdFbmFi
bGVkLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dl
Yi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1jYXBhYmlsaXRpZXMvZGVjb2RpbmdJbmZvLndlYnJ0Yy5o
dG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxh
dGZvcm0tdGVzdHMvbWVkaWEtY2FwYWJpbGl0aWVzL2VuY29kaW5nSW5mby53ZWJydGMuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYWRkVHJhbnNjZWl2ZXItdGhl
bi1hZGRUcmFjay5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9h
dWRpby12aWRlby1lbGVtZW50LXBsYXlpbmcuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvY2FuZGlkYXRlLXN0YXRzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL2NhbnZhcy10by1wZWVyLWNvbm5lY3Rpb24uaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMuaHRt
bCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2xvc2luZy1wZWVyY29u
bmVjdGlvbi5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9kaXJl
Y3Rpb24tY2hhbmdlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L2Rpc2FibGUtZW5jcnlwdGlvbi5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy9lcGhlbWVyYWwtY2VydGlmaWNhdGVzLWFuZC1jbmFtZXMuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZmlsdGVyaW5nLWljZS1jYW5kaWRhdGUtYWZ0
ZXItcmVsb2FkLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2gy
NjQtcGFja2V0aXphdGlvbi1tb2RlLmh0bWwgWyBUaW1lb3V0IEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvbGlid2VicnRjL3NldExvY2FsRGVzY3JpcHRpb25DcmFzaC5odG1s
IFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9uby1wb3J0LXplcm8taW4t
dXBkLWNhbmRpZGF0ZXMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJy
dGMvcGVlci1jb25uZWN0aW9uLXJlbW90ZS1hdWRpby1tdXRlLmh0bWwgWyBUaW1lb3V0IF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1vdGUtYXVkaW8tbXV0
ZTIuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlci1jb25u
ZWN0aW9uLXRyYWNrLWVuZC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy9wZWVyY29ubmVjdGlvbi1wYWdlLWNhY2hlLWxvbmcuaHRtbCBbIFRpbWVvdXQgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlcmNvbm5lY3Rpb24tcGFnZS1jYWNoZS5odG1sIFsg
VGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9yZWNlaXZlci10cmFjay1zaG91
bGQtc3RheS1saXZlLWV2ZW4taWYtcmVjZWl2ZXItaXMtaW5hY3RpdmUuaHRtbCBbIEZhaWx1cmUg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcmVtb3ZlLXRyYWNrLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3V0Zjgtc2RwLmh0bWwgWyBGYWlsdXJlIF0K
K3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLWFkZFRyYW5zY2VpdmVyLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLWdldFBhcmFtZXRlcnMu
aHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tbWVkaWFz
dHJlYW10cmFjay1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy92aWRlby1tdXRlLXZwOC5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy92aWRlby1tdXRlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL3ZpZGVvLXJlcGxhY2UtdHJhY2stdG8tbnVsbC5odG1sIFsgRmFpbHVyZSBdCit3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1yZXBsYWNlLXRyYWNrLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXN0YXRzLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXVubXV0ZS5odG1sIFsgQ3Jhc2gg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tdnA4LXZpZGVvcmFuZ2UuaHRtbCBb
IFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8uaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdnA4LXRoZW4taDI2NC5odG1sIFsgRmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92cDktc3ZjLmh0bWwgWyBGYWlsdXJl
IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZwOS5odG1sIFsgRmFpbHVyZSBdCisKICMv
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vCiAjIEVuZCBvZiBHU3RyZWFtZXItcmVsYXRl
ZCBidWdzCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLwpAQCAtMTQzMCwxNiArMTUw
NywxNCBAQCB3ZWJraXQub3JnL2IvNzkyMDMgd2Via2l0Lm9yZy9iLzE4NjY3OCBmYXN0L21lZGlh
c3RyZWFtL01lZGlhU3RyZWFtLXZpZGVvLWVsZW1lbgogCiBmYXN0L21lZGlhc3RyZWFtL01lZGlh
RGV2aWNlcy1hZGRFdmVudExpc3RlbmVyLmh0bWwgWyBEdW1wSlNDb25zb2xlTG9nSW5TdGRFcnIg
XQogCi13ZWJraXQub3JnL2IvMTkxMDA2IHdlYnJ0Yy9zaW11bGNhc3QtaDI2NC5odG1sIFsgRmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvMTkxMDA2IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3Np
bXVsY2FzdC1oMjY0Lmh0bWwgWyBGYWlsdXJlIFRpbWVvdXQgXQogCi13ZWJraXQub3JnL2IvMTkz
NjQxIHdlYnJ0Yy92aWRlby1zZXREaXJlY3Rpb24uaHRtbCBbIEZhaWx1cmUgUGFzcyBdCit3ZWJr
aXQub3JnL2IvMTkzNjQxIHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXNldERpcmVj
dGlvbi5odG1sIFsgRmFpbHVyZSBQYXNzIFRpbWVvdXQgXQogCiB3ZWJraXQub3JnL2IvMTk0NjEx
IGh0dHAvd3B0L3dlYnJ0Yy9nZXRVc2VyTWVkaWEtcHJvY2Vzc1N3YXBwaW5nLmh0bWwgWyBGYWls
dXJlIF0KIAogd2Via2l0Lm9yZy9iLzIwMTI2NyBbIFJlbGVhc2UgXSB3ZWJydGMvdmlkZW8taDI2
NC5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KLXdlYmtpdC5vcmcvYi8yMjI1ODUgWyBEZWJ1ZyBd
IHdlYnJ0Yy92aWRlby1oMjY0Lmh0bWwgWyBDcmFzaCBdCi0KLXdlYmtpdC5vcmcvYi8yMTAyNzIg
d2VicnRjL2RhdGFjaGFubmVsL211bHRpcGxlLWNvbm5lY3Rpb25zLmh0bWwgWyBUaW1lb3V0IFBh
c3MgXQord2Via2l0Lm9yZy9iLzIyMjU4NSB3ZWJraXQub3JnL2IvMjM1ODg1IFsgRGVidWcgXSB3
ZWJydGMvdmlkZW8taDI2NC5odG1sIFsgQ3Jhc2ggRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8y
MTUwMDUgd2Via2l0Lm9yZy9iLzIxODc4NyB3ZWJydGMvaDI2NC1iYXNlbGluZS5odG1sIFsgQ3Jh
c2ggVGltZW91dCBdCiAjIGgyNjQtaGlnaC5odG1sIGlzIG1hcmtlZCBhcyBzbG93IGluIHRoZSBy
b290IGV4cGVjdGF0aW9uCkBAIC0xNDQ4LDcgKzE1MjMsNyBAQCB3ZWJraXQub3JnL2IvMjE1MDA3
IFsgRGVidWcgXSB3ZWJydGMvaDI2NC1oaWdoLmh0bWwgWyBTbG93IEZhaWx1cmUgXQogCiB3ZWJr
aXQub3JnL2IvMjE2NTM4IHdlYnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2FyZS1oMjY0
LWJhc2VsaW5lLmh0bWwgWyBTbG93IEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2IvMjE2NzYzIHdl
YnJ0Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2FyZS1oMjY0LWhpZ2guaHRtbCBbIENyYXNo
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIxNjc2MyB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy9jYXB0dXJlQ2FudmFzLXdlYnJ0Yy1zb2Z0d2FyZS1oMjY0LWhpZ2guaHRtbCBbIENyYXNoIEZh
aWx1cmUgVGltZW91dCBdCiAKIHdlYmtpdC5vcmcvYi8yMTgyMjEgd2VicnRjL3ZwOS1wcm9maWxl
Mi5odG1sIFsgVGltZW91dCBGYWlsdXJlIF0KIApAQCAtMjI0MCwxMyArMjMxNSwxMiBAQCB3ZWJr
aXQub3JnL2IvMTg2MTAwIGNzczMvY29sb3ItZmlsdGVycy9jb2xvci1maWx0ZXItY29sb3ItcHJv
cGVydHktbGlzdC1pdGVtLmh0bQogd2Via2l0Lm9yZy9iLzE4NjEwMCBmYXN0L2hpZHBpL2ZpbHRl
cnMtdHVyYnVsZW5jZS5odG1sIFsgSW1hZ2VPbmx5RmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMTg3
MDQ0IHdlYmFuaW1hdGlvbnMvb3BhY2l0eS1hbmltYXRpb24teWllbGRzLWNvbXBvc2l0aW5nLXNw
YW4uaHRtbCBbIEZhaWx1cmUgXQogCi13ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy9kYXRhY2hh
bm5lbC9tZG5zLWljZS1jYW5kaWRhdGVzLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8x
ODcwNjQgd2VicnRjL3ZpZGVvLWFkZFRyYWNrLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcv
Yi8xODcwNjQgd2VicnRjL3ZpZGVvLWRpc2FibGVkLWJsYWNrLmh0bWwgWyBDcmFzaCBdCi13ZWJr
aXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1yZW1vdGUtbXV0ZS5odG1sIFsgQ3Jhc2ggXQot
d2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcmVwbGFjZS1tdXRlZC10cmFjay5odG1s
IFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2Vi
cnRjL3ZpZGVvLXJlcGxhY2UtbXV0ZWQtdHJhY2suaHRtbCBbIFRpbWVvdXQgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLWRpc2Fi
bGVkLWJsYWNrLmh0bWwgWyBDcmFzaCBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8xODcwNjQgd2Vi
a2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tcmVtb3RlLW11dGUuaHRtbCBbIENyYXNoIEZh
aWx1cmUgXQogd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcm90YXRpb24uaHRtbCBb
IEZhaWx1cmUgXQotd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvdmlkZW8tcm90YXRpb24tbm8t
Y3ZvLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8xODcwNjQgd2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvdmlkZW8tcm90YXRpb24tbm8tY3ZvLmh0bWwgWyBGYWlsdXJlIENyYXNoIF0K
IHdlYmtpdC5vcmcvYi8xODcwNjQgd2VicnRjL3ZpZGVvLXdpdGgtZGF0YS1jaGFubmVsLmh0bWwg
WyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8xODcwNjQgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9y
bS10ZXN0cy93ZWJydGMvUlRDUGVlckNvbm5lY3Rpb24tZ2V0U3RhdHMuaHR0cHMuaHRtbCBbIEZh
aWx1cmUgUGFzcyBdCiAKQEAgLTI0NTMsOSArMjUyNyw2IEBAIHdlYmtpdC5vcmcvYi8xNzQyNDIg
bWVkaWEvbWVkaWEtZnVsbHNjcmVlbi1wYXVzZS1pbmxpbmUuaHRtbCBbIFNraXAgXQogd2Via2l0
Lm9yZy9iLzE4MjEwOCBodHRwL3Rlc3RzL21lZGlhL2hscy9obHMtd2VidnR0LXRyYWNrcy5odG1s
IFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMTM3MzExIG1lZGlhL3ZpZGVvLWZ1bGxzY3JlZW4t
b25seS1wbGF5YmFjay5odG1sIFsgVGltZW91dCBDcmFzaCBdCiAKLXdlYmtpdC5vcmcvYi8xOTgx
MTMgWyBSZWxlYXNlIF0gZmFzdC9tZWRpYXN0cmVhbS9tZWRpYS1zdHJlYW0tcGFnZS1tdXRlZC5o
dG1sIFsgUGFzcyBdCi13ZWJraXQub3JnL2IvMTk4MTEzIFsgRGVidWcgXSBmYXN0L21lZGlhc3Ry
ZWFtL21lZGlhLXN0cmVhbS1wYWdlLW11dGVkLmh0bWwgWyBUaW1lb3V0IF0KLQogd2Via2l0Lm9y
Zy9iLzE5NDA0NCBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9t
ZWRpYXNvdXJjZS1hZGRzb3VyY2VidWZmZXIuaHRtbCBbIEZhaWx1cmUgXQogCiAjIFJlbW92ZWQg
ZnJvbSBnZW5lcmFsIFRlc3RFeHBlY3RhdGlvbnMgaW4gcjI3NjM5MywgYnV0IGNvbnNvbGUgZXJy
b3IgbWVzc2FnZSBzdGlsbCBoYXBwZW5pbmcgaW4gR0xpYi4KQEAgLTI1NDAsMTAgKzI2MTEsNyBA
QCBtZWRpYS92aWRlby1yZW1vdGUtY29udHJvbC1wbGF5cGF1c2UuaHRtbCBbIFNraXAgXQogCiB3
ZWJraXQub3JnL2IvMjA3MDYyIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEt
c291cmNlL21lZGlhc291cmNlLXJlcGxheS5odG1sIFsgRmFpbHVyZSBQYXNzIF0KIAotd2Via2l0
Lm9yZy9iLzIyOTM0NiB3ZWJydGMvbXVsdGktYXVkaW8uaHRtbCBbIFRpbWVvdXQgUGFzcyBdCi0K
LXdlYmtpdC5vcmcvYi8yMjk3MTUgWyBEZWJ1ZyBdIGZhc3QvbWVkaWFzdHJlYW0vZ2V0RGlzcGxh
eU1lZGlhLW1heC1jb25zdHJhaW50czMuaHRtbCBbIFRpbWVvdXQgXQotd2Via2l0Lm9yZy9iLzIy
OTcxNSBbIERlYnVnIF0gZmFzdC9tZWRpYXN0cmVhbS9zY3JlZW5jYXB0dXJlLXVzZXItZ2VzdHVy
ZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjI5MzQ2IHdlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL211bHRpLWF1ZGlvLmh0bWwgWyBUaW1lb3V0IFBhc3MgRmFpbHVyZSBdCiAKIHdl
YmtpdC5vcmcvYi8yMjk3MzggZmFzdC90ZXh0L3doaXRlc3BhY2UvdGFiLWNoYXJhY3Rlci1iYXNp
Y3MuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIyOTczOCBmYXN0L3RleHQvd29yZC1i
cmVhay5odG1sIFsgRmFpbHVyZSBdCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9n
bGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1l
eHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0v
UlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uYzk1YTliNjE5MDA5YTc0MzJhMTI5MzZhN2M2YTgxODkwODRkMmM3ZgotLS0gL2Rldi9udWxs
CisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1sb2NhbERlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDE5IEBA
CitUZXN0cyBSVENQZWVyQ29ubmVjdGlvbiBsb2NhbERlc2NyaXB0aW9uLgorCitPbiBzdWNjZXNz
LCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
VEVTVCBDT01QTEVURSIuCisKKworUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25E
ZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgcmVxdWVzdEZhaWxlZDEpOyBkaWQg
bm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdFN1Y2NlZWRlZCB3YXMgY2FsbGVkLgor
UEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1
ZXN0U3VjY2VlZGVkMiwgcmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4K
K1BBU1MgcmVxdWVzdEZhaWxlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5sb2NhbERlc2NyaXB0aW9u
LnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUg
bG9jYWwuIFdhcyB0PTAgMAorLgorUEFTUyBwYy5sb2NhbERlc2NyaXB0aW9uLnR5cGUgaXMgIm9m
ZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgbG9jYWwuIFdhcyB0
PTAgMAorLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRF
CisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVh
bS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9nLWV4cGVjdGVkLnR4
dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29u
bmVjdGlvbi1tZWRpYS1zZXR1cC1zaW5nbGUtZGlhbG9nLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kOTM0MmRlNzI4MTlkN2E5YzUxN2Y1MzFiMWY1ZmQxN2Q1YTA0MjI0Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLW1lZGlhLXNldHVwLXNpbmdsZS1kaWFsb2ctZXhwZWN0ZWQudHh0CkBAIC0wLDAg
KzEsNjEgQEAKK1Rlc3Qgc2V0dGluZyB1cCBtZWRpYSBiZXR3ZWVuIHR3byBSVENQZWVyQ29ubmVj
dGlvbiBpbnN0YW5jZXMgd2l0aCBvbmUgc2luZ2xlIFNEUCBkaWFsb2cuCisKK09uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJU
RVNUIENPTVBMRVRFIi4KKworCitDcmVhdGUgUlRDUGVlckNvbm5lY3Rpb24gQQorUEFTUyBwY0Eu
c2lnbmFsaW5nU3RhdGUgaXMgJ3N0YWJsZScKK1BBU1MgcGNBLnBlbmRpbmdMb2NhbERlc2NyaXB0
aW9uIGlzIG51bGwKK1BBU1MgcGNBLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIGlzIG51bGwKK1BB
U1MgcGNBLnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjQS5jdXJyZW50
UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorCitDcmVhdGUgUlRDUGVlckNvbm5lY3Rpb24gQgor
UEFTUyBwY0Iuc2lnbmFsaW5nU3RhdGUgaXMgJ3N0YWJsZScKK1BBU1MgcGNCLnBlbmRpbmdMb2Nh
bERlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGNCLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9uIGlz
IG51bGwKK1BBU1MgcGNCLnBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBj
Qi5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorCitBOiBhZGQgbWVkaWEKK0E6IGNy
ZWF0ZSBvZmZlcgorQTogZ290IG9mZmVyLCBzZXQgaXQgYXMgbG9jYWwgZGVzY3JpcHRpb24KK0E6
IGxvY2FsIG9mZmVyIHNldAorUEFTUyBwY0Euc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtbG9jYWwt
b2ZmZXInCitQQVNTIHBjQS5wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiBpcyBhbiBpbnN0YW5jZSBv
ZiBSVENTZXNzaW9uRGVzY3JpcHRpb24KK1BBU1MgcGNBLmN1cnJlbnRMb2NhbERlc2NyaXB0aW9u
IGlzIG51bGwKKworQTogc2VuZCBvZmZlciB0byBCCitBIC0tLSBvZmZlciAtLT4gQgorQjogZ290
IG9mZmVyIGZyb20gQSwgc2V0IGl0IGFzIHJlbW90ZSBkZXNjcmlwdGlvbgorQjogcmVtb3RlIG9m
ZmVyIHNldAorUEFTUyBwY0Iuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9mZmVyJwor
UEFTUyBwY0IucGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uIGlzIGFuIGluc3RhbmNlIG9mIFJUQ1Nl
c3Npb25EZXNjcmlwdGlvbgorUEFTUyBwY0IuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIGlzIG51
bGwKKworQjogYWRkIG1lZGlhICh0byBpbmNsdWRlIGluIGFuc3dlcikKK0I6IGNyZWF0ZSBhbnN3
ZXIKK0I6IGdvdCBhbnN3ZXIsIHNldCBpdCBhcyBsb2NhbCBkZXNjcmlwdGlvbgorQjogbG9jYWwg
YW5zd2VyIHNldAorUEFTUyBwY0Iuc2lnbmFsaW5nU3RhdGUgaXMgJ3N0YWJsZScKK1BBU1MgcGNC
LnBlbmRpbmdMb2NhbERlc2NyaXB0aW9uIGlzIG51bGwKK1BBU1MgcGNCLmN1cnJlbnRMb2NhbERl
c2NyaXB0aW9uIGlzIGFuIGluc3RhbmNlIG9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbgorUEFTUyBw
Y0IucGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKK0ZBSUwgcGNCLmN1cnJlbnRSZW1v
ZXREZXNjcmlwdGlvbiBpcyBub3QgYW4gaW5zdGFuY2Ugb2YgUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
CisKK0I6IHNlbmQgYW5zd2VyIHRvIEEKK0EgPC0tIGFuc3dlciAtLSBCCitBOiBnb3QgYW5zd2Vy
IGZyb20gQiwgc2V0IGl0IGFzIHJlbW90ZSBkZXNjcmlwdGlvbgorQTogcmVtb3RlIGFuc3dlciBz
ZXQKK1BBU1MgcGNBLnNpZ25hbGluZ1N0YXRlIGlzICdzdGFibGUnCitQQVNTIHBjQS5wZW5kaW5n
TG9jYWxEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjQS5jdXJyZW50TG9jYWxEZXNjcmlwdGlv
biBpcyBhbiBpbnN0YW5jZSBvZiBSVENTZXNzaW9uRGVzY3JpcHRpb24KK1BBU1MgcGNBLnBlbmRp
bmdSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitGQUlMIHBjQS5jdXJyZW50UmVtb2V0RGVzY3Jp
cHRpb24gaXMgbm90IGFuIGluc3RhbmNlIG9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbgorCitQQVNT
IE9mZmVyL2Fuc3dlciBkaWFsb2cgY29tcGxldGVkCisKK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2Vk
IGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3RlRGVzY3Jp
cHRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi45ZDUzZWM1YzIxNjBkMDMyNzNjMTk4MWY4ZWQ5ZmExODM4NGZkMDc1Ci0tLSAv
ZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dApAQCAtMCww
ICsxLDE5IEBACitUZXN0cyBSVENQZWVyQ29ubmVjdGlvbiByZW1vdGVEZXNjcmlwdGlvbi4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcGMuc2V0UmVtb3RlRGVzY3JpcHRp
b24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKHJlcXVlc3RTdWNjZWVkZWQxLCByZXF1ZXN0RmFp
bGVkMSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyByZXF1ZXN0U3VjY2VlZGVkIHdh
cyBjYWxsZWQuCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlv
bikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgcmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90IHRocm93
IGV4Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdEZhaWxlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5yZW1v
dGVEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24u
c2RwIHNob3VsZCBiZSByZW1vdGUuIFdhcyB0PTAgMAorLgorUEFTUyBwYy5yZW1vdGVEZXNjcmlw
dGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24uc2RwIHNob3Vs
ZCBiZSByZW1vdGUuIFdhcyB0PTAgMAorLgorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1
ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2ds
aWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVseS1hc3NpZ25lZC10
cmFuc2NlaXZlci1taWQtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9m
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZWx5LWFzc2lnbmVkLXRyYW5z
Y2VpdmVyLW1pZC1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGZmMDJhYTc0ZjcyMjBlZGFjY2Uz
N2QzZjFiYTc0ZGVjNTFhZGNlMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1vdGVseS1hc3Np
Z25lZC10cmFuc2NlaXZlci1taWQtZXhwZWN0ZWQudHh0CkBAIC0wLDAgKzEsMjYgQEAKK1Rlc3Qg
dGhlIGNhc2Ugd2hlcmUgYW4gUlRDUnRwVHJhbnNjZWl2ZXIgZ2V0cyBhIHJlbW90ZWx5IGFzc2ln
bmVkIG1pZCBhbmQgYWxzbyB1bm11dGUgdGhlIGFzc29jaWF0ZWQgc291cmNlCisKK09uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5
ICJURVNUIENPTVBMRVRFIi4KKworCitwY0EuYWRkVHJhY2soc3RyZWFtLmdldEF1ZGlvVHJhY2tz
KClbMF0sIHN0cmVhbSkKK0EncyB0cmFuc2NlaXZlciBpcyBub3QgeWV0IGFzc29jaWF0ZWQgd2l0
aCBhIG1lZGlhIGRlc2NyaXB0aW9uIGFuZCBzaG91bGQgaGF2ZSBhIG51bGwgbWlkCitQQVNTIHBj
QS5nZXRUcmFuc2NlaXZlcnMoKVswXS5taWQgaXMgbnVsbAorQTogbG9jYWwgb2ZmZXIgc2V0ICht
aWQgZ2V0cyBkZWZpbmVkKQorbWlkQXNzaWduZWRCeUEgPSBwY0EuZ2V0VHJhbnNjZWl2ZXJzKClb
MF0ubWlkCitGQUlMIG1pZEFzc2lnbmVkQnlBICE9PSBudWxsIHNob3VsZCBiZSB0cnVlLiBXYXMg
ZmFsc2UuCitwY0IuYWRkVHJhY2soc3RyZWFtLmdldEF1ZGlvVHJhY2tzKClbMF0sIHN0cmVhbSkK
K0IncyB0cmFuc2NlaXZlciBpcyBub3QgeWV0IGFzc29jaWF0ZWQgd2l0aCBhIG1lZGlhIGRlc2Ny
aXB0aW9uIGFuZCBzaG91bGQgaGF2ZSBhIG51bGwgbWlkCitQQVNTIHBjQi5nZXRUcmFuc2NlaXZl
cnMoKVswXS5taWQgaXMgbnVsbAorQjogcmVtb3RlIG9mZmVyIHNldCAobWlkIGdldHMgZGVmaW5l
ZCkKK0IncyB0cmFuc2NlaXZlciBzaG91bGQgZ2V0IGl0cyBtaWQgZnJvbSB0aGUgcmVtb3RlIHNp
ZGUgKEEpCitQQVNTIHBjQi5nZXRUcmFuc2NlaXZlcnMoKVswXS5taWQgaXMgbWlkQXNzaWduZWRC
eUEKK1BBU1MgT2ZmZXIvYW5zd2VyIGRpYWxvZyBjb21wbGV0ZWQKK1BBU1MgQjogZ290IHJlbW90
ZSB0cmFjayBldmVudAorUEFTUyBldmVudC50cmFjayBpcyBhbiBpbnN0YW5jZSBvZiBNZWRpYVN0
cmVhbVRyYWNrCitQQVNTIEE6IGdvdCByZW1vdGUgdHJhY2sgZXZlbnQKK1BBU1MgQjogcmVtb3Rl
IHRyYWNrIHVubXV0ZSBldmVudAorUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitU
RVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zZXRSZW1vdGVEZXNjcmlwdGlvbi1vZmZl
ci1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXItZXhwZWN0ZWQu
dHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjUyMDNmMGJiYzhkYmViNzg4Zjc4NTQ4OTU2NjA3NjIxNWUzY2RiZmUK
LS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXItZXhwZWN0
ZWQudHh0CkBAIC0wLDAgKzEsMzkgQEAKK1Rlc3QgUlRDUGVlckNvbm5lY3Rpb24uc2V0UmVtb3Rl
RGVzY3JpcHRpb24gY2FsbGVkIHdpdGggYW4gUlRDU2Vzc2lvbkRlc2NyaXB0aW9uIG9mIHR5cGUg
J29mZmVyJworCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMgb2YgIlBBU1MiIG1l
c3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworKioqIENyZWF0ZSAocmVt
b3RlKSBvZmZlciB3aXRoIGF1ZGlvIChyZW1vdGVPZmZlcjEpCisqKiogRG9uZSwgc3RhcnQgdGVz
dGluZyB3aXRoIHJlbW90ZU9mZmVyMQorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAnc3RhYmxl
JworUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjLnBlbmRpbmdSZW1v
dGVEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiBp
cyBudWxsCisKK1BBU1MgcmVtb3RlT2ZmZXIxIHNldCBhcyByZW1vdGUgZGVzY3JpcHRpb24KK1BB
U1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9mZmVyJworRkFJTCBwYy5yZW1v
dGVEZXNjcmlwdGlvbiBzaG91bGQgYmUgW29iamVjdCBPYmplY3RdLiBXYXMgW29iamVjdCBSVENT
ZXNzaW9uRGVzY3JpcHRpb25dLgorRkFJTCBwYy5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gc2hv
dWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
XS4KK1BBU1MgcGMuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIGlzIG51bGwKKworUEFTUyByZW1v
dGVPZmZlcjEgc2V0IGFzIHJlbW90ZSBkZXNjcmlwdGlvbiAoYWdhaW4pCitQQVNTIHBjLnNpZ25h
bGluZ1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKKworKioqIFRyeSBzZXR0aW5nIGxvY2Fs
IGRlc2NyaXB0aW9ucyB3aXRoIGJhZCB0eXBlcyBmb3IgdGhlIGN1cnJlbnQgc3RhdGUKK1BBU1Mg
cHJvbWlzZSBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbih7dHlwZTonYW5zd2VyJywgc2RwOnJlbW90
ZU9mZmVyMS5zZHB9KTsgcmVqZWN0ZWQgd2l0aCBJbnZhbGlkU3RhdGVFcnJvcjogRmFpbGVkIHRv
IHNldCByZW1vdGUgYW5zd2VyIHNkcAorUEFTUyBwcm9taXNlIHBjLnNldFJlbW90ZURlc2NyaXB0
aW9uKHt0eXBlOidwcmFuc3dlcicsIHNkcDpyZW1vdGVPZmZlcjEuc2RwfSk7IHJlamVjdGVkIHdp
dGggSW52YWxpZFN0YXRlRXJyb3I6IEZhaWxlZCB0byBzZXQgcmVtb3RlIGFuc3dlciBzZHAKKwor
KioqIENyZWF0ZSAocmVtb3RlKSBvZmZlciB3aXRoIHZpZGVvIChyZW1vdGVPZmZlcjIpCisqKiog
RG9uZSwgc3RhcnQgdGVzdGluZyB3aXRoIHJlbW90ZU9mZmVyMgorUEFTUyBwYy5zaWduYWxpbmdT
dGF0ZSBpcyAnaGF2ZS1yZW1vdGUtb2ZmZXInCisKK1BBU1MgcmVtb3RlT2ZmZXIyIHNldCBhcyBy
ZW1vdGUgZGVzY3JpcHRpb24KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3Rl
LW9mZmVyJworRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgYmUgW29iamVjdCBPYmpl
Y3RdLiBXYXMgW29iamVjdCBSVENTZXNzaW9uRGVzY3JpcHRpb25dLgorRkFJTCBwYy5wZW5kaW5n
UmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3Qg
UlRDU2Vzc2lvbkRlc2NyaXB0aW9uXS4KK1BBU1MgcGMuY3VycmVudFJlbW90ZURlc2NyaXB0aW9u
IGlzIG51bGwKKworUEFTUyBzdWNjZXNzZnVsbHlQYXJzZWQgaXMgdHJ1ZQorCitURVNUIENPTVBM
RVRFCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXN0YWJsZS1l
eHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMjg0MjY4Y2U3OGFhZTJhYzk2YzJjZDJmODQ0MDYzMzA0
MzA1ZTcxMQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0CkBAIC0w
LDAgKzEsNTEgQEAKK1Rlc3RzIFJUQ1BlZXJDb25uZWN0aW9uIGluIHN0YWJsZSBzdGF0ZS4KKwor
T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9s
bG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMg
InN0YWJsZSIKK1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24p
LnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQxKTsgZGlkIG5vdCB0aHJvdyBl
eGNlcHRpb24uCitQQVNTIHNldExvY2FsRGVzY3JpcHRpb24gZmFpbGVkLgorRkFJTCBlcnJvclJl
YXNvbi5uYW1lIHNob3VsZCBiZSBJbnZhbGlkU2Vzc2lvbkRlc2NyaXB0aW9uRXJyb3IuIFdhcyBJ
bnZhbGlkU3RhdGVFcnJvci4KK0ZBSUwgcGMubG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cg
YW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxk
IHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlz
ICJzdGFibGUiCitQQVNTIHBjLnNldExvY2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9u
KS50aGVuKGZpbmlzaElmU3VjY2VlZGVkLCByZXF1ZXN0RmFpbGVkMik7IGRpZCBub3QgdGhyb3cg
ZXhjZXB0aW9uLgorUEFTUyBzZXRMb2NhbERlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwgZXJyb3JS
ZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9yLiBXYXMg
SW52YWxpZFN0YXRlRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93
IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3Vs
ZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBp
cyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRp
b24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQzKTsgZGlkIG5vdCB0aHJv
dyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwgZXJy
b3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9yLiBX
YXMgSW52YWxpZFN0YXRlRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRo
cm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNo
b3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0
ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3Jp
cHRpb24pLnRoZW4oZmluaXNoSWZTdWNjZWVkZWQsIHJlcXVlc3RGYWlsZWQ0KTsgZGlkIG5vdCB0
aHJvdyBleGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwg
ZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9y
LiBXYXMgSW52YWxpZFN0YXRlRXJyb3IuCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxk
IHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9u
IHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdT
dGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRMb2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNj
cmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgZmluaXNoSWZGYWlsZWQpOyBkaWQgbm90
IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0TG9jYWxEZXNjcmlwdGlvbiBzdWNjZWVkZWQuCitQ
QVNTIHBjLmxvY2FsRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVz
Y3JpcHRpb24uc2RwIHNob3VsZCBiZSBsb2NhbC4gV2FzIHQ9MCAwCisuCitGQUlMIHBjLnJlbW90
ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBw
Yy5zaWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1sb2NhbC1vZmZlciIKK0ZBSUwgcGMubG9jYWxEZXNj
cmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK0ZBSUwgcGMucmVt
b3RlRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwuCitQQVNT
IHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0
aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihyZXF1ZXN0U3VjY2VlZGVkMiwgZmluaXNoSWZG
YWlsZWQpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0UmVtb3RlRGVzY3JpcHRp
b24gc3VjY2VlZGVkLgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBl
eGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5yZW1vdGVEZXNjcmlwdGlvbi50eXBlIGlzICJv
ZmZlciIKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24uc2RwIHNob3VsZCBiZSByZW1vdGUuIFdh
cyB0PTAgMAorLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAiaGF2ZS1yZW1vdGUtb2ZmZXIi
CitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExFVEUKKwpkaWZm
IC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDk2MjFhZTFiZDNiYmMyOGM5NzFm
YjM5MzIwNjQzNjg5YjBiNGE0MmYuLmQwYWZhZjY0NTYxMDgwNzA3MDU4ZmE1NjZkMzdlMGFmNDMx
YTM1YTMgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cKQEAgLTEsMyArMSwx
NyBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+
CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBi
YWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBF
bmFibGUgR3N0V2ViUlRDIGJ5IGRlZmF1bHQgaWYgYSByZWNlbnQtZW5vdWdoICg+PSAxLjIwKSB2
ZXJzaW9uIGlzIGF2YWlsYWJsZS4KKworICAgICAgICAqIFNvdXJjZS9jbWFrZS9GaW5kR1N0cmVh
bWVyLmNtYWtlOgorICAgICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2U6
CisgICAgICAgICogU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlOgorICAg
ICAgICAqIFNvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2U6CisKIDIwMjIt
MDMtMTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAg
ICAgIEFkZCBhIHB1YmxpYyBidWlsZCBvcHRpb24gZm9yIFBERi5qcwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>455092</attachid>
            <date>2022-03-18 07:24:33 -0700</date>
            <delta_ts>2022-03-18 07:28:41 -0700</delta_ts>
            <desc>[fast-cq] Patch</desc>
            <filename>bug-236540-20220318072431.patch</filename>
            <type>text/plain</type>
            <size>340228</size>
            <attacher name="Philippe Normand">pnormand</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjkxNDgyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV1RGL0NoYW5n
ZUxvZyBiL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCmluZGV4IGIzOTJiZWE4YmY1YTg2ODU4NjgxZDE2
ODBiNzg3YjQ1NzQ1ZjU4NGEuLmI1NzA2ZWI4NzQ2YzMzYzYyMmRhYzM4MzA0ODQ4ZGNiMjc2YTRm
YmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XVEYvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsMTggQEAKKzIwMjItMDItMTIgIFBoaWxpcHBlIE5vcm1hbmQgIDxw
bm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJdIEluaXRpYWwgaW1wb3J0
IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgQ2FybG9zIEdh
cmNpYSBDYW1wb3MgYW5kIFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyLgorCisgICAgICAgICogU2Ny
aXB0cy9QcmVmZXJlbmNlcy9XZWJQcmVmZXJlbmNlcy55YW1sOiBVbmNvbmRpdGlvbmFsbHkgZW5h
YmxlIFdlYlJUQyB3aGVuIEdzdFdlYlJUQyBpcworICAgICAgICBlbmFibGVkLiBXZSBkb24ndCBo
YXZlIGEgcnVudGltZSBQcm92aWRlciB5ZXQuCisgICAgICAgICogU2NyaXB0cy9QcmVmZXJlbmNl
cy9XZWJQcmVmZXJlbmNlc0V4cGVyaW1lbnRhbC55YW1sOiBEaXNhYmxlIGVuY29kZWQgdHJhbnNm
b3JtcyB1bmxlc3MgbGlid2VicnRjIGlzIGVuYWJsZWQuCisgICAgICAgICogd3RmL2dsaWIvR1Jl
ZlB0ci5jcHA6IEFkZCBHQXJyYXkgaGFuZGxpbmcuCisgICAgICAgIChXVEY6OnJlZkdQdHIpOgor
ICAgICAgICAoV1RGOjpkZXJlZkdQdHIpOgorICAgICAgICAqIHd0Zi9nbGliL0dSZWZQdHIuaDoK
KwogMjAyMi0wMy0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5jb20+
CiAKICAgICAgICAgW0dMSUJdIE1ha2UgaXQgcG9zc2libGUgdG8gY2FsbCBHUmVmUHRyOjpvdXRQ
dHIoKSBtdWx0aXBsZSB0aW1lcyB3aWh0b3V0IGFuIGV4cGxpY2l0IGNsZWFyCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5k
ZXggNTgxYjU3MjNlOTllYTZmYjg1NjViZGUwZDkzMzkyNjliMzQyNzU1Ni4uYjUwMmM5MGMwN2Fl
NGQ3NDVlZWZiMjU1OWI5NzA2Y2M1ZjUyZjE5MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
Q2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3NCBA
QAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisK
KyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNr
ZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1
NDAKKworICAgICAgICBSZXZpZXdlZCBieSBDYXJsb3MgR2FyY2lhIENhbXBvcyBhbmQgWGFiaWVy
IFJvZHJpZ3Vlei1DYWx2YXIuCisKKyAgICAgICAgSW5pdGlhbCBHc3RXZWJSVEMgYmFja2VuZC4g
QSBsb3Qgb2YgZmVhdHVyZXMgdW5pbXBsZW1lbnRlZCBzdGlsbCwgYnV0IHdlIHdpbGwgaW5jcmVt
ZW50YWxseQorICAgICAgICBpbXByb3ZlIHRoZSBsYXlvdXQgdGVzdCBjb3ZlcmFnZSBpbiBmb2xs
b3ctdXAgcGF0Y2hlcy4gTW9zdCBub3RhYmxlIHNob3J0LWNvbWluZ3MgY3VycmVudGx5OgorCisg
ICAgICAgIC0gRGF0YUNoYW5uZWwgc3VwcG9ydCBpcyBpbmNvbXBsZXRlIChidWcgMjM1ODc5KQor
ICAgICAgICAtIE5ldHdvcmsgdHJhZmZpYyBub3Qgcm91dGVkIHRocm91Z2ggTmV0d29yayBwcm9j
ZXNzIHlldAorICAgICAgICAtIFN0YXRzIHN1cHBvcnQgaW5jb21wbGV0ZQorICAgICAgICAtIERU
TUYgc3VwcG9ydCB1bmltcGxlbWVudGVkCisgICAgICAgIC0gSUNFIHJlc3RhcnRzIG5vdCBzdXBw
b3J0ZWQgeWV0CisgICAgICAgIC0gUmUtbmVnb3RpYXRpb24gdW5saWtlbHkgdG8gd29yaworICAg
ICAgICAtIFNpbXVsY2FzdCBub3QgaGFuZGxlZCB5ZXQKKyAgICAgICAgLSBCYWxhbmNlZCBidW5k
bGUgbm90IHN1cHBvcnRlZAorICAgICAgICAtIFJUWCBhbmQgRkVDIHVuLXRlc3RlZCwgYnV0IHNo
b3VsZG4ndCBiZSBoYXJkIHRvIGZpeAorCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9N
ZWRpYURldmljZXMuY3BwOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vUGVlckNvbm5l
Y3Rpb25CYWNrZW5kLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlBlZXJDb25uZWN0aW9uQmFja2Vu
ZDo6Z2VuZXJhdGVDZXJ0aWZpY2F0ZSk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi5jcHA6CisgICAgICAgIChXZWJDb3JlOjpSVENQZWVyQ29ubmVjdGlv
bjo6Y3JlYXRlKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdT
dHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6ZnJvbVJUQ0RhdGFDaGFubmVsSW5pdCk6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmNoYW5uZWxFdmVudCk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OkdTdHJlYW1l
ckRhdGFDaGFubmVsSGFuZGxlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hh
bm5lbEhhbmRsZXI6On5HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZXRDbGllbnQpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kU3RyaW5nRGF0YSk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnNlbmRSYXdEYXRh
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6Y2xvc2Up
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGVja1N0
YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6cmVh
ZHlTdGF0ZUNoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxI
YW5kbGVyOjpvbk1lc3NhZ2VEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRhdGFD
aGFubmVsSGFuZGxlcjo6b25NZXNzYWdlU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25FcnJvcik6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uQnVmZmVyZWRBbW91bnRMb3cpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpwb3N0VGFzayk6CisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dT
dHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6
On5HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQp
OgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQ6OnVucmVn
aXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQ6OnN0YXRlQ2hhbmdlZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFj
a2VuZDo6R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2Vu
ZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjppY2VU
cmFuc3BvcnRDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9y
dEJhY2tlbmQ6OnJlZ2lzdGVyQ2xpZW50KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lcklj
ZVRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQ6OmdhdGhlcmluZ1N0YXRlQ2hhbmdl
ZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNl
VHJhbnNwb3J0QmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcDogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50KToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYWxpemVQaXBl
bGluZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp+R1N0cmVh
bWVyTWVkaWFFbmRwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50Ojp0ZWFyZG93blBpcGVsaW5lKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmhhbmRsZU1lc3NhZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6ZGlzcG9zZUVsZW1lbnRDaGFpbik6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpzZXRDb25maWd1cmF0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlc3RhcnRJY2UpOgorICAgICAgICAoV2ViQ29yZTo6
ZmV0Y2hEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpmZXRjaFNpZ25hbGluZ1N0YXRl
KToKKyAgICAgICAgKFdlYkNvcmU6OmRlc2NyaXB0aW9uc0Zyb21XZWJSVENCaW4pOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9TZXRMb2NhbERlc2NyaXB0aW9u
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldFJlbW90ZURl
c2NyaXB0aW9uU3VjY2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OmRvU2V0UmVtb3RlRGVzY3JpcHRpb24pOgorICAgICAgICAoV2ViQ29yZTo6U2V0RGVz
Y3JpcHRpb25DYWxsRGF0YTo6U2V0RGVzY3JpcHRpb25DYWxsRGF0YSk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzZXREZXNjcmlwdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9yZVJlbW90ZU1MaW5lSW5mbyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpjb25maWd1cmVBbmRMaW5r
U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlcXVl
c3RQYWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkVHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVtb3ZlVHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9DcmVhdGVP
ZmZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpkb0NyZWF0
ZUFuc3dlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppbml0
aWF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnZXRTdGF0
cyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjptZWRpYVN0cmVh
bUZyb21SVENTdHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6YWRkUmVtb3RlU3RyZWFtKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5k
cG9pbnQ6OnJlbW92ZVJlbW90ZVN0cmVhbSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpjcmVhdGVUcmFuc2NlaXZlckJhY2tlbmRzKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZFRyYW5zY2VpdmVyKToKKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZVNvdXJjZUZvclRyYWNrKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnNldFNlbmRlclNvdXJjZUZy
b21UcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp0cmFu
c2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmFkZEljZUNhbmRpZGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbCk6CisgICAgICAgIChXZWJDb3JlOjpH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpvbkRhdGFDaGFubmVsKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNsb3NlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OnN0b3ApOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVk
aWFFbmRwb2ludDo6c3VzcGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6b25OZWdvdGlhdGlvbk5lZWRlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRp
YUVuZHBvaW50OjpvbkljZUNvbm5lY3Rpb25DaGFuZ2UpOgorICAgICAgICAoV2ViQ29yZTo6R1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VHYXRoZXJpbmdDaGFuZ2UpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25JY2VDYW5kaWRhdGUpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9u
U3VjY2VlZGVkKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNy
ZWF0ZVNlc3Npb25EZXNjcmlwdGlvbkZhaWxlZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50Ojpjb2xsZWN0VHJhbnNjZWl2ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6
OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmdhdGhlclN0YXRzRm9yTG9nZ2luZyk6CisgICAgICAg
IChXZWJDb3JlOjpSVENTdGF0c0xvZ2dlcjo6UlRDU3RhdHNMb2dnZXIpOgorICAgICAgICAoV2Vi
Q29yZTo6UlRDU3RhdHNMb2dnZXI6OnRvSlNPTlN0cmluZyBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpwcm9jZXNzU3RhdHMpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6b25TdGF0c0RlbGl2ZXJlZCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdGFydExvZ2dpbmdTdGF0cyk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9wTG9nZ2luZ1N0YXRz
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmxvZ0NoYW5uZWwg
Y29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RhdHNM
b2dJbnRlcnZhbCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpnYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKToKKyAgICAgICAgKFdURjo6TG9n
QXJndW1lbnQ8V2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI+Ojp0b1N0cmluZyk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5oOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmNyZWF0ZSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojppc1N0b3BwZWQgY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6aXNOZWdvdGlh
dGlvbk5lZWRlZCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJNZWRpYUVuZHBv
aW50OjpwaXBlbGluZSBjb25zdCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAg
IChXZWJDb3JlOjpjcmVhdGVHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQpOgorICAgICAg
ICAoV2ViQ29yZTo6UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZWNlaXZlckNhcGFiaWxpdGllcyk6
CisgICAgICAgIChXZWJDb3JlOjpQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRlckNhcGFiaWxp
dGllcyk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6
OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnN1c3BlbmQpOgorICAgICAgICAoV2ViQ29yZTo6
R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN1bWUpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN0YXJ0SWNlKToKKyAgICAgICAg
KFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0Q29uZmlndXJhdGlv
bik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6Omdl
dFN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmJhY2tlbmRGcm9tUlRQU2VuZGVyKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRMb2NhbERl
c2NyaXB0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlT2ZmZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb0NyZWF0ZUFuc3dlcik6CisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNsb3NlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TdG9wKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9BZGRJ
Y2VDYW5kaWRhdGUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpjcmVhdGVSZWNlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcik6CisgICAgICAgIChX
ZWJDb3JlOjpmaW5kRXhpc3RpbmdTZW5kZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2VpdmVyRnJvbVRyYWNrT3JLaW5k
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRk
VHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpzZXRTZW5kZXJTb3VyY2VGcm9tVHJhY2spOgorICAgICAgICAoV2ViQ29yZTo6YmFj
a2VuZEZyb21SVFBUcmFuc2NlaXZlcik6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmV4aXN0aW5nVHJhbnNjZWl2ZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpuZXdSZW1vdGVUcmFuc2NlaXZlcik6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmNvbGxl
Y3RUcmFuc2NlaXZlcnMpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpyZW1vdmVUcmFjayk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmFwcGx5Um90YXRpb25Gb3JPdXRnb2luZ1ZpZGVvU291cmNlcyk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmdhdGhl
ckRlY29kZXJJbXBsZW1lbnRhdGlvbk5hbWUpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVy
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjppc05lZ290aWF0aW9uTmVlZGVkIGNvbnN0KToKKyAgICAg
ICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcDogQWRkZWQuCisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRDb250cmlidXRpbmdT
b3VyY2VzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFj
a2VuZDo6Z2V0U3luY2hyb25pemF0aW9uU291cmNlcyBjb25zdCk6CisgICAgICAgIChXZWJDb3Jl
OjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmNyZWF0ZVNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tl
bmQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpkdGxz
VHJhbnNwb3J0QmFja2VuZCk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmg6IEFkZGVkLgorICAgICAgICAqIE1vZHVs
ZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFj
a2VuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFUeXBlRnJvbVJlY2VpdmVy
KToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2Vu
ZDo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6fkdTdHJlYW1lclJ0cFJl
Y2VpdmVyVHJhbnNmb3JtQmFja2VuZCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBS
ZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZDo6
cmVxdWVzdEtleUZyYW1lKToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQuaDogQWRkZWQuCisgICAgICAg
ICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dXBkYXRlVHJhY2tTb3VyY2UpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c3RhcnRTb3VyY2UpOgor
ICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c3RvcFNvdXJjZSk6
CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpyZXBsYWNlVHJh
Y2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6Z2V0UGFy
YW1ldGVycyBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJCYWNr
ZW5kOjpzZXRQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRl
ckJhY2tlbmQ6OmNyZWF0ZURUTUZCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c2V0TWVkaWFTdHJlYW1JZHMpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJh
Y2tlbmQpOgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFNlbmRlckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5jcHA6IEFkZGVk
LgorICAgICAgICAoV2ViQ29yZTo6bWVkaWFUeXBlRnJvbVNlbmRlcik6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBTZW5k
ZXJUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRl
clRyYW5zZm9ybUJhY2tlbmQ6On5HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kKToK
KyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OnNl
dFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSk6CisgICAgICAgICog
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3Jt
QmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdl
YkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6R1N0cmVhbWVyUnRwVHJhbnNj
ZWl2ZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVy
QmFja2VuZDo6Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6Y3JlYXRlU2VuZGVyQmFja2VuZCk6CisgICAgICAg
IChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmRpcmVjdGlvbiBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OmN1
cnJlbnREaXJlY3Rpb24gY29uc3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyUnRwVHJh
bnNjZWl2ZXJCYWNrZW5kOjpzZXREaXJlY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjptaWQpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJl
YW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c3RvcHBlZCBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNldENvZGVjUHJlZmVyZW5jZXMp
OgorICAgICAgICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kLmNwcDogQWRkZWQuCisgICAg
ICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpzZXRJbnB1dENhbGxi
YWNrKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OmNs
ZWFyVHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVh
bWVyUnRwVHJhbnNmb3JtQmFja2VuZDo6cHJvY2Vzc1RyYW5zZm9ybWVkRnJhbWUpOgorICAgICAg
ICAqIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJh
Y2tlbmQuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1C
YWNrZW5kOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kKToKKyAgICAgICAgKiBNb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHA6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6dG9SVENTY3RwVHJhbnNwb3J0U3RhdGUpOgorICAg
ICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OkdTdHJlYW1lclNj
dHBUcmFuc3BvcnRCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFu
c3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQpOgorICAgICAgICAo
V2ViQ29yZTo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OmR0bHNUcmFuc3BvcnRCYWNr
ZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kOjpy
ZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJTY3RwVHJhbnNwb3J0
QmFja2VuZDo6dW5yZWdpc3RlckNsaWVudCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJT
Y3RwVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2VkKToKKyAgICAgICAgKiBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oOiBBZGRl
ZC4KKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTdGF0
c0NvbGxlY3Rvci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6ZmlsbFJUQ1N0YXRzKToK
KyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENSVFBTdHJlYW1TdGF0cyk6CisgICAgICAgIChXZWJD
b3JlOjpmaWxsUlRDQ29kZWNTdGF0cyk6CisgICAgICAgIChXZWJDb3JlOjpmaWxsSW5ib3VuZFJU
UFN0cmVhbVN0YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxPdXRib3VuZFJUUFN0cmVhbVN0
YXRzKToKKyAgICAgICAgKFdlYkNvcmU6OmZpbGxSVENQZWVyQ29ubmVjdGlvblN0YXRzKToKKyAg
ICAgICAgKFdlYkNvcmU6OmZpbGxSVENUcmFuc3BvcnRTdGF0cyk6CisgICAgICAgIChXZWJDb3Jl
OjpmaWxsUmVwb3J0Q2FsbGJhY2spOgorICAgICAgICAoV2ViQ29yZTo6Q2FsbGJhY2tIb2xkZXI6
OkNhbGxiYWNrSG9sZGVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lclN0YXRzQ29sbGVj
dG9yOjpnZXRTdGF0cyk6CisgICAgICAgICogTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpHU3Ry
ZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
clN0YXRzQ29sbGVjdG9yOjpzZXRFbGVtZW50KToKKyAgICAgICAgKiBNb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5jcHA6IEFkZGVkLgorICAgICAgICAo
V2ViQ29yZTo6dG9SVENJY2VDb21wb25lbnQpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VQ
cm90b2NvbCk6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0ljZVRjcENhbmRpZGF0ZVR5cGUpOgor
ICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VDYW5kaWRhdGVUeXBlKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvUlRDRXJyb3IpOgorICAgICAgICAoV2ViQ29yZTo6dG9XZWJSVENCaXRSYXRlUHJpb3Jp
dHkpOgorICAgICAgICAoV2ViQ29yZTo6ZnJvbVJUQ0VuY29kaW5nUGFyYW1ldGVycyk6CisgICAg
ICAgIChXZWJDb3JlOjpmcm9tV2ViUlRDQml0UmF0ZVByaW9yaXR5KToKKyAgICAgICAgKFdlYkNv
cmU6OnRvUlRDRW5jb2RpbmdQYXJhbWV0ZXJzKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDUnRw
U2VuZFBhcmFtZXRlcnMpOgorICAgICAgICAoV2ViQ29yZTo6ZW5zdXJlRGVidWdDYXRlZ29yeUlu
aXRpYWxpemVkKToKKyAgICAgICAgKFdlYkNvcmU6OnBhcnNlSWNlQ2FuZGlkYXRlU0RQKToKKyAg
ICAgICAgKFdlYkNvcmU6Ong1MDlTZXJpYWxpemUpOgorICAgICAgICAoV2ViQ29yZTo6cHJpdmF0
ZUtleVNlcmlhbGl6ZSk6CisgICAgICAgIChXZWJDb3JlOjpnZW5lcmF0ZUNlcnRpZmljYXRlKToK
KyAgICAgICAgKFdlYkNvcmU6OnNkcE1lZGlhSGFzQXR0cmlidXRlS2V5KToKKyAgICAgICAgKiBN
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJSVENVdGlscy5oOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24pOgorICAg
ICAgICAoV2ViQ29yZTo6ZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKToKKyAgICAgICAg
KFdlYkNvcmU6OnRvU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpm
cm9tU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjp0b1NpZ25hbGlu
Z1N0YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OnRvUlRDSWNlQ29ubmVjdGlvblN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OnRvUlRDRHRsc1RyYW5zcG9ydFN0YXRlKToKKyAgICAgICAgKFdlYkNv
cmU6OnRvUlRDSWNlVHJhbnNwb3J0U3RhdGUpOgorICAgICAgICAoV2ViQ29yZTo6dG9SVENJY2VH
YXRoZXJpbmdTdGF0ZSk6CisgICAgICAgIChXZWJDb3JlOjpidW5kbGVQb2xpY3lGcm9tQ29uZmln
dXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjppY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29uZmln
dXJhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjp0b1JUQ0Vycm9yRGV0YWlsVHlwZSk6CisgICAg
ICAgICogcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtlOgorICAgICAgICAqIHBsYXRmb3JtL2F1ZGlv
L2dzdHJlYW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXI6OkF1ZGlvU291cmNlUHJvdmlkZXJH
U3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1l
cjo6fkF1ZGlvU291cmNlUHJvdmlkZXJHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6QXVk
aW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcjo6aGFuZGxlTmV3RGVpbnRlcmxlYXZlUGFkKToKKyAg
ICAgICAgKiBwbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNj
cmlwdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRy
R1N0cmVhbWVyLmNwcDoKKyAgICAgICAgKFdURjo6YWRvcHRHUmVmKToKKyAgICAgICAgKFdURjo6
cmVmR1B0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4pOgorICAgICAgICAoV1RGOjpkZXJlZkdQdHI8
R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENS
VFBTZW5kZXI+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4p
OgorICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPik6CisgICAg
ICAgIChXVEY6OmRlcmVmR1B0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4pOgorICAgICAgICAo
V1RGOjpyZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPik6CisgICAgICAgIChXVEY6OmRlcmVm
R1B0cjxHc3RXZWJSVENEYXRhQ2hhbm5lbD4pOgorICAgICAgICAoV1RGOjpyZWZHUHRyPEdzdFdl
YlJUQ0RUTFNUcmFuc3BvcnQ+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ0RU
TFNUcmFuc3BvcnQ+KToKKyAgICAgICAgKFdURjo6cmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3Bv
cnQ+KToKKyAgICAgICAgKFdURjo6ZGVyZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4pOgor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmg6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dTdHJlYW1lckNvbW1vbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpjYXBzTWVkaWFUeXBlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Ok1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpjcmVhdGVBdWRpb1NvdXJjZVByb3Zp
ZGVyKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
QXVkaW9DYXB0dXJlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJBdWRpb0NhcHR1
cmVyOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1l
ckF1ZGlvQ2FwdHVyZXI6OmNyZWF0ZUNvbnZlcnRlcik6CisgICAgICAgICogcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVyLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OkdTdHJlYW1lckNhcHR1cmVyOjpjcmVhdGVTb3VyY2UpOgorICAgICAgICAqIHBsYXRmb3Jt
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OkdTdHJl
YW1lckRUTUZTZW5kZXJCYWNrZW5kKToKKyAgICAgICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZT
ZW5kZXJCYWNrZW5kOjp+R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQpOgorICAgICAgICAoV2Vi
Q29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmNhbkluc2VydERUTUYpOgorICAgICAg
ICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OnBsYXlUb25lKToKKyAgICAg
ICAgKFdlYkNvcmU6OkdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjp0b25lcyBjb25zdCk6Cisg
ICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6ZHVyYXRpb24gY29u
c3QpOgorICAgICAgICAoV2ViQ29yZTo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmludGVy
VG9uZUdhcCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpHU3RyZWFtZXJEVE1GU2VuZGVyQmFj
a2VuZDo6b25Ub25lUGxheWVkKToKKyAgICAgICAgKiBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaDogQWRkZWQuCisgICAgICAgICogcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNw
cDoKKyAgICAgICAgKHdlYmtpdE1lZGlhU3RyZWFtU3JjQWRkVHJhY2spOgorICAgICAgICAqIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwOgor
ICAgICAgICAod2Via2l0X3dlYnJ0Y192aWRlb19lbmNvZGVyX2NsYXNzX2luaXQpOgorICAgICAg
ICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0
cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lcjo6flJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcik6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJv
ZHVjaW5nRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXI6OnN0b3BQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y2FwYWJpbGl0aWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3Mp
OgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
OjpkaXNwYXRjaFNhbXBsZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRl
KToKKyAgICAgICAgKGlzVHlwZSk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OlJlYWx0aW1lSW5j
b21pbmdTb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWlu
Z1NvdXJjZUdTdHJlYW1lcjo6bG9ja1ZhbHZlIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6OnJlbGVhc2VWYWx2ZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpyZWdpc3RlckNs
aWVudCk6CisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
SW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFs
dGltZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpiaW4pOgorICAgICAgICAoV2ViQ29yZTo6UmVh
bHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21p
bmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJl
YW1lcjo6c3RhcnRQcm9kdWNpbmdEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lSW5j
b21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c3RvcFByb2R1Y2luZ0RhdGEpOgorICAgICAgICAo
V2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjYXBhYmlsaXRp
ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVh
bWVyOjpzZXR0aW5ncyk6CisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUluY29taW5nVmlkZW9T
b3VyY2VHU3RyZWFtZXI6OnNldHRpbmdzRGlkQ2hhbmdlKToKKyAgICAgICAgKFdlYkNvcmU6OlJl
YWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6ZGlzcGF0Y2hTYW1wbGUpOgorICAg
ICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OmNyZWF0ZSk6CisgICAgICAgIChpc1R5cGUpOgor
ICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291
cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaDog
QWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29y
ZTo6UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2lu
Z01lZGlhU291cmNlR1N0cmVhbWVyOjp+UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJl
YW1lcjo6c2V0U291cmNlKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRp
YVNvdXJjZUdTdHJlYW1lcjo6c3RhcnQpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRn
b2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzdG9wKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0
aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c291cmNlTXV0ZWRDaGFuZ2VkKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c291
cmNlRW5hYmxlZENoYW5nZWQpOgorICAgICAgICAoV2ViQ29yZTo6UmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyOjppbml0aWFsaXplRnJvbVRyYWNrKToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6bGluayk6CisgICAgICAg
IChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFNpbmtQ
YWQpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91
dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpS
ZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNvdXJjZSBjb25zdCk6CisgICAg
ICAgIChXZWJDb3JlOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXI6OmFsbG93
ZWRDYXBzIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNv
dXJjZUdTdHJlYW1lcjo6cGFkIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0
Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2VuZGVyIGNvbnN0KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6YmluIGNvbnN0KToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c2V0
UGF5bG9hZFR5cGUpOgorICAgICAgICAqIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwOiBBZGRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVP
dXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyKToKKyAgICAgICAgKFdlYkNvcmU6OlJlYWx0aW1l
T3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUpOgorICAgICAgICAq
IHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXIuaDogQWRkZWQuCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpyZXNldFRvQ29uc2lzdGVudFN0YXRlKToKKyAg
ICAgICAgKFdlYkNvcmU6OkludGVybmFsczo6c2V0V2ViUlRDSDI2NVN1cHBvcnQpOgorICAgICAg
ICAoV2ViQ29yZTo6SW50ZXJuYWxzOjpzZXRXZWJSVENWUDlTdXBwb3J0KToKKyAgICAgICAgKFdl
YkNvcmU6OkludGVybmFsczo6c2V0V2ViUlRDVlA5VlRCU3VwcG9ydCk6CisgICAgICAgIChXZWJD
b3JlOjpJbnRlcm5hbHM6OnNldEVuYWJsZVdlYlJUQ0VuY3J5cHRpb24pOgorICAgICAgICAoV2Vi
Q29yZTo6SW50ZXJuYWxzOjpzZXRVc2VEVExTMTApOgorCiAyMDIyLTAzLTE4ICBBbGFuIEJ1anRh
cyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbSUZDXVtJbnRlZ3JhdGlvbl0gUmVuYW1l
IElubGluZUl0ZXJhdG9yOjpMaW5lOjpjbG9zZXN0UnVuKiB0byBjbG9zZXN0Qm94Rm9yKgpkaWZm
IC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1ByZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzLnlh
bWwgYi9Tb3VyY2UvV1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFtbApp
bmRleCA0YWE2N2EzMTI5ODA0ZGE5ZmY4ZTZhNDQ5NDU5NmM0NjYxZmY5ZTE2Li5iNjZjNzQwZTgw
NzJjYzU5YzViYTI3YzVlZTQzMzY0MTZmOWYxY2ZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1Nj
cmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFtbAorKysgYi9Tb3VyY2UvV1RGL1Nj
cmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXMueWFtbApAQCAtMTcyMiw3ICsxNzIyLDkg
QEAgUGVlckNvbm5lY3Rpb25FbmFibGVkOgogICAgIFdlYktpdExlZ2FjeToKICAgICAgIGRlZmF1
bHQ6IHRydWUKICAgICBXZWJLaXQ6Ci0gICAgICBkZWZhdWx0OiBXZWJDb3JlOjpMaWJXZWJSVENQ
cm92aWRlcjo6d2ViUlRDQXZhaWxhYmxlKCkKKyAgICAgICJVU0UoTElCV0VCUlRDKSI6IFdlYkNv
cmU6OkxpYldlYlJUQ1Byb3ZpZGVyOjp3ZWJSVENBdmFpbGFibGUoKQorICAgICAgIlVTRShHU1RS
RUFNRVJfV0VCUlRDKSI6IHRydWUKKyAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgV2ViQ29yZToK
ICAgICAgIGRlZmF1bHQ6IHRydWUKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dURi9TY3JpcHRzL1By
ZWZlcmVuY2VzL1dlYlByZWZlcmVuY2VzRXhwZXJpbWVudGFsLnlhbWwgYi9Tb3VyY2UvV1RGL1Nj
cmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAppbmRleCAw
ZjYzYzhjYjAyMjc3YmNkYzQ5YjFhZmU3YjVlNTMxZmU4OWNlMmQ1Li41MTg3OGE4ZjQ5NTMyYjc1
ODU2OGZiY2I2OGExZDFmZGJkODU2Y2Y2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV1RGL1NjcmlwdHMv
UHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbAorKysgYi9Tb3VyY2Uv
V1RGL1NjcmlwdHMvUHJlZmVyZW5jZXMvV2ViUHJlZmVyZW5jZXNFeHBlcmltZW50YWwueWFtbApA
QCAtMTczNSw5ICsxNzM1LDExIEBAIFdlYlJUQ0VuY29kZWRUcmFuc2Zvcm1FbmFibGVkOgogICAg
IFdlYktpdExlZ2FjeToKICAgICAgIGRlZmF1bHQ6IGZhbHNlCiAgICAgV2ViS2l0OgotICAgICAg
ZGVmYXVsdDogdHJ1ZQorICAgICAgIlVTRShMSUJXRUJSVEMpIjogdHJ1ZQorICAgICAgZGVmYXVs
dDogZmFsc2UKICAgICBXZWJDb3JlOgotICAgICAgZGVmYXVsdDogdHJ1ZQorICAgICAgIlVTRShM
SUJXRUJSVEMpIjogdHJ1ZQorICAgICAgZGVmYXVsdDogZmFsc2UKIAogIyBGSVhNRTogSXMgdGhp
cyBpbXBsZW1lbnRlZCBmb3IgV2ViS2l0TGVnYWN5PyBJZiBub3QsIHRoaXMgc2hvdWxkIGJlIGV4
Y2x1ZGVkIGZyb20gV2ViS2l0TGVnYWN5IGVudGlyZWx5LgogV2ViUlRDSDI2NExvd0xhdGVuY3lF
bmNvZGVyRW5hYmxlZDoKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5j
cHAgYi9Tb3VyY2UvV1RGL3d0Zi9nbGliL0dSZWZQdHIuY3BwCmluZGV4IDFiOWFkZTNmOTM2ZWU1
NjRkMzgyYzA3ZWY5NjY1NzZhYjY2MTliNDEuLjkzMTJhM2U4OTRiZDhhMGQ3YTExYTZhNDVjY2Jk
MzY4NzNmOGM1MGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5jcHAK
KysrIGIvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmNwcApAQCAtMjIzLDYgKzIyMywyMiBA
QCB0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cihHVXJpKiBwdHIpCiB9CiAjZW5kaWYKIAordGVt
cGxhdGUgPD4KK0dBcnJheSogcmVmR1B0cihHQXJyYXkqIHB0cikKK3sKKyAgICBpZiAocHRyKQor
ICAgICAgICBnX2FycmF5X3JlZihwdHIpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxh
dGUgPD4KK3ZvaWQgZGVyZWZHUHRyKEdBcnJheSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAg
ICAgIGdfYXJyYXlfdW5yZWYocHRyKTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRp
ZiAvLyBVU0UoR0xJQikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XVEYvd3RmL2dsaWIvR1JlZlB0ci5o
IGIvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgKaW5kZXggMTNlZjUwODEzOTM4OTdkMjdj
NDJmNTVmMzI0ZmJhM2QwZDMyOWNkYi4uYWZkYzMzZDFlNzlhODY3ZTZmMDRlMTcxODg3Y2Y2M2Rk
NmVkMTQxMCAxMDA2NDQKLS0tIGEvU291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgKKysrIGIv
U291cmNlL1dURi93dGYvZ2xpYi9HUmVmUHRyLmgKQEAgLTI1MCw2ICsyNTAsOCBAQCB0ZW1wbGF0
ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgR0RhdGVUaW1lKiByZWZHUHRyKEdEYXRlVGltZSogcHRy
KTsKIHRlbXBsYXRlIDw+IFdURl9FWFBPUlRfUFJJVkFURSB2b2lkIGRlcmVmR1B0cihHRGF0ZVRp
bWUqIHB0cik7CiB0ZW1wbGF0ZSA8PiBXVEZfRVhQT1JUX1BSSVZBVEUgR0RCdXNOb2RlSW5mbyog
cmVmR1B0cihHREJ1c05vZGVJbmZvKiBwdHIpOwogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklW
QVRFIHZvaWQgZGVyZWZHUHRyKEdEQnVzTm9kZUluZm8qIHB0cik7Cit0ZW1wbGF0ZSA8PiBXVEZf
RVhQT1JUX1BSSVZBVEUgR0FycmF5KiByZWZHUHRyKEdBcnJheSopOwordGVtcGxhdGUgPD4gV1RG
X0VYUE9SVF9QUklWQVRFIHZvaWQgZGVyZWZHUHRyKEdBcnJheSopOwogCiAjaWYgSEFWRShHVVJJ
KQogdGVtcGxhdGUgPD4gV1RGX0VYUE9SVF9QUklWQVRFIEdVcmkqIHJlZkdQdHIoR1VyaSopOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYWNhcGFiaWxpdGllcy9NZWRp
YUNhcGFiaWxpdGllcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0
aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcAppbmRleCBkZmI5YmRhYzU2NmI3OTY1YmFhY2ZlMGNm
ZWU3MDYxNDM4YjE5NWIyLi44Yzc0NGZjZDEzNzcwMDZmYmI5MDc2NmViYjNiYzRjODRlOGRjY2Jl
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2FwYWJpbGl0aWVzL01l
ZGlhQ2FwYWJpbGl0aWVzLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhY2Fw
YWJpbGl0aWVzL01lZGlhQ2FwYWJpbGl0aWVzLmNwcApAQCAtMTgwLDcgKzE4MCw3IEBAIHN0YXRp
YyB2b2lkIGdhdGhlckRlY29kaW5nSW5mbyhEb2N1bWVudCYgZG9jdW1lbnQsIE1lZGlhRGVjb2Rp
bmdDb25maWd1cmF0aW9uJiYKICAgICBjb25maWd1cmF0aW9uLmNhbkV4cG9zZVZQOSA9IGRvY3Vt
ZW50LnNldHRpbmdzKCkudnA5RGVjb2RlckVuYWJsZWQoKTsKICNlbmRpZgogCi0jaWYgRU5BQkxF
KFdFQl9SVEMpCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShMSUJXRUJSVEMpCiAgICAgaWYg
KGNvbmZpZ3VyYXRpb24udHlwZSA9PSBNZWRpYURlY29kaW5nVHlwZTo6V2ViUlRDKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKQogICAgICAgICAgICAgcGFnZS0+
bGliV2ViUlRDUHJvdmlkZXIoKS5jcmVhdGVEZWNvZGluZ0NvbmZpZ3VyYXRpb24oV1RGTW92ZShj
b25maWd1cmF0aW9uKSwgV1RGTW92ZShkZWNvZGluZ0NhbGxiYWNrKSk7CkBAIC0yMDAsNyArMjAw
LDcgQEAgc3RhdGljIHZvaWQgZ2F0aGVyRW5jb2RpbmdJbmZvKERvY3VtZW50JiBkb2N1bWVudCwg
TWVkaWFFbmNvZGluZ0NvbmZpZ3VyYXRpb24mJgogICAgICAgICBjYWxsYmFjayhXVEZNb3ZlKHJl
c3VsdCkpOwogICAgIH07CiAKLSNpZiBFTkFCTEUoV0VCX1JUQykKKyNpZiBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKExJQldFQlJUQykKICAgICBpZiAoY29uZmlndXJhdGlvbi50eXBlID09IE1lZGlh
RW5jb2RpbmdUeXBlOjpXZWJSVEMpIHsKICAgICAgICAgaWYgKGF1dG8qIHBhZ2UgPSBkb2N1bWVu
dC5wYWdlKCkpCiAgICAgICAgICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLmNyZWF0ZUVu
Y29kaW5nQ29uZmlndXJhdGlvbihXVEZNb3ZlKGNvbmZpZ3VyYXRpb24pLCBXVEZNb3ZlKGVuY29k
aW5nQ2FsbGJhY2spKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vTWVkaWFEZXZpY2VzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJl
YW0vTWVkaWFEZXZpY2VzLmNwcAppbmRleCAwZmFhOGJiNTVhMTk4NWU5ODBmNzM2YjYxZGEwZDYz
MGQ2Y2FlM2NkLi5iZmM1NjY5ZWQ3N2E0M2NkYjk5YTIzNzAwMTBhYzYxMWQyY2JiOTM0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL01lZGlhRGV2aWNlcy5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMu
Y3BwCkBAIC00MCw2ICs0MCw3IEBACiAjaW5jbHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJKU0RP
TVByb21pc2VEZWZlcnJlZC5oIgogI2luY2x1ZGUgIkpTTWVkaWFEZXZpY2VJbmZvLmgiCisjaW5j
bHVkZSAiTG9nZ2luZy5oIgogI2luY2x1ZGUgIk1lZGlhVHJhY2tTdXBwb3J0ZWRDb25zdHJhaW50
cy5oIgogI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncy5oIgogI2luY2x1ZGUg
IlNldHRpbmdzLmgiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAKaW5kZXggODZkNzU3Mzk5MmY0ZDVi
ZDRjMzUzZGNiNjA5NzI2NGU5ODVkNTdlOC4uMmYzM2YyYjA3MmZhM2ZlZjVkM2FiN2RkM2FmOWEy
OGE2NGFiMTBjZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVh
bS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMv
bWVkaWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmNwcApAQCAtNTMsOSArNTMsMTQgQEAK
ICNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdCdWlsZGVyLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGVOdW1iZXJzLmg+CiAKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2VuZGlmCisKIG5hbWVzcGFjZSBX
ZWJDb3JlIHsKIAotI2lmICFVU0UoTElCV0VCUlRDKQorI2lmICFVU0UoTElCV0VCUlRDKSAmJiAh
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UGVlckNvbm5l
Y3Rpb25CYWNrZW5kPiBjcmVhdGVOb1BlZXJDb25uZWN0aW9uQmFja2VuZChSVENQZWVyQ29ubmVj
dGlvbiYpCiB7CiAgICAgcmV0dXJuIG51bGxwdHI7CkBAIC0yMTcsMTggKzIyMiw4IEBAIHZvaWQg
UGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzZXRSZW1vdGVEZXNjcmlwdGlvblN1Y2NlZWRlZChzdGQ6
Om9wdGlvbmFsPERlc2NyaXB0CiAgICAgICAgIGlmIChkZXNjcmlwdGlvblN0YXRlcykKICAgICAg
ICAgICAgIG1fcGVlckNvbm5lY3Rpb24udXBkYXRlRGVzY3JpcHRpb25zKFdURk1vdmUoKmRlc2Ny
aXB0aW9uU3RhdGVzKSk7CiAKLSAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykgewot
ICAgICAgICAgICAgYXV0byYgdHJhY2sgPSBldmVudC50cmFjay5nZXQoKTsKLQotICAgICAgICAg
ICAgbV9wZWVyQ29ubmVjdGlvbi5kaXNwYXRjaEV2ZW50KFJUQ1RyYWNrRXZlbnQ6OmNyZWF0ZShl
dmVudE5hbWVzKCkudHJhY2tFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0Nh
bmNlbGFibGU6Ok5vLCBXVEZNb3ZlKGV2ZW50LnJlY2VpdmVyKSwgV1RGTW92ZShldmVudC50cmFj
ayksIFdURk1vdmUoZXZlbnQuc3RyZWFtcyksIFdURk1vdmUoZXZlbnQudHJhbnNjZWl2ZXIpKSk7
Ci0gICAgICAgICAgICBBTFdBWVNfTE9HKExPR0lERU5USUZJRVIsICJEaXNwYXRjaGVkIGlmIGZl
YXNpYmxlIHRyYWNrIG9mIHR5cGUgIiwgdHJhY2suc291cmNlKCkudHlwZSgpKTsKLQotICAgICAg
ICAgICAgaWYgKG1fcGVlckNvbm5lY3Rpb24uaXNDbG9zZWQoKSkKLSAgICAgICAgICAgICAgICBy
ZXR1cm47Ci0KLSAgICAgICAgICAgIC8vIEZJWE1FOiBBcyBwZXIgc3BlYywgd2Ugc2hvdWxkIHNl
dCBtdXRlZCB0byAnZmFsc2UnIHdoZW4gc3RhcnRpbmcgdG8gcmVjZWl2ZSB0aGUgY29udGVudCBm
cm9tIG5ldHdvcmsuCi0gICAgICAgICAgICB0cmFjay5zb3VyY2UoKS5zZXRNdXRlZChmYWxzZSk7
Ci0gICAgICAgIH0KKyAgICAgICAgZm9yIChhdXRvJiBldmVudCA6IGV2ZW50cykKKyAgICAgICAg
ICAgIGRpc3BhdGNoVHJhY2tFdmVudChldmVudCk7CiAKICAgICAgICAgaWYgKG1fcGVlckNvbm5l
Y3Rpb24uaXNDbG9zZWQoKSkKICAgICAgICAgICAgIHJldHVybjsKQEAgLTI0MCw2ICsyMzUsMjAg
QEAgdm9pZCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2Vl
ZGVkKHN0ZDo6b3B0aW9uYWw8RGVzY3JpcHQKICAgICB9KTsKIH0KIAordm9pZCBQZWVyQ29ubmVj
dGlvbkJhY2tlbmQ6OmRpc3BhdGNoVHJhY2tFdmVudChQZW5kaW5nVHJhY2tFdmVudCYgZXZlbnQp
Cit7CisgICAgYXV0byYgdHJhY2sgPSBldmVudC50cmFjay5nZXQoKTsKKworICAgIG1fcGVlckNv
bm5lY3Rpb24uZGlzcGF0Y2hFdmVudChSVENUcmFja0V2ZW50OjpjcmVhdGUoZXZlbnROYW1lcygp
LnRyYWNrRXZlbnQsIEV2ZW50OjpDYW5CdWJibGU6Ok5vLCBFdmVudDo6SXNDYW5jZWxhYmxlOjpO
bywgV1RGTW92ZShldmVudC5yZWNlaXZlciksIFdURk1vdmUoZXZlbnQudHJhY2spLCBXVEZNb3Zl
KGV2ZW50LnN0cmVhbXMpLCBXVEZNb3ZlKGV2ZW50LnRyYW5zY2VpdmVyKSkpOworICAgIEFMV0FZ
U19MT0coTE9HSURFTlRJRklFUiwgIkRpc3BhdGNoZWQgaWYgZmVhc2libGUgdHJhY2sgb2YgdHlw
ZSAiLCB0cmFjay5zb3VyY2UoKS50eXBlKCkpOworCisgICAgaWYgKG1fcGVlckNvbm5lY3Rpb24u
aXNDbG9zZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgLy8gRklYTUU6IEFzIHBlciBzcGVj
LCB3ZSBzaG91bGQgc2V0IG11dGVkIHRvICdmYWxzZScgd2hlbiBzdGFydGluZyB0byByZWNlaXZl
IHRoZSBjb250ZW50IGZyb20gbmV0d29yay4KKyAgICB0cmFjay5zb3VyY2UoKS5zZXRNdXRlZChm
YWxzZSk7Cit9CisKIHZvaWQgUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpzZXRSZW1vdGVEZXNjcmlw
dGlvbkZhaWxlZChFeGNlcHRpb24mJiBleGNlcHRpb24pCiB7CiAgICAgQVNTRVJUKGlzTWFpblRo
cmVhZCgpKTsKQEAgLTQzNywxMyArNDQ2LDE5IEBAIHZvaWQgUGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpnZW5lcmF0ZUNlcnRpZmljYXRlKERvY3VtZW50JiBkb2N1bWVudCwgY29uc3QgQ2VydGlmCiAg
ICAgICAgIHByb21pc2UucmVqZWN0KEludmFsaWRTdGF0ZUVycm9yKTsKICAgICAgICAgcmV0dXJu
OwogICAgIH0KKwogICAgIExpYldlYlJUQ0NlcnRpZmljYXRlR2VuZXJhdG9yOjpnZW5lcmF0ZUNl
cnRpZmljYXRlKGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCksIHBhZ2UtPmxpYldlYlJUQ1Byb3Zp
ZGVyKCksIGluZm8sIFtwcm9taXNlID0gV1RGTW92ZShwcm9taXNlKV0oYXV0byYmIHJlc3VsdCkg
bXV0YWJsZSB7CiAgICAgICAgIHByb21pc2Uuc2V0dGxlKFdURk1vdmUocmVzdWx0KSk7CiAgICAg
fSk7CisjZWxpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKyAgICBhdXRvIGNlcnRpZmljYXRlID0g
OjpXZWJDb3JlOjpnZW5lcmF0ZUNlcnRpZmljYXRlKGRvY3VtZW50LnNlY3VyaXR5T3JpZ2luKCks
IGluZm8pOworICAgIGlmIChjZXJ0aWZpY2F0ZS5oYXNfdmFsdWUoKSkKKyAgICAgICAgcHJvbWlz
ZS5yZXNvbHZlKCpjZXJ0aWZpY2F0ZSk7CisgICAgZWxzZQorICAgICAgICBwcm9taXNlLnJlamVj
dChOb3RTdXBwb3J0ZWRFcnJvcik7CiAjZWxzZQogICAgIFVOVVNFRF9QQVJBTShkb2N1bWVudCk7
Ci0gICAgVU5VU0VEX1BBUkFNKGV4cGlyZXMpOwotICAgIFVOVVNFRF9QQVJBTSh0eXBlKTsKKyAg
ICBVTlVTRURfUEFSQU0oaW5mbyk7CiAgICAgcHJvbWlzZS5yZWplY3QoTm90U3VwcG9ydGVkRXJy
b3IpOwogI2VuZGlmCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL1BlZXJDb25uZWN0aW9uQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9QZWVyQ29ubmVjdGlvbkJhY2tlbmQuaAppbmRleCAxZTIzYjRiMmMzNmEzOWEz
ODQ5MzYyYjRhZjBiYTI0OGEwMThiNmJlLi43ZGY3NzIwNzg5ZjI2ZTA4ZDkyNTRiMTljNzI1MDcx
NGVjZTQ1OWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L1BlZXJDb25uZWN0aW9uQmFja2VuZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUGVlckNvbm5lY3Rpb25CYWNrZW5kLmgKQEAgLTIyNyw2ICsyMjcsOCBAQCBwcm90
ZWN0ZWQ6CiAgICAgfTsKICAgICB2b2lkIGFkZFBlbmRpbmdUcmFja0V2ZW50KFBlbmRpbmdUcmFj
a0V2ZW50JiYpOwogCisgICAgdm9pZCBkaXNwYXRjaFRyYWNrRXZlbnQoUGVuZGluZ1RyYWNrRXZl
bnQmKTsKKwogcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZG9DcmVhdGVPZmZlcihSVENPZmZl
ck9wdGlvbnMmJikgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBkb0NyZWF0ZUFuc3dlcihSVENBbnN3
ZXJPcHRpb25zJiYpID0gMDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24uY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKaW5kZXggNWJkZGZlYzdlNGRmYzlkOWMw
Mjk5YzllMjdjYTlkYzIyZGY2NDEwNC4uOTBkZTYzOTkzNGVkNjFjNWMwYjEwMTJjMGFhNTM5N2Rk
MGQ4YjMyYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9S
VENQZWVyQ29ubmVjdGlvbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi5jcHAKQEAgLTk1LDcgKzk1LDcgQEAgRXhjZXB0aW9uT3I8
UmVmPFJUQ1BlZXJDb25uZWN0aW9uPj4gUlRDUGVlckNvbm5lY3Rpb246OmNyZWF0ZShEb2N1bWVu
dCYgZG9jdW1lbnQKICAgICBpZiAoIXBlZXJDb25uZWN0aW9uLT5pc0Nsb3NlZCgpKSB7CiAgICAg
ICAgIGlmIChhdXRvKiBwYWdlID0gZG9jdW1lbnQucGFnZSgpKSB7CiAgICAgICAgICAgICBwZWVy
Q29ubmVjdGlvbi0+cmVnaXN0ZXJUb0NvbnRyb2xsZXIocGFnZS0+cnRjQ29udHJvbGxlcigpKTsK
LSNpZiAhTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorI2lmIFVTRShMSUJX
RUJSVEMpICYmICghTE9HX0RJU0FCTEVEIHx8ICFSRUxFQVNFX0xPR19ESVNBQkxFRCkKICAgICAg
ICAgICAgIGlmICghcGFnZS0+c2Vzc2lvbklEKCkuaXNFcGhlbWVyYWwoKSkKICAgICAgICAgICAg
ICAgICBwYWdlLT5saWJXZWJSVENQcm92aWRlcigpLnNldExvZ2dpbmdMZXZlbChMb2dXZWJSVEMu
bGV2ZWwpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIuY3BwIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5u
ZWxIYW5kbGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iYTdiYTlhMDA1OTZkNjUwZTRjN2IzZjc4M2M3Mjdi
MjFhNTVkZDY2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmNwcApAQCAtMCww
ICsxLDMwOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIgorCisjaWYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRlICJFdmVudE5hbWVzLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJSVENEYXRhQ2hhbm5lbC5oIgor
I2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsRXZlbnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgor
I2luY2x1ZGUgIlJUQ1ByaW9yaXR5VHlwZS5oIgorCisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQu
aD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2Rl
YnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVi
dWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gR1N0
cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpmcm9tUlRDRGF0YUNoYW5uZWxJbml0KGNvbnN0IFJU
Q0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykKK3sKKyAgICBHVW5pcXVlUHRyPEdzdFN0cnVjdHVy
ZT4gaW5pdChnc3Rfc3RydWN0dXJlX25ldygib3B0aW9ucyIsICJwcm90b2NvbCIsIEdfVFlQRV9T
VFJJTkcsIG9wdGlvbnMucHJvdG9jb2wudXRmOCgpLmRhdGEoKSwgbnVsbHB0cikpOworCisgICAg
aWYgKG9wdGlvbnMub3JkZXJlZCkKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQoaW5pdC5nZXQo
KSwgIm9yZGVyZWQiLCBHX1RZUEVfQk9PTEVBTiwgKm9wdGlvbnMub3JkZXJlZCwgbnVsbHB0cik7
CisgICAgaWYgKG9wdGlvbnMubWF4UGFja2V0TGlmZVRpbWUpCisgICAgICAgIGdzdF9zdHJ1Y3R1
cmVfc2V0KGluaXQuZ2V0KCksICJtYXgtcGFja2V0LWxpZmV0aW1lIiwgR19UWVBFX0lOVCwgKm9w
dGlvbnMubWF4UGFja2V0TGlmZVRpbWUsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25zLm1heFJl
dHJhbnNtaXRzKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3NldChpbml0LmdldCgpLCAibWF4LXJl
dHJhbnNtaXRzIiwgR19UWVBFX0lOVCwgKm9wdGlvbnMubWF4UmV0cmFuc21pdHMsIG51bGxwdHIp
OworICAgIGlmIChvcHRpb25zLm5lZ290aWF0ZWQpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0
KGluaXQuZ2V0KCksICJuZWdvdGlhdGVkIiwgR19UWVBFX0JPT0xFQU4sICpvcHRpb25zLm5lZ290
aWF0ZWQsIG51bGxwdHIpOworICAgIGlmIChvcHRpb25zLmlkKQorICAgICAgICBnc3Rfc3RydWN0
dXJlX3NldChpbml0LmdldCgpLCAiaWQiLCBHX1RZUEVfSU5ULCAqb3B0aW9ucy5pZCwgbnVsbHB0
cik7CisKKyAgICBHc3RXZWJSVENQcmlvcml0eVR5cGUgcHJpb3JpdHlUeXBlOworICAgIHN3aXRj
aCAob3B0aW9ucy5wcmlvcml0eSkgeworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpWZXJ5TG93
OgorICAgICAgICBwcmlvcml0eVR5cGUgPSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfVkVSWV9M
T1c7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpMb3c6CisgICAg
ICAgIHByaW9yaXR5VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9MT1c7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpNZWRpdW06CisgICAgICAgIHByaW9y
aXR5VHlwZSA9IEdTVF9XRUJSVENfUFJJT1JJVFlfVFlQRV9NRURJVU07CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpIaWdoOgorICAgICAgICBwcmlvcml0eVR5cGUg
PSBHU1RfV0VCUlRDX1BSSU9SSVRZX1RZUEVfSElHSDsKKyAgICAgICAgYnJlYWs7CisgICAgfQor
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KGluaXQuZ2V0KCksICJwcmlvcml0eSIsIEdTVF9UWVBFX1dF
QlJUQ19QUklPUklUWV9UWVBFLCBwcmlvcml0eVR5cGUsIG51bGxwdHIpOworCisgICAgcmV0dXJu
IGluaXQ7Cit9CisKK1JlZjxSVENEYXRhQ2hhbm5lbEV2ZW50PiBHU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXI6OmNyZWF0ZURhdGFDaGFubmVsRXZlbnQoRG9jdW1lbnQmIGRvY3VtZW50LCBHUmVm
UHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiYmIGRhdGFDaGFubmVsKQoreworICAgIEdVbmlxdWVP
dXRQdHI8Y2hhcj4gbGFiZWw7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBwcm90b2NvbDsKKyAg
ICBnYm9vbGVhbiBvcmRlcmVkLCBuZWdvdGlhdGVkOworICAgIGdpbnQgbWF4UGFja2V0TGlmZVRp
bWUsIG1heFJldHJhbnNtaXRzLCBpZDsKKyAgICBnX29iamVjdF9nZXQoZGF0YUNoYW5uZWwuZ2V0
KCksICJvcmRlcmVkIiwgJm9yZGVyZWQsICJsYWJlbCIsICZsYWJlbC5vdXRQdHIoKSwKKyAgICAg
ICAgIm1heC1wYWNrZXQtbGlmZXRpbWUiLCAmbWF4UGFja2V0TGlmZVRpbWUsICJtYXgtcmV0cmFu
c21pdHMiLCAmbWF4UmV0cmFuc21pdHMsCisgICAgICAgICJwcm90b2NvbCIsICZwcm90b2NvbC5v
dXRQdHIoKSwgIm5lZ290aWF0ZWQiLCAmbmVnb3RpYXRlZCwgImlkIiwgJmlkLCBudWxscHRyKTsK
KworICAgIFJUQ0RhdGFDaGFubmVsSW5pdCBpbml0OworICAgIGluaXQub3JkZXJlZCA9IG9yZGVy
ZWQ7CisgICAgaW5pdC5tYXhQYWNrZXRMaWZlVGltZSA9IG1heFBhY2tldExpZmVUaW1lOworICAg
IGluaXQubWF4UmV0cmFuc21pdHMgPSBtYXhSZXRyYW5zbWl0czsKKyAgICBpbml0LnByb3RvY29s
ID0gU3RyaW5nKHByb3RvY29sLmdldCgpKTsKKyAgICBpbml0Lm5lZ290aWF0ZWQgPSBuZWdvdGlh
dGVkOworICAgIGluaXQuaWQgPSBpZDsKKworICAgIGF1dG8gaGFuZGxlciA9IFdURjo6bWFrZVVu
aXF1ZTxHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI+KFdURk1vdmUoZGF0YUNoYW5uZWwpKTsK
KyAgICBhdXRvIGNoYW5uZWwgPSBSVENEYXRhQ2hhbm5lbDo6Y3JlYXRlKGRvY3VtZW50LCBXVEZN
b3ZlKGhhbmRsZXIpLCBTdHJpbmc6OmZyb21VVEY4KGxhYmVsLmdldCgpKSwgV1RGTW92ZShpbml0
KSk7CisgICAgcmV0dXJuIFJUQ0RhdGFDaGFubmVsRXZlbnQ6OmNyZWF0ZShldmVudE5hbWVzKCku
ZGF0YWNoYW5uZWxFdmVudCwgRXZlbnQ6OkNhbkJ1YmJsZTo6Tm8sIEV2ZW50OjpJc0NhbmNlbGFi
bGU6Ok5vLCBXVEZNb3ZlKGNoYW5uZWwpKTsKK30KKworR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5k
bGVyOjpHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoR1JlZlB0cjxHc3RXZWJSVENEYXRhQ2hh
bm5lbD4mJiBjaGFubmVsKQorICAgIDogbV9jaGFubmVsKFdURk1vdmUoY2hhbm5lbCkpCit7Cisg
ICAgQVNTRVJUKG1fY2hhbm5lbCk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9j
aGFubmVsLmdldCgpLCAibm90aWZ5OjpyZWFkeS1zdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJl
YW1lckRhdGFDaGFubmVsSGFuZGxlciogaGFuZGxlcikgeworICAgICAgICBoYW5kbGVyLT5yZWFk
eVN0YXRlQ2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tbWVzc2FnZS1kYXRhIiwgR19DQUxMQkFDSygrW10o
R1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyLCBHQnl0ZXMqIGJ5dGVzKSB7Cisg
ICAgICAgIGhhbmRsZXItPm9uTWVzc2FnZURhdGEoYnl0ZXMpOworICAgIH0pLCB0aGlzKTsKKyAg
ICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9jaGFubmVsLmdldCgpLCAib24tbWVzc2FnZS1z
dHJpbmciLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRs
ZXIsIGNvbnN0IGNoYXIqIG1lc3NhZ2UpIHsKKyAgICAgICAgaGFuZGxlci0+b25NZXNzYWdlU3Ry
aW5nKG1lc3NhZ2UpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBw
ZWQobV9jaGFubmVsLmdldCgpLCAib24tZXJyb3IiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJE
YXRhQ2hhbm5lbEhhbmRsZXIqIGhhbmRsZXIsIEdFcnJvciogZXJyb3IpIHsKKyAgICAgICAgaGFu
ZGxlci0+b25FcnJvcihlcnJvcik7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX2NoYW5uZWwuZ2V0KCksICJvbi1idWZmZXJlZC1hbW91bnQtbG93IiwgR19D
QUxMQkFDSygrW10oR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyKiBoYW5kbGVyKSB7CisgICAg
ICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgcGFzcyB0aGUgYW1vdW50IGRlbHRhIGZyb20gd2VicnRj
YmluIHRvIHRoZSBXZWJDb3JlIGhhbmRsZXIuCisgICAgICAgIGhhbmRsZXItPm9uQnVmZmVyZWRB
bW91bnRMb3coKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK0dTdHJlYW1lckRhdGFDaGFubmVsSGFu
ZGxlcjo6fkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcigpCit7CisgICAgZ19zaWduYWxfaGFu
ZGxlcnNfZGlzY29ubmVjdF9ieV9kYXRhKG1fY2hhbm5lbC5nZXQoKSwgdGhpcyk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZXRDbGllbnQoUlRDRGF0YUNoYW5uZWxI
YW5kbGVyQ2xpZW50JiBjbGllbnQsIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVudGlmaWVyIGNv
bnRleHRJZGVudGlmaWVyKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsK
KyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKyAgICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICBtX2Nv
bnRleHRJZGVudGlmaWVyID0gY29udGV4dElkZW50aWZpZXI7CisKKyAgICBmb3IgKGF1dG8mIG1l
c3NhZ2UgOiBtX3BlbmRpbmdNZXNzYWdlcykgeworICAgICAgICBzd2l0Y2hPbihtZXNzYWdlLCBb
Jl0oUmVmPEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI+JiBkYXRhKSB7CisgICAgICAgICAgICBHU1Rf
REVCVUcoIk5vdGlmeWluZyBxdWV1ZWQgcmF3IGRhdGEgKHNpemU6ICV6dSkiLCBkYXRhLT5zaXpl
KCkpOworICAgICAgICAgICAgY2xpZW50LmRpZFJlY2VpdmVSYXdEYXRhKGRhdGEtPm1ha2VDb250
aWd1b3VzKCktPmRhdGEoKSwgZGF0YS0+c2l6ZSgpKTsKKyAgICAgICAgfSwgWyZdKFN0cmluZyYg
dGV4dCkgeworICAgICAgICAgICAgR1NUX0RFQlVHKCJOb3RpZnlpbmcgcXVldWVkIHN0cmluZyAl
cyIsIHRleHQuYXNjaWkoKS5kYXRhKCkpOworICAgICAgICAgICAgY2xpZW50LmRpZFJlY2VpdmVT
dHJpbmdEYXRhKHRleHQpOworICAgICAgICB9LCBbJl0oU3RhdGVDaGFuZ2Ugc3RhdGVDaGFuZ2Up
IHsKKyAgICAgICAgICAgIGlmIChzdGF0ZUNoYW5nZS5lcnJvcikgeworICAgICAgICAgICAgICAg
IGlmIChhdXRvIHJ0Y0Vycm9yID0gdG9SVENFcnJvcigqc3RhdGVDaGFuZ2UuZXJyb3IpKQorICAg
ICAgICAgICAgICAgICAgICBjbGllbnQuZGlkRGV0ZWN0RXJyb3IocnRjRXJyb3IucmVsZWFzZU5v
bk51bGwoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBHU1RfREVCVUcoIkRpc3BhdGNo
aW5nIHN0YXRlIGNoYW5nZSB0byAlZCIsIHN0YXRpY19jYXN0PGludD4oc3RhdGVDaGFuZ2Uuc3Rh
dGUpKTsKKyAgICAgICAgICAgIGNsaWVudC5kaWRDaGFuZ2VSZWFkeVN0YXRlKHN0YXRlQ2hhbmdl
LnN0YXRlKTsKKyAgICAgICAgfSk7CisgICAgfQorICAgIG1fcGVuZGluZ01lc3NhZ2VzLmNsZWFy
KCk7Cit9CisKK2Jvb2wgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpzZW5kU3RyaW5nRGF0
YShjb25zdCBDU3RyaW5nJiB0ZXh0KQoreworICAgIEdTVF9ERUJVRygiU2VuZGluZyBzdHJpbmcg
JXMiLCB0ZXh0LmRhdGEoKSk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5lbC5n
ZXQoKSwgInNlbmQtc3RyaW5nIiwgdGV4dC5kYXRhKCkpOworICAgIHJldHVybiB0cnVlOworfQor
Citib29sIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6c2VuZFJhd0RhdGEoY29uc3QgdWlu
dDhfdCogZGF0YSwgc2l6ZV90IGxlbmd0aCkKK3sKKyAgICBhdXRvIGJ5dGVzID0gYWRvcHRHUmVm
KGdfYnl0ZXNfbmV3KGRhdGEsIGxlbmd0aCkpOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZSht
X2NoYW5uZWwuZ2V0KCksICJzZW5kLWRhdGEiLCBieXRlcy5nZXQoKSk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjbG9zZSgpCit7Cisg
ICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fY2hhbm5lbC5nZXQoKSwgImNsb3NlIik7Cit9CisK
K3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjaGVja1N0YXRlKCkKK3sKKyAgICBB
U1NFUlQobV9jbGllbnRMb2NrLmlzSGVsZCgpKTsKKworICAgIEdzdFdlYlJUQ0RhdGFDaGFubmVs
U3RhdGUgY2hhbm5lbFN0YXRlOworICAgIGdfb2JqZWN0X2dldChtX2NoYW5uZWwuZ2V0KCksICJy
ZWFkeS1zdGF0ZSIsICZjaGFubmVsU3RhdGUsIG51bGxwdHIpOworCisgICAgUlRDRGF0YUNoYW5u
ZWxTdGF0ZSBzdGF0ZTsKKyAgICBzd2l0Y2ggKGNoYW5uZWxTdGF0ZSkgeworICAgIGNhc2UgR1NU
X1dFQlJUQ19EQVRBX0NIQU5ORUxfU1RBVEVfTkVXOgorICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRB
X0NIQU5ORUxfU1RBVEVfQ09OTkVDVElORzoKKyAgICAgICAgc3RhdGUgPSBSVENEYXRhQ2hhbm5l
bFN0YXRlOjpDb25uZWN0aW5nOworICAgICAgICBicmVhazsKKyAgICBjYXNlIEdTVF9XRUJSVENf
REFUQV9DSEFOTkVMX1NUQVRFX09QRU46CisgICAgICAgIHN0YXRlID0gUlRDRGF0YUNoYW5uZWxT
dGF0ZTo6T3BlbjsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RBVEFfQ0hB
Tk5FTF9TVEFURV9DTE9TSU5HOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3RhdGU6
OkNsb3Npbmc7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19EQVRBX0NIQU5O
RUxfU1RBVEVfQ0xPU0VEOgorICAgICAgICBzdGF0ZSA9IFJUQ0RhdGFDaGFubmVsU3RhdGU6OkNs
b3NlZDsKKyAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgaWYgKCFtX2NsaWVudCkgeworICAg
ICAgICBHU1RfREVCVUcoIk5vIGNsaWVudCB5ZXQsIHF1ZXVlaW5nIHN0YXRlIik7CisgICAgICAg
IG1fcGVuZGluZ01lc3NhZ2VzLmFwcGVuZChTdGF0ZUNoYW5nZSB7IHN0YXRlLCB7IH0gfSk7Cisg
ICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBpZiAoISptX2NsaWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR1NUX0RFQlVHKCJEaXNwYXRjaGluZyBzdGF0ZSBjaGFuZ2UgdG8gJWQiLCBz
dGF0aWNfY2FzdDxpbnQ+KHN0YXRlKSk7CisgICAgcG9zdFRhc2soW2NsaWVudCA9IG1fY2xpZW50
LCBzdGF0ZV0geworICAgICAgICBpZiAoISpjbGllbnQpCisgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGNsaWVudC52YWx1ZSgpLT5kaWRDaGFuZ2VSZWFkeVN0YXRlKHN0YXRlKTsKKyAgICB9
KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OnJlYWR5U3RhdGVDaGFu
Z2VkKCkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRMb2NrIH07CisgICAgY2hlY2tT
dGF0ZSgpOworfQorCit2b2lkIEdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcjo6b25NZXNzYWdl
RGF0YShHQnl0ZXMqIGJ5dGVzKQoreworICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sg
fTsKKworICAgIGlmICghbV9jbGllbnQpIHsKKyAgICAgICAgbV9wZW5kaW5nTWVzc2FnZXMuYXBw
ZW5kKEZyYWdtZW50ZWRTaGFyZWRCdWZmZXI6OmNyZWF0ZShieXRlcykpOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgaWYgKCEqbV9jbGllbnQpCisgICAgICAgIHJldHVybjsKKworICAg
IHBvc3RUYXNrKFtjbGllbnQgPSBtX2NsaWVudCwgYnl0ZXMgPSBHUmVmUHRyPEdCeXRlcz4oYnl0
ZXMpXSB7CisgICAgICAgIGlmICghKmNsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgZ3NpemUgc2l6ZSA9IDA7CisgICAgICAgIGNvbnN0IGF1dG8qIGRhdGEgPSByZWludGVycHJl
dF9jYXN0PGNvbnN0IHVpbnQ4X3QqPihnX2J5dGVzX2dldF9kYXRhKGJ5dGVzLmdldCgpLCAmc2l6
ZSkpOworICAgICAgICBjbGllbnQudmFsdWUoKS0+ZGlkUmVjZWl2ZVJhd0RhdGEoZGF0YSwgc2l6
ZSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpvbk1l
c3NhZ2VTdHJpbmcoY29uc3QgY2hhciogbWVzc2FnZSkKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsg
bV9jbGllbnRMb2NrIH07CisKKyAgICBHU1RfREVCVUcoIkluY29taW5nIHN0cmluZzogJXMiLCBt
ZXNzYWdlKTsKKyAgICBpZiAoIW1fY2xpZW50KSB7CisgICAgICAgIEdTVF9ERUJVRygiTm8gY2xp
ZW50IHlldCwga2VlcGluZyBhcyBidWZmZXJlZCBtZXNzYWdlIik7CisgICAgICAgIG1fcGVuZGlu
Z01lc3NhZ2VzLmFwcGVuZChTdHJpbmc6OmZyb21VVEY4KG1lc3NhZ2UpKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICghKm1fY2xpZW50KQorICAgICAgICByZXR1cm47CisKKyAg
ICBHU1RfREVCVUcoIkRpc3BhdGNoaW5nIHBheWxvYWQiKTsKKyAgICBwb3N0VGFzayhbY2xpZW50
ID0gbV9jbGllbnQsIHN0cmluZyA9IFN0cmluZzo6ZnJvbVVURjgobWVzc2FnZSldIHsKKyAgICAg
ICAgaWYgKCEqY2xpZW50KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNsaWVudC52
YWx1ZSgpLT5kaWRSZWNlaXZlU3RyaW5nRGF0YShzdHJpbmcpOworICAgICAgICBHU1RfREVCVUco
IkRvbmUiKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6
Om9uRXJyb3IoR0Vycm9yKiBlcnJvcikKK3sKKyAgICBMb2NrZXIgbG9ja2VyIHsgbV9jbGllbnRM
b2NrIH07CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX1dB
Uk5JTkcoIkdvdCBkYXRhLWNoYW5uZWwgZXJyb3IgJXMiLCBlcnJvci0+bWVzc2FnZSk7CisgICAg
R1VuaXF1ZVB0cjxHRXJyb3I+IGVycm9yQ29weShnX2Vycm9yX2NvcHkoZXJyb3IpKTsKKyAgICBw
b3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnQsIGVycm9yID0gV1RGTW92ZShlcnJvckNvcHkpXSB7
CisgICAgICAgIGlmICghY2xpZW50IHx8ICFlcnJvcikKKyAgICAgICAgICAgIHJldHVybjsKKwor
ICAgICAgICBhdXRvIHJ0Y0Vycm9yID0gdG9SVENFcnJvcihlcnJvci5nZXQoKSk7CisgICAgICAg
IGlmICghcnRjRXJyb3IpCisgICAgICAgICAgICBydGNFcnJvciA9IFJUQ0Vycm9yOjpjcmVhdGUo
UlRDRXJyb3I6OkluaXQgeyBSVENFcnJvckRldGFpbFR5cGU6OkRhdGFDaGFubmVsRmFpbHVyZSwg
eyB9LCB7IH0sIHsgfSwgeyB9IH0sIHsgfSk7CisgICAgICAgIGNsaWVudC52YWx1ZSgpLT5kaWRE
ZXRlY3RFcnJvcihydGNFcnJvci5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9KTsKK30KKwordm9p
ZCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6Om9uQnVmZmVyZWRBbW91bnRMb3coKQorewor
ICAgIExvY2tlciBsb2NrZXIgeyBtX2NsaWVudExvY2sgfTsKKyAgICBpZiAoIW1fY2xpZW50KQor
ICAgICAgICByZXR1cm47CisKKyAgICBwb3N0VGFzayhbY2xpZW50ID0gbV9jbGllbnRdIHsKKyAg
ICAgICAgaWYgKCFjbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgLy8gRklY
TUU6IFBhc3MgYW1vdW50IHRvIGhhbmRsZXIgaW5zdGVhZCBvZiAwLgorICAgICAgICBjbGllbnQu
dmFsdWUoKS0+YnVmZmVyZWRBbW91bnRJc0RlY3JlYXNpbmcoMCk7CisgICAgfSk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpwb3N0VGFzayhGdW5jdGlvbjx2b2lkKCk+
JiYgZnVuY3Rpb24pCit7CisgICAgQVNTRVJUKG1fY2xpZW50TG9jay5pc0hlbGQoKSk7CisKKyAg
ICBpZiAoIW1fY29udGV4dElkZW50aWZpZXIpIHsKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZChX
VEZNb3ZlKGZ1bmN0aW9uKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisgICAgU2NyaXB0RXhl
Y3V0aW9uQ29udGV4dDo6cG9zdFRhc2tUbyhtX2NvbnRleHRJZGVudGlmaWVyLCBXVEZNb3ZlKGZ1
bmN0aW9uKSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5l
bEhhbmRsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44ZjMzMmJkZTI0Y2VlYzkyMWZkNDYxNjJjNTA2MGVhMDI1
OTNjZTFkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyLmgKQEAgLTAsMCArMSw4
NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAg
Qi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRp
c3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRo
ZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUg
TGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1
c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGlt
cGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1Ymxp
YyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNl
aXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNl
IGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3
YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNp
ZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFtZXIuaCIK
KyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5u
ZWxIYW5kbGVyLmgiCisjaW5jbHVkZSAiUlRDRGF0YUNoYW5uZWxTdGF0ZS5oIgorI2luY2x1ZGUg
IlNoYXJlZEJ1ZmZlci5oIgorCisjaW5jbHVkZSA8d3RmL0NvbmRpdGlvbi5oPgorI2luY2x1ZGUg
PHd0Zi9Mb2NrLmg+CisjaW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitjbGFzcyBEb2N1bWVudDsKK2NsYXNzIFJUQ0RhdGFDaGFubmVsRXZlbnQ7CitjbGFz
cyBSVENEYXRhQ2hhbm5lbEhhbmRsZXJDbGllbnQ7CitzdHJ1Y3QgUlRDRGF0YUNoYW5uZWxJbml0
OworCitjbGFzcyBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIgZmluYWwgOiBwdWJsaWMgUlRD
RGF0YUNoYW5uZWxIYW5kbGVyIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1Ymxp
YzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXIoR1JlZlB0cjxHc3RX
ZWJSVENEYXRhQ2hhbm5lbD4mJik7CisgICAgfkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlcigp
OworCisgICAgc3RhdGljIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBmcm9tUlRDRGF0YUNoYW5u
ZWxJbml0KGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYpOworICAgIHN0YXRpYyBSZWY8UlRDRGF0
YUNoYW5uZWxFdmVudD4gY3JlYXRlRGF0YUNoYW5uZWxFdmVudChEb2N1bWVudCYsIEdSZWZQdHI8
R3N0V2ViUlRDRGF0YUNoYW5uZWw+JiYpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0RhdGFDaGFu
bmVsSGFuZGxlciBBUEkKKyAgICB2b2lkIHNldENsaWVudChSVENEYXRhQ2hhbm5lbEhhbmRsZXJD
bGllbnQmLCBTY3JpcHRFeGVjdXRpb25Db250ZXh0SWRlbnRpZmllcikgZmluYWw7CisgICAgYm9v
bCBzZW5kU3RyaW5nRGF0YShjb25zdCBDU3RyaW5nJikgZmluYWw7CisgICAgYm9vbCBzZW5kUmF3
RGF0YShjb25zdCB1aW50OF90Kiwgc2l6ZV90KSBmaW5hbDsKKyAgICB2b2lkIGNsb3NlKCkgZmlu
YWw7CisKKyAgICB2b2lkIG9uTWVzc2FnZURhdGEoR0J5dGVzKik7CisgICAgdm9pZCBvbk1lc3Nh
Z2VTdHJpbmcoY29uc3QgY2hhciopOworICAgIHZvaWQgb25FcnJvcihHRXJyb3IqKTsKKyAgICB2
b2lkIG9uQnVmZmVyZWRBbW91bnRMb3coKTsKKyAgICB2b2lkIHJlYWR5U3RhdGVDaGFuZ2VkKCk7
CisKKyAgICB2b2lkIGNoZWNrU3RhdGUoKTsKKyAgICB2b2lkIHBvc3RUYXNrKEZ1bmN0aW9uPHZv
aWQoKT4mJik7CisKKyAgICBzdHJ1Y3QgU3RhdGVDaGFuZ2UgeworICAgICAgICBSVENEYXRhQ2hh
bm5lbFN0YXRlIHN0YXRlOworICAgICAgICBzdGQ6Om9wdGlvbmFsPEdFcnJvcio+IGVycm9yOwor
ICAgIH07CisgICAgdXNpbmcgTWVzc2FnZSA9IHN0ZDo6dmFyaWFudDxTdGF0ZUNoYW5nZSwgU3Ry
aW5nLCBSZWY8RnJhZ21lbnRlZFNoYXJlZEJ1ZmZlcj4+OworICAgIHVzaW5nIFBlbmRpbmdNZXNz
YWdlcyA9IFZlY3RvcjxNZXNzYWdlPjsKKworICAgIExvY2sgbV9jbGllbnRMb2NrOworICAgIEdS
ZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IG1fY2hhbm5lbDsKKyAgICBzdGQ6Om9wdGlvbmFs
PFdlYWtQdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyQ2xpZW50Pj4gbV9jbGllbnQgV1RGX0dVQVJE
RURfQllfTE9DSyhtX2NsaWVudExvY2spOworICAgIFNjcmlwdEV4ZWN1dGlvbkNvbnRleHRJZGVu
dGlmaWVyIG1fY29udGV4dElkZW50aWZpZXI7CisgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4g
bV9wcmV2aW91c0J1ZmZlcmVkQW1vdW50OworICAgIFBlbmRpbmdNZXNzYWdlcyBtX3BlbmRpbmdN
ZXNzYWdlcyBXVEZfR1VBUkRFRF9CWV9MT0NLKG1fY2xpZW50TG9jayk7CisKKyAgICBMb2NrIG1f
b3BlbkxvY2s7CisgICAgQ29uZGl0aW9uIG1fb3BlbkNvbmRpdGlvbiBXVEZfR1VBUkRFRF9CWV9M
T0NLKG1fb3BlbkxvY2spOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZGQxNDQ5MjBmY2Q0MDAxZDVm
NWZlYWMzMmViMzZlMjBhYjM1ZmM2MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDk0IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KworI2luY2x1ZGUgIkdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJH
U3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FycmF5QnVm
ZmVyLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvR1VuaXF1ZVB0ci5oPgorCituYW1lc3BhY2UgV2Vi
Q29yZSB7CisKK0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpHU3RyZWFtZXJEdGxzVHJh
bnNwb3J0QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+JiB0cmFu
c3BvcnQpCisgICAgOiBtX2JhY2tlbmQodHJhbnNwb3J0KQoreworICAgIEFTU0VSVChtX2JhY2tl
bmQpOworICAgIEFTU0VSVChpc01haW5UaHJlYWQoKSk7Cit9CisKK0dTdHJlYW1lckR0bHNUcmFu
c3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIHVu
cmVnaXN0ZXJDbGllbnQoKTsKK30KKworVW5pcXVlUmVmPFJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQ+
IEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjppY2VUcmFuc3BvcnRCYWNrZW5kKCkKK3sK
KyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kPiht
X2JhY2tlbmQpOworfQorCit2b2lkIEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kOjpyZWdp
c3RlckNsaWVudChDbGllbnQmIGNsaWVudCkKK3sKKyAgICBBU1NFUlQoIW1fY2xpZW50KTsKKyAg
ICBtX2NsaWVudCA9IGNsaWVudDsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV9iYWNr
ZW5kLmdldCgpLCAibm90aWZ5OjpzdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckR0bHNU
cmFuc3BvcnRCYWNrZW5kKiBiYWNrZW5kKSB7CisgICAgICAgIGJhY2tlbmQtPnN0YXRlQ2hhbmdl
ZCgpOworICAgIH0pLCB0aGlzKTsKK30KKwordm9pZCBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFj
a2VuZDo6dW5yZWdpc3RlckNsaWVudCgpCit7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9kYXRhKG1fYmFja2VuZC5nZXQoKSwgdGhpcyk7CisgICAgbV9jbGllbnQuY2xlYXIo
KTsKK30KKwordm9pZCBHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVDaGFuZ2Vk
KCkgY29uc3QKK3sKKyAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbd2Vha1RoaXMgPSBXZWFr
UHRyIHsgdGhpcyB9XSB7CisgICAgICAgIGlmICghd2Vha1RoaXMpCisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIGlmICghd2Vha1RoaXMtPm1fY2xpZW50KQorICAgICAgICAgICAgcmV0dXJu
OworCisgICAgICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gcmVtb3RlQ2VydGlmaWNhdGU7CisgICAg
ICAgIEdVbmlxdWVPdXRQdHI8Y2hhcj4gY2VydGlmaWNhdGU7CisgICAgICAgIEdzdFdlYlJUQ0RU
TFNUcmFuc3BvcnRTdGF0ZSBzdGF0ZTsKKyAgICAgICAgZ19vYmplY3RfZ2V0KHdlYWtUaGlzLT5t
X2JhY2tlbmQuZ2V0KCksICJzdGF0ZSIsICZzdGF0ZSwgInJlbW90ZS1jZXJ0aWZpY2F0ZSIsICZy
ZW1vdGVDZXJ0aWZpY2F0ZS5vdXRQdHIoKSwgImNlcnRpZmljYXRlIiwgJmNlcnRpZmljYXRlLm91
dFB0cigpLCBudWxscHRyKTsKKworICAgICAgICBWZWN0b3I8UmVmPEpTQzo6QXJyYXlCdWZmZXI+
PiBjZXJ0aWZpY2F0ZXM7CisgICAgICAgIGNlcnRpZmljYXRlcy5yZXNlcnZlSW5pdGlhbENhcGFj
aXR5KDIpOworICAgICAgICBpZiAocmVtb3RlQ2VydGlmaWNhdGUpIHsKKyAgICAgICAgICAgIGF1
dG8gcmVtb3RlQ2VydGlmaWNhdGVTdHJpbmcgPSBtYWtlU3RyaW5nKHJlbW90ZUNlcnRpZmljYXRl
LmdldCgpKTsKKyAgICAgICAgICAgIGF1dG8ganNSZW1vdGVDZXJ0aWZpY2F0ZSA9IEpTQzo6QXJy
YXlCdWZmZXI6OmNyZWF0ZShyZW1vdGVDZXJ0aWZpY2F0ZVN0cmluZy5jaGFyYWN0ZXJzOCgpLCBy
ZW1vdGVDZXJ0aWZpY2F0ZVN0cmluZy5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgICAgIGNlcnRp
ZmljYXRlcy51bmNoZWNrZWRBcHBlbmQoV1RGTW92ZShqc1JlbW90ZUNlcnRpZmljYXRlKSk7CisK
KyAgICAgICAgICAgIGF1dG8gY2VydGlmaWNhdGVTdHJpbmcgPSBtYWtlU3RyaW5nKGNlcnRpZmlj
YXRlLmdldCgpKTsKKyAgICAgICAgICAgIGF1dG8ganNDZXJ0aWZpY2F0ZSA9IEpTQzo6QXJyYXlC
dWZmZXI6OmNyZWF0ZShjZXJ0aWZpY2F0ZVN0cmluZy5jaGFyYWN0ZXJzOCgpLCBjZXJ0aWZpY2F0
ZVN0cmluZy5zaXplSW5CeXRlcygpKTsKKyAgICAgICAgICAgIGNlcnRpZmljYXRlcy51bmNoZWNr
ZWRBcHBlbmQoV1RGTW92ZShqc0NlcnRpZmljYXRlKSk7CisgICAgICAgIH0KKyAgICAgICAgd2Vh
a1RoaXMtPm1fY2xpZW50LT5vblN0YXRlQ2hhbmdlZCh0b1JUQ0R0bHNUcmFuc3BvcnRTdGF0ZShz
dGF0ZSksIFdURk1vdmUoY2VydGlmaWNhdGVzKSk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjJjMWRjODg0MDgyNzc2YjMwYjAwYTI5MmExOTYwNzUwOGUwNDQx
ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oCkBAIC0wLDAgKzEsNTMg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIlJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSA8d3Rm
L1dlYWtQdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJEdGxz
VHJhbnNwb3J0QmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENEdGxzVHJhbnNwb3J0QmFja2VuZCwg
cHVibGljIENhbk1ha2VXZWFrUHRyPEdTdHJlYW1lckR0bHNUcmFuc3BvcnRCYWNrZW5kLCBXZWFr
UHRyRmFjdG9yeUluaXRpYWxpemF0aW9uOjpFYWdlcj4geworICAgIFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOworCitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJh
Y2tlbmQoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiYpOworICAgIH5HU3Ry
ZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0R0bHNU
cmFuc3BvcnRCYWNrZW5kCisgICAgY29uc3Qgdm9pZCogYmFja2VuZCgpIGNvbnN0IGZpbmFsIHsg
cmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorICAgIFVuaXF1ZVJlZjxSVENJY2VUcmFuc3BvcnRC
YWNrZW5kPiBpY2VUcmFuc3BvcnRCYWNrZW5kKCkgZmluYWw7CisgICAgdm9pZCByZWdpc3RlckNs
aWVudChDbGllbnQmKSBmaW5hbDsKKyAgICB2b2lkIHVucmVnaXN0ZXJDbGllbnQoKSBmaW5hbDsK
KworICAgIHZvaWQgc3RhdGVDaGFuZ2VkKCkgY29uc3Q7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJU
Q0RUTFNUcmFuc3BvcnQ+IG1fYmFja2VuZDsKKyAgICBXZWFrUHRyPENsaWVudD4gbV9jbGllbnQ7
Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JU
QykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5k
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckljZVRyYW5zcG9ydEJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI2MGJjZmVlMGY4Mzg1YzMz
ZTc1OTVlNWJjYmU1ODE3MmNiMTliN2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNr
ZW5kLmNwcApAQCAtMCwwICsxLDEyMiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAy
MiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAy
MiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBz
b2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVu
ZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vu
c2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgor
ICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0
ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBo
b3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZ
OyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJ
VFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICog
IExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICog
IFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJh
bCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdy
aXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmts
aW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8K
KworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckljZVRyYW5zcG9ydEJh
Y2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
KworI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSA8SmF2YVNjcmlw
dENvcmUvQXJyYXlCdWZmZXIuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6R1N0
cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFu
c3BvcnQ+JiB0cmFuc3BvcnQpCisgICAgOiBtX2JhY2tlbmQodHJhbnNwb3J0KQoreworICAgIEFT
U0VSVChtX2JhY2tlbmQpOworCisgICAgaWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworICAgIGdfc2ln
bmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2JhY2tlbmQuZ2V0KCksICJub3RpZnk6OnRyYW5zcG9ydCIs
IEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsK
KyAgICAgICAgYmFja2VuZC0+aWNlVHJhbnNwb3J0Q2hhbmdlZCgpOworICAgIH0pLCB0aGlzKTsK
K30KKworR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6fkdTdHJlYW1lckljZVRyYW5zcG9y
dEJhY2tlbmQoKQoreworICAgIGlmIChHX0lTX09CSkVDVChtX2ljZVRyYW5zcG9ydC5nZXQoKSkp
CisgICAgICAgIGdfc2lnbmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2ljZVRyYW5z
cG9ydC5nZXQoKSwgdGhpcyk7CisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29ubmVjdF9ieV9k
YXRhKG1fYmFja2VuZC5nZXQoKSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNw
b3J0QmFja2VuZDo6aWNlVHJhbnNwb3J0Q2hhbmdlZCgpCit7CisgICAgaWYgKEdfSVNfT0JKRUNU
KG1faWNlVHJhbnNwb3J0LmdldCgpKSkKKyAgICAgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlzY29u
bmVjdF9ieV9kYXRhKG1faWNlVHJhbnNwb3J0LmdldCgpLCB0aGlzKTsKKworICAgIGdfb2JqZWN0
X2dldChtX2JhY2tlbmQuZ2V0KCksICJ0cmFuc3BvcnQiLCAmbV9pY2VUcmFuc3BvcnQub3V0UHRy
KCksIG51bGxwdHIpOworCisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKG1faWNlVHJhbnNw
b3J0LmdldCgpLCAibm90aWZ5OjpzdGF0ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lckljZVRy
YW5zcG9ydEJhY2tlbmQqIGJhY2tlbmQpIHsKKyAgICAgICAgYmFja2VuZC0+c3RhdGVDaGFuZ2Vk
KCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX2ljZVRy
YW5zcG9ydC5nZXQoKSwgIm5vdGlmeTo6Z2F0aGVyaW5nLXN0YXRlIiwgR19DQUxMQkFDSygrW10o
R1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBiYWNrZW5k
LT5nYXRoZXJpbmdTdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQp
Cit7CisgICAgQVNTRVJUKCFtX2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisKKyAg
ICBHc3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgdHJhbnNwb3J0U3RhdGU7CisgICAgR3N0V2Vi
UlRDSUNFR2F0aGVyaW5nU3RhdGUgZ2F0aGVyaW5nU3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1f
aWNlVHJhbnNwb3J0LmdldCgpLCAic3RhdGUiLCAmdHJhbnNwb3J0U3RhdGUsICJnYXRoZXJpbmct
c3RhdGUiLCAmZ2F0aGVyaW5nU3RhdGUsIG51bGxwdHIpOworCisgICAgY2FsbE9uTWFpblRocmVh
ZChbd2Vha1RoaXMgPSBXZWFrUHRyIHsgKnRoaXMgfSwgdHJhbnNwb3J0U3RhdGUsIGdhdGhlcmlu
Z1N0YXRlXSB7CisgICAgICAgIGlmICghd2Vha1RoaXMgfHwgIXdlYWtUaGlzLT5tX2NsaWVudCkK
KyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICAvLyBXZSBzdGFydCBvYnNlcnZpbmcgYSBi
aXQgbGF0ZSBhbmQgbWlnaHQgbWlzcyB0aGUgY2hlY2tpbmcgc3RhdGUuIFN5bnRoZXNpemUgaXQg
YXMgbmVlZGVkLgorICAgICAgICBpZiAodHJhbnNwb3J0U3RhdGUgPiBHU1RfV0VCUlRDX0lDRV9D
T05ORUNUSU9OX1NUQVRFX0NIRUNLSU5HICYmIHRyYW5zcG9ydFN0YXRlICE9IEdTVF9XRUJSVENf
SUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0xPU0VEKQorICAgICAgICAgICAgd2Vha1RoaXMtPm1fY2xp
ZW50LT5vblN0YXRlQ2hhbmdlZChSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmcpOworCisg
ICAgICAgIHdlYWtUaGlzLT5tX2NsaWVudC0+b25TdGF0ZUNoYW5nZWQodG9SVENJY2VUcmFuc3Bv
cnRTdGF0ZSh0cmFuc3BvcnRTdGF0ZSkpOworICAgICAgICB3ZWFrVGhpcy0+bV9jbGllbnQtPm9u
R2F0aGVyaW5nU3RhdGVDaGFuZ2VkKHRvUlRDSWNlR2F0aGVyaW5nU3RhdGUoZ2F0aGVyaW5nU3Rh
dGUpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kOjp1
bnJlZ2lzdGVyQ2xpZW50KCkKK3sKKyAgICBBU1NFUlQobV9jbGllbnQpOworICAgIG1fY2xpZW50
LmNsZWFyKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6c3RhdGVD
aGFuZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY2xpZW50KQorICAgICAgICByZXR1cm47CisK
KyAgICBHc3RXZWJSVENJQ0VDb25uZWN0aW9uU3RhdGUgdHJhbnNwb3J0U3RhdGU7CisgICAgZ19v
YmplY3RfZ2V0KG1faWNlVHJhbnNwb3J0LmdldCgpLCAic3RhdGUiLCAmdHJhbnNwb3J0U3RhdGUs
IG51bGxwdHIpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0
aGlzIH0sIHRyYW5zcG9ydFN0YXRlXSB7CisgICAgICAgIGlmICghd2Vha1RoaXMgfHwgIXdlYWtU
aGlzLT5tX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgd2Vha1RoaXMtPm1f
Y2xpZW50LT5vblN0YXRlQ2hhbmdlZCh0b1JUQ0ljZVRyYW5zcG9ydFN0YXRlKHRyYW5zcG9ydFN0
YXRlKSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZDo6
Z2F0aGVyaW5nU3RhdGVDaGFuZ2VkKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fY2xpZW50KQorICAg
ICAgICByZXR1cm47CisKKyAgICBHc3RXZWJSVENJQ0VHYXRoZXJpbmdTdGF0ZSBnYXRoZXJpbmdT
dGF0ZTsKKyAgICBnX29iamVjdF9nZXQobV9pY2VUcmFuc3BvcnQuZ2V0KCksICJnYXRoZXJpbmct
c3RhdGUiLCAmZ2F0aGVyaW5nU3RhdGUsIG51bGxwdHIpOworICAgIGNhbGxPbk1haW5UaHJlYWQo
W3dlYWtUaGlzID0gV2Vha1B0ciB7ICp0aGlzIH0sIGdhdGhlcmluZ1N0YXRlXSB7CisgICAgICAg
IGlmICghd2Vha1RoaXMgfHwgIXdlYWtUaGlzLT5tX2NsaWVudCkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgd2Vha1RoaXMtPm1fY2xpZW50LT5vbkdhdGhlcmluZ1N0YXRlQ2hhbmdlZCh0
b1JUQ0ljZUdhdGhlcmluZ1N0YXRlKGdhdGhlcmluZ1N0YXRlKSk7CisgICAgfSk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckljZVRyYW5z
cG9ydEJhY2tlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hOTdhMzk1N2UzMmUxYTFhMWEzMTU1NGYwOWQwZjY2
NmU5MTUyYmQ5Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRp
YXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVySWNlVHJhbnNwb3J0QmFja2VuZC5oCkBAIC0wLDAg
KzEsNTUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdy
b3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4g
cmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBi
eSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2Yg
dGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwg
YmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRo
ZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUg
cmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBT
b2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGgg
Rmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQor
CisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVk
ZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydEJhY2tlbmQu
aCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2Ns
YXNzIEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDSWNlVHJh
bnNwb3J0QmFja2VuZCwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdTdHJlYW1lckljZVRyYW5zcG9y
dEJhY2tlbmQ+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKKworcHVibGljOgorICAg
IGV4cGxpY2l0IEdTdHJlYW1lckljZVRyYW5zcG9ydEJhY2tlbmQoY29uc3QgR1JlZlB0cjxHc3RX
ZWJSVENEVExTVHJhbnNwb3J0PiYpOworICAgIH5HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5k
KCk7CisKK3ByaXZhdGU6CisgICAgLy8gUlRDSWNlVHJhbnNwb3J0QmFja2VuZAorICAgIGNvbnN0
IHZvaWQqIGJhY2tlbmQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2JhY2tlbmQuZ2V0KCk7IH0K
KworICAgIHZvaWQgcmVnaXN0ZXJDbGllbnQoQ2xpZW50JikgZmluYWw7CisgICAgdm9pZCB1bnJl
Z2lzdGVyQ2xpZW50KCkgZmluYWw7CisKKyAgICB2b2lkIHN0YXRlQ2hhbmdlZCgpIGNvbnN0Owor
ICAgIHZvaWQgZ2F0aGVyaW5nU3RhdGVDaGFuZ2VkKCkgY29uc3Q7CisgICAgdm9pZCBpY2VUcmFu
c3BvcnRDaGFuZ2VkKCk7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQ+IG1f
YmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gbV9pY2VUcmFuc3Bv
cnQ7CisgICAgV2Vha1B0cjxDbGllbnQ+IG1fY2xpZW50OworfTsKKworfSAvLyBuYW1lc3BhY2Ug
V2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5iYmE0Mjk0Zjk5NTA4MjAwNGQyNzdkNjAxNDE5YmEzNTIzNjkzZjI3Ci0tLSAvZGV2L251
bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyTWVkaWFFbmRwb2ludC5jcHAKQEAgLTAsMCArMSwxMjY5IEBACisvKgorICogIENvcHly
aWdodCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAg
Q29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IK
KyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwg
UHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91
bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91
ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlz
dHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lU
SE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgor
ICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g
IFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUg
ZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUg
R05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxp
YnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9u
LCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjEx
MC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVh
bWVyTWVkaWFFbmRwb2ludC5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNs
dWRlICJEb2N1bWVudC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lckRhdGFDaGFubmVsSGFuZGxlci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJl
Y2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJl
ZC5oIgorI2luY2x1ZGUgIkpTUlRDU3RhdHNSZXBvcnQuaCIKKyNpbmNsdWRlICJMb2dnaW5nLmgi
CisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24uaCIKKyNpbmNsdWRlICJOb3RJ
bXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJUQ0RhdGFDaGFubmVsLmgiCisjaW5jbHVkZSAiUlRD
RGF0YUNoYW5uZWxFdmVudC5oIgorI2luY2x1ZGUgIlJUQ0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1
ZGUgIlJUQ09mZmVyT3B0aW9ucy5oIgorI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCisj
aW5jbHVkZSAiUlRDU2N0cFRyYW5zcG9ydEJhY2tlbmQuaCIKKyNpbmNsdWRlICJSVENTZXNzaW9u
RGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJSVENTdGF0c1JlcG9ydC5oIgorI2luY2x1ZGUgIlJU
Q1RyYWNrRXZlbnQuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIu
aCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNp
bmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKworI2luY2x1
ZGUgPGdzdC9zZHAvc2RwLmg+CisjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKyNpbmNsdWRl
IDx3dGYvU2NvcGUuaD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9SdW5Mb29wU291cmNlUHJpb3JpdHku
aD4KKyNpbmNsdWRlIDx3dGYvZ2xpYi9XVEZHVHlwZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L1N0
cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZKHdlYmtpdF93
ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dl
YnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK0dTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OkdTdHJlYW1lck1lZGlhRW5kcG9pbnQoR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kJiBwZWVyQ29ubmVjdGlvbikKKyAgICA6IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5k
KHBlZXJDb25uZWN0aW9uKQorICAgICwgbV9zdGF0c0NvbGxlY3RvcihHU3RyZWFtZXJTdGF0c0Nv
bGxlY3Rvcjo6Y3JlYXRlKCkpCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgLCBtX3N0
YXRzTG9nVGltZXIoKnRoaXMsICZHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpnYXRoZXJTdGF0c0Zv
ckxvZ2dpbmcpCisgICAgLCBtX2xvZ2dlcihwZWVyQ29ubmVjdGlvbi5sb2dnZXIoKSkKKyAgICAs
IG1fbG9nSWRlbnRpZmllcihwZWVyQ29ubmVjdGlvbi5sb2dJZGVudGlmaWVyKCkpCisjZW5kaWYK
K3sKKyAgICBlbnN1cmVHU3RyZWFtZXJJbml0aWFsaXplZCgpOworCisgICAgc3RhdGljIHN0ZDo6
b25jZV9mbGFnIGRlYnVnUmVnaXN0ZXJlZEZsYWc7CisgICAgc3RkOjpjYWxsX29uY2UoZGVidWdS
ZWdpc3RlcmVkRmxhZywgW10geworICAgICAgICBHU1RfREVCVUdfQ0FURUdPUllfSU5JVCh3ZWJr
aXRfd2VicnRjX2VuZHBvaW50X2RlYnVnLCAid2Via2l0d2VicnRjZW5kcG9pbnQiLCAwLCAiV2Vi
S2l0IFdlYlJUQyBlbmQtcG9pbnQiKTsKKyAgICB9KTsKK30KKworYm9vbCBHU3RyZWFtZXJNZWRp
YUVuZHBvaW50Ojppbml0aWFsaXplUGlwZWxpbmUoKQoreworICAgIHN0YXRpYyB1aW50MzJfdCBu
UGlwZWxpbmUgPSAwOworICAgIGF1dG8gcGlwZWxpbmVOYW1lID0gbWFrZVN0cmluZygid2Via2l0
LXdlYnJ0LXBpcGVsaW5lLSIsIG5QaXBlbGluZSk7CisgICAgbV9waXBlbGluZSA9IGdzdF9waXBl
bGluZV9uZXcocGlwZWxpbmVOYW1lLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIGNvbm5lY3RTaW1w
bGVCdXNNZXNzYWdlQ2FsbGJhY2sobV9waXBlbGluZS5nZXQoKSwgW3RoaXNdKEdzdE1lc3NhZ2Uq
IG1lc3NhZ2UpIHsKKyAgICAgICAgaGFuZGxlTWVzc2FnZShtZXNzYWdlKTsKKyAgICB9KTsKKwor
ICAgIGF1dG8gYmluTmFtZSA9IG1ha2VTdHJpbmcoIndlYmtpdC13ZWJydGNiaW4tIiwgblBpcGVs
aW5lKyspOworICAgIG1fd2VicnRjQmluID0gbWFrZUdTdHJlYW1lckVsZW1lbnQoIndlYnJ0Y2Jp
biIsIGJpbk5hbWUuYXNjaWkoKS5kYXRhKCkpOworICAgIGlmICghbV93ZWJydGNCaW4pCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIG1fc3RhdHNDb2xsZWN0b3ItPnNldEVsZW1lbnQobV93
ZWJydGNCaW4uZ2V0KCkpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dhcHBlZChtX3dlYnJ0Y0Jp
bi5nZXQoKSwgIm5vdGlmeTo6aWNlLWNvbm5lY3Rpb24tc3RhdGUiLCBHX0NBTExCQUNLKCtbXShH
U3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCkgeworICAgICAgICBlbmRQb2ludC0+b25J
Y2VDb25uZWN0aW9uQ2hhbmdlKCk7CisgICAgfSksIHRoaXMpOworICAgIGdfc2lnbmFsX2Nvbm5l
Y3Rfc3dhcHBlZChtX3dlYnJ0Y0Jpbi5nZXQoKSwgIm5vdGlmeTo6aWNlLWdhdGhlcmluZy1zdGF0
ZSIsIEdfQ0FMTEJBQ0soK1tdKEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqIGVuZFBvaW50KSB7Cisg
ICAgICAgIGVuZFBvaW50LT5vbkljZUdhdGhlcmluZ0NoYW5nZSgpOworICAgIH0pLCB0aGlzKTsK
KyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJvbi1uZWdv
dGlhdGlvbi1uZWVkZWQiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBl
bmRQb2ludCkgeworICAgICAgICBlbmRQb2ludC0+b25OZWdvdGlhdGlvbk5lZWRlZCgpOworICAg
IH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0
KCksICJvbi1pY2UtY2FuZGlkYXRlIiwgR19DQUxMQkFDSygrW10oR1N0cmVhbWVyTWVkaWFFbmRw
b2ludCogZW5kUG9pbnQsIGd1aW50IHNkcE1MaW5lSW5kZXgsIGdjaGFyYXJyYXkgY2FuZGlkYXRl
KSB7CisgICAgICAgIGVuZFBvaW50LT5vbkljZUNhbmRpZGF0ZShzZHBNTGluZUluZGV4LCBjYW5k
aWRhdGUpOworICAgIH0pLCB0aGlzKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93
ZWJydGNCaW4uZ2V0KCksICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRp
YUVuZHBvaW50KiBlbmRQb2ludCwgR3N0UGFkKiBwYWQpIHsKKyAgICAgICAgLy8gSWdub3JlIG91
dGdvaW5nIHBhZCBub3RpZmljYXRpb25zLgorICAgICAgICBpZiAoR1NUX1BBRF9ESVJFQ1RJT04o
cGFkKSAhPSBHU1RfUEFEX1NSQykKKyAgICAgICAgICAgIHJldHVybjsKKworICAgICAgICBjYWxs
T25NYWluVGhyZWFkQW5kV2FpdChbcHJvdGVjdGVkVGhpcyA9IFJlZigqZW5kUG9pbnQpLCBwYWRd
IHsKKyAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0b3BwZWQoKSkKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHByb3RlY3RlZFRoaXMtPmFkZFJlbW90ZVN0
cmVhbShwYWQpOworICAgICAgICB9KTsKKyAgICB9KSwgdGhpcyk7CisgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKG1fd2VicnRjQmluLmdldCgpLCAicGFkLXJlbW92ZWQiLCBHX0NBTExCQUNL
KCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBlbmRQb2ludCwgR3N0UGFkKiBwYWQpIHsKKyAg
ICAgICAgLy8gSWdub3JlIG91dGdvaW5nIHBhZCBub3RpZmljYXRpb25zLgorICAgICAgICBpZiAo
R1NUX1BBRF9ESVJFQ1RJT04ocGFkKSAhPSBHU1RfUEFEX1NSQykKKyAgICAgICAgICAgIHJldHVy
bjsKKworICAgICAgICBjYWxsT25NYWluVGhyZWFkQW5kV2FpdChbcHJvdGVjdGVkVGhpcyA9IFJl
ZigqZW5kUG9pbnQpLCBwYWRdIHsKKyAgICAgICAgICAgIGlmIChwcm90ZWN0ZWRUaGlzLT5pc1N0
b3BwZWQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgICAgIHByb3RlY3Rl
ZFRoaXMtPnJlbW92ZVJlbW90ZVN0cmVhbShwYWQpOworICAgICAgICB9KTsKKyAgICB9KSwgdGhp
cyk7CisKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3YXBwZWQobV93ZWJydGNCaW4uZ2V0KCksICJv
bi1kYXRhLWNoYW5uZWwiLCBHX0NBTExCQUNLKCtbXShHU3RyZWFtZXJNZWRpYUVuZHBvaW50KiBl
bmRQb2ludCwgR3N0V2ViUlRDRGF0YUNoYW5uZWwqIGNoYW5uZWwpIHsKKyAgICAgICAgZW5kUG9p
bnQtPm9uRGF0YUNoYW5uZWwoY2hhbm5lbCk7CisgICAgfSksIHRoaXMpOworCisgICAgZ3N0X2Jp
bl9hZGQoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBtX3dlYnJ0Y0Jpbi5nZXQoKSk7
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK0dTdHJlYW1lck1lZGlhRW5kcG9pbnQ6On5HU3RyZWFt
ZXJNZWRpYUVuZHBvaW50KCkKK3sKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgdGVhcmRv
d25QaXBlbGluZSgpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnRlYXJkb3du
UGlwZWxpbmUoKQoreworICAgIEFTU0VSVChtX3BpcGVsaW5lKTsKKyNpZiAhUkVMRUFTRV9MT0df
RElTQUJMRUQKKyAgICBzdG9wTG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKKyAgICBtX3N0YXRzQ29s
bGVjdG9yLT5zZXRFbGVtZW50KG51bGxwdHIpOworCisgICAgZ19zaWduYWxfaGFuZGxlcnNfZGlz
Y29ubmVjdF9ieV9kYXRhKG1fd2VicnRjQmluLmdldCgpLCB0aGlzKTsKKyAgICBkaXNjb25uZWN0
U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUuZ2V0KCkpOworICAgIGdzdF9lbGVt
ZW50X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfTlVMTCk7CisKKyAgICBt
X3NvdXJjZXMuY2xlYXIoKTsKKyAgICBtX3JlbW90ZU1MaW5lSW5mb3MuY2xlYXIoKTsKKyAgICBt
X3JlbW90ZVN0cmVhbXNCeUlkLmNsZWFyKCk7CisgICAgbV93ZWJydGNCaW4gPSBudWxscHRyOwor
ICAgIG1fcGlwZWxpbmUgPSBudWxscHRyOworfQorCitib29sIEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQ6OmhhbmRsZU1lc3NhZ2UoR3N0TWVzc2FnZSogbWVzc2FnZSkKK3sKKyAgICBzd2l0Y2ggKEdT
VF9NRVNTQUdFX1RZUEUobWVzc2FnZSkpIHsKKyAgICBjYXNlIEdTVF9NRVNTQUdFX0VPUzoKKyAg
ICAgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklMRV9XSVRIX1RTKEdTVF9CSU5fQ0FTVChtX3Bp
cGVsaW5lLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCAiZW9zIik7CisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgR1NUX01FU1NBR0VfRUxFTUVOVDogeworICAgICAgICBjb25zdCBh
dXRvKiBkYXRhID0gZ3N0X21lc3NhZ2VfZ2V0X3N0cnVjdHVyZShtZXNzYWdlKTsKKyAgICAgICAg
aWYgKCFnX3N0cmNtcDAoZ3N0X3N0cnVjdHVyZV9nZXRfbmFtZShkYXRhKSwgIkdzdEJpbkZvcndh
cmRlZCIpKSB7CisgICAgICAgICAgICBHUmVmUHRyPEdzdE1lc3NhZ2U+IHN1Yk1lc3NhZ2U7Cisg
ICAgICAgICAgICBnc3Rfc3RydWN0dXJlX2dldChkYXRhLCAibWVzc2FnZSIsIEdTVF9UWVBFX01F
U1NBR0UsICZzdWJNZXNzYWdlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGlmIChH
U1RfTUVTU0FHRV9UWVBFKHN1Yk1lc3NhZ2UuZ2V0KCkpID09IEdTVF9NRVNTQUdFX0VPUykKKyAg
ICAgICAgICAgICAgICBkaXNwb3NlRWxlbWVudENoYWluKEdTVF9FTEVNRU5UX0NBU1QoR1NUX01F
U1NBR0VfU1JDKHN1Yk1lc3NhZ2UuZ2V0KCkpKSk7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7
CisgICAgfQorICAgIGRlZmF1bHQ6CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpkaXNwb3NlRWxlbWVudENo
YWluKEdzdEVsZW1lbnQqIGVsZW1lbnQpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVs
aW5lLmdldCgpLCAiR290IGVsZW1lbnQgRU9TIG1lc3NhZ2UgZnJvbSAlIiBHU1RfUFRSX0ZPUk1B
VCwgZWxlbWVudCk7CisKKyAgICBhdXRvIHBhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRf
c3RhdGljX3BhZChlbGVtZW50LCAic2luayIpKTsKKyAgICBhdXRvIHBlZXIgPSBhZG9wdEdSZWYo
Z3N0X3BhZF9nZXRfcGVlcihwYWQuZ2V0KCkpKTsKKworICAgIGdzdF9lbGVtZW50X3NldF9sb2Nr
ZWRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgVFJVRSk7CisgICAgZ3N0X3BhZF91bmxpbmsocGVl
ci5nZXQoKSwgcGFkLmdldCgpKTsKKyAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NBU1QobV9w
aXBlbGluZS5nZXQoKSksIGVsZW1lbnQpOworICAgIGdzdF9lbGVtZW50X3JlbGVhc2VfcmVxdWVz
dF9wYWQobV93ZWJydGNCaW4uZ2V0KCksIHBlZXIuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3Nl
dF9zdGF0ZShlbGVtZW50LCBHU1RfU1RBVEVfTlVMTCk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X2xv
Y2tlZF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBGQUxTRSk7Cit9CisKK2Jvb2wgR1N0cmVhbWVy
TWVkaWFFbmRwb2ludDo6c2V0Q29uZmlndXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlv
biYgY29uZmlndXJhdGlvbikKK3sKKyAgICBpZiAobV9waXBlbGluZSkKKyAgICAgICAgdGVhcmRv
d25QaXBlbGluZSgpOworCisgICAgaWYgKCFpbml0aWFsaXplUGlwZWxpbmUoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworCisgICAgYXV0byBidW5kbGVQb2xpY3kgPSBidW5kbGVQb2xpY3lGcm9t
Q29uZmlndXJhdGlvbihjb25maWd1cmF0aW9uKTsKKyAgICBhdXRvIGljZVRyYW5zcG9ydFBvbGlj
eSA9IGljZVRyYW5zcG9ydFBvbGljeUZyb21Db25maWd1cmF0aW9uKGNvbmZpZ3VyYXRpb24pOwor
ICAgIGdfb2JqZWN0X3NldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImJ1bmRsZS1wb2xpY3kiLCBidW5k
bGVQb2xpY3ksICJpY2UtdHJhbnNwb3J0LXBvbGljeSIsIGljZVRyYW5zcG9ydFBvbGljeSwgbnVs
bHB0cik7CisKKyAgICBmb3IgKGF1dG8mIHNlcnZlciA6IGNvbmZpZ3VyYXRpb24uaWNlU2VydmVy
cykgeworICAgICAgICBib29sIHN0dW5TZXQgPSBmYWxzZTsKKyAgICAgICAgZm9yIChhdXRvJiB1
cmwgOiBzZXJ2ZXIudXJscykgeworICAgICAgICAgICAgaWYgKHVybC5wcm90b2NvbCgpLnN0YXJ0
c1dpdGgoInR1cm4iKSkgeworICAgICAgICAgICAgICAgIGF1dG8gdmFsaWQgPSB1cmwuc3RyaW5n
KCkuaXNvbGF0ZWRDb3B5KCkucmVwbGFjZSgidHVybjoiLCAidHVybjovLyIpLnJlcGxhY2UoInR1
cm5zOiIsICJ0dXJuczovLyIpOworICAgICAgICAgICAgICAgIFVSTCB2YWxpZFVSTChVUkwoKSwg
dmFsaWQpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBsaWJuaWNlIGN1cnJlbnRseSBkb2Vz
bid0IHNlZW0gdG8gaGFuZGxlIElQdjYgYWRkcmVzc2VzIHZlcnkgd2VsbC4KKyAgICAgICAgICAg
ICAgICBpZiAodmFsaWRVUkwuaG9zdCgpLnN0YXJ0c1dpdGgoJ1snKSkKKyAgICAgICAgICAgICAg
ICAgICAgY29udGludWU7CisgICAgICAgICAgICAgICAgdmFsaWRVUkwuc2V0VXNlcihzZXJ2ZXIu
dXNlcm5hbWUpOworICAgICAgICAgICAgICAgIHZhbGlkVVJMLnNldFBhc3N3b3JkKHNlcnZlci5j
cmVkZW50aWFsKTsKKyAgICAgICAgICAgICAgICBnYm9vbGVhbiByZXN1bHQgPSBGQUxTRTsKKyAg
ICAgICAgICAgICAgICBnX3NpZ25hbF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJh
ZGQtdHVybi1zZXJ2ZXIiLCB2YWxpZFVSTC5zdHJpbmcoKS51dGY4KCkuZGF0YSgpLCAmcmVzdWx0
KTsKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICAgICAgR1NU
X1dBUk5JTkcoIlVuYWJsZSB0byB1c2UgVFVSTiBzZXJ2ZXI6ICVzIiwgdmFsaWRVUkwuc3RyaW5n
KCkudXRmOCgpLmRhdGEoKSk7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAoIXN0dW5T
ZXQgJiYgdXJsLnByb3RvY29sKCkuc3RhcnRzV2l0aCgic3R1biIpKSB7CisgICAgICAgICAgICAg
ICAgYXV0byB2YWxpZCA9IHVybC5zdHJpbmcoKS5pc29sYXRlZENvcHkoKS5yZXBsYWNlKCJzdHVu
OiIsICJzdHVuOi8vIik7CisgICAgICAgICAgICAgICAgVVJMIHZhbGlkVVJMKFVSTCgpLCB2YWxp
ZCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IGxpYm5pY2UgY3VycmVudGx5IGRvZXNuJ3Qg
c2VlbSB0byBoYW5kbGUgSVB2NiBhZGRyZXNzZXMgdmVyeSB3ZWxsLgorICAgICAgICAgICAgICAg
IGlmICh2YWxpZFVSTC5ob3N0KCkuc3RhcnRzV2l0aCgnWycpKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICB2YWxpZFVSTC5zZXRVc2VyKHNlcnZlci51c2Vy
bmFtZSk7CisgICAgICAgICAgICAgICAgdmFsaWRVUkwuc2V0UGFzc3dvcmQoc2VydmVyLmNyZWRl
bnRpYWwpOworICAgICAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3dlYnJ0Y0Jpbi5nZXQoKSwg
InN0dW4tc2VydmVyIiwgdmFsaWRVUkwuc3RyaW5nKCkudXRmOCgpLmRhdGEoKSwgbnVsbHB0cik7
CisgICAgICAgICAgICAgICAgc3R1blNldCA9IHRydWU7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKKyAgICAvLyBXSVA6IGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9n
c3RyZWFtZXIvZ3N0LXBsdWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMzAyCisgICAgR1NUX0ZJ
WE1FKCIlenUgY3VzdG9tIGNlcnRpZmljYXRlcyBub3QgcHJvcGFnYXRlZCB0byB3ZWJydGNiaW4i
LCBjb25maWd1cmF0aW9uLmNlcnRpZmljYXRlcy5zaXplKCkpOworCisgICAgZ3N0X2VsZW1lbnRf
c2V0X3N0YXRlKG1fcGlwZWxpbmUuZ2V0KCksIEdTVF9TVEFURV9QTEFZSU5HKTsKKyAgICBHU1Rf
REVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJFbmQtcG9pbnQgcmVhZHkiKTsKKyAgICBy
ZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZXN0YXJ0SWNl
KCkKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJyZXN0YXJ0aW5n
IElDRSIpOworICAgIC8vIFdJUCBpbiBodHRwczovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0
cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21lcmdlX3JlcXVlc3RzLzE4NzcKKyAgICBpbml0aWF0
ZSh0cnVlLCBnc3Rfc3RydWN0dXJlX25ldygid2VicnRjYmluLW9mZmVyLW9wdGlvbnMiLCAiaWNl
LXJlc3RhcnQiLCBHX1RZUEVfQk9PTEVBTiwgVFJVRSwgbnVsbHB0cikpOworfQorCitzdGF0aWMg
c3RkOjpvcHRpb25hbDxzdGQ6OnBhaXI8UlRDU2RwVHlwZSwgU3RyaW5nPj4gZmV0Y2hEZXNjcmlw
dGlvbihHc3RFbGVtZW50KiB3ZWJydGNCaW4sIGNvbnN0IGNoYXIqIG5hbWUpCit7CisgICAgaWYg
KCF3ZWJydGNCaW4pCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBHVW5pcXVlT3V0UHRyPEdz
dFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVzY3JpcHRpb247CisgICAgZ19vYmplY3RfZ2V0
KHdlYnJ0Y0JpbiwgbWFrZVN0cmluZyhuYW1lLCAiLWRlc2NyaXB0aW9uIikudXRmOCgpLmRhdGEo
KSwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBpZiAoIWRlc2NyaXB0aW9u
KQorICAgICAgICByZXR1cm4geyB9OworCisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHBTdHJpbmco
Z3N0X3NkcF9tZXNzYWdlX2FzX3RleHQoZGVzY3JpcHRpb24tPnNkcCkpOworICAgIEdTVF9UUkFD
RV9PQkpFQ1Qod2VicnRjQmluLCAiJXMtZGVzY3JpcHRpb24gU0RQOiAlcyIsIG5hbWUsIHNkcFN0
cmluZy5nZXQoKSk7CisgICAgcmV0dXJuIHsgeyBmcm9tU2Vzc2lvbkRlc2NyaXB0aW9uVHlwZSgq
ZGVzY3JpcHRpb24uZ2V0KCkpLCBzZHBTdHJpbmcuZ2V0KCkgfSB9OworfQorCitzdGF0aWMgR3N0
V2ViUlRDU2lnbmFsaW5nU3RhdGUgZmV0Y2hTaWduYWxpbmdTdGF0ZShHc3RFbGVtZW50KiB3ZWJy
dGNCaW4pCit7CisgICAgR3N0V2ViUlRDU2lnbmFsaW5nU3RhdGUgc3RhdGU7CisgICAgZ19vYmpl
Y3RfZ2V0KHdlYnJ0Y0JpbiwgInNpZ25hbGluZy1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0cik7Cisj
aWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIEdVbmlxdWVQdHI8Y2hhcj4gZGVzYyhn
X2VudW1fdG9fc3RyaW5nKEdTVF9UWVBFX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEUsIHN0YXRlKSk7
CisgICAgR1NUX0RFQlVHX09CSkVDVCh3ZWJydGNCaW4sICJTaWduYWxpbmcgc3RhdGUgc2V0IHRv
ICVzIiwgZGVzYy5nZXQoKSk7CisjZW5kaWYKKyAgICByZXR1cm4gc3RhdGU7Cit9CisKK2VudW0g
Y2xhc3MgR2F0aGVyU2lnbmFsaW5nU3RhdGUgeyBObywgWWVzIH07CitzdGF0aWMgc3RkOjpvcHRp
b25hbDxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkRlc2NyaXB0aW9uU3RhdGVzPiBkZXNjcmlwdGlv
bnNGcm9tV2ViUlRDQmluKEdzdEVsZW1lbnQqIHdlYnJ0Y0JpbiwgR2F0aGVyU2lnbmFsaW5nU3Rh
dGUgZ2F0aGVyU2lnbmFsaW5nU3RhdGUgPSBHYXRoZXJTaWduYWxpbmdTdGF0ZTo6Tm8pCit7Cisg
ICAgc3RkOjpvcHRpb25hbDxSVENTZHBUeXBlPiBjdXJyZW50TG9jYWxEZXNjcmlwdGlvblNkcFR5
cGUsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwVHlwZSwgY3VycmVudFJlbW90ZURlc2NyaXB0
aW9uU2RwVHlwZSwgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwVHlwZTsKKyAgICBTdHJpbmcg
Y3VycmVudExvY2FsRGVzY3JpcHRpb25TZHAsIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwLCBj
dXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHAsIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlvblNkcDsK
KyAgICBpZiAoYXV0byBjdXJyZW50TG9jYWxEZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24o
d2VicnRjQmluLCAiY3VycmVudC1sb2NhbCIpKSB7CisgICAgICAgIGF1dG8gW3NkcFR5cGUsIGRl
c2NyaXB0aW9uXSA9ICpjdXJyZW50TG9jYWxEZXNjcmlwdGlvbjsKKyAgICAgICAgY3VycmVudExv
Y2FsRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsKKyAgICAgICAgY3VycmVudExvY2FsRGVz
Y3JpcHRpb25TZHAgPSBXVEZNb3ZlKGRlc2NyaXB0aW9uKTsKKyAgICB9CisgICAgaWYgKGF1dG8g
cGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gPSBmZXRjaERlc2NyaXB0aW9uKHdlYnJ0Y0JpbiwgInBl
bmRpbmctbG9jYWwiKSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAq
cGVuZGluZ0xvY2FsRGVzY3JpcHRpb247CisgICAgICAgIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9u
U2RwVHlwZSA9IHNkcFR5cGU7CisgICAgICAgIHBlbmRpbmdMb2NhbERlc2NyaXB0aW9uU2RwID0g
V1RGTW92ZShkZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChhdXRvIGN1cnJlbnRSZW1vdGVE
ZXNjcmlwdGlvbiA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAiY3VycmVudC1yZW1vdGUi
KSkgeworICAgICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAqY3VycmVudFJlbW90
ZURlc2NyaXB0aW9uOworICAgICAgICBjdXJyZW50UmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlID0g
c2RwVHlwZTsKKyAgICAgICAgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwID0gV1RGTW92ZShk
ZXNjcmlwdGlvbik7CisgICAgfQorICAgIGlmIChhdXRvIHBlbmRpbmdSZW1vdGVEZXNjcmlwdGlv
biA9IGZldGNoRGVzY3JpcHRpb24od2VicnRjQmluLCAicGVuZGluZy1yZW1vdGUiKSkgeworICAg
ICAgICBhdXRvIFtzZHBUeXBlLCBkZXNjcmlwdGlvbl0gPSAqcGVuZGluZ1JlbW90ZURlc2NyaXB0
aW9uOworICAgICAgICBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHBUeXBlID0gc2RwVHlwZTsK
KyAgICAgICAgcGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uU2RwID0gV1RGTW92ZShkZXNjcmlwdGlv
bik7CisgICAgfQorCisgICAgc3RkOjpvcHRpb25hbDxSVENTaWduYWxpbmdTdGF0ZT4gc2lnbmFs
aW5nU3RhdGU7CisgICAgaWYgKGdhdGhlclNpZ25hbGluZ1N0YXRlID09IEdhdGhlclNpZ25hbGlu
Z1N0YXRlOjpZZXMpCisgICAgICAgIHNpZ25hbGluZ1N0YXRlID0gdG9TaWduYWxpbmdTdGF0ZShm
ZXRjaFNpZ25hbGluZ1N0YXRlKHdlYnJ0Y0JpbikpOworCisgICAgcmV0dXJuIFBlZXJDb25uZWN0
aW9uQmFja2VuZDo6RGVzY3JpcHRpb25TdGF0ZXMgeworICAgICAgICBzaWduYWxpbmdTdGF0ZSwK
KyAgICAgICAgY3VycmVudExvY2FsRGVzY3JpcHRpb25TZHBUeXBlLCBjdXJyZW50TG9jYWxEZXNj
cmlwdGlvblNkcCwKKyAgICAgICAgcGVuZGluZ0xvY2FsRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5k
aW5nTG9jYWxEZXNjcmlwdGlvblNkcCwKKyAgICAgICAgY3VycmVudFJlbW90ZURlc2NyaXB0aW9u
U2RwVHlwZSwgY3VycmVudFJlbW90ZURlc2NyaXB0aW9uU2RwLAorICAgICAgICBwZW5kaW5nUmVt
b3RlRGVzY3JpcHRpb25TZHBUeXBlLCBwZW5kaW5nUmVtb3RlRGVzY3JpcHRpb25TZHAKKyAgICB9
OworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlv
bihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24qIGRlc2NyaXB0aW9uKQoreworICAgIHNldERl
c2NyaXB0aW9uKGRlc2NyaXB0aW9uLCB0cnVlLCBbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyks
IHRoaXNdIHsKKyAgICAgICAgaWYgKHByb3RlY3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGRlc2NyaXB0aW9ucyA9IGRlc2NyaXB0aW9uc0Zy
b21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCksIEdhdGhlclNpZ25hbGluZ1N0YXRlOjpZZXMp
OworICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1NDVFBUcmFuc3BvcnQ+IHRyYW5zcG9ydDsKKyAg
ICAgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAic2N0cC10cmFuc3BvcnQiLCAm
dHJhbnNwb3J0Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJh
Y2tlbmQuc2V0TG9jYWxEZXNjcmlwdGlvblN1Y2NlZWRlZChXVEZNb3ZlKGRlc2NyaXB0aW9ucyks
IHRyYW5zcG9ydCA/IG1ha2VVbmlxdWU8R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ+KFdU
Rk1vdmUodHJhbnNwb3J0KSkgOiBudWxscHRyKTsKKyAgICB9LCBbcHJvdGVjdGVkVGhpcyA9IFJl
ZigqdGhpcyksIHRoaXNdKGNvbnN0IEdFcnJvciogZXJyb3IpIHsKKyAgICAgICAgaWYgKHByb3Rl
Y3RlZFRoaXMtPmlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAo
ZXJyb3IgJiYgZXJyb3ItPmNvZGUgPT0gR1NUX1dFQlJUQ19FUlJPUl9JTlZBTElEX1NUQVRFKQor
ICAgICAgICAgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuc2V0TG9jYWxEZXNjcmlwdGlvbkZh
aWxlZChFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBzZXQgbG9jYWwg
YW5zd2VyIHNkcDogbm8gcGVuZGluZyByZW1vdGUgZGVzY3JpcHRpb24uIl9zIH0pOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRMb2NhbERlc2Ny
aXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFwcGx5
IHNlc3Npb24gbG9jYWwgZGVzY3JpcHRpb24iX3MgfSk7CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6ZG9TZXRSZW1vdGVEZXNjcmlwdGlvbihjb25zdCBSVENTZXNz
aW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIHNldERlc2NyaXB0aW9uKCZkZXNj
cmlwdGlvbiwgZmFsc2UsIFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpc10geworICAg
ICAgICBpZiAocHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47
CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFja2luZyByZW1v
dGUgZGVzY3JpcHRpb24iKTsKKyAgICAgICAgYXV0byBkZXNjcmlwdGlvbnMgPSBkZXNjcmlwdGlv
bnNGcm9tV2ViUlRDQmluKG1fd2VicnRjQmluLmdldCgpLCBHYXRoZXJTaWduYWxpbmdTdGF0ZTo6
WWVzKTsKKyAgICAgICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0PiB0cmFuc3BvcnQ7
CisgICAgICAgIGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgInNjdHAtdHJhbnNwb3J0
IiwgJnRyYW5zcG9ydC5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgIG1fcGVlckNvbm5lY3Rp
b25CYWNrZW5kLnNldFJlbW90ZURlc2NyaXB0aW9uU3VjY2VlZGVkKFdURk1vdmUoZGVzY3JpcHRp
b25zKSwgdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2Vu
ZD4oV1RGTW92ZSh0cmFuc3BvcnQpKSA6IG51bGxwdHIpOworICAgIH0sIFtwcm90ZWN0ZWRUaGlz
ID0gUmVmKCp0aGlzKSwgdGhpc10oY29uc3QgR0Vycm9yKiBlcnJvcikgeworICAgICAgICBpZiAo
cHJvdGVjdGVkVGhpcy0+aXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmIChlcnJvciAmJiBlcnJvci0+Y29kZSA9PSBHU1RfV0VCUlRDX0VSUk9SX0lOVkFMSURfU1RB
VEUpCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5zZXRSZW1vdGVEZXNjcmlw
dGlvbkZhaWxlZChFeGNlcHRpb24geyBJbnZhbGlkU3RhdGVFcnJvciwgIkZhaWxlZCB0byBzZXQg
cmVtb3RlIGFuc3dlciBzZHAiX3MgfSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fcGVl
ckNvbm5lY3Rpb25CYWNrZW5kLnNldFJlbW90ZURlc2NyaXB0aW9uRmFpbGVkKEV4Y2VwdGlvbiB7
IE9wZXJhdGlvbkVycm9yLCAiVW5hYmxlIHRvIGFwcGx5IHNlc3Npb24gcmVtb3RlIGRlc2NyaXB0
aW9uIl9zIH0pOworICAgIH0pOworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHN0YXJ0
TG9nZ2luZ1N0YXRzKCk7CisjZW5kaWYKK30KKworc3RydWN0IFNldERlc2NyaXB0aW9uQ2FsbERh
dGEgeworICAgIEZ1bmN0aW9uPHZvaWQoKT4gc3VjY2Vzc0NhbGxiYWNrOworICAgIEZ1bmN0aW9u
PHZvaWQoY29uc3QgR0Vycm9yKik+IGZhaWx1cmVDYWxsYmFjazsKK307CisKK1dFQktJVF9ERUZJ
TkVfQVNZTkNfREFUQV9TVFJVQ1QoU2V0RGVzY3JpcHRpb25DYWxsRGF0YSkKKwordm9pZCBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpzZXREZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3Jp
cHRpb24qIGRlc2NyaXB0aW9uLCBib29sIGlzTG9jYWwsIEZ1bmN0aW9uPHZvaWQoKT4mJiBzdWNj
ZXNzQ2FsbGJhY2ssIEZ1bmN0aW9uPHZvaWQoY29uc3QgR0Vycm9yKik+JiYgZmFpbHVyZUNhbGxi
YWNrKQoreworICAgIEdzdFNEUE1lc3NhZ2UqIG1lc3NhZ2U7CisgICAgYXV0byBzZHBUeXBlID0g
UlRDU2RwVHlwZTo6T2ZmZXI7CisKKyAgICBpZiAoZGVzY3JpcHRpb24pIHsKKyAgICAgICAgaWYg
KGdzdF9zZHBfbWVzc2FnZV9uZXdfZnJvbV90ZXh0KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hh
cio+KGRlc2NyaXB0aW9uLT5zZHAoKS5jaGFyYWN0ZXJzOCgpKSwgJm1lc3NhZ2UpICE9IEdTVF9T
RFBfT0spIHsKKyAgICAgICAgICAgIGZhaWx1cmVDYWxsYmFjayhudWxscHRyKTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBzZHBUeXBlID0gZGVzY3JpcHRpb24tPnR5
cGUoKTsKKyAgICB9IGVsc2UgaWYgKGdzdF9zZHBfbWVzc2FnZV9uZXcoJm1lc3NhZ2UpICE9IEdT
VF9TRFBfT0spIHsKKyAgICAgICAgZmFpbHVyZUNhbGxiYWNrKG51bGxwdHIpOworICAgICAgICBy
ZXR1cm47CisgICAgfQorCisgICAgaWYgKCFpc0xvY2FsKQorICAgICAgICBzdG9yZVJlbW90ZU1M
aW5lSW5mbyhtZXNzYWdlKTsKKworICAgIGF1dG8gdHlwZSA9IHRvU2Vzc2lvbkRlc2NyaXB0aW9u
VHlwZShzZHBUeXBlKTsKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJD
cmVhdGluZyAlcyBzZXNzaW9uIGZvciBTRFAgJXMiLCBpc0xvY2FsID8gImxvY2FsIiA6ICJyZW1v
dGUiLCBnc3Rfd2VicnRjX3NkcF90eXBlX3RvX3N0cmluZyh0eXBlKSk7CisKKyAgICBHVW5pcXVl
UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gc2Vzc2lvbkRlc2NyaXB0aW9uKGdzdF93
ZWJydGNfc2Vzc2lvbl9kZXNjcmlwdGlvbl9uZXcodHlwZSwgbWVzc2FnZSkpOworICAgIGF1dG8g
c2lnbmFsTmFtZSA9IG1ha2VTdHJpbmcoInNldC0iLCBpc0xvY2FsID8gImxvY2FsIiA6ICJyZW1v
dGUiLCAiLWRlc2NyaXB0aW9uIik7CisgICAgYXV0byogZGF0YSA9IGNyZWF0ZVNldERlc2NyaXB0
aW9uQ2FsbERhdGEoKTsKKyAgICBkYXRhLT5zdWNjZXNzQ2FsbGJhY2sgPSBXVEZNb3ZlKHN1Y2Nl
c3NDYWxsYmFjayk7CisgICAgZGF0YS0+ZmFpbHVyZUNhbGxiYWNrID0gV1RGTW92ZShmYWlsdXJl
Q2FsbGJhY2spOworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwg
c2lnbmFsTmFtZS5hc2NpaSgpLmRhdGEoKSwgc2Vzc2lvbkRlc2NyaXB0aW9uLmdldCgpLCBnc3Rf
cHJvbWlzZV9uZXdfd2l0aF9jaGFuZ2VfZnVuYyhbXShHc3RQcm9taXNlKiByYXdQcm9taXNlLCBn
cG9pbnRlciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvKiBkYXRhID0gc3RhdGljX2Nhc3Q8U2V0
RGVzY3JpcHRpb25DYWxsRGF0YSo+KHVzZXJEYXRhKTsKKyAgICAgICAgYXV0byBwcm9taXNlID0g
YWRvcHRHUmVmKHJhd1Byb21pc2UpOworICAgICAgICBhdXRvIHJlc3VsdCA9IGdzdF9wcm9taXNl
X3dhaXQocHJvbWlzZS5nZXQoKSk7CisgICAgICAgIGNvbnN0IGF1dG8qIHJlcGx5ID0gZ3N0X3By
b21pc2VfZ2V0X3JlcGx5KHByb21pc2UuZ2V0KCkpOworICAgICAgICBpZiAocmVzdWx0ICE9IEdT
VF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEIHx8IChyZXBseSAmJiBnc3Rfc3RydWN0dXJlX2hhc19m
aWVsZChyZXBseSwgImVycm9yIikpKSB7CisgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPEdVbmlx
dWVQdHI8R0Vycm9yPj4gZXJyb3JIb2xkZXI7CisgICAgICAgICAgICBpZiAocmVwbHkpIHsKKyAg
ICAgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gZXJyb3I7CisgICAgICAgICAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksICJlcnJvciIsIEdfVFlQRV9FUlJPUiwgJmVycm9y
Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgICAgICAgICBHU1RfRVJST1IoIlVuYWJsZSB0
byBzZXQgZGVzY3JpcHRpb24sIGVycm9yOiAlcyIsIGVycm9yLT5tZXNzYWdlKTsKKyAgICAgICAg
ICAgICAgICBlcnJvckhvbGRlciA9IEdVbmlxdWVQdHI8R0Vycm9yPihlcnJvci5yZWxlYXNlKCkp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgY2FsbE9uTWFpblRocmVhZChbZXJyb3IgPSBX
VEZNb3ZlKGVycm9ySG9sZGVyKSwgZmFpbHVyZUNhbGxiYWNrID0gV1RGTW92ZShkYXRhLT5mYWls
dXJlQ2FsbGJhY2spXSB7CisgICAgICAgICAgICAgICAgZmFpbHVyZUNhbGxiYWNrKGVycm9yID8g
ZXJyb3ItPmdldCgpIDogbnVsbHB0cik7CisgICAgICAgICAgICB9KTsKKyAgICAgICAgICAgIHJl
dHVybjsKKyAgICAgICAgfQorICAgICAgICBjYWxsT25NYWluVGhyZWFkKFtzdWNjZXNzQ2FsbGJh
Y2sgPSBXVEZNb3ZlKGRhdGEtPnN1Y2Nlc3NDYWxsYmFjayldIHsKKyAgICAgICAgICAgIHN1Y2Nl
c3NDYWxsYmFjaygpOworICAgICAgICB9KTsKKyAgICB9LCBkYXRhLCByZWludGVycHJldF9jYXN0
PEdEZXN0cm95Tm90aWZ5PihkZXN0cm95U2V0RGVzY3JpcHRpb25DYWxsRGF0YSkpKTsKK30KKwor
dm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdG9yZVJlbW90ZU1MaW5lSW5mbyhHc3RTRFBN
ZXNzYWdlKiBtZXNzYWdlKQoreworICAgIG1fcmVtb3RlTUxpbmVJbmZvcy5jbGVhcigpOworICAg
IHVuc2lnbmVkIHRvdGFsTWVkaWFzID0gZ3N0X3NkcF9tZXNzYWdlX21lZGlhc19sZW4obWVzc2Fn
ZSk7CisgICAgbV9yZW1vdGVNTGluZUluZm9zLnJlc2VydmVDYXBhY2l0eSh0b3RhbE1lZGlhcyk7
CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU3RvcmluZyAldSByZW1v
dGUgcGVuZGluZyBtbGluZXMiLCB0b3RhbE1lZGlhcyk7CisgICAgZm9yICh1bnNpZ25lZCBtZWRp
YUluZGV4ID0gMDsgbWVkaWFJbmRleCA8IHRvdGFsTWVkaWFzOyBtZWRpYUluZGV4KyspIHsKKyAg
ICAgICAgY29uc3QgYXV0byogbWVkaWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0X21lZGlhKG1lc3Nh
Z2UsIG1lZGlhSW5kZXgpOworICAgICAgICBjb25zdCBjaGFyKiBtZWRpYVR5cGUgPSBnc3Rfc2Rw
X21lZGlhX2dldF9tZWRpYShtZWRpYSk7CisgICAgICAgIGlmICghZ19zdHJfZXF1YWwobWVkaWFU
eXBlLCAiYXVkaW8iKSAmJiAhZ19zdHJfZXF1YWwobWVkaWFUeXBlLCAidmlkZW8iKSkKKyAgICAg
ICAgICAgIGNvbnRpbnVlOworCisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgICAg
ICBHVW5pcXVlUHRyPGNoYXI+IG1lZGlhUmVwcmVzZW50YXRpb24oZ3N0X3NkcF9tZWRpYV9hc190
ZXh0KG1lZGlhKSk7CisgICAgICAgIEdTVF9MT0dfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJQ
cm9jZXNzaW5nIG1lZGlhOlxuJXMiLCBtZWRpYVJlcHJlc2VudGF0aW9uLmdldCgpKTsKKyNlbmRp
ZgorICAgICAgICBjb25zdCBjaGFyKiBtaWQgPSBnc3Rfc2RwX21lZGlhX2dldF9hdHRyaWJ1dGVf
dmFsKG1lZGlhLCAibWlkIik7CisgICAgICAgIGlmICghbWlkKQorICAgICAgICAgICAgY29udGlu
dWU7CisKKyAgICAgICAgYm9vbCBpc0luYWN0aXZlID0gZmFsc2U7CisgICAgICAgIHVuc2lnbmVk
IHRvdGFsQXR0cmlidXRlcyA9IGdzdF9zZHBfbWVkaWFfYXR0cmlidXRlc19sZW4obWVkaWEpOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGF0dHJpYnV0ZUluZGV4ID0gMDsgYXR0cmlidXRlSW5kZXgg
PCB0b3RhbEF0dHJpYnV0ZXM7IGF0dHJpYnV0ZUluZGV4KyspIHsKKyAgICAgICAgICAgIGNvbnN0
IGF1dG8qIGF0dHJpYnV0ZSA9IGdzdF9zZHBfbWVkaWFfZ2V0X2F0dHJpYnV0ZShtZWRpYSwgYXR0
cmlidXRlSW5kZXgpOworICAgICAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXR0cmlidXRlLT5rZXks
ICJpbmFjdGl2ZSIpKSB7CisgICAgICAgICAgICAgICAgaXNJbmFjdGl2ZSA9IHRydWU7CisgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYg
KGlzSW5hY3RpdmUpIHsKKyAgICAgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5n
ZXQoKSwgIlNraXBwaW5nIGluYWN0aXZlIG1lZGlhIik7CisgICAgICAgICAgICBjb250aW51ZTsK
KyAgICAgICAgfQorCisgICAgICAgIG1fbWVkaWFGb3JNaWQuc2V0KHsgbWlkIH0sIGdfc3RyX2Vx
dWFsKG1lZGlhVHlwZSwgImF1ZGlvIikgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRp
byA6IFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVvKTsKKworICAgICAgICAvLyBodHRw
czovL2dpdGxhYi5mcmVlZGVza3RvcC5vcmcvZ3N0cmVhbWVyL2dzdC1wbHVnaW5zLWJhZC8tL21l
cmdlX3JlcXVlc3RzLzE5MDcKKyAgICAgICAgaWYgKHNkcE1lZGlhSGFzQXR0cmlidXRlS2V5KG1l
ZGlhLCAiaWNlLWxpdGUiKSkgeworICAgICAgICAgICAgR1JlZlB0cjxHT2JqZWN0PiBpY2U7Cisg
ICAgICAgICAgICBnX29iamVjdF9nZXQobV93ZWJydGNCaW4uZ2V0KCksICJpY2UtYWdlbnQiLCAm
aWNlLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChpY2UuZ2V0
KCksICJpY2UtbGl0ZSIsIFRSVUUsIG51bGxwdHIpOworICAgICAgICB9CisKKyAgICAgICAgYXV0
byBjYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICAgICAgVmVjdG9y
PGludD4gcGF5bG9hZFR5cGVzOworICAgICAgICB1bnNpZ25lZCB0b3RhbEZvcm1hdHMgPSBnc3Rf
c2RwX21lZGlhX2Zvcm1hdHNfbGVuKG1lZGlhKTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVCht
X3BpcGVsaW5lLmdldCgpLCAiTWVkaWEgJXMgaGFzICV1IGZvcm1hdHMiLCBtZWRpYVR5cGUsIHRv
dGFsRm9ybWF0cyk7CisgICAgICAgIGZvciAodW5zaWduZWQgZm9ybWF0SW5kZXggPSAwOyBmb3Jt
YXRJbmRleCA8IHRvdGFsRm9ybWF0czsgZm9ybWF0SW5kZXgrKykgeworICAgICAgICAgICAgYXV0
byBmb3JtYXQgPSBtYWtlU3RyaW5nKGdzdF9zZHBfbWVkaWFfZ2V0X2Zvcm1hdChtZWRpYSwgZm9y
bWF0SW5kZXgpKTsKKyAgICAgICAgICAgIGF1dG8gcGF5bG9hZFR5cGUgPSBwYXJzZUludGVnZXI8
aW50Pihmb3JtYXQpOworICAgICAgICAgICAgaWYgKCFwYXlsb2FkVHlwZSB8fCAhKnBheWxvYWRU
eXBlKSB7CisgICAgICAgICAgICAgICAgR1NUX1dBUk5JTkdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0
KCksICJJbnZhbGlkIHBheWxvYWQgdHlwZTogJXMiLCBmb3JtYXQudXRmOCgpLmRhdGEoKSk7Cisg
ICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBhdXRv
IGZvcm1hdENhcHMgPSBhZG9wdEdSZWYoZ3N0X3NkcF9tZWRpYV9nZXRfY2Fwc19mcm9tX21lZGlh
KG1lZGlhLCAqcGF5bG9hZFR5cGUpKTsKKyAgICAgICAgICAgIGlmICghZm9ybWF0Q2Fwcykgewor
ICAgICAgICAgICAgICAgIEdTVF9XQVJOSU5HX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiTm8g
Y2FwcyBmb3VuZCBmb3IgcGF5bG9hZCB0eXBlICVkIiwgKnBheWxvYWRUeXBlKTsKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgLy8gUmVsYXkg
U0RQIGF0dHJpYnV0ZXMgdG8gdGhlIGNhcHMsIHRoaXMgaXMgc3BlY2lhbGx5IHVzZWZ1bCBzbyB0
aGF0IGVsZW1lbnRzIGluCisgICAgICAgICAgICAvLyB3ZWJydGNiaW4gd2lsbCBiZSBhYmxlIHRv
IGVuYWJsZSBSVFAgaGVhZGVyIGV4dGVuc2lvbnMuCisgICAgICAgICAgICBnc3Rfc2RwX21lZGlh
X2F0dHJpYnV0ZXNfdG9fY2FwcyhtZWRpYSwgZm9ybWF0Q2Fwcy5nZXQoKSk7CisKKyAgICAgICAg
ICAgIGdzdF9jYXBzX2FwcGVuZChjYXBzLmdldCgpLCBmb3JtYXRDYXBzLmxlYWtSZWYoKSk7Cisg
ICAgICAgICAgICBtX3B0Q291bnRlciA9IHN0ZDo6bWF4KG1fcHRDb3VudGVyLCAqcGF5bG9hZFR5
cGUgKyAxKTsKKyAgICAgICAgICAgIHBheWxvYWRUeXBlcy5hcHBlbmQoKnBheWxvYWRUeXBlKTsK
KyAgICAgICAgfQorCisgICAgICAgIHVuc2lnbmVkIHRvdGFsQ2FwcyA9IGdzdF9jYXBzX2dldF9z
aXplKGNhcHMuZ2V0KCkpOworICAgICAgICBpZiAodG90YWxDYXBzKSB7CisgICAgICAgICAgICBm
b3IgKHVuc2lnbmVkIGNhcHNJbmRleCA9IDA7IGNhcHNJbmRleCA8IHRvdGFsQ2FwczsgY2Fwc0lu
ZGV4KyspIHsKKyAgICAgICAgICAgICAgICBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGdzdF9j
YXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgY2Fwc0luZGV4KTsKKyAgICAgICAgICAgICAg
ICBnc3Rfc3RydWN0dXJlX3NldF9uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0aW9uL3gtcnRwIik7
CisgICAgICAgICAgICB9CisgICAgICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJDYWNoaW5nIHBheWxvYWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0
KCkpOworICAgICAgICAgICAgbV9yZW1vdGVNTGluZUluZm9zLnVuY2hlY2tlZEFwcGVuZCh7IFdU
Rk1vdmUoY2FwcyksIGZhbHNlLCBXVEZNb3ZlKHBheWxvYWRUeXBlcykgfSk7CisgICAgICAgIH0K
KyAgICB9Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y29uZmlndXJlQW5kTGlu
a1NvdXJjZShSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXImIHNvdXJjZSkKK3sK
KyAgICBhdXRvIGNhcHMgPSBzb3VyY2UuYWxsb3dlZENhcHMoKTsKKyAgICBzdGQ6Om9wdGlvbmFs
PHN0ZDo6cGFpcjxQZW5kaW5nTUxpbmVJbmZvLCBHUmVmUHRyPEdzdENhcHM+Pj4gZm91bmQ7Cisg
ICAgZm9yIChhdXRvJiBtTGluZUluZm8gOiBtX3JlbW90ZU1MaW5lSW5mb3MpIHsKKyAgICAgICAg
aWYgKG1MaW5lSW5mby5pc1VzZWQpCisgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICB1
bnNpZ25lZCB0b3RhbENhcHMgPSBnc3RfY2Fwc19nZXRfc2l6ZShtTGluZUluZm8uY2Fwcy5nZXQo
KSk7CisgICAgICAgIGZvciAodW5zaWduZWQgY2Fwc0luZGV4ID0gMDsgY2Fwc0luZGV4IDwgdG90
YWxDYXBzOyBjYXBzSW5kZXgrKykgeworICAgICAgICAgICAgYXV0byogc3RydWN0dXJlID0gZ3N0
X2NhcHNfZ2V0X3N0cnVjdHVyZShtTGluZUluZm8uY2Fwcy5nZXQoKSwgY2Fwc0luZGV4KTsKKyAg
ICAgICAgICAgIGF1dG8gY2FwczIgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1bGwoZ3N0X3N0
cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSksIG51bGxwdHIpKTsKKyAgICAgICAgICAgIGF1dG8gaW50
ZXJzZWN0ZWQgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfaW50ZXJzZWN0KGNhcHMuZ2V0KCksIGNhcHMy
LmdldCgpKSk7CisgICAgICAgICAgICBpZiAoIWdzdF9jYXBzX2lzX2VtcHR5KGludGVyc2VjdGVk
LmdldCgpKSkgeworICAgICAgICAgICAgICAgIGZvdW5kID0gc3RkOjptYWtlX3BhaXIobUxpbmVJ
bmZvLCBXVEZNb3ZlKGludGVyc2VjdGVkKSk7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICAgICAgaWYgKGZvdW5kLmhhc192YWx1ZSgpKQorICAg
ICAgICAgICAgYnJlYWs7CisgICAgfQorCisgICAgYm9vbCBwYXlsb2FkVHlwZVdhc1NldCA9IGZh
bHNlOworICAgIGlmIChmb3VuZCkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxp
bmUuZ2V0KCksICJVbnVzZWQgYW5kIGNvbXBhdGlibGUgY2FwcyBmb3VuZCBmb3IgJSIgR1NUX1BU
Ul9GT1JNQVQgIi4uLiAlIiBHU1RfUFRSX0ZPUk1BVCwgY2Fwcy5nZXQoKSwgZm91bmQtPnNlY29u
ZC5nZXQoKSk7CisgICAgICAgIHBheWxvYWRUeXBlV2FzU2V0ID0gc291cmNlLnNldFBheWxvYWRU
eXBlKGZvdW5kLT5zZWNvbmQpOworICAgICAgICBmb3VuZC0+Zmlyc3QuaXNVc2VkID0gdHJ1ZTsK
KyAgICB9IGVsc2UKKyAgICAgICAgcGF5bG9hZFR5cGVXYXNTZXQgPSBzb3VyY2Uuc2V0UGF5bG9h
ZFR5cGUoY2Fwcyk7CisKKyAgICBpZiAoIXBheWxvYWRUeXBlV2FzU2V0KQorICAgICAgICByZXR1
cm47CisKKyAgICBpZiAoIXNvdXJjZS5wYWQoKSkgeworICAgICAgICBzb3VyY2Uuc2V0U2lua1Bh
ZChyZXF1ZXN0UGFkKG1fcmVxdWVzdFBhZENvdW50ZXIsIHNvdXJjZS5hbGxvd2VkQ2FwcygpKSk7
CisgICAgICAgIG1fcmVxdWVzdFBhZENvdW50ZXIrKzsKKyAgICB9CisKKyAgICBhdXRvJiBzaW5r
UGFkID0gc291cmNlLnBhZCgpOworICAgIEFTU0VSVCghZ3N0X3BhZF9pc19saW5rZWQoc2lua1Bh
ZC5nZXQoKSkpOworICAgIGlmIChnc3RfcGFkX2lzX2xpbmtlZChzaW5rUGFkLmdldCgpKSkgewor
ICAgICAgICBXVEZMb2dBbHdheXMoIlJlYWx0aW1lTWVkaWFTb3VyY2UgYWxyZWFkeSBsaW5rZWQs
IHRoaXMgc2hvdWxkIG5vdCBoYXBwZW4uIik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBhdXRvIHNvdXJjZUJpbiA9IHNvdXJjZS5iaW4oKTsKKyAgICBnc3RfYmluX2FkZChHU1RfQklO
X0NBU1QobV9waXBlbGluZS5nZXQoKSksIHNvdXJjZUJpbi5nZXQoKSk7CisgICAgc291cmNlLmxp
bmsoKTsKKworI2lmbmRlZiBHU1RfRElTQUJMRV9HU1RfREVCVUcKKyAgICBHVW5pcXVlUHRyPGNo
YXI+IHBhZElkKGdzdF9wYWRfZ2V0X25hbWUoc2lua1BhZC5nZXQoKSkpOworICAgIGF1dG8gZG90
RmlsZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwg
Ii5vdXRnb2luZy0iLCBwYWRJZC5nZXQoKSk7CisgICAgR1NUX0RFQlVHX0JJTl9UT19ET1RfRklM
RV9XSVRIX1RTKEdTVF9CSU4obV9waXBlbGluZS5nZXQoKSksIEdTVF9ERUJVR19HUkFQSF9TSE9X
X0FMTCwgZG90RmlsZU5hbWUudXRmOCgpLmRhdGEoKSk7CisjZW5kaWYKK30KKworR1JlZlB0cjxH
c3RQYWQ+IEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnJlcXVlc3RQYWQodW5zaWduZWQgbWxpbmVJ
bmRleCwgY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgYWxsb3dlZENhcHMpCit7CisgICAgYXV0byBw
YWRJZCA9IG1ha2VTdHJpbmcoInNpbmtfIiwgbWxpbmVJbmRleCk7CisgICAgYXV0byBjYXBzID0g
YWRvcHRHUmVmKGdzdF9jYXBzX2NvcHkoYWxsb3dlZENhcHMuZ2V0KCkpKTsKKworICAgIGdzdF9j
YXBzX21hcF9pbl9wbGFjZShjYXBzLmdldCgpLCBbXShHc3RDYXBzRmVhdHVyZXMqLCBHc3RTdHJ1
Y3R1cmUqIHN0cnVjdHVyZSwgZ3BvaW50ZXIgdXNlckRhdGEpIC0+IGdib29sZWFuIHsKKyAgICAg
ICAgYXV0byogZW5kUG9pbnQgPSByZWludGVycHJldF9jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9p
bnQqPih1c2VyRGF0YSk7CisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHN0cnVjdHVyZSwgInBh
eWxvYWQiLCBHX1RZUEVfSU5ULCBlbmRQb2ludC0+bV9wdENvdW50ZXIrKywgbnVsbHB0cik7Cisg
ICAgICAgIHJldHVybiBUUlVFOworICAgIH0sIHRoaXMpOworCisgICAgLy8gRklYTUU6IFJlc3Ry
aWN0aW5nIGNhcHMgYW5kIGNvZGVjLXByZWZlcmVuY2VzIGJyZWFrcyBjYXBzIG5lZ290aWF0aW9u
IG9mIG91dGdvaW5nIHNvdXJjZXMgaW4KKyAgICAvLyBzb21lIGNhc2UgKGppdHNpKS4KKyAgICBH
U1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJSZXF1ZXN0aW5nIHBhZCAlcyByZXN0
cmljdGVkIHRvICUiIEdTVF9QVFJfRk9STUFULCBwYWRJZC51dGY4KCkuZGF0YSgpLCBjYXBzLmdl
dCgpKTsKKyAgICBhdXRvKiBwYWRUZW1wbGF0ZSA9IGdzdF9lbGVtZW50X2dldF9wYWRfdGVtcGxh
dGUobV93ZWJydGNCaW4uZ2V0KCksICJzaW5rXyV1Iik7CisgICAgYXV0byBzaW5rUGFkID0gYWRv
cHRHUmVmKGdzdF9lbGVtZW50X3JlcXVlc3RfcGFkKG1fd2VicnRjQmluLmdldCgpLCBwYWRUZW1w
bGF0ZSwgcGFkSWQudXRmOCgpLmRhdGEoKSwgY2Fwcy5nZXQoKSkpOworICAgIEdSZWZQdHI8R3N0
V2ViUlRDUlRQVHJhbnNjZWl2ZXI+IHRyYW5zY2VpdmVyOworICAgIGdfb2JqZWN0X2dldChzaW5r
UGFkLmdldCgpLCAidHJhbnNjZWl2ZXIiLCAmdHJhbnNjZWl2ZXIub3V0UHRyKCksIG51bGxwdHIp
OworICAgIGdfb2JqZWN0X3NldCh0cmFuc2NlaXZlci5nZXQoKSwgImNvZGVjLXByZWZlcmVuY2Vz
IiwgY2Fwcy5nZXQoKSwgbnVsbHB0cik7CisgICAgcmV0dXJuIHNpbmtQYWQ7Cit9CisKK2Jvb2wg
R1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZCYgc2VuZGVyLCBNZWRpYVN0cmVhbVRyYWNrJiB0cmFjaywgY29uc3QgRml4ZWRWZWN0b3I8U3Ry
aW5nPiYpCit7CisgICAgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNlIHNvdXJjZTsK
KyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gcnRjU2VuZGVyOworCisgICAgaWYgKHRy
YWNrLnByaXZhdGVUcmFjaygpLmhhc0F1ZGlvKCkpIHsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVD
VChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIG91dGdvaW5nIGF1ZGlvIHNvdXJjZSIpOworICAg
ICAgICBhdXRvIGF1ZGlvU291cmNlID0gUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVh
bWVyOjpjcmVhdGUodHJhY2sucHJpdmF0ZVRyYWNrKCkpOworICAgICAgICBjb25maWd1cmVBbmRM
aW5rU291cmNlKGF1ZGlvU291cmNlKTsKKworICAgICAgICBydGNTZW5kZXIgPSBhdWRpb1NvdXJj
ZS0+c2VuZGVyKCk7CisgICAgICAgIHNvdXJjZSA9IFdURk1vdmUoYXVkaW9Tb3VyY2UpOworICAg
IH0gZWxzZSB7CisgICAgICAgIEFTU0VSVCh0cmFjay5wcml2YXRlVHJhY2soKS5oYXNWaWRlbygp
KTsKKyAgICAgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQWRkaW5nIG91
dGdvaW5nIHZpZGVvIHNvdXJjZSIpOworICAgICAgICBhdXRvIHZpZGVvU291cmNlID0gUmVhbHRp
bWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpjcmVhdGUodHJhY2sucHJpdmF0ZVRyYWNr
KCkpOworICAgICAgICBjb25maWd1cmVBbmRMaW5rU291cmNlKHZpZGVvU291cmNlKTsKKworICAg
ICAgICBydGNTZW5kZXIgPSB2aWRlb1NvdXJjZS0+c2VuZGVyKCk7CisgICAgICAgIHNvdXJjZSA9
IFdURk1vdmUodmlkZW9Tb3VyY2UpOworICAgIH0KKworICAgIHNlbmRlci5zZXRTb3VyY2UoV1RG
TW92ZShzb3VyY2UpKTsKKworICAgIGlmIChhdXRvIHJ0cFNlbmRlciA9IHNlbmRlci5ydGNTZW5k
ZXIoKSkgeworICAgICAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJBbHJl
YWR5IGhhcyBhIHNlbmRlci4iKTsKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQorCisgICAg
c2VuZGVyLnNldFJUQ1NlbmRlcihXVEZNb3ZlKHJ0Y1NlbmRlcikpOworCisgICAgR1NUX0RFQlVH
X09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiU2VuZGVyIGNvbmZpZ3VyZWQiKTsKKyAgICByZXR1
cm4gdHJ1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpyZW1vdmVUcmFjayhH
U3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIpCit7CisgICAgR1NUX0RFQlVHX09CSkVD
VChtX3BpcGVsaW5lLmdldCgpLCAiUmVtb3ZpbmcgdHJhY2siKTsKKyAgICBpZiAoYXV0byBiaW4g
PSBzZW5kZXIuc3RvcFNvdXJjZSgpKQorICAgICAgICBnc3RfYmluX3JlbW92ZShHU1RfQklOX0NB
U1QobV9waXBlbGluZS5nZXQoKSksIGJpbi5nZXQoKSk7CisgICAgc2VuZGVyLmNsZWFyU291cmNl
KCk7CisgICAgb25OZWdvdGlhdGlvbk5lZWRlZCgpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlh
RW5kcG9pbnQ6OmRvQ3JlYXRlT2ZmZXIoY29uc3QgUlRDT2ZmZXJPcHRpb25zJiBvcHRpb25zKQor
eworICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBs
dWdpbnMtYmFkLy0vbWVyZ2VfcmVxdWVzdHMvMTg3NworICAgIC8vIEZJWE1FOiBQbHVtYiBvcHRp
b25zLnZvaWNlQWN0aXZpdHlEZXRlY3Rpb24uCisgICAgaW5pdGlhdGUodHJ1ZSwgZ3N0X3N0cnVj
dHVyZV9uZXcoIndlYnJ0Y2Jpbi1vZmZlci1vcHRpb25zIiwgImljZS1yZXN0YXJ0IiwgR19UWVBF
X0JPT0xFQU4sIG9wdGlvbnMuaWNlUmVzdGFydCwgbnVsbHB0cikpOworfQorCit2b2lkIEdTdHJl
YW1lck1lZGlhRW5kcG9pbnQ6OmRvQ3JlYXRlQW5zd2VyKCkKK3sKKyAgICBpbml0aWF0ZShmYWxz
ZSwgbnVsbHB0cik7Cit9CisKK3N0cnVjdCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50SG9sZGVyIHsK
KyAgICBSZWZQdHI8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gZW5kUG9pbnQ7Cit9OworV0VCS0lU
X0RFRklORV9BU1lOQ19EQVRBX1NUUlVDVChHU3RyZWFtZXJNZWRpYUVuZHBvaW50SG9sZGVyKQor
Cit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmluaXRpYXRlKGJvb2wgaXNJbml0aWF0b3Is
IEdzdFN0cnVjdHVyZSogcmF3T3B0aW9ucykKK3sKKyAgICBtX2lzSW5pdGlhdG9yID0gaXNJbml0
aWF0b3I7CisgICAgY29uc3QgY2hhciogdHlwZSA9IGlzSW5pdGlhdG9yID8gIm9mZmVyIiA6ICJh
bnN3ZXIiOworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkNyZWF0aW5n
ICVzIiwgdHlwZSk7CisgICAgYXV0byBzaWduYWxOYW1lID0gbWFrZVN0cmluZygiY3JlYXRlLSIs
IHR5cGUpOworICAgIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiBvcHRpb25zKHJhd09wdGlvbnMp
OworICAgIGF1dG8qIGhvbGRlciA9IGNyZWF0ZUdTdHJlYW1lck1lZGlhRW5kcG9pbnRIb2xkZXIo
KTsKKyAgICBob2xkZXItPmVuZFBvaW50ID0gdGhpczsKKyAgICBnX3NpZ25hbF9lbWl0X2J5X25h
bWUobV93ZWJydGNCaW4uZ2V0KCksIHNpZ25hbE5hbWUuYXNjaWkoKS5kYXRhKCksIG9wdGlvbnMu
Z2V0KCksIGdzdF9wcm9taXNlX25ld193aXRoX2NoYW5nZV9mdW5jKFtdKEdzdFByb21pc2UqIHJh
d1Byb21pc2UsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8qIGhvbGRlciA9IHN0
YXRpY19jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnRIb2xkZXIqPih1c2VyRGF0YSk7CisgICAg
ICAgIGF1dG8gcHJvbWlzZSA9IGFkb3B0R1JlZihyYXdQcm9taXNlKTsKKyAgICAgICAgYXV0byBy
ZXN1bHQgPSBnc3RfcHJvbWlzZV93YWl0KHByb21pc2UuZ2V0KCkpOworICAgICAgICBpZiAocmVz
dWx0ICE9IEdTVF9QUk9NSVNFX1JFU1VMVF9SRVBMSUVEKSB7CisgICAgICAgICAgICBob2xkZXIt
PmVuZFBvaW50LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoeyB9KTsKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGF1dG8qIHJlcGx5ID0gZ3N0
X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UuZ2V0KCkpOworICAgICAgICBBU1NFUlQocmVwbHkp
OworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQocmVwbHksICJlcnJvciIpKSB7
CisgICAgICAgICAgICBHVW5pcXVlT3V0UHRyPEdFcnJvcj4gcHJvbWlzZUVycm9yOworICAgICAg
ICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQocmVwbHksICJlcnJvciIsIEdfVFlQRV9FUlJPUiwgJnBy
b21pc2VFcnJvci5vdXRQdHIoKSwgbnVsbHB0cik7CisgICAgICAgICAgICBob2xkZXItPmVuZFBv
aW50LT5jcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1ZVB0cjxHRXJyb3I+KHBy
b21pc2VFcnJvci5yZWxlYXNlKCkpKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQor
CisgICAgICAgIGNvbnN0IGNoYXIqIHR5cGUgPSBob2xkZXItPmVuZFBvaW50LT5tX2lzSW5pdGlh
dG9yID8gIm9mZmVyIiA6ICJhbnN3ZXIiOworICAgICAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJU
Q1Nlc3Npb25EZXNjcmlwdGlvbj4gc2Vzc2lvbkRlc2NyaXB0aW9uOworICAgICAgICBnc3Rfc3Ry
dWN0dXJlX2dldChyZXBseSwgdHlwZSwgR1NUX1RZUEVfV0VCUlRDX1NFU1NJT05fREVTQ1JJUFRJ
T04sICZzZXNzaW9uRGVzY3JpcHRpb24ub3V0UHRyKCksIG51bGxwdHIpOworCisjaWZuZGVmIEdT
VF9ESVNBQkxFX0dTVF9ERUJVRworICAgICAgICBHVW5pcXVlUHRyPGNoYXI+IHNkcChnc3Rfc2Rw
X21lc3NhZ2VfYXNfdGV4dChzZXNzaW9uRGVzY3JpcHRpb24tPnNkcCkpOworICAgICAgICBHU1Rf
REVCVUdfT0JKRUNUKGhvbGRlci0+ZW5kUG9pbnQtPnBpcGVsaW5lKCksICJDcmVhdGVkICVzOiAl
cyIsIHR5cGUsIHNkcC5nZXQoKSk7CisjZW5kaWYKKyAgICAgICAgaG9sZGVyLT5lbmRQb2ludC0+
Y3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVkKEdVbmlxdWVQdHI8R3N0V2ViUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uPihzZXNzaW9uRGVzY3JpcHRpb24ucmVsZWFzZSgpKSk7CisgICAgfSwg
aG9sZGVyLCByZWludGVycHJldF9jYXN0PEdEZXN0cm95Tm90aWZ5PihkZXN0cm95R1N0cmVhbWVy
TWVkaWFFbmRwb2ludEhvbGRlcikpKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpnZXRTdGF0cyhHc3RQYWQqIHBhZCwgUmVmPERlZmVycmVkUHJvbWlzZT4mJiBwcm9taXNlKQor
eworICAgIG1fc3RhdHNDb2xsZWN0b3ItPmdldFN0YXRzKFtwcm9taXNlID0gV1RGTW92ZShwcm9t
aXNlKSwgcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyldKGF1dG8mJiByZXBvcnQpIG11dGFibGUg
eworICAgICAgICBBU1NFUlQoaXNNYWluVGhyZWFkKCkpOworICAgICAgICBpZiAocHJvdGVjdGVk
VGhpcy0+aXNTdG9wcGVkKCkgfHwgIXJlcG9ydCkKKyAgICAgICAgICAgIHJldHVybjsKKworICAg
ICAgICBwcm9taXNlLT5yZXNvbHZlPElETEludGVyZmFjZTxSVENTdGF0c1JlcG9ydD4+KHJlcG9y
dC5yZWxlYXNlTm9uTnVsbCgpKTsKKyAgICB9LCBwYWQpOworfQorCitNZWRpYVN0cmVhbSYgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6bWVkaWFTdHJlYW1Gcm9tUlRDU3RyZWFtKFN0cmluZyBsYWJl
bCkKK3sKKyAgICBhdXRvIG1lZGlhU3RyZWFtID0gbV9yZW1vdGVTdHJlYW1zQnlJZC5lbnN1cmUo
bGFiZWwsIFtsYWJlbCwgdGhpc10oKSBtdXRhYmxlIHsKKyAgICAgICAgYXV0byYgZG9jdW1lbnQg
PSBkb3duY2FzdDxEb2N1bWVudD4oKm1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNvbm5lY3Rpb24o
KS5zY3JpcHRFeGVjdXRpb25Db250ZXh0KCkpOworICAgICAgICByZXR1cm4gTWVkaWFTdHJlYW06
OmNyZWF0ZShkb2N1bWVudCwgTWVkaWFTdHJlYW1Qcml2YXRlOjpjcmVhdGUoZG9jdW1lbnQubG9n
Z2VyKCksIHsgfSwgV1RGTW92ZShsYWJlbCkpKTsKKyAgICB9KTsKKyAgICByZXR1cm4gKm1lZGlh
U3RyZWFtLml0ZXJhdG9yLT52YWx1ZTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjphZGRSZW1vdGVTdHJlYW0oR3N0UGFkKiBwYWQpCit7CisgICAgbV9wZW5kaW5nSW5jb21pbmdT
dHJlYW1zKys7CisKKyAgICBhdXRvIGNhcHMgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRfY3VycmVu
dF9jYXBzKHBhZCkpOworICAgIGlmICghY2FwcykKKyAgICAgICAgY2FwcyA9IGFkb3B0R1JlZihn
c3RfcGFkX3F1ZXJ5X2NhcHMocGFkLCBudWxscHRyKSk7CisKKyAgICBjb25zdCBjaGFyKiBtZWRp
YVR5cGUgPSBjYXBzTWVkaWFUeXBlKGNhcHMuZ2V0KCkpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyByZW1vdGUgJXMgc3RyZWFtIHRvICUiIEdTVF9QVFJf
Rk9STUFUICIgJXUgcGVuZGluZyBpbmNvbWluZyBzdHJlYW1zLCBjYXBzOiAlIiBHU1RfUFRSX0ZP
Uk1BVCwgbWVkaWFUeXBlLCBwYWQsIG1fcGVuZGluZ0luY29taW5nU3RyZWFtcywgY2Fwcy5nZXQo
KSk7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBydGNUcmFuc2NlaXZl
cjsKKyAgICBnX29iamVjdF9nZXQocGFkLCAidHJhbnNjZWl2ZXIiLCAmcnRjVHJhbnNjZWl2ZXIu
b3V0UHRyKCksIG51bGxwdHIpOworCisgICAgYXV0byogdHJhbnNjZWl2ZXIgPSBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsmXShhdXRvJiB0cmFuc2NlaXZlckJh
Y2tlbmQpIHsKKyAgICAgICAgcmV0dXJuIHJ0Y1RyYW5zY2VpdmVyLmdldCgpID09IHRyYW5zY2Vp
dmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgIH0pOworICAgIGlmICghdHJhbnNjZWl2
ZXIpIHsKKyAgICAgICAgYXV0byB0eXBlID0gZG9DYXBzSGF2ZVR5cGUoY2Fwcy5nZXQoKSwgImF1
ZGlvIikgPyBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbyA6IFJlYWx0aW1lTWVkaWFT
b3VyY2U6OlR5cGU6OlZpZGVvOworICAgICAgICB0cmFuc2NlaXZlciA9ICZtX3BlZXJDb25uZWN0
aW9uQmFja2VuZC5uZXdSZW1vdGVUcmFuc2NlaXZlcihtYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFRy
YW5zY2VpdmVyQmFja2VuZD4oV1RGTW92ZShydGNUcmFuc2NlaXZlcikpLCB0eXBlKTsKKyAgICB9
CisKKyAgICBHVW5pcXVlT3V0UHRyPEdzdFdlYlJUQ1Nlc3Npb25EZXNjcmlwdGlvbj4gZGVzY3Jp
cHRpb247CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdldCgpLCAicmVtb3RlLWRlc2Ny
aXB0aW9uIiwgJmRlc2NyaXB0aW9uLm91dFB0cigpLCBudWxscHRyKTsKKworICAgIHVuc2lnbmVk
IG1MaW5lSW5kZXg7CisgICAgZ19vYmplY3RfZ2V0KHJ0Y1RyYW5zY2VpdmVyLmdldCgpLCAibWxp
bmVpbmRleCIsICZtTGluZUluZGV4LCBudWxscHRyKTsKKyAgICBjb25zdCBhdXRvKiBtZWRpYSA9
IGdzdF9zZHBfbWVzc2FnZV9nZXRfbWVkaWEoZGVzY3JpcHRpb24tPnNkcCwgbUxpbmVJbmRleCk7
CisgICAgR1VuaXF1ZVB0cjxjaGFyPiBzZHAoZ3N0X3NkcF9tZWRpYV9hc190ZXh0KG1lZGlhKSk7
CisgICAgYXV0byBzZHBTdHJpbmcgPSBtYWtlU3RyaW5nKHNkcC5nZXQoKSk7CisKKyAgICBHVW5p
cXVlUHRyPGdjaGFyPiBuYW1lKGdzdF9wYWRfZ2V0X25hbWUocGFkKSk7CisgICAgU3RyaW5nIGxh
YmVsKG5hbWUuZ2V0KCkpOworICAgIGF1dG8ga2V5ID0gbWFrZVN0cmluZygibXNpZDoiKTsKKyAg
ICBhdXRvIGxpbmVzID0gc2RwU3RyaW5nLnNwbGl0KCdcbicpOworICAgIGZvciAoYXV0byYgbGlu
ZSA6IGxpbmVzKSB7CisgICAgICAgIGF1dG8gaSA9IGxpbmUuZmluZChrZXkpOworICAgICAgICBp
ZiAoaSAhPSBub3RGb3VuZCkgeworICAgICAgICAgICAgYXV0byB0bXAgPSBsaW5lLnN1YnN0cmlu
ZyhpICsga2V5LmFzY2lpKCkubGVuZ3RoKCkpOworICAgICAgICAgICAgbGFiZWwgPSB0bXAuc3Vi
c3RyaW5nKDAsIHRtcC5maW5kKCcgJykpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICB9CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJtc2lkOiAl
cyIsIGxhYmVsLmFzY2lpKCkuZGF0YSgpKTsKKworICAgIEdzdEVsZW1lbnQqIGJpbiA9IG51bGxw
dHI7CisgICAgYXV0byYgdHJhY2sgPSB0cmFuc2NlaXZlci0+cmVjZWl2ZXIoKS50cmFjaygpOwor
ICAgIGF1dG8mIHNvdXJjZSA9IHRyYWNrLnByaXZhdGVUcmFjaygpLnNvdXJjZSgpOworICAgIGlm
IChzb3VyY2UuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0YXRpY19j
YXN0PFJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSkuYmluKCk7
CisgICAgZWxzZSBpZiAoc291cmNlLmlzSW5jb21pbmdWaWRlb1NvdXJjZSgpKQorICAgICAgICBi
aW4gPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXImPihz
b3VyY2UpLmJpbigpOworICAgIEFTU0VSVChiaW4pOworCisgICAgZ3N0X2Jpbl9hZGQoR1NUX0JJ
Tl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBiaW4pOworICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0
R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChiaW4sICJzaW5rIikpOworICAgIGdzdF9w
YWRfbGluayhwYWQsIHNpbmtQYWQuZ2V0KCkpOworICAgIGdzdF9lbGVtZW50X3N5bmNfc3RhdGVf
d2l0aF9wYXJlbnQoYmluKTsKKworICAgIHRyYWNrLnNldEVuYWJsZWQodHJ1ZSk7CisgICAgc291
cmNlLnNldE11dGVkKGZhbHNlKTsKKworICAgIGF1dG8mIG1lZGlhU3RyZWFtID0gbWVkaWFTdHJl
YW1Gcm9tUlRDU3RyZWFtKGxhYmVsKTsKKyAgICBtZWRpYVN0cmVhbS5hZGRUcmFja0Zyb21QbGF0
Zm9ybSh0cmFjayk7CisKKyAgICBWZWN0b3I8UmVmUHRyPE1lZGlhU3RyZWFtPj4gcGVuZGluZ1N0
cmVhbXM7CisgICAgcGVuZGluZ1N0cmVhbXMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgxKTsKKyAg
ICBwZW5kaW5nU3RyZWFtcy51bmNoZWNrZWRBcHBlbmQoJm1lZGlhU3RyZWFtKTsKKworICAgIG1f
cGVlckNvbm5lY3Rpb25CYWNrZW5kLmFkZFBlbmRpbmdUcmFja0V2ZW50KHsgUmVmKHRyYW5zY2Vp
dmVyLT5yZWNlaXZlcigpKSwgUmVmKHRyYW5zY2VpdmVyLT5yZWNlaXZlcigpLnRyYWNrKCkpLCBX
VEZNb3ZlKHBlbmRpbmdTdHJlYW1zKSwgUmVmKCp0cmFuc2NlaXZlcikgfSk7CisKKyAgICBpZiAo
bV9wZW5kaW5nSW5jb21pbmdTdHJlYW1zID09IGdzdF9zZHBfbWVzc2FnZV9tZWRpYXNfbGVuKGRl
c2NyaXB0aW9uLT5zZHApKSB7CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5n
ZXQoKSwgIkluY29taW5nIHN0cmVhbXMgZ2F0aGVyZWQsIG5vdyBmaXJpbmcgdHJhY2sgZXZlbnRz
Iik7CisgICAgICAgIG1fcGVuZGluZ0luY29taW5nU3RyZWFtcyA9IDA7CisgICAgICAgIG1fcGVl
ckNvbm5lY3Rpb25CYWNrZW5kLmRpc3BhdGNoUGVuZGluZ1RyYWNrRXZlbnRzKCk7CisgICAgfQor
CisjaWZuZGVmIEdTVF9ESVNBQkxFX0dTVF9ERUJVRworICAgIGF1dG8gZG90RmlsZU5hbWUgPSBt
YWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX3BpcGVsaW5lLmdldCgpKSwgIi5pbmNvbWluZy0i
LCBtZWRpYVR5cGUsICctJywgR1NUX09CSkVDVF9OQU1FKHBhZCkpOworICAgIEdTVF9ERUJVR19C
SU5fVE9fRE9UX0ZJTEVfV0lUSF9UUyhHU1RfQklOKG1fcGlwZWxpbmUuZ2V0KCkpLCBHU1RfREVC
VUdfR1JBUEhfU0hPV19BTEwsIGRvdEZpbGVOYW1lLnV0ZjgoKS5kYXRhKCkpOworI2VuZGlmCit9
CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6cmVtb3ZlUmVtb3RlU3RyZWFtKEdzdFBh
ZCopCit7CisgICAgR1NUX0ZJWE1FX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAicmVtb3ZlUmVt
b3RlU3RyZWFtIik7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKworc3RkOjpvcHRpb25hbDxH
U3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6
Y3JlYXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyhjb25zdCBTdHJpbmcmIGtpbmQsIGNvbnN0IFJUQ1J0
cFRyYW5zY2VpdmVySW5pdCYgaW5pdCwgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6U291cmNl
JiYgc291cmNlKQoreworICAgIGlmICghbV93ZWJydGNCaW4pCisgICAgICAgIHJldHVybiBzdGQ6
Om51bGxvcHQ7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICIlenUg
c3RyZWFtcyBpbiBpbml0IGRhdGEiLCBpbml0LnN0cmVhbXMuc2l6ZSgpKTsKKworICAgIC8vIEZJ
WE1FOiBTaG91bGQgd2UgYnVpbGQgdGhlIGNhcHMgZnJvbSB0aGUgaW5pdC5zZW5kRW5jb2Rpbmdz
PyBQcm9ibGVtIGlzIHRoZXJlIGlzIG5vCisgICAgLy8gZW5jb2RpbmdOYW1lIG9yIGNsb2NrUmF0
ZSBpbiBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMuCisgICAgVmVjdG9yPHN0ZDo6cGFpcjxjb25z
dCBjaGFyKiwgaW50Pj4gZW5jb2RpbmdzOworICAgIGNvbnN0IGNoYXIqIG1lZGlhID0ga2luZC51
dGY4KCkuZGF0YSgpOworICAgIGlmIChraW5kID09ICJ2aWRlbyJfcykgeworICAgICAgICBlbmNv
ZGluZ3MucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSgzKTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hl
Y2tlZEFwcGVuZCh7ICJWUDgiLCA5MDAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tl
ZEFwcGVuZCh7ICJWUDkiLCA5MDAwMCB9KTsKKyAgICAgICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFw
cGVuZCh7ICJIMjY0IiwgOTAwMDAgfSk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZW5jb2Rpbmdz
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkoNCk7CisgICAgICAgIGVuY29kaW5ncy51bmNoZWNrZWRB
cHBlbmQoeyAiT1BVUyIsIDQ4MDAwIH0pOworICAgICAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBw
ZW5kKHsgIkc3MjIiLCA4MDAwIH0pOworICAgICAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBwZW5k
KHsgIlBDTUEiLCA4MDAwIH0pOworICAgICAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBwZW5kKHsg
IlBDTVUiLCA4MDAwIH0pOworICAgIH0KKworICAgIGF1dG8gY2FwcyA9IGFkb3B0R1JlZihnc3Rf
Y2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZm9yIChhdXRvJiBbZW5jb2RpbmdOYW1lLCBjbG9ja1Jh
dGVdIDogZW5jb2RpbmdzKSB7CisgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9zdHJ1Y3R1cmUoY2Fw
cy5nZXQoKSwgZ3N0X3N0cnVjdHVyZV9uZXcoImFwcGxpY2F0aW9uL3gtcnRwIiwgIm1lZGlhIiwg
R19UWVBFX1NUUklORywgbWVkaWEsICJlbmNvZGluZy1uYW1lIiwgR19UWVBFX1NUUklORywgZW5j
b2RpbmdOYW1lLAorICAgICAgICAgICAgInBheWxvYWQiLCBHX1RZUEVfSU5ULCBtX3B0Q291bnRl
cisrLCAiY2xvY2stcmF0ZSIsIEdfVFlQRV9JTlQsIGNsb2NrUmF0ZSwgbnVsbHB0cikpOworICAg
IH0KKworICAgIGF1dG8gZGlyZWN0aW9uID0gZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9u
KGluaXQuZGlyZWN0aW9uKTsKKyNpZm5kZWYgR1NUX0RJU0FCTEVfR1NUX0RFQlVHCisgICAgR1Vu
aXF1ZVB0cjxjaGFyPiBkZXNjKGdfZW51bV90b19zdHJpbmcoR1NUX1RZUEVfV0VCUlRDX1JUUF9U
UkFOU0NFSVZFUl9ESVJFQ1RJT04sIGRpcmVjdGlvbikpOworICAgIEdTVF9ERUJVR19PQkpFQ1Qo
bV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyAlcyB0cmFuc2NlaXZlciBmb3IgcGF5bG9hZCAlIiBH
U1RfUFRSX0ZPUk1BVCwgZGVzYy5nZXQoKSwgY2Fwcy5nZXQoKSk7CisjZW5kaWYKKworICAgIC8v
IEZJWE1FOiBOb25lIG9mIHRoaXMgKGV4Y2VwdGVkIGRpcmVjdGlvbikgaXMgcGFzc2VkIHRvIHdl
YnJ0Y2JpbiB5ZXQuCisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IGluaXREYXRhKGdzdF9z
dHJ1Y3R1cmVfbmV3KCJ0cmFuc2NlaXZlci1pbml0LWRhdGEiLCAiZGlyZWN0aW9uIiwgR1NUX1RZ
UEVfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9ESVJFQ1RJT04sIGRpcmVjdGlvbiwgbnVsbHB0cikp
OworCisgICAgR1ZhbHVlIHN0cmVhbUlkc1ZhbHVlID0gR19WQUxVRV9JTklUOworICAgIGdfdmFs
dWVfaW5pdCgmc3RyZWFtSWRzVmFsdWUsIEdTVF9UWVBFX0xJU1QpOworICAgIGZvciAoYXV0byYg
c3RyZWFtIDogaW5pdC5zdHJlYW1zKSB7CisgICAgICAgIEdWYWx1ZSB2YWx1ZSA9IEdfVkFMVUVf
SU5JVDsKKyAgICAgICAgZ192YWx1ZV9pbml0KCZ2YWx1ZSwgR19UWVBFX1NUUklORyk7CisgICAg
ICAgIGdfdmFsdWVfc2V0X3N0cmluZygmdmFsdWUsIHN0cmVhbS0+aWQoKS51dGY4KCkuZGF0YSgp
KTsKKyAgICAgICAgZ3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlKCZzdHJlYW1JZHNWYWx1ZSwg
JnZhbHVlKTsKKyAgICAgICAgZ192YWx1ZV91bnNldCgmdmFsdWUpOworICAgIH0KKyAgICBnc3Rf
c3RydWN0dXJlX3Rha2VfdmFsdWUoaW5pdERhdGEuZ2V0KCksICJzdHJlYW0taWRzIiwgJnN0cmVh
bUlkc1ZhbHVlKTsKKworICAgIEdWYWx1ZSBlbmNvZGluZ3NWYWx1ZSA9IEdfVkFMVUVfSU5JVDsK
KyAgICBnX3ZhbHVlX2luaXQoJmVuY29kaW5nc1ZhbHVlLCBHU1RfVFlQRV9MSVNUKTsKKyAgICBp
ZiAoa2luZCA9PSAiYXVkaW8iKSB7CisgICAgICAgIGlmICghaW5pdC5zZW5kRW5jb2RpbmdzLmlz
RW1wdHkoKSkgeworICAgICAgICAgICAgYXV0byBlbmNvZGluZ0RhdGEgPSBmcm9tUlRDRW5jb2Rp
bmdQYXJhbWV0ZXJzKGluaXQuc2VuZEVuY29kaW5nc1swXSk7CisgICAgICAgICAgICBHVmFsdWUg
dmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgICAgICAgICBnX3ZhbHVlX2luaXQoJnZhbHVlLCBH
U1RfVFlQRV9TVFJVQ1RVUkUpOworICAgICAgICAgICAgZ3N0X3ZhbHVlX3NldF9zdHJ1Y3R1cmUo
JnZhbHVlLCBlbmNvZGluZ0RhdGEuZ2V0KCkpOworICAgICAgICAgICAgZ3N0X3ZhbHVlX2xpc3Rf
YXBwZW5kX3ZhbHVlKCZlbmNvZGluZ3NWYWx1ZSwgJnZhbHVlKTsKKyAgICAgICAgICAgIGdfdmFs
dWVfdW5zZXQoJnZhbHVlKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGZvciAo
YXV0byYgZW5jb2RpbmcgOiBpbml0LnNlbmRFbmNvZGluZ3MpIHsKKyAgICAgICAgICAgIGF1dG8g
ZW5jb2RpbmdEYXRhID0gZnJvbVJUQ0VuY29kaW5nUGFyYW1ldGVycyhlbmNvZGluZyk7CisgICAg
ICAgICAgICBHVmFsdWUgdmFsdWUgPSBHX1ZBTFVFX0lOSVQ7CisgICAgICAgICAgICBnX3ZhbHVl
X2luaXQoJnZhbHVlLCBHU1RfVFlQRV9TVFJVQ1RVUkUpOworICAgICAgICAgICAgZ3N0X3ZhbHVl
X3NldF9zdHJ1Y3R1cmUoJnZhbHVlLCBlbmNvZGluZ0RhdGEuZ2V0KCkpOworICAgICAgICAgICAg
Z3N0X3ZhbHVlX2xpc3RfYXBwZW5kX3ZhbHVlKCZlbmNvZGluZ3NWYWx1ZSwgJnZhbHVlKTsKKyAg
ICAgICAgICAgIGdfdmFsdWVfdW5zZXQoJnZhbHVlKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBn
c3Rfc3RydWN0dXJlX3Rha2VfdmFsdWUoaW5pdERhdGEuZ2V0KCksICJlbmNvZGluZ3MiLCAmZW5j
b2RpbmdzVmFsdWUpOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gcnRj
VHJhbnNjZWl2ZXI7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgp
LCAiYWRkLXRyYW5zY2VpdmVyIiwgZGlyZWN0aW9uLCBjYXBzLmdldCgpLCAmcnRjVHJhbnNjZWl2
ZXIub3V0UHRyKCkpOworICAgIGlmICghcnRjVHJhbnNjZWl2ZXIpCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisKKyAgICBhdXRvIHRyYW5zY2VpdmVyID0gbWFrZVVuaXF1ZTxHU3RyZWFt
ZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KFdURk1vdmUocnRjVHJhbnNjZWl2ZXIpKTsKKyAgICBy
ZXR1cm4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6QmFja2VuZHMgeyB0cmFuc2NlaXZlci0+Y3Jl
YXRlU2VuZGVyQmFja2VuZChtX3BlZXJDb25uZWN0aW9uQmFja2VuZCwgV1RGTW92ZShzb3VyY2Up
LCBXVEZNb3ZlKGluaXREYXRhKSksIHRyYW5zY2VpdmVyLT5jcmVhdGVSZWNlaXZlckJhY2tlbmQo
KSwgV1RGTW92ZSh0cmFuc2NlaXZlcikgfTsKK30KKworc3RkOjpvcHRpb25hbDxHU3RyZWFtZXJN
ZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6YWRkVHJhbnNj
ZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5p
dCYgaW5pdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyh0cmFja0tp
bmQsIGluaXQsIG51bGxwdHIpOworfQorCitHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3Vy
Y2UgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y3JlYXRlU291cmNlRm9yVHJhY2soTWVkaWFTdHJl
YW1UcmFjayYgdHJhY2spCit7CisgICAgaWYgKHRyYWNrLnByaXZhdGVUcmFjaygpLmhhc0F1ZGlv
KCkpCisgICAgICAgIHJldHVybiBSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6
OmNyZWF0ZSh0cmFjay5wcml2YXRlVHJhY2soKSk7CisKKyAgICBBU1NFUlQodHJhY2sucHJpdmF0
ZVRyYWNrKCkuaGFzVmlkZW8oKSk7CisgICAgcmV0dXJuIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrLnByaXZhdGVUcmFjaygpKTsKK30KKworc3RkOjpv
cHRpb25hbDxHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpCYWNrZW5kcz4gR1N0cmVhbWVyTWVkaWFF
bmRwb2ludDo6YWRkVHJhbnNjZWl2ZXIoTWVkaWFTdHJlYW1UcmFjayYgdHJhY2ssIGNvbnN0IFJU
Q1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4gY3JlYXRlVHJhbnNjZWl2
ZXJCYWNrZW5kcyh0cmFjay5raW5kKCksIGluaXQsIGNyZWF0ZVNvdXJjZUZvclRyYWNrKHRyYWNr
KSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c2V0U2VuZGVyU291cmNlRnJv
bVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJikKK3sK
KyAgICBHU1RfRklYTUVfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0KCksICJzZXRTZW5kZXJTb3VyY2VG
cm9tVHJhY2siKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8
R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojp0
cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIGJh
Y2tlbmQpCit7CisgICAgR1JlZlB0cjxHQXJyYXk+IHRyYW5zY2VpdmVyczsKKyAgICBnX3NpZ25h
bF9lbWl0X2J5X25hbWUobV93ZWJydGNCaW4uZ2V0KCksICJnZXQtdHJhbnNjZWl2ZXJzIiwgJnRy
YW5zY2VpdmVycy5vdXRQdHIoKSk7CisKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUu
Z2V0KCksICJMb29raW5nIGZvciBzZW5kZXIgJXAgaW4gJXUgZXhpc3RpbmcgdHJhbnNjZWl2ZXJz
IiwgYmFja2VuZC5ydGNTZW5kZXIoKSwgdHJhbnNjZWl2ZXJzLT5sZW4pOworICAgIGZvciAodW5z
aWduZWQgdHJhbnNjZWl2ZXJJbmRleCA9IDA7IHRyYW5zY2VpdmVySW5kZXggPCB0cmFuc2NlaXZl
cnMtPmxlbjsgdHJhbnNjZWl2ZXJJbmRleCsrKSB7CisgICAgICAgIEdzdFdlYlJUQ1JUUFRyYW5z
Y2VpdmVyKiBjdXJyZW50ID0gZ19hcnJheV9pbmRleCh0cmFuc2NlaXZlcnMuZ2V0KCksIEdzdFdl
YlJUQ1JUUFRyYW5zY2VpdmVyKiwgdHJhbnNjZWl2ZXJJbmRleCk7CisgICAgICAgIEdSZWZQdHI8
R3N0V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXI7CisgICAgICAgIGdfb2JqZWN0X2dldChjdXJyZW50
LCAic2VuZGVyIiwgJnNlbmRlci5vdXRQdHIoKSwgbnVsbHB0cik7CisKKyAgICAgICAgaWYgKCFz
ZW5kZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgaWYgKHNlbmRlci5nZXQoKSA9
PSBiYWNrZW5kLnJ0Y1NlbmRlcigpKQorICAgICAgICAgICAgcmV0dXJuIFdURjo6bWFrZVVuaXF1
ZTxHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ+KGN1cnJlbnQpOworICAgIH0KKworICAg
IHJldHVybiBudWxscHRyOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmFkZElj
ZUNhbmRpZGF0ZShHU3RyZWFtZXJJY2VDYW5kaWRhdGUmIGNhbmRpZGF0ZSwgUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNrKQoreworICAgIEdT
VF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIkFkZGluZyBJQ0UgY2FuZGlkYXRlICVz
IiwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0YSgpKTsKKworICAgIGlmICghY2FuZGlk
YXRlLmNhbmRpZGF0ZS5zdGFydHNXaXRoKCJjYW5kaWRhdGU6IikpIHsKKyAgICAgICAgY2FsbE9u
TWFpblRocmVhZChbdGFzayA9IGNyZWF0ZVNoYXJlZFRhc2s8UGVlckNvbm5lY3Rpb25CYWNrZW5k
OjpBZGRJY2VDYW5kaWRhdGVDYWxsYmFja0Z1bmN0aW9uPihXVEZNb3ZlKGNhbGxiYWNrKSldKCkg
bXV0YWJsZSB7CisgICAgICAgICAgICB0YXNrLT5ydW4oRXhjZXB0aW9uIHsgT3BlcmF0aW9uRXJy
b3IsICJFeHBlY3QgbGluZTogY2FuZGlkYXRlOjxjYW5kaWRhdGUtc3RyPiIgfSk7CisgICAgICAg
IH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgYXV0byBwYXJzZWRDYW5kaWRhdGUg
PSBwYXJzZUljZUNhbmRpZGF0ZVNEUChjYW5kaWRhdGUuY2FuZGlkYXRlKTsKKyAgICBpZiAoIXBh
cnNlZENhbmRpZGF0ZSkgeworICAgICAgICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gY3JlYXRl
U2hhcmVkVGFzazxQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNr
RnVuY3Rpb24+KFdURk1vdmUoY2FsbGJhY2spKV0oKSBtdXRhYmxlIHsKKyAgICAgICAgICAgIHRh
c2stPnJ1bihFeGNlcHRpb24geyBPcGVyYXRpb25FcnJvciwgIkVycm9yIHByb2Nlc3NpbmcgSUNF
IGNhbmRpZGF0ZSIgfSk7CisgICAgICAgIH0pOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gRklYTUU6IGludmFsaWQgc2RwTUxpbmVJbmRleCBleGNlcHRpb24gbm90IHJlbGF5ZWQg
ZnJvbSB3ZWJydGNiaW4uCisgICAgLy8gRklYTUU6IElkZWFsbHkgdGhpcyBzaG91bGQgcGFzcyB0
aGUgcmVzdWx0L2Vycm9yIHRvIGEgR3N0UHJvbWlzZSBvYmplY3QuCisgICAgZ19zaWduYWxfZW1p
dF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiYWRkLWljZS1jYW5kaWRhdGUiLCBjYW5kaWRh
dGUuc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0ZS51dGY4KCkuZGF0YSgpKTsKKyAg
ICBjYWxsT25NYWluVGhyZWFkKFt0YXNrID0gY3JlYXRlU2hhcmVkVGFzazxQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OkFkZEljZUNhbmRpZGF0ZUNhbGxiYWNrRnVuY3Rpb24+KFdURk1vdmUoY2FsbGJh
Y2spKSwgZGVzY3JpcHRpb25zID0gZGVzY3JpcHRpb25zRnJvbVdlYlJUQ0JpbihtX3dlYnJ0Y0Jp
bi5nZXQoKSldKCkgbXV0YWJsZSB7CisgICAgICAgIHRhc2stPnJ1bihXVEZNb3ZlKGRlc2NyaXB0
aW9ucykpOworICAgIH0pOworfQorCitzdGQ6OnVuaXF1ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5k
bGVyPiBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVEYXRhQ2hhbm5lbChjb25zdCBTdHJp
bmcmIGxhYmVsLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmIG9wdGlvbnMpCit7CisgICAgaWYg
KCFtX3dlYnJ0Y0JpbikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBhdXRvIGluaXQg
PSBHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI6OmZyb21SVENEYXRhQ2hhbm5lbEluaXQob3B0
aW9ucyk7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiQ3JlYXRpbmcg
ZGF0YSBjaGFubmVsIGZvciBpbml0IG9wdGlvbnMgJSIgR1NUX1BUUl9GT1JNQVQsIGluaXQuZ2V0
KCkpOworICAgIEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGNoYW5uZWw7CisgICAgZ19z
aWduYWxfZW1pdF9ieV9uYW1lKG1fd2VicnRjQmluLmdldCgpLCAiY3JlYXRlLWRhdGEtY2hhbm5l
bCIsIGxhYmVsLnV0ZjgoKS5kYXRhKCksIGluaXQuZ2V0KCksICZjaGFubmVsLm91dFB0cigpKTsK
KyAgICBpZiAoIWNoYW5uZWwpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJu
IFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRsZXI+KFdURk1vdmUoY2hh
bm5lbCkpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uRGF0YUNoYW5uZWwo
R3N0V2ViUlRDRGF0YUNoYW5uZWwqIGRhdGFDaGFubmVsKQoreworICAgIEdSZWZQdHI8R3N0V2Vi
UlRDRGF0YUNoYW5uZWw+IGNoYW5uZWwgPSBkYXRhQ2hhbm5lbDsKKyAgICBjYWxsT25NYWluVGhy
ZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpcywgZGF0YUNoYW5uZWwgPSBXVEZN
b3ZlKGNoYW5uZWwpXSgpIG11dGFibGUgeworICAgICAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBlbGluZS5nZXQo
KSwgIkluY29taW5nIGRhdGEgY2hhbm5lbCIpOworICAgICAgICBhdXRvJiBjb25uZWN0aW9uID0g
bV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQuY29ubmVjdGlvbigpOworICAgICAgICBjb25uZWN0aW9u
LmRpc3BhdGNoRXZlbnQoR1N0cmVhbWVyRGF0YUNoYW5uZWxIYW5kbGVyOjpjcmVhdGVEYXRhQ2hh
bm5lbEV2ZW50KCpjb25uZWN0aW9uLmRvY3VtZW50KCksIFdURk1vdmUoZGF0YUNoYW5uZWwpKSk7
CisgICAgfSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6Y2xvc2UoKQorewor
ICAgIC8vIGh0dHBzOi8vZ2l0bGFiLmZyZWVkZXNrdG9wLm9yZy9nc3RyZWFtZXIvZ3N0LXBsdWdp
bnMtYmFkLy0vaXNzdWVzLzExODEKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fcGlwZWxpbmUuZ2V0
KCksICJDbG9zaW5nIik7CisgICAgaWYgKG1fcGlwZWxpbmUpCisgICAgICAgIGdzdF9lbGVtZW50
X3NldF9zdGF0ZShtX3BpcGVsaW5lLmdldCgpLCBHU1RfU1RBVEVfUkVBRFkpOworCisjaWYgIVJF
TEVBU0VfTE9HX0RJU0FCTEVECisgICAgc3RvcExvZ2dpbmdTdGF0cygpOworI2VuZGlmCit9CisK
K3ZvaWQgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcCgpCit7CisjaWYgIVJFTEVBU0VfTE9H
X0RJU0FCTEVECisgICAgc3RvcExvZ2dpbmdTdGF0cygpOworI2VuZGlmCisKKyAgICBpZiAoaXNT
dG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIEdTVF9ERUJVR19PQkpFQ1QobV9waXBl
bGluZS5nZXQoKSwgIlN0b3BwaW5nIik7CisgICAgdGVhcmRvd25QaXBlbGluZSgpOworfQorCit2
b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OnN1c3BlbmQoKQoreworICAgIGlmIChpc1N0b3Bw
ZWQoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5l
LmdldCgpLCAiU3VzcGVuZGluZyIpOworICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX3BpcGVs
aW5lLmdldCgpLCBHU1RfU1RBVEVfUEFVU0VEKTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVu
ZHBvaW50OjpyZXN1bWUoKQoreworICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgR1NUX0RFQlVHX09CSkVDVChtX3BpcGVsaW5lLmdldCgpLCAiUmVzdW1pbmciKTsK
KyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX1BM
QVlJTkcpOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uTmVnb3RpYXRpb25O
ZWVkZWQoKQoreworICAgIG1faXNOZWdvdGlhdGlvbk5lZWRlZCA9IHRydWU7CisKKyAgICBjYWxs
T25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0gUmVmKCp0aGlzKSwgdGhpc10geworICAgICAg
ICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEdTVF9ERUJV
R19PQkpFQ1QobV9waXBlbGluZS5nZXQoKSwgIk5lZ290aWF0aW9uIG5lZWRlZCEiKTsKKyAgICAg
ICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQubWFya0FzTmVlZGluZ05lZ290aWF0aW9uKDApOwor
ICAgIH0pOworfQorCit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6Om9uSWNlQ29ubmVjdGlv
bkNoYW5nZSgpCit7CisgICAgR3N0V2ViUlRDSUNFQ29ubmVjdGlvblN0YXRlIHN0YXRlOworICAg
IGdfb2JqZWN0X2dldChtX3dlYnJ0Y0Jpbi5nZXQoKSwgImljZS1jb25uZWN0aW9uLXN0YXRlIiwg
JnN0YXRlLCBudWxscHRyKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlzID0g
UmVmKCp0aGlzKSwgdGhpcywgY29ubmVjdGlvblN0YXRlID0gdG9SVENJY2VDb25uZWN0aW9uU3Rh
dGUoc3RhdGUpXSB7CisgICAgICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgYXV0byYgY29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNv
bm5lY3Rpb24oKTsKKyAgICAgICAgaWYgKGNvbm5lY3Rpb24uaWNlQ29ubmVjdGlvblN0YXRlKCkg
IT0gY29ubmVjdGlvblN0YXRlKQorICAgICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJY2VDb25u
ZWN0aW9uU3RhdGUoY29ubmVjdGlvblN0YXRlKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50OjpvbkljZUdhdGhlcmluZ0NoYW5nZSgpCit7CisgICAgR3N0V2ViUlRD
SUNFR2F0aGVyaW5nU3RhdGUgc3RhdGU7CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjQmluLmdl
dCgpLCAiaWNlLWdhdGhlcmluZy1zdGF0ZSIsICZzdGF0ZSwgbnVsbHB0cik7CisgICAgY2FsbE9u
TWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRoaXMsIHN0YXRlXSB7Cisg
ICAgICAgIGlmIChpc1N0b3BwZWQoKSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgYXV0
byYgY29ubmVjdGlvbiA9IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmNvbm5lY3Rpb24oKTsKKyAg
ICAgICAgaWYgKHN0YXRlID09IEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19TVEFURV9DT01QTEVU
RSkKKyAgICAgICAgICAgIG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kLmRvbmVHYXRoZXJpbmdDYW5k
aWRhdGVzKCk7CisgICAgICAgIGVsc2UgaWYgKHN0YXRlID09IEdTVF9XRUJSVENfSUNFX0dBVEhF
UklOR19TVEFURV9HQVRIRVJJTkcpCisgICAgICAgICAgICBjb25uZWN0aW9uLnVwZGF0ZUljZUdh
dGhlcmluZ1N0YXRlKFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpHYXRoZXJpbmcpOworICAgICAgICBl
bHNlIGlmIChzdGF0ZSA9PSBHU1RfV0VCUlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfTkVXKQorICAg
ICAgICAgICAgY29ubmVjdGlvbi51cGRhdGVJY2VHYXRoZXJpbmdTdGF0ZShSVENJY2VHYXRoZXJp
bmdTdGF0ZTo6TmV3KTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50
OjpvbkljZUNhbmRpZGF0ZShndWludCBzZHBNTGluZUluZGV4LCBnY2hhcmFycmF5IGNhbmRpZGF0
ZSkKK3sKKyAgICBpZiAoaXNTdG9wcGVkKCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEZJ
WE1FOiBHZXQgbWlkIGZyb20gY2FuZGlkYXRlPworICAgIEdVbmlxdWVPdXRQdHI8R3N0V2ViUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uPiBkZXNjcmlwdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV93ZWJy
dGNCaW4uZ2V0KCksICJsb2NhbC1kZXNjcmlwdGlvbiIsICZkZXNjcmlwdGlvbi5vdXRQdHIoKSwg
bnVsbHB0cik7CisgICAgaWYgKCFkZXNjcmlwdGlvbikKKyAgICAgICAgcmV0dXJuOworCisgICAg
Y29uc3QgYXV0byogbWVkaWEgPSBnc3Rfc2RwX21lc3NhZ2VfZ2V0X21lZGlhKGRlc2NyaXB0aW9u
LT5zZHAsIHNkcE1MaW5lSW5kZXgpOworICAgIGNhbGxPbk1haW5UaHJlYWQoW3Byb3RlY3RlZFRo
aXMgPSBSZWYoKnRoaXMpLCB0aGlzLCBtaWQgPSBtYWtlU3RyaW5nKGdzdF9zZHBfbWVkaWFfZ2V0
X2F0dHJpYnV0ZV92YWwobWVkaWEsICJtaWQiKSksIHNkcCA9IG1ha2VTdHJpbmcoY2FuZGlkYXRl
KSwgc2RwTUxpbmVJbmRleF0oKSBtdXRhYmxlIHsKKyAgICAgICAgaWYgKGlzU3RvcHBlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBhdXRvIGRlc2NyaXB0aW9ucyA9IGRlc2NyaXB0
aW9uc0Zyb21XZWJSVENCaW4obV93ZWJydGNCaW4uZ2V0KCkpOworICAgICAgICBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZC5uZXdJQ0VDYW5kaWRhdGUoV1RGTW92ZShzZHApLCBXVEZNb3ZlKG1pZCks
IHNkcE1MaW5lSW5kZXgsIHsgfSwgV1RGTW92ZShkZXNjcmlwdGlvbnMpKTsKKyAgICB9KTsKK30K
Kwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpjcmVhdGVTZXNzaW9uRGVzY3JpcHRpb25T
dWNjZWVkZWQoR1VuaXF1ZVB0cjxHc3RXZWJSVENTZXNzaW9uRGVzY3JpcHRpb24+JiYgZGVzY3Jp
cHRpb24pCit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhp
cyksIHRoaXMsIGRlc2NyaXB0aW9uID0gV1RGTW92ZShkZXNjcmlwdGlvbildIHsKKyAgICAgICAg
aWYgKGlzU3RvcHBlZCgpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEdVbmlxdWVQ
dHI8Y2hhcj4gc2RwKGdzdF9zZHBfbWVzc2FnZV9hc190ZXh0KGRlc2NyaXB0aW9uLT5zZHApKTsK
KyAgICAgICAgaWYgKG1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9u
QmFja2VuZC5jcmVhdGVPZmZlclN1Y2NlZWRlZChzZHAuZ2V0KCkpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJTdWNjZWVkZWQo
c2RwLmdldCgpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpj
cmVhdGVTZXNzaW9uRGVzY3JpcHRpb25GYWlsZWQoR1VuaXF1ZVB0cjxHRXJyb3I+JiYgZXJyb3Ip
Cit7CisgICAgY2FsbE9uTWFpblRocmVhZChbcHJvdGVjdGVkVGhpcyA9IFJlZigqdGhpcyksIHRo
aXMsIGVycm9yID0gV1RGTW92ZShlcnJvcildIHsKKyAgICAgICAgaWYgKGlzU3RvcHBlZCgpKQor
ICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gZXhjID0gRXhjZXB0aW9uIHsgT3Bl
cmF0aW9uRXJyb3IsIGVycm9yID8gZXJyb3ItPm1lc3NhZ2UgOiAiVW5rbm93biBFcnJvciIgfTsK
KyAgICAgICAgaWYgKG1faXNJbml0aWF0b3IpCisgICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9u
QmFja2VuZC5jcmVhdGVPZmZlckZhaWxlZChXVEZNb3ZlKGV4YykpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5jcmVhdGVBbnN3ZXJGYWlsZWQoV1RG
TW92ZShleGMpKTsKKyAgICB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpj
b2xsZWN0VHJhbnNjZWl2ZXJzKCkKK3sKKyAgICBHUmVmUHRyPEdBcnJheT4gdHJhbnNjZWl2ZXJz
OworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC10cmFu
c2NlaXZlcnMiLCAmdHJhbnNjZWl2ZXJzLm91dFB0cigpKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgdHJhbnNjZWl2ZXJzLT5sZW47IGkrKykgeworICAgICAgICBHc3RXZWJSVENSVFBU
cmFuc2NlaXZlciogY3VycmVudCA9IGdfYXJyYXlfaW5kZXgodHJhbnNjZWl2ZXJzLmdldCgpLCBH
c3RXZWJSVENSVFBUcmFuc2NlaXZlciosIGkpOworCisgICAgICAgIGF1dG8qIGV4aXN0aW5nVHJh
bnNjZWl2ZXIgPSBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5leGlzdGluZ1RyYW5zY2VpdmVyKFsm
XShhdXRvJiB0cmFuc2NlaXZlckJhY2tlbmQpIHsKKyAgICAgICAgICAgIHJldHVybiBjdXJyZW50
ID09IHRyYW5zY2VpdmVyQmFja2VuZC5ydGNUcmFuc2NlaXZlcigpOworICAgICAgICB9KTsKKyAg
ICAgICAgaWYgKGV4aXN0aW5nVHJhbnNjZWl2ZXIpCisgICAgICAgICAgICBjb250aW51ZTsKKwor
ICAgICAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiByZWNlaXZlcjsKKyAgICAgICAg
R1VuaXF1ZU91dFB0cjxjaGFyPiBtaWQ7CisgICAgICAgIGdfb2JqZWN0X2dldChjdXJyZW50LCAi
cmVjZWl2ZXIiLCAmcmVjZWl2ZXIub3V0UHRyKCksICJtaWQiLCAmbWlkLm91dFB0cigpLCBudWxs
cHRyKTsKKworICAgICAgICBpZiAoIXJlY2VpdmVyIHx8ICFtaWQpCisgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICBtX3BlZXJDb25uZWN0aW9uQmFja2VuZC5uZXdSZW1vdGVUcmFuc2Nl
aXZlcihXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPihXVEZN
b3ZlKGN1cnJlbnQpKSwgbV9tZWRpYUZvck1pZC5nZXQobWlkLmdldCgpKSk7CisgICAgfQorfQor
CisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECit2b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6
OmdhdGhlclN0YXRzRm9yTG9nZ2luZygpCit7CisgICAgYXV0byogaG9sZGVyID0gY3JlYXRlR1N0
cmVhbWVyTWVkaWFFbmRwb2ludEhvbGRlcigpOworICAgIGhvbGRlci0+ZW5kUG9pbnQgPSB0aGlz
OworICAgIGdfc2lnbmFsX2VtaXRfYnlfbmFtZShtX3dlYnJ0Y0Jpbi5nZXQoKSwgImdldC1zdGF0
cyIsIG51bGxwdHIsIGdzdF9wcm9taXNlX25ld193aXRoX2NoYW5nZV9mdW5jKFtdKEdzdFByb21p
c2UqIHJhd1Byb21pc2UsIGdwb2ludGVyIHVzZXJEYXRhKSB7CisgICAgICAgIGF1dG8gcHJvbWlz
ZSA9IGFkb3B0R1JlZihyYXdQcm9taXNlKTsKKyAgICAgICAgYXV0byByZXN1bHQgPSBnc3RfcHJv
bWlzZV93YWl0KHByb21pc2UuZ2V0KCkpOworICAgICAgICBpZiAocmVzdWx0ICE9IEdTVF9QUk9N
SVNFX1JFU1VMVF9SRVBMSUVEKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGNvbnN0
IGF1dG8qIHJlcGx5ID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UuZ2V0KCkpOworICAg
ICAgICBBU1NFUlQocmVwbHkpOworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9oYXNfZmllbGQo
cmVwbHksICJlcnJvciIpKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8qIGhv
bGRlciA9IHN0YXRpY19jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnRIb2xkZXIqPih1c2VyRGF0
YSk7CisgICAgICAgIGhvbGRlci0+ZW5kUG9pbnQtPm9uU3RhdHNEZWxpdmVyZWQocmVwbHkpOwor
ICAgIH0sIGhvbGRlciwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZGVzdHJveUdT
dHJlYW1lck1lZGlhRW5kcG9pbnRIb2xkZXIpKSk7Cit9CisKK2NsYXNzIFJUQ1N0YXRzTG9nZ2Vy
IHsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBSVENTdGF0c0xvZ2dlcihjb25zdCBHc3RTdHJ1Y3R1
cmUqIHN0YXRzKQorICAgICAgICA6IG1fc3RhdHMoc3RhdHMpCisgICAgeyB9CisKKyAgICBTdHJp
bmcgdG9KU09OU3RyaW5nKCkgY29uc3QgeyByZXR1cm4gZ3N0U3RydWN0dXJlVG9KU09OU3RyaW5n
KG1fc3RhdHMpOyB9CisKK3ByaXZhdGU6CisgICAgY29uc3QgR3N0U3RydWN0dXJlKiBtX3N0YXRz
OworfTsKKwordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50Ojpwcm9jZXNzU3RhdHMoY29uc3Qg
R1ZhbHVlKiB2YWx1ZSkKK3sKKyAgICBpZiAoIUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RVUkUodmFs
dWUpKQorICAgICAgICByZXR1cm47CisKKyAgICBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVy
ZSA9IGdzdF92YWx1ZV9nZXRfc3RydWN0dXJlKHZhbHVlKTsKKyAgICBHc3RXZWJSVENTdGF0c1R5
cGUgc3RhdHNUeXBlOworICAgIGlmICghZ3N0X3N0cnVjdHVyZV9nZXQoc3RydWN0dXJlLCAidHlw
ZSIsIEdTVF9UWVBFX1dFQlJUQ19TVEFUU19UWVBFLCAmc3RhdHNUeXBlLCBudWxscHRyKSkKKyAg
ICAgICAgcmV0dXJuOworCisgICAgLy8gSnVzdCBjaGVjayBhIHNpbmdsZSB0aW1lc3RhbXAsIGlu
Ym91bmQgUlRQIGZvciBpbnN0YW5jZS4KKyAgICBpZiAoIW1fc3RhdHNGaXJzdERlbGl2ZXJlZFRp
bWVzdGFtcCAmJiBzdGF0c1R5cGUgPT0gR1NUX1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUCkgewor
ICAgICAgICBkb3VibGUgdGltZXN0YW1wOworICAgICAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRf
ZG91YmxlKHN0cnVjdHVyZSwgInRpbWVzdGFtcCIsICZ0aW1lc3RhbXApKSB7CisgICAgICAgICAg
ICBhdXRvIHRzID0gU2Vjb25kczo6ZnJvbU1pbGxpc2Vjb25kcyh0aW1lc3RhbXApOworICAgICAg
ICAgICAgbV9zdGF0c0ZpcnN0RGVsaXZlcmVkVGltZXN0YW1wID0gdHM7CisKKyAgICAgICAgICAg
IGlmICghaXNTdG9wcGVkKCkgJiYgbV9zdGF0c0xvZ1RpbWVyLnJlcGVhdEludGVydmFsKCkgIT0g
c3RhdHNMb2dJbnRlcnZhbCh0cykpIHsKKyAgICAgICAgICAgICAgICBtX3N0YXRzTG9nVGltZXIu
c3RvcCgpOworICAgICAgICAgICAgICAgIG1fc3RhdHNMb2dUaW1lci5zdGFydFJlcGVhdGluZyhz
dGF0c0xvZ0ludGVydmFsKHRzKSk7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisK
KyAgICBpZiAobG9nZ2VyKCkud2lsbExvZyhsb2dDaGFubmVsKCksIFdURkxvZ0xldmVsOjpEZWJ1
ZykpIHsKKyAgICAgICAgLy8gU3RhdHMgYXJlIHZlcnkgdmVyYm9zZSwgbGV0J3Mgb25seSBkaXNw
bGF5IHRoZW0gaW4gaW5zcGVjdG9yIGNvbnNvbGUgaW4gdmVyYm9zZSBtb2RlLgorICAgICAgICBs
b2dnZXIoKS5kZWJ1ZyhMb2dXZWJSVEMsCisgICAgICAgICAgICBMb2dnZXI6OkxvZ1NpdGVJZGVu
dGlmaWVyKCJHU3RyZWFtZXJNZWRpYUVuZHBvaW50IiwgIm9uU3RhdHNEZWxpdmVyZWQiLCBsb2dJ
ZGVudGlmaWVyKCkpLAorICAgICAgICAgICAgUlRDU3RhdHNMb2dnZXIgeyBzdHJ1Y3R1cmUgfSk7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbG9nZ2VyKCkubG9nQWx3YXlzKExvZ1dlYlJUQ1N0YXRz
LAorICAgICAgICAgICAgTG9nZ2VyOjpMb2dTaXRlSWRlbnRpZmllcigiR1N0cmVhbWVyTWVkaWFF
bmRwb2ludCIsICJvblN0YXRzRGVsaXZlcmVkIiwgbG9nSWRlbnRpZmllcigpKSwKKyAgICAgICAg
ICAgIFJUQ1N0YXRzTG9nZ2VyIHsgc3RydWN0dXJlIH0pOworICAgIH0KK30KKwordm9pZCBHU3Ry
ZWFtZXJNZWRpYUVuZHBvaW50OjpvblN0YXRzRGVsaXZlcmVkKGNvbnN0IEdzdFN0cnVjdHVyZSog
c3RhdHMpCit7CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IHN0YXRzQ29weShnc3Rfc3Ry
dWN0dXJlX2NvcHkoc3RhdHMpKTsKKyAgICBjYWxsT25NYWluVGhyZWFkKFtwcm90ZWN0ZWRUaGlz
ID0gUmVmKCp0aGlzKSwgdGhpcywgc3RhdHMgPSBXVEZNb3ZlKHN0YXRzQ29weSldIHsKKyAgICAg
ICAgZ3N0X3N0cnVjdHVyZV9mb3JlYWNoKHN0YXRzLmdldCgpLCBzdGF0aWNfY2FzdDxHc3RTdHJ1
Y3R1cmVGb3JlYWNoRnVuYz4oW10oR1F1YXJrLCBjb25zdCBHVmFsdWUqIHZhbHVlLCBncG9pbnRl
ciB1c2VyRGF0YSkgLT4gZ2Jvb2xlYW4geworICAgICAgICAgICAgYXV0byogZW5kUG9pbnQgPSBy
ZWludGVycHJldF9jYXN0PEdTdHJlYW1lck1lZGlhRW5kcG9pbnQqPih1c2VyRGF0YSk7CisgICAg
ICAgICAgICBlbmRQb2ludC0+cHJvY2Vzc1N0YXRzKHZhbHVlKTsKKyAgICAgICAgICAgIHJldHVy
biBUUlVFOworICAgICAgICB9KSwgdGhpcyk7CisgICAgfSk7Cit9CisjZW5kaWYKKworI2lmICFS
RUxFQVNFX0xPR19ESVNBQkxFRAordm9pZCBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdGFydExv
Z2dpbmdTdGF0cygpCit7CisgICAgaWYgKG1fc3RhdHNMb2dUaW1lci5pc0FjdGl2ZSgpKQorICAg
ICAgICBtX3N0YXRzTG9nVGltZXIuc3RvcCgpOworICAgIG1fc3RhdHNMb2dUaW1lci5zdGFydFJl
cGVhdGluZyhzdGF0c0xvZ0ludGVydmFsKFNlY29uZHM6Om5hbigpKSk7Cit9CisKK3ZvaWQgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludDo6c3RvcExvZ2dpbmdTdGF0cygpCit7CisgICAgbV9zdGF0c0xv
Z1RpbWVyLnN0b3AoKTsKK30KKworV1RGTG9nQ2hhbm5lbCYgR1N0cmVhbWVyTWVkaWFFbmRwb2lu
dDo6bG9nQ2hhbm5lbCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIExvZ1dlYlJUQzsKK30KKworU2Vj
b25kcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OjpzdGF0c0xvZ0ludGVydmFsKFNlY29uZHMgcmVw
b3J0VGltZXN0YW1wKSBjb25zdAoreworICAgIGlmIChsb2dnZXIoKS53aWxsTG9nKGxvZ0NoYW5u
ZWwoKSwgV1RGTG9nTGV2ZWw6OkluZm8pKQorICAgICAgICByZXR1cm4gMl9zOworCisgICAgaWYg
KHJlcG9ydFRpbWVzdGFtcCAtIG1fc3RhdHNGaXJzdERlbGl2ZXJlZFRpbWVzdGFtcCA+IDE1X3Mp
CisgICAgICAgIHJldHVybiAxMF9zOworCisgICAgcmV0dXJuIDRfczsKK30KKyNlbmRpZgorCit2
b2lkIEdTdHJlYW1lck1lZGlhRW5kcG9pbnQ6OmdhdGhlckRlY29kZXJJbXBsZW1lbnRhdGlvbk5h
bWUoRnVuY3Rpb248dm9pZChTdHJpbmcmJik+JiYgY2FsbGJhY2spCit7CisgICAgLy8gVE9ETzog
Y29sbGVjdCBzdGF0cyBhbmQgbG9va3VwIEluYm91bmRSdHAgImRlY29kZXJfaW1wbGVtZW50YXRp
b24iIGZpZWxkLgorICAgIGNhbGxiYWNrKHsgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2lmICFSRUxFQVNFX0xPR19ESVNBQkxFRAorbmFtZXNwYWNlIFdURiB7CisKK3RlbXBs
YXRlPHR5cGVuYW1lIFR5cGU+CitzdHJ1Y3QgTG9nQXJndW1lbnQ7CisKK3RlbXBsYXRlIDw+Citz
dHJ1Y3QgTG9nQXJndW1lbnQ8V2ViQ29yZTo6UlRDU3RhdHNMb2dnZXI+IHsKKyAgICBzdGF0aWMg
U3RyaW5nIHRvU3RyaW5nKGNvbnN0IFdlYkNvcmU6OlJUQ1N0YXRzTG9nZ2VyJiBsb2dnZXIpCisg
ICAgeworICAgICAgICByZXR1cm4gU3RyaW5nKGxvZ2dlci50b0pTT05TdHJpbmcoKSk7CisgICAg
fQorfTsKKworfTsgLy8gbmFtZXNwYWNlIFdURgorI2VuZGlmIC8vICFSRUxFQVNFX0xPR19ESVNB
QkxFRAorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVu
ZHBvaW50LmggYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJNZWRpYUVuZHBvaW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZjg2NWIzNDlhZWEyYWM5Yjk3MjQ1
Njk1MTI2NGEyODk4NTFmODRhOQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01v
ZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lck1lZGlhRW5kcG9pbnQuaApAQCAt
MCwwICsxLDE4NiBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5M
LiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2lj
YWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91
IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJt
cyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlz
aGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24g
MiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQg
d2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2
ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5l
cmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQg
aGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBG
cmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBG
aWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBv
bmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNp
bmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVy
U3RhdHNDb2xsZWN0b3IuaCIKKyNpbmNsdWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5j
bHVkZSAiUlRDUnRwUmVjZWl2ZXIuaCIKKworI2luY2x1ZGUgPHd0Zi9Mb2dnZXJIZWxwZXIuaD4K
KyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVy
UnRwUmVjZWl2ZXJCYWNrZW5kOworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5k
OworY2xhc3MgTWVkaWFTdHJlYW1UcmFjazsKK2NsYXNzIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbjsK
K2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjsKKworY2xhc3MgR1N0
cmVhbWVyTWVkaWFFbmRwb2ludCA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRlZDxHU3RyZWFt
ZXJNZWRpYUVuZHBvaW50LCBXVEY6OkRlc3RydWN0aW9uVGhyZWFkOjpNYWluPgorI2lmICFSRUxF
QVNFX0xPR19ESVNBQkxFRAorICAgICwgcHJpdmF0ZSBMb2dnZXJIZWxwZXIKKyNlbmRpZgorewor
cHVibGljOgorICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gY3JlYXRlKEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgcGVlckNvbm5lY3Rpb24pIHsgcmV0dXJuIGFk
b3B0UmVmKCpuZXcgR1N0cmVhbWVyTWVkaWFFbmRwb2ludChwZWVyQ29ubmVjdGlvbikpOyB9Cisg
ICAgdmlydHVhbCB+R1N0cmVhbWVyTWVkaWFFbmRwb2ludCgpOworCisgICAgYm9vbCBzZXRDb25m
aWd1cmF0aW9uKE1lZGlhRW5kcG9pbnRDb25maWd1cmF0aW9uJik7CisgICAgdm9pZCByZXN0YXJ0
SWNlKCk7CisKKyAgICB2b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9u
RGVzY3JpcHRpb24qKTsKKyAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uJik7CisgICAgdm9pZCBkb0NyZWF0ZU9mZmVyKGNvbnN0IFJUQ09m
ZmVyT3B0aW9ucyYpOworICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoKTsKKworICAgIHZvaWQgZ2V0
U3RhdHMoR3N0UGFkKiwgUmVmPERlZmVycmVkUHJvbWlzZT4mJik7CisKKyAgICBzdGQ6OnVuaXF1
ZV9wdHI8UlRDRGF0YUNoYW5uZWxIYW5kbGVyPiBjcmVhdGVEYXRhQ2hhbm5lbChjb25zdCBTdHJp
bmcmLCBjb25zdCBSVENEYXRhQ2hhbm5lbEluaXQmKTsKKyAgICB2b2lkIG9uRGF0YUNoYW5uZWwo
R3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsKKworICAgIHZvaWQgYWRkSWNlQ2FuZGlkYXRlKEdTdHJl
YW1lckljZUNhbmRpZGF0ZSYsIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6QWRkSWNlQ2FuZGlkYXRl
Q2FsbGJhY2smJik7CisKKyAgICB2b2lkIGNsb3NlKCk7CisgICAgdm9pZCBzdG9wKCk7CisgICAg
Ym9vbCBpc1N0b3BwZWQoKSBjb25zdCB7IHJldHVybiAhbV9waXBlbGluZTsgfQorCisgICAgdm9p
ZCBzdXNwZW5kKCk7CisgICAgdm9pZCByZXN1bWUoKTsKKworICAgIHZvaWQgZ2F0aGVyRGVjb2Rl
ckltcGxlbWVudGF0aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJik7CisgICAgYm9v
bCBpc05lZ290aWF0aW9uTmVlZGVkKCkgY29uc3QgeyByZXR1cm4gbV9pc05lZ290aWF0aW9uTmVl
ZGVkOyB9CisKKyAgICB2b2lkIGNvbmZpZ3VyZUFuZExpbmtTb3VyY2UoUmVhbHRpbWVPdXRnb2lu
Z01lZGlhU291cmNlR1N0cmVhbWVyJik7CisKKyAgICBib29sIGFkZFRyYWNrKEdTdHJlYW1lclJ0
cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJiwgY29uc3QgRml4ZWRWZWN0b3I8U3Ry
aW5nPiYpOworICAgIHZvaWQgcmVtb3ZlVHJhY2soR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYp
OworCisgICAgc3RydWN0IEJhY2tlbmRzIHsKKyAgICAgICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJl
YW1lclJ0cFNlbmRlckJhY2tlbmQ+IHNlbmRlckJhY2tlbmQ7CisgICAgICAgIHN0ZDo6dW5pcXVl
X3B0cjxHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ+IHJlY2VpdmVyQmFja2VuZDsKKyAgICAg
ICAgc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZD4gdHJhbnNj
ZWl2ZXJCYWNrZW5kOworICAgIH07CisgICAgc3RkOjpvcHRpb25hbDxCYWNrZW5kcz4gYWRkVHJh
bnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVy
SW5pdCYpOworICAgIHN0ZDo6b3B0aW9uYWw8QmFja2VuZHM+IGFkZFRyYW5zY2VpdmVyKE1lZGlh
U3RyZWFtVHJhY2smLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmKTsKKyAgICBzdGQ6OnVu
aXF1ZV9wdHI8R1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kPiB0cmFuc2NlaXZlckJhY2tl
bmRGcm9tU2VuZGVyKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmKTsKKworICAgIHZvaWQgc2V0
U2VuZGVyU291cmNlRnJvbVRyYWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0
cmVhbVRyYWNrJik7CisKKyAgICB2b2lkIGNvbGxlY3RUcmFuc2NlaXZlcnMoKTsKKworICAgIHZv
aWQgY3JlYXRlU2Vzc2lvbkRlc2NyaXB0aW9uU3VjY2VlZGVkKEdVbmlxdWVQdHI8R3N0V2ViUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uPiYmKTsKKyAgICB2b2lkIGNyZWF0ZVNlc3Npb25EZXNjcmlwdGlv
bkZhaWxlZChHVW5pcXVlUHRyPEdFcnJvcj4mJik7CisKKyAgICBHc3RFbGVtZW50KiBwaXBlbGlu
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fcGlwZWxpbmUuZ2V0KCk7IH0KKyAgICBib29sIGhhbmRsZU1l
c3NhZ2UoR3N0TWVzc2FnZSopOworCisjaWYgIVJFTEVBU0VfTE9HX0RJU0FCTEVECisgICAgdm9p
ZCBwcm9jZXNzU3RhdHMoY29uc3QgR1ZhbHVlKik7CisjZW5kaWYKKworcHJvdGVjdGVkOgorI2lm
ICFSRUxFQVNFX0xPR19ESVNBQkxFRAorICAgIHZvaWQgb25TdGF0c0RlbGl2ZXJlZChjb25zdCBH
c3RTdHJ1Y3R1cmUqKTsKKyNlbmRpZgorCitwcml2YXRlOgorICAgIEdTdHJlYW1lck1lZGlhRW5k
cG9pbnQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJik7CisKKyAgICBib29sIGluaXRp
YWxpemVQaXBlbGluZSgpOworICAgIHZvaWQgdGVhcmRvd25QaXBlbGluZSgpOworICAgIHZvaWQg
ZGlzcG9zZUVsZW1lbnRDaGFpbihHc3RFbGVtZW50Kik7CisKKyAgICB2b2lkIHNldERlc2NyaXB0
aW9uKGNvbnN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiosIGJvb2wgaXNMb2NhbCwgRnVuY3Rpb248
dm9pZCgpPiYmIHN1Y2Nlc3NDYWxsYmFjaywgRnVuY3Rpb248dm9pZChjb25zdCBHRXJyb3IqKT4m
JiBmYWlsdXJlQ2FsbGJhY2spOworICAgIHZvaWQgaW5pdGlhdGUoYm9vbCBpc0luaXRpYXRvciwg
R3N0U3RydWN0dXJlKik7CisKKyAgICB2b2lkIG9uTmVnb3RpYXRpb25OZWVkZWQoKTsKKyAgICB2
b2lkIG9uSWNlQ29ubmVjdGlvbkNoYW5nZSgpOworICAgIHZvaWQgb25JY2VHYXRoZXJpbmdDaGFu
Z2UoKTsKKyAgICB2b2lkIG9uSWNlQ2FuZGlkYXRlKGd1aW50IHNkcE1MaW5lSW5kZXgsIGdjaGFy
YXJyYXkgY2FuZGlkYXRlKTsKKworICAgIE1lZGlhU3RyZWFtJiBtZWRpYVN0cmVhbUZyb21SVENT
dHJlYW0oU3RyaW5nIGxhYmVsKTsKKworICAgIHZvaWQgYWRkUmVtb3RlU3RyZWFtKEdzdFBhZCop
OworICAgIHZvaWQgcmVtb3ZlUmVtb3RlU3RyZWFtKEdzdFBhZCopOworCisgICAgc3RkOjpvcHRp
b25hbDxCYWNrZW5kcz4gY3JlYXRlVHJhbnNjZWl2ZXJCYWNrZW5kcyhjb25zdCBTdHJpbmcmIGtp
bmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYsIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQ6OlNvdXJjZSYmKTsKKyAgICBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UgY3Jl
YXRlU291cmNlRm9yVHJhY2soTWVkaWFTdHJlYW1UcmFjayYpOworCisgICAgdm9pZCBzdG9yZVJl
bW90ZU1MaW5lSW5mbyhHc3RTRFBNZXNzYWdlKik7CisKKyAgICBHUmVmUHRyPEdzdFBhZD4gcmVx
dWVzdFBhZCh1bnNpZ25lZCBtbGluZUluZGV4LCBjb25zdCBHUmVmUHRyPEdzdENhcHM+Jik7CisK
KyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICB2b2lkIGdhdGhlclN0YXRzRm9yTG9nZ2lu
ZygpOworICAgIHZvaWQgc3RhcnRMb2dnaW5nU3RhdHMoKTsKKyAgICB2b2lkIHN0b3BMb2dnaW5n
U3RhdHMoKTsKKworICAgIGNvbnN0IExvZ2dlciYgbG9nZ2VyKCkgY29uc3QgZmluYWwgeyByZXR1
cm4gbV9sb2dnZXIuZ2V0KCk7IH0KKyAgICBjb25zdCB2b2lkKiBsb2dJZGVudGlmaWVyKCkgY29u
c3QgZmluYWwgeyByZXR1cm4gbV9sb2dJZGVudGlmaWVyOyB9CisgICAgY29uc3QgY2hhciogbG9n
Q2xhc3NOYW1lKCkgY29uc3QgZmluYWwgeyByZXR1cm4gIkdTdHJlYW1lck1lZGlhRW5kcG9pbnQi
OyB9CisgICAgV1RGTG9nQ2hhbm5lbCYgbG9nQ2hhbm5lbCgpIGNvbnN0IGZpbmFsOworCisgICAg
U2Vjb25kcyBzdGF0c0xvZ0ludGVydmFsKFNlY29uZHMpIGNvbnN0OworI2VuZGlmCisKKyAgICBI
YXNoTWFwPFN0cmluZywgUmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZT4gbV9tZWRpYUZvck1pZDsK
KyAgICBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlIG1lZGlhVHlwZUZvck1pZChjb25zdCBjaGFy
KiBtaWQpOworCisgICAgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBtX3BlZXJDb25u
ZWN0aW9uQmFja2VuZDsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fd2VicnRjQmluOworICAg
IEdSZWZQdHI8R3N0RWxlbWVudD4gbV9waXBlbGluZTsKKworICAgIEhhc2hNYXA8U3RyaW5nLCBS
ZWZQdHI8TWVkaWFTdHJlYW0+PiBtX3JlbW90ZVN0cmVhbXNCeUlkOworCisgICAgc3RydWN0IFBl
bmRpbmdNTGluZUluZm8geworICAgICAgICBHUmVmUHRyPEdzdENhcHM+IGNhcHM7CisgICAgICAg
IGJvb2wgaXNVc2VkOworICAgICAgICBWZWN0b3I8aW50PiBwYXlsb2FkVHlwZXM7CisgICAgfTsK
KyAgICBWZWN0b3I8UGVuZGluZ01MaW5lSW5mbz4gbV9yZW1vdGVNTGluZUluZm9zOworCisgICAg
UmVmPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yPiBtX3N0YXRzQ29sbGVjdG9yOworCisgICAgdW5z
aWduZWQgbV9yZXF1ZXN0UGFkQ291bnRlciB7IDAgfTsKKyAgICBpbnQgbV9wdENvdW50ZXIgeyA5
NiB9OworICAgIHVuc2lnbmVkIG1fbWxpbmVJbmRleCB7IDAgfTsKKyAgICBWZWN0b3I8UmVmPFJl
YWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcj4+IG1fc291cmNlczsKKyAgICB1bnNp
Z25lZCBtX3BlbmRpbmdJbmNvbWluZ1N0cmVhbXMgeyAwIH07CisgICAgYm9vbCBtX2lzSW5pdGlh
dG9yIHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNOZWdvdGlhdGlvbk5lZWRlZCB7IGZhbHNlIH07
CisKKyNpZiAhUkVMRUFTRV9MT0dfRElTQUJMRUQKKyAgICBUaW1lciBtX3N0YXRzTG9nVGltZXI7
CisgICAgU2Vjb25kcyBtX3N0YXRzRmlyc3REZWxpdmVyZWRUaW1lc3RhbXA7CisgICAgUmVmPGNv
bnN0IExvZ2dlcj4gbV9sb2dnZXI7CisgICAgY29uc3Qgdm9pZCogbV9sb2dJZGVudGlmaWVyOwor
I2VuZGlmCit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29u
bmVjdGlvbkJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjI1NjRlOWE0NjQ4MDhiYjA4Y2I0MDYzY2Fh
YzYxMjQwMmJkZmQ1YzIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVz
L21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuY3Bw
CkBAIC0wLDAgKzEsMzgxIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIyIElnYWxp
YSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJv
bG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJl
OyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhl
IHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBw
dWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVy
c2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJz
aW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhh
dCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhv
dXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2Vy
IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNo
b3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1Ymxp
YworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8g
dGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJl
ZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5j
bHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
LmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkRvY3VtZW50Lmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyQ29tbW9uLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyTWVkaWFF
bmRwb2ludC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIgorI2lu
Y2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJJY2VDYW5kaWRhdGUuaCIKKyNpbmNs
dWRlICJKU1JUQ1N0YXRzUmVwb3J0LmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZpZ3Vy
YXRpb24uaCIKKyNpbmNsdWRlICJOb3RJbXBsZW1lbnRlZC5oIgorI2luY2x1ZGUgIlJUQ0ljZUNh
bmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJUQ1BlZXJDb25uZWN0aW9uLmgiCisjaW5jbHVkZSAiUlRD
UnRwQ2FwYWJpbGl0aWVzLmgiCisjaW5jbHVkZSAiUlRDUnRwUmVjZWl2ZXIuaCIKKyNpbmNsdWRl
ICJSVENTZXNzaW9uRGVzY3JpcHRpb24uaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZUluY29taW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3Ry
ZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFBlZXJD
b25uZWN0aW9uQmFja2VuZD4gY3JlYXRlR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKFJU
Q1BlZXJDb25uZWN0aW9uJiBwZWVyQ29ubmVjdGlvbikKK3sKKyAgICBlbnN1cmVHU3RyZWFtZXJJ
bml0aWFsaXplZCgpOworICAgIGlmICghaXNHU3RyZWFtZXJQbHVnaW5BdmFpbGFibGUoIndlYnJ0
YyIpKSB7CisgICAgICAgIFdURkxvZ0Fsd2F5cygiR3N0V2ViUlRDIHBsdWdpbiBub3QgZm91bmQu
IE1ha2Ugc3VyZSB0byBpbnN0YWxsIGdzdC1wbHVnaW5zLWJhZCA+PSAxLjIwIHdpdGggdGhlIHdl
YnJ0YyBwbHVnaW4gZW5hYmxlZC4iKTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQor
ICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5k
PihwZWVyQ29ubmVjdGlvbik7Cit9CisKK0NyZWF0ZVBlZXJDb25uZWN0aW9uQmFja2VuZCBQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmNyZWF0ZSA9IGNyZWF0ZUdTdHJlYW1lclBlZXJDb25uZWN0aW9u
QmFja2VuZDsKKworc3RhdGljIFJUQ1J0cENhcGFiaWxpdGllcyBnc3RyZWFtZXJSdHBDYXBhdGli
bGl0aWVzKGNvbnN0IFN0cmluZyYga2luZCkKK3sKKyAgICBSVENSdHBDYXBhYmlsaXRpZXMgY2Fw
YWJpbGl0aWVzOworICAgIGNhcGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJo
dHRwOi8vd3d3LmlldGYub3JnL2lkL2RyYWZ0LWhvbG1lci1ybWNhdC10cmFuc3BvcnQtd2lkZS1j
Yy1leHRlbnNpb25zLTAxIiB9KTsKKyAgICBpZiAoa2luZCA9PSAiYXVkaW8iX3MpIHsKKyAgICAg
ICAgY2FwYWJpbGl0aWVzLmNvZGVjcy5yZXNlcnZlQ2FwYWNpdHkoNCk7CisgICAgICAgIGNhcGFi
aWxpdGllcy5jb2RlY3MudW5jaGVja2VkQXBwZW5kKHsgLm1pbWVUeXBlID0gImF1ZGlvL09QVVMi
LAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDQ4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxz
ID0gMiwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgICAgICBjYXBhYmls
aXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJhdWRpby9HNzIyIiwK
KyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0g
MSwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgICAgICBjYXBhYmlsaXRp
ZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJhdWRpby9QQ01BIiwKKyAg
ICAgICAgICAgIC5jbG9ja1JhdGUgPSA4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMSwK
KyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgICAgICBjYXBhYmlsaXRpZXMu
Y29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJhdWRpby9QQ01VIiwKKyAgICAg
ICAgICAgIC5jbG9ja1JhdGUgPSA4MDAwLAorICAgICAgICAgICAgLmNoYW5uZWxzID0gMSwKKyAg
ICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICIiIH0pOworICAgIH0gZWxzZSB7CisgICAgICAgIGNh
cGFiaWxpdGllcy5oZWFkZXJFeHRlbnNpb25zLmFwcGVuZCh7ICJ1cm46M2dwcDp2aWRlby1vcmll
bnRhdGlvbiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2RlY3MucmVzZXJ2ZUNhcGFjaXR5
KDQpOworICAgICAgICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1l
VHlwZSA9ICJ2aWRlby9WUDgiLAorICAgICAgICAgICAgLmNsb2NrUmF0ZSA9IDkwMDAwLAorICAg
ICAgICAgICAgLnNkcEZtdHBMaW5lID0gIiIgfSk7CisgICAgICAgIGNhcGFiaWxpdGllcy5jb2Rl
Y3MudW5jaGVja2VkQXBwZW5kKHsgLm1pbWVUeXBlID0gInZpZGVvL1ZQOSIsCisgICAgICAgICAg
ICAuY2xvY2tSYXRlID0gOTAwMDAsCisgICAgICAgICAgICAuc2RwRm10cExpbmUgPSAicHJvZmls
ZS1pZD0wIiB9KTsKKyAgICAgICAgY2FwYWJpbGl0aWVzLmNvZGVjcy51bmNoZWNrZWRBcHBlbmQo
eyAubWltZVR5cGUgPSAidmlkZW8vVlA5IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAw
MCwKKyAgICAgICAgICAgIC5zZHBGbXRwTGluZSA9ICJwcm9maWxlLWlkPTEiIH0pOworICAgICAg
ICBjYXBhYmlsaXRpZXMuY29kZWNzLnVuY2hlY2tlZEFwcGVuZCh7IC5taW1lVHlwZSA9ICJ2aWRl
by9IMjY0IiwKKyAgICAgICAgICAgIC5jbG9ja1JhdGUgPSA5MDAwMCwKKyAgICAgICAgICAgIC5z
ZHBGbXRwTGluZSA9ICJwYWNrZXRpemF0aW9uLW1vZGU9MTtwcm9maWxlLWxldmVsLWlkPTQyZTAx
ZiIgfSk7CisgICAgfQorICAgIHJldHVybiBjYXBhYmlsaXRpZXM7Cit9CisKK3N0ZDo6b3B0aW9u
YWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnJlY2VpdmVyQ2Fw
YWJpbGl0aWVzKFNjcmlwdEV4ZWN1dGlvbkNvbnRleHQmLCBjb25zdCBTdHJpbmcmIGtpbmQpCit7
CisgICAgcmV0dXJuIGdzdHJlYW1lclJ0cENhcGF0aWJsaXRpZXMoa2luZCk7Cit9CisKK3N0ZDo6
b3B0aW9uYWw8UlRDUnRwQ2FwYWJpbGl0aWVzPiBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNlbmRl
ckNhcGFiaWxpdGllcyhTY3JpcHRFeGVjdXRpb25Db250ZXh0JiwgY29uc3QgU3RyaW5nJiBraW5k
KQoreworICAgIHJldHVybiBnc3RyZWFtZXJSdHBDYXBhdGlibGl0aWVzKGtpbmQpOworfQorCitH
U3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFj
a2VuZChSVENQZWVyQ29ubmVjdGlvbiYgcGVlckNvbm5lY3Rpb24pCisgICAgOiBQZWVyQ29ubmVj
dGlvbkJhY2tlbmQocGVlckNvbm5lY3Rpb24pCisgICAgLCBtX2VuZHBvaW50KEdTdHJlYW1lck1l
ZGlhRW5kcG9pbnQ6OmNyZWF0ZSgqdGhpcykpCit7CisgICAgZGlzYWJsZUlDRUNhbmRpZGF0ZUZp
bHRlcmluZygpOworfQorCitHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6On5HU3RyZWFt
ZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQoKSA9IGRlZmF1bHQ7CisKK3ZvaWQgR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpzdXNwZW5kKCkKK3sKKyAgICBtX2VuZHBvaW50LT5zdXNwZW5k
KCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpyZXN1bWUoKQor
eworICAgIG1fZW5kcG9pbnQtPnJlc3VtZSgpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25u
ZWN0aW9uQmFja2VuZDo6cmVzdGFydEljZSgpCit7CisgICAgbV9lbmRwb2ludC0+cmVzdGFydElj
ZSgpOworfQorCitib29sIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6c2V0Q29uZmln
dXJhdGlvbihNZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYmIGNvbmZpZ3VyYXRpb24pCit7Cisg
ICAgcmV0dXJuIG1fZW5kcG9pbnQtPnNldENvbmZpZ3VyYXRpb24oY29uZmlndXJhdGlvbik7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpnZXRTdGF0cyhSZWY8RGVm
ZXJyZWRQcm9taXNlPiYmIHByb21pc2UpCit7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVs
bHB0ciwgV1RGTW92ZShwcm9taXNlKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgR1N0cmVhbWVyUnRw
U2VuZGVyQmFja2VuZCYgYmFja2VuZEZyb21SVFBTZW5kZXIoUlRDUnRwU2VuZGVyJiBzZW5kZXIp
Cit7CisgICAgQVNTRVJUKCFzZW5kZXIuaXNTdG9wcGVkKCkpOworICAgIHJldHVybiBzdGF0aWNf
Y2FzdDxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJj4oKnNlbmRlci5iYWNrZW5kKCkpOworfQor
Cit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMoUlRDUnRwU2Vu
ZGVyJiBzZW5kZXIsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYgcHJvbWlzZSkKK3sKKyAgICBpZiAo
IXNlbmRlci5iYWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMobnVsbHB0
ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBhdXRv
JiBiYWNrZW5kID0gYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKTsKKyAgICBHUmVmUHRyPEdz
dFBhZD4gcGFkOworICAgIGlmIChSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIq
IHNvdXJjZSA9IGJhY2tlbmQuYXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5w
YWQoKTsKKyAgICBlbHNlIGlmIChSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIq
IHNvdXJjZSA9IGJhY2tlbmQudmlkZW9Tb3VyY2UoKSkKKyAgICAgICAgcGFkID0gc291cmNlLT5w
YWQoKTsKKyAgICBtX2VuZHBvaW50LT5nZXRTdGF0cyhwYWQuZ2V0KCksIFdURk1vdmUocHJvbWlz
ZSkpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2V0U3RhdHMo
UlRDUnRwUmVjZWl2ZXImIHJlY2VpdmVyLCBSZWY8RGVmZXJyZWRQcm9taXNlPiYmIHByb21pc2Up
Cit7CisgICAgaWYgKCFyZWNlaXZlci5iYWNrZW5kKCkpIHsKKyAgICAgICAgbV9lbmRwb2ludC0+
Z2V0U3RhdHMobnVsbHB0ciwgV1RGTW92ZShwcm9taXNlKSk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBHc3RFbGVtZW50KiBiaW4gPSBudWxscHRyOworICAgIGF1dG8mIHNvdXJjZSA9
IHJlY2VpdmVyLnRyYWNrKCkucHJpdmF0ZVRyYWNrKCkuc291cmNlKCk7CisgICAgaWYgKHNvdXJj
ZS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkKKyAgICAgICAgYmluID0gc3RhdGljX2Nhc3Q8UmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyJj4oc291cmNlKS5iaW4oKTsKKyAgICBl
bHNlIGlmIChzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCkpCisgICAgICAgIGJpbiA9IHN0
YXRpY19jYXN0PFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciY+KHNvdXJjZSku
YmluKCk7CisgICAgZWxzZQorICAgICAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
CisgICAgYXV0byBzaW5rUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFk
KGJpbiwgInNpbmsiKSk7CisgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYoZ3N0X3BhZF9nZXRf
cGVlcihzaW5rUGFkLmdldCgpKSk7CisgICAgbV9lbmRwb2ludC0+Z2V0U3RhdHMoc3JjUGFkLmdl
dCgpLCBXVEZNb3ZlKHByb21pc2UpKTsKK30KKwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlv
bkJhY2tlbmQ6OmRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRp
b24qIGRlc2NyaXB0aW9uKQoreworICAgIG1fZW5kcG9pbnQtPmRvU2V0TG9jYWxEZXNjcmlwdGlv
bihkZXNjcmlwdGlvbik7CisgICAgbV9pc0xvY2FsRGVzY3JpcHRpb25TZXQgPSB0cnVlOworfQor
Cit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZG9TZXRSZW1vdGVEZXNjcmlw
dGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRpb24mIGRlc2NyaXB0aW9uKQoreworICAgIG1f
ZW5kcG9pbnQtPmRvU2V0UmVtb3RlRGVzY3JpcHRpb24oZGVzY3JpcHRpb24pOworICAgIG1faXNS
ZW1vdGVEZXNjcmlwdGlvblNldCA9IHRydWU7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5l
Y3Rpb25CYWNrZW5kOjpkb0NyZWF0ZU9mZmVyKFJUQ09mZmVyT3B0aW9ucyYmIG9wdGlvbnMpCit7
CisgICAgbV9lbmRwb2ludC0+ZG9DcmVhdGVPZmZlcihvcHRpb25zKTsKK30KKwordm9pZCBHU3Ry
ZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQ3JlYXRlQW5zd2VyKFJUQ0Fuc3dlck9wdGlv
bnMmJikKK3sKKyAgICBpZiAoIW1faXNSZW1vdGVEZXNjcmlwdGlvblNldCkgeworICAgICAgICBj
cmVhdGVBbnN3ZXJGYWlsZWQoRXhjZXB0aW9uIHsgSW52YWxpZFN0YXRlRXJyb3IsICJObyByZW1v
dGUgZGVzY3JpcHRpb24gc2V0IiB9KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBtX2Vu
ZHBvaW50LT5kb0NyZWF0ZUFuc3dlcigpOworfQorCit2b2lkIEdTdHJlYW1lclBlZXJDb25uZWN0
aW9uQmFja2VuZDo6Y2xvc2UoKQoreworICAgIG1fZW5kcG9pbnQtPmNsb3NlKCk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpkb1N0b3AoKQoreworICAgIG1fZW5k
cG9pbnQtPnN0b3AoKTsKKyAgICBtX3BlbmRpbmdSZWNlaXZlcnMuY2xlYXIoKTsKK30KKwordm9p
ZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmRvQWRkSWNlQ2FuZGlkYXRlKFJUQ0lj
ZUNhbmRpZGF0ZSYgY2FuZGlkYXRlLCBBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmIGNhbGxiYWNr
KQoreworICAgIHVuc2lnbmVkIHNkcE1MaW5lSW5kZXggPSBjYW5kaWRhdGUuc2RwTUxpbmVJbmRl
eCgpID8gY2FuZGlkYXRlLnNkcE1MaW5lSW5kZXgoKS52YWx1ZSgpIDogMDsKKyAgICBhdXRvIHJ0
Y0NhbmRpZGF0ZSA9IFdURjo6bWFrZVVuaXF1ZTxHU3RyZWFtZXJJY2VDYW5kaWRhdGU+KCpuZXcg
R1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsgc2RwTUxpbmVJbmRleCwgY2FuZGlkYXRlLmNhbmRpZGF0
ZSgpIH0pOworICAgIG1fZW5kcG9pbnQtPmFkZEljZUNhbmRpZGF0ZSgqcnRjQ2FuZGlkYXRlLCBX
VEZNb3ZlKGNhbGxiYWNrKSk7Cit9CisKK1JlZjxSVENSdHBSZWNlaXZlcj4gR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kOjpjcmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVh
bWVyUnRwUmVjZWl2ZXJCYWNrZW5kPiYmIGJhY2tlbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tLaW5k
LCBjb25zdCBTdHJpbmcmIHRyYWNrSWQpCit7CisgICAgYXV0byYgZG9jdW1lbnQgPSBkb3duY2Fz
dDxEb2N1bWVudD4oKm1fcGVlckNvbm5lY3Rpb24uc2NyaXB0RXhlY3V0aW9uQ29udGV4dCgpKTsK
KworICAgIGF1dG8gc291cmNlID0gYmFja2VuZC0+Y3JlYXRlU291cmNlKHRyYWNrS2luZCwgdHJh
Y2tJZCk7CisgICAgLy8gUmVtb3RlIHNvdXJjZSBpcyBpbml0aWFsbHkgbXV0ZWQgYW5kIHdpbGwg
YmUgdW5tdXRlZCB3aGVuIHJlY2VpdmluZyB0aGUgZmlyc3QgcGFja2V0LgorICAgIHNvdXJjZS0+
c2V0TXV0ZWQodHJ1ZSk7CisgICAgYXV0byB0cmFja0lEID0gc291cmNlLT5wZXJzaXN0ZW50SUQo
KTsKKyAgICBhdXRvIHJlbW90ZVRyYWNrUHJpdmF0ZSA9IE1lZGlhU3RyZWFtVHJhY2tQcml2YXRl
OjpjcmVhdGUoZG9jdW1lbnQubG9nZ2VyKCksIFdURk1vdmUoc291cmNlKSwgV1RGTW92ZSh0cmFj
a0lEKSk7CisgICAgYXV0byByZW1vdGVUcmFjayA9IE1lZGlhU3RyZWFtVHJhY2s6OmNyZWF0ZShk
b2N1bWVudCwgV1RGTW92ZShyZW1vdGVUcmFja1ByaXZhdGUpKTsKKworICAgIHJldHVybiBSVENS
dHBSZWNlaXZlcjo6Y3JlYXRlKCp0aGlzLCBXVEZNb3ZlKHJlbW90ZVRyYWNrKSwgV1RGTW92ZShi
YWNrZW5kKSk7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRsZXI+IEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Y3JlYXRlRGF0YUNoYW5uZWxIYW5kbGVyKGNv
bnN0IFN0cmluZyYgbGFiZWwsIGNvbnN0IFJUQ0RhdGFDaGFubmVsSW5pdCYgb3B0aW9ucykKK3sK
KyAgICByZXR1cm4gbV9lbmRwb2ludC0+Y3JlYXRlRGF0YUNoYW5uZWwobGFiZWwsIG9wdGlvbnMp
OworfQorCitzdGF0aWMgaW5saW5lIFJlZlB0cjxSVENSdHBTZW5kZXI+IGZpbmRFeGlzdGluZ1Nl
bmRlcihjb25zdCBWZWN0b3I8UmVmUHRyPFJUQ1J0cFRyYW5zY2VpdmVyPj4mIHRyYW5zY2VpdmVy
cywgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZCYgc2VuZGVyQmFja2VuZCkKK3sKKyAgICBBU1NF
UlQoc2VuZGVyQmFja2VuZC5ydGNTZW5kZXIoKSk7CisgICAgZm9yIChhdXRvJiB0cmFuc2NlaXZl
ciA6IHRyYW5zY2VpdmVycykgeworICAgICAgICBhdXRvJiBzZW5kZXIgPSB0cmFuc2NlaXZlci0+
c2VuZGVyKCk7CisgICAgICAgIGlmICghc2VuZGVyLmlzU3RvcHBlZCgpICYmIHNlbmRlckJhY2tl
bmQucnRjU2VuZGVyKCkgPT0gYmFja2VuZEZyb21SVFBTZW5kZXIoc2VuZGVyKS5ydGNTZW5kZXIo
KSkKKyAgICAgICAgICAgIHJldHVybiBSZWYoc2VuZGVyKTsKKyAgICB9CisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+PiBHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYWNrKE1lZGlhU3RyZWFtVHJhY2smIHRyYWNrLCBGaXhl
ZFZlY3RvcjxTdHJpbmc+JiYgbWVkaWFTdHJlYW1JZHMpCit7CisgICAgYXV0byBzZW5kZXJCYWNr
ZW5kID0gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+KCp0aGlzLCBu
dWxscHRyLCBudWxscHRyKTsKKyAgICBpZiAoIW1fZW5kcG9pbnQtPmFkZFRyYWNrKCpzZW5kZXJC
YWNrZW5kLCB0cmFjaywgbWVkaWFTdHJlYW1JZHMpKQorICAgICAgICByZXR1cm4gRXhjZXB0aW9u
IHsgVHlwZUVycm9yLCAiVW5hYmxlIHRvIGFkZCB0cmFjayJfcyB9OworCisgICAgaWYgKGF1dG8g
c2VuZGVyID0gZmluZEV4aXN0aW5nU2VuZGVyKG1fcGVlckNvbm5lY3Rpb24uY3VycmVudFRyYW5z
Y2VpdmVycygpLCAqc2VuZGVyQmFja2VuZCkpIHsKKyAgICAgICAgYmFja2VuZEZyb21SVFBTZW5k
ZXIoKnNlbmRlcikudGFrZVNvdXJjZSgqc2VuZGVyQmFja2VuZCk7CisgICAgICAgIHNlbmRlci0+
c2V0VHJhY2soUmVmKHRyYWNrKSk7CisgICAgICAgIHNlbmRlci0+c2V0TWVkaWFTdHJlYW1JZHMo
V1RGTW92ZShtZWRpYVN0cmVhbUlkcykpOworICAgICAgICByZXR1cm4gc2VuZGVyLnJlbGVhc2VO
b25OdWxsKCk7CisgICAgfQorCisgICAgYXV0byB0cmFuc2NlaXZlckJhY2tlbmQgPSBtX2VuZHBv
aW50LT50cmFuc2NlaXZlckJhY2tlbmRGcm9tU2VuZGVyKCpzZW5kZXJCYWNrZW5kKTsKKworICAg
IGF1dG8gc2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgUmVm
KHRyYWNrKSwgV1RGTW92ZShzZW5kZXJCYWNrZW5kKSk7CisgICAgc2VuZGVyLT5zZXRNZWRpYVN0
cmVhbUlkcyhXVEZNb3ZlKG1lZGlhU3RyZWFtSWRzKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNy
ZWF0ZVJlY2VpdmVyKHRyYW5zY2VpdmVyQmFja2VuZC0+Y3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCks
IHRyYWNrLmtpbmQoKSwgdHJhY2suaWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0
cFRyYW5zY2VpdmVyOjpjcmVhdGUoc2VuZGVyLmNvcHlSZWYoKSwgV1RGTW92ZShyZWNlaXZlciks
IFdURk1vdmUodHJhbnNjZWl2ZXJCYWNrZW5kKSk7CisgICAgbV9wZWVyQ29ubmVjdGlvbi5hZGRJ
bnRlcm5hbFRyYW5zY2VpdmVyKFdURk1vdmUodHJhbnNjZWl2ZXIpKTsKKyAgICByZXR1cm4gc2Vu
ZGVyOworfQorCit0ZW1wbGF0ZTx0eXBlbmFtZSBUPgorRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRy
YW5zY2VpdmVyPj4gR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRUcmFuc2NlaXZl
ckZyb21UcmFja09yS2luZChUJiYgdHJhY2tPcktpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVy
SW5pdCYgaW5pdCkKK3sKKyAgICBhdXRvIGJhY2tlbmRzID0gbV9lbmRwb2ludC0+YWRkVHJhbnNj
ZWl2ZXIodHJhY2tPcktpbmQsIGluaXQpOworICAgIGlmICghYmFja2VuZHMpCisgICAgICAgIHJl
dHVybiBFeGNlcHRpb24geyBJbnZhbGlkQWNjZXNzRXJyb3IsICJVbmFibGUgdG8gYWRkIHRyYW5z
Y2VpdmVyIl9zIH07CisKKyAgICBhdXRvIHNlbmRlciA9IFJUQ1J0cFNlbmRlcjo6Y3JlYXRlKG1f
cGVlckNvbm5lY3Rpb24sIFdURk1vdmUodHJhY2tPcktpbmQpLCBXVEZNb3ZlKGJhY2tlbmRzLT5z
ZW5kZXJCYWNrZW5kKSk7CisgICAgYXV0byByZWNlaXZlciA9IGNyZWF0ZVJlY2VpdmVyKFdURk1v
dmUoYmFja2VuZHMtPnJlY2VpdmVyQmFja2VuZCksIHNlbmRlci0+dHJhY2tLaW5kKCksIHNlbmRl
ci0+dHJhY2tJZCgpKTsKKyAgICBhdXRvIHRyYW5zY2VpdmVyID0gUlRDUnRwVHJhbnNjZWl2ZXI6
OmNyZWF0ZShXVEZNb3ZlKHNlbmRlciksIFdURk1vdmUocmVjZWl2ZXIpLCBXVEZNb3ZlKGJhY2tl
bmRzLT50cmFuc2NlaXZlckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVy
bmFsVHJhbnNjZWl2ZXIodHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNj
ZWl2ZXI7Cit9CisKK0V4Y2VwdGlvbk9yPFJlZjxSVENSdHBUcmFuc2NlaXZlcj4+IEdTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZDo6YWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiB0cmFj
a0tpbmQsIGNvbnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYgaW5pdCkKK3sKKyAgICByZXR1cm4g
YWRkVHJhbnNjZWl2ZXJGcm9tVHJhY2tPcktpbmQoU3RyaW5nIHsgdHJhY2tLaW5kIH0sIGluaXQp
OworfQorCitFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNjZWl2ZXI+PiBHU3RyZWFtZXJQZWVy
Q29ubmVjdGlvbkJhY2tlbmQ6OmFkZFRyYW5zY2VpdmVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrPiYm
IHRyYWNrLCBjb25zdCBSVENSdHBUcmFuc2NlaXZlckluaXQmIGluaXQpCit7CisgICAgcmV0dXJu
IGFkZFRyYW5zY2VpdmVyRnJvbVRyYWNrT3JLaW5kKFdURk1vdmUodHJhY2spLCBpbml0KTsKK30K
Kwordm9pZCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OnNldFNlbmRlclNvdXJjZUZy
b21UcmFjayhHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kJiBzZW5kZXIsIE1lZGlhU3RyZWFtVHJh
Y2smIHRyYWNrKQoreworICAgIG1fZW5kcG9pbnQtPnNldFNlbmRlclNvdXJjZUZyb21UcmFjayhz
ZW5kZXIsIHRyYWNrKTsKK30KKworc3RhdGljIGlubGluZSBHU3RyZWFtZXJSdHBUcmFuc2NlaXZl
ckJhY2tlbmQmIGJhY2tlbmRGcm9tUlRQVHJhbnNjZWl2ZXIoUlRDUnRwVHJhbnNjZWl2ZXImIHRy
YW5zY2VpdmVyKQoreworICAgIHJldHVybiBzdGF0aWNfY2FzdDxHU3RyZWFtZXJSdHBUcmFuc2Nl
aXZlckJhY2tlbmQmPigqdHJhbnNjZWl2ZXIuYmFja2VuZCgpKTsKK30KKworUlRDUnRwVHJhbnNj
ZWl2ZXIqIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6ZXhpc3RpbmdUcmFuc2NlaXZl
cihXVEY6OkZ1bmN0aW9uPGJvb2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJik+JiYg
bWF0Y2hpbmdGdW5jdGlvbikKK3sKKyAgICBmb3IgKGF1dG8mIHRyYW5zY2VpdmVyIDogbV9wZWVy
Q29ubmVjdGlvbi5jdXJyZW50VHJhbnNjZWl2ZXJzKCkpIHsKKyAgICAgICAgaWYgKG1hdGNoaW5n
RnVuY3Rpb24oYmFja2VuZEZyb21SVFBUcmFuc2NlaXZlcigqdHJhbnNjZWl2ZXIpKSkKKyAgICAg
ICAgICAgIHJldHVybiB0cmFuc2NlaXZlci5nZXQoKTsKKyAgICB9CisgICAgcmV0dXJuIG51bGxw
dHI7Cit9CisKK1JUQ1J0cFRyYW5zY2VpdmVyJiBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQ6Om5ld1JlbW90ZVRyYW5zY2VpdmVyKHN0ZDo6dW5pcXVlX3B0cjxHU3RyZWFtZXJSdHBUcmFu
c2NlaXZlckJhY2tlbmQ+JiYgdHJhbnNjZWl2ZXJCYWNrZW5kLCBSZWFsdGltZU1lZGlhU291cmNl
OjpUeXBlIHR5cGUpCit7CisgICAgYXV0byB0cmFja0tpbmQgPSB0eXBlID09IFJlYWx0aW1lTWVk
aWFTb3VyY2U6OlR5cGU6OkF1ZGlvID8gImF1ZGlvIl9zIDogInZpZGVvIl9zOworICAgIGF1dG8g
c2VuZGVyID0gUlRDUnRwU2VuZGVyOjpjcmVhdGUobV9wZWVyQ29ubmVjdGlvbiwgdHJhY2tLaW5k
LCB0cmFuc2NlaXZlckJhY2tlbmQtPmNyZWF0ZVNlbmRlckJhY2tlbmQoKnRoaXMsIG51bGxwdHIs
IG51bGxwdHIpKTsKKyAgICBhdXRvIHJlY2VpdmVyID0gY3JlYXRlUmVjZWl2ZXIodHJhbnNjZWl2
ZXJCYWNrZW5kLT5jcmVhdGVSZWNlaXZlckJhY2tlbmQoKSwgdHJhY2tLaW5kLCBzZW5kZXItPnRy
YWNrSWQoKSk7CisgICAgYXV0byB0cmFuc2NlaXZlciA9IFJUQ1J0cFRyYW5zY2VpdmVyOjpjcmVh
dGUoV1RGTW92ZShzZW5kZXIpLCBXVEZNb3ZlKHJlY2VpdmVyKSwgV1RGTW92ZSh0cmFuc2NlaXZl
ckJhY2tlbmQpKTsKKyAgICBtX3BlZXJDb25uZWN0aW9uLmFkZEludGVybmFsVHJhbnNjZWl2ZXIo
dHJhbnNjZWl2ZXIuY29weVJlZigpKTsKKyAgICByZXR1cm4gdHJhbnNjZWl2ZXIuZ2V0KCk7Cit9
CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjpjb2xsZWN0VHJhbnNjZWl2
ZXJzKCkKK3sKKyAgICBtX2VuZHBvaW50LT5jb2xsZWN0VHJhbnNjZWl2ZXJzKCk7Cit9CisKK3Zv
aWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjphZGRQZW5kaW5nVHJhY2tFdmVudChQ
ZW5kaW5nVHJhY2tFdmVudCYmIGV2ZW50KQoreworICAgIG1fcGVuZGluZ1RyYWNrRXZlbnRzLmFw
cGVuZChXVEZNb3ZlKGV2ZW50KSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25C
YWNrZW5kOjpkaXNwYXRjaFBlbmRpbmdUcmFja0V2ZW50cygpCit7CisgICAgYXV0byBldmVudHMg
PSBXVEZNb3ZlKG1fcGVuZGluZ1RyYWNrRXZlbnRzKTsKKyAgICBmb3IgKGF1dG8mIGV2ZW50IDog
ZXZlbnRzKQorICAgICAgICBkaXNwYXRjaFRyYWNrRXZlbnQoZXZlbnQpOworfQorCit2b2lkIEdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6cmVtb3ZlVHJhY2soUlRDUnRwU2VuZGVyJiBz
ZW5kZXIpCit7CisgICAgbV9lbmRwb2ludC0+cmVtb3ZlVHJhY2soYmFja2VuZEZyb21SVFBTZW5k
ZXIoc2VuZGVyKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kOjph
cHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoKQoreworICAgIGZvciAoYXV0byYg
dHJhbnNjZWl2ZXIgOiBtX3BlZXJDb25uZWN0aW9uLmN1cnJlbnRUcmFuc2NlaXZlcnMoKSkgewor
ICAgICAgICBpZiAoIXRyYW5zY2VpdmVyLT5zZW5kZXIoKS5pc1N0b3BwZWQoKSkgeworICAgICAg
ICAgICAgaWYgKGF1dG8qIHZpZGVvU291cmNlID0gYmFja2VuZEZyb21SVFBTZW5kZXIodHJhbnNj
ZWl2ZXItPnNlbmRlcigpKS52aWRlb1NvdXJjZSgpKQorICAgICAgICAgICAgICAgIHZpZGVvU291
cmNlLT5zZXRBcHBseVJvdGF0aW9uKHRydWUpOworICAgICAgICB9CisgICAgfQorfQorCit2b2lk
IEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDo6Z2F0aGVyRGVjb2RlckltcGxlbWVudGF0
aW9uTmFtZShGdW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJiBjYWxsYmFjaykKK3sKKyAgICBtX2Vu
ZHBvaW50LT5nYXRoZXJEZWNvZGVySW1wbGVtZW50YXRpb25OYW1lKFdURk1vdmUoY2FsbGJhY2sp
KTsKK30KKworYm9vbCBHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OmlzTmVnb3RpYXRp
b25OZWVkZWQodWludDMyX3QpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fZW5kcG9pbnQtPmlzTmVn
b3RpYXRpb25OZWVkZWQoKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYg
Ly8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQu
aCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clBlZXJDb25uZWN0aW9uQmFja2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUzODgzMzhjMDU4YTM3ODM3YTYw
NmY3ZGY2NDE4N2FlMWY5YTA3M2IKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQuaApAQCAtMCwwICsxLDEyNCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJ
Z2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIlBl
ZXJDb25uZWN0aW9uQmFja2VuZC5oIgorI2luY2x1ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIK
KyNpbmNsdWRlIDxnc3QvZ3N0Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBHU3RyZWFtZXJNZWRpYUVuZHBvaW50OworY2xhc3MgR1N0
cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOworY2xhc3MgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2Vu
ZDsKK2NsYXNzIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDsKK2NsYXNzIFJUQ1J0cFJl
Y2VpdmVyOworY2xhc3MgUlRDUnRwUmVjZWl2ZXJCYWNrZW5kOworY2xhc3MgUlRDU2Vzc2lvbkRl
c2NyaXB0aW9uOworY2xhc3MgUlRDU3RhdHNSZXBvcnQ7CitjbGFzcyBSZWFsdGltZUluY29taW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXI7CitjbGFzcyBSZWFsdGltZU1lZGlhU291cmNlR1N0cmVhbWVyOworY2xhc3MgUmVh
bHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyOworY2xhc3MgUmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyOworCitzdHJ1Y3QgR1N0cmVhbWVySWNlQ2FuZGlkYXRlIHsK
KyAgICBXVEZfTUFLRV9TVFJVQ1RfRkFTVF9BTExPQ0FURUQ7CisgICAgdW5zaWduZWQgc2RwTUxp
bmVJbmRleDsKKyAgICBTdHJpbmcgY2FuZGlkYXRlOworfTsKKworY2xhc3MgR1N0cmVhbWVyUGVl
ckNvbm5lY3Rpb25CYWNrZW5kIGZpbmFsIDogcHVibGljIFBlZXJDb25uZWN0aW9uQmFja2VuZCB7
CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgZXhwbGljaXQgR1N0
cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kKFJUQ1BlZXJDb25uZWN0aW9uJik7CisgICAgfkdT
dHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIHZvaWQgY2xv
c2UoKSBmaW5hbDsKKyAgICB2b2lkIGRvQ3JlYXRlT2ZmZXIoUlRDT2ZmZXJPcHRpb25zJiYpIGZp
bmFsOworICAgIHZvaWQgZG9DcmVhdGVBbnN3ZXIoUlRDQW5zd2VyT3B0aW9ucyYmKSBmaW5hbDsK
KyAgICB2b2lkIGRvU2V0TG9jYWxEZXNjcmlwdGlvbihjb25zdCBSVENTZXNzaW9uRGVzY3JpcHRp
b24qKSBmaW5hbDsKKyAgICB2b2lkIGRvU2V0UmVtb3RlRGVzY3JpcHRpb24oY29uc3QgUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uJikgZmluYWw7CisgICAgdm9pZCBkb0FkZEljZUNhbmRpZGF0ZShSVENJ
Y2VDYW5kaWRhdGUmLCBBZGRJY2VDYW5kaWRhdGVDYWxsYmFjayYmKSBmaW5hbDsKKyAgICB2b2lk
IGRvU3RvcCgpIGZpbmFsOworICAgIHN0ZDo6dW5pcXVlX3B0cjxSVENEYXRhQ2hhbm5lbEhhbmRs
ZXI+IGNyZWF0ZURhdGFDaGFubmVsSGFuZGxlcihjb25zdCBTdHJpbmcmLCBjb25zdCBSVENEYXRh
Q2hhbm5lbEluaXQmKSBmaW5hbDsKKyAgICB2b2lkIHJlc3RhcnRJY2UoKSBmaW5hbDsKKyAgICBi
b29sIHNldENvbmZpZ3VyYXRpb24oTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRpb24mJikgZmluYWw7
CisgICAgdm9pZCBnZXRTdGF0cyhSZWY8RGVmZXJyZWRQcm9taXNlPiYmKSBmaW5hbDsKKyAgICB2
b2lkIGdldFN0YXRzKFJUQ1J0cFNlbmRlciYsIFJlZjxEZWZlcnJlZFByb21pc2U+JiYpIGZpbmFs
OworICAgIHZvaWQgZ2V0U3RhdHMoUlRDUnRwUmVjZWl2ZXImLCBSZWY8RGVmZXJyZWRQcm9taXNl
PiYmKSBmaW5hbDsKKworICAgIHZvaWQgZW11bGF0ZVBsYXRmb3JtRXZlbnQoY29uc3QgU3RyaW5n
JikgZmluYWwgeyB9CisgICAgdm9pZCBhcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJj
ZXMoKSBmaW5hbDsKKworICAgIHZvaWQgZ2F0aGVyRGVjb2RlckltcGxlbWVudGF0aW9uTmFtZShG
dW5jdGlvbjx2b2lkKFN0cmluZyYmKT4mJikgZmluYWw7CisKKyAgICBib29sIGlzTmVnb3RpYXRp
b25OZWVkZWQodWludDMyX3QpIGNvbnN0IGZpbmFsOworCisgICAgc3RkOjpvcHRpb25hbDxib29s
PiBjYW5Ucmlja2xlSWNlQ2FuZGlkYXRlcygpIGNvbnN0IHsgcmV0dXJuIHRydWU7IH07CisKKyAg
ICBmcmllbmQgY2xhc3MgR1N0cmVhbWVyTWVkaWFFbmRwb2ludDsKKyAgICBmcmllbmQgY2xhc3Mg
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDsKKyAgICBSVENQZWVyQ29ubmVjdGlvbiYgY29ubmVj
dGlvbigpIHsgcmV0dXJuIG1fcGVlckNvbm5lY3Rpb247IH0KKworICAgIHZvaWQgZ2V0U3RhdHNT
dWNjZWVkZWQoY29uc3QgRGVmZXJyZWRQcm9taXNlJiwgUmVmPFJUQ1N0YXRzUmVwb3J0PiYmKTsK
KworICAgIEV4Y2VwdGlvbk9yPFJlZjxSVENSdHBTZW5kZXI+PiBhZGRUcmFjayhNZWRpYVN0cmVh
bVRyYWNrJiwgRml4ZWRWZWN0b3I8U3RyaW5nPiYmKSBmaW5hbDsKKyAgICB2b2lkIHJlbW92ZVRy
YWNrKFJUQ1J0cFNlbmRlciYpIGZpbmFsOworCisgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRy
YW5zY2VpdmVyPj4gYWRkVHJhbnNjZWl2ZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgUlRDUnRwVHJh
bnNjZWl2ZXJJbml0JikgZmluYWw7CisgICAgRXhjZXB0aW9uT3I8UmVmPFJUQ1J0cFRyYW5zY2Vp
dmVyPj4gYWRkVHJhbnNjZWl2ZXIoUmVmPE1lZGlhU3RyZWFtVHJhY2s+JiYsIGNvbnN0IFJUQ1J0
cFRyYW5zY2VpdmVySW5pdCYpIGZpbmFsOworICAgIHZvaWQgc2V0U2VuZGVyU291cmNlRnJvbVRy
YWNrKEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmLCBNZWRpYVN0cmVhbVRyYWNrJik7CisKKyAg
ICBSVENSdHBUcmFuc2NlaXZlciogZXhpc3RpbmdUcmFuc2NlaXZlcihXVEY6OkZ1bmN0aW9uPGJv
b2woR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kJik+JiYpOworICAgIFJUQ1J0cFRyYW5z
Y2VpdmVyJiBuZXdSZW1vdGVUcmFuc2NlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRw
VHJhbnNjZWl2ZXJCYWNrZW5kPiYmLCBSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlKTsKKworICAg
IHZvaWQgY29sbGVjdFRyYW5zY2VpdmVycygpIGZpbmFsOworCisgICAgdm9pZCBhZGRQZW5kaW5n
VHJhY2tFdmVudChQZW5kaW5nVHJhY2tFdmVudCYmKTsKKyAgICB2b2lkIGRpc3BhdGNoUGVuZGlu
Z1RyYWNrRXZlbnRzKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCBpc0xvY2FsRGVzY3JpcHRpb25T
ZXQoKSBjb25zdCBmaW5hbCB7IHJldHVybiBtX2lzTG9jYWxEZXNjcmlwdGlvblNldDsgfQorCisg
ICAgdGVtcGxhdGU8dHlwZW5hbWUgVD4KKyAgICBFeGNlcHRpb25PcjxSZWY8UlRDUnRwVHJhbnNj
ZWl2ZXI+PiBhZGRUcmFuc2NlaXZlckZyb21UcmFja09yS2luZChUJiYgdHJhY2tPcktpbmQsIGNv
bnN0IFJUQ1J0cFRyYW5zY2VpdmVySW5pdCYpOworCisgICAgUmVmPFJUQ1J0cFJlY2VpdmVyPiBj
cmVhdGVSZWNlaXZlcihzdGQ6OnVuaXF1ZV9wdHI8R1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5k
PiYmLCBjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29uc3QgU3RyaW5nJiB0cmFja0lkKTsKKwor
ICAgIHZvaWQgc3VzcGVuZCgpIGZpbmFsOworICAgIHZvaWQgcmVzdW1lKCkgZmluYWw7CisKKyAg
ICBSZWY8R1N0cmVhbWVyTWVkaWFFbmRwb2ludD4gbV9lbmRwb2ludDsKKyAgICBib29sIG1faXNM
b2NhbERlc2NyaXB0aW9uU2V0IHsgZmFsc2UgfTsKKyAgICBib29sIG1faXNSZW1vdGVEZXNjcmlw
dGlvblNldCB7IGZhbHNlIH07CisKKyAgICBWZWN0b3I8c3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1l
ckljZUNhbmRpZGF0ZT4+IG1fcGVuZGluZ0NhbmRpZGF0ZXM7CisgICAgVmVjdG9yPFJlZjxSVENS
dHBSZWNlaXZlcj4+IG1fcGVuZGluZ1JlY2VpdmVyczsKKyAgICBWZWN0b3I8UGVuZGluZ1RyYWNr
RXZlbnQ+IG1fcGVuZGluZ1RyYWNrRXZlbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29y
ZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZl
ckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45YzEzNDNiMTM5
ZjViYTkyZjQxNTVmM2QwNTA1MDVkMmNmYWZjZDc0Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNl
L1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAx
OS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChD
KSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBm
cmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkg
aXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAg
TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0
aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFu
eSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4g
dGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FS
UkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5U
QUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05V
CisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAq
CisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBH
ZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5v
dCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EK
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2
ZXJCYWNrZW5kLmgiCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJEdGxzVHJhbnNwb3J0QmFja2VuZC5oIgorI2luY2x1
ZGUgIkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1ZGUgIkdT
dHJlYW1lcldlYlJUQ1V0aWxzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNs
dWRlICJSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJS
ZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvZ2xp
Yi9HVW5pcXVlUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworUlRDUnRwUGFyYW1ldGVy
cyBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQ6OmdldFBhcmFtZXRlcnMoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPFJUQ1J0cENvbnRy
aWJ1dGluZ1NvdXJjZT4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpnZXRDb250cmlidXRp
bmdTb3VyY2VzKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7
IH07Cit9CisKK1ZlY3RvcjxSVENSdHBTeW5jaHJvbml6YXRpb25Tb3VyY2U+IEdTdHJlYW1lclJ0
cFJlY2VpdmVyQmFja2VuZDo6Z2V0U3luY2hyb25pemF0aW9uU291cmNlcygpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitSZWY8UmVhbHRpbWVN
ZWRpYVNvdXJjZT4gR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpjcmVhdGVTb3VyY2UoY29u
c3QgU3RyaW5nJiB0cmFja0tpbmQsIGNvbnN0IFN0cmluZyYgdHJhY2tJZCkKK3sKKyAgICBpZiAo
dHJhY2tLaW5kID09ICJ2aWRlbyJfcykKKyAgICAgICAgcmV0dXJuIFJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrSWQuaXNvbGF0ZWRDb3B5KCkpOworCisg
ICAgUkVMRUFTRV9BU1NFUlQodHJhY2tLaW5kID09ICJhdWRpbyJfcyk7CisgICAgcmV0dXJuIFJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6Y3JlYXRlKHRyYWNrSWQuaXNvbGF0
ZWRDb3B5KCkpOworfQorCitSZWY8UlRDUnRwVHJhbnNmb3JtQmFja2VuZD4gR1N0cmVhbWVyUnRw
UmVjZWl2ZXJCYWNrZW5kOjpydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkKK3sKKyAgICByZXR1cm4g
R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjpjcmVhdGUobV9ydGNSZWNlaXZl
cik7Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVh
bWVyUnRwUmVjZWl2ZXJCYWNrZW5kOjpkdGxzVHJhbnNwb3J0QmFja2VuZCgpCit7CisgICAgR1Jl
ZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PiB0cmFuc3BvcnQ7CisgICAgZ19vYmplY3RfZ2V0
KG1fcnRjUmVjZWl2ZXIuZ2V0KCksICJ0cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91dFB0cigpLCBu
dWxscHRyKTsKKyAgICByZXR1cm4gdHJhbnNwb3J0ID8gbWFrZVVuaXF1ZTxHU3RyZWFtZXJEdGxz
VHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KSA6IG51bGxwdHI7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUv
TW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5k
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMC4uZjYzYTc1OTdiOTgyNzY3NmRlMDMzYTE5YmM0M2ZjZGEyZjgxMzMwNgot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZC5oCkBAIC0wLDAgKzEsNTMgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxF
KFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdT
dHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFJlY2VpdmVyQmFja2VuZC5oIgorI2luY2x1ZGUg
IlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBH
U3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDUnRwUmVjZWl2ZXJC
YWNrZW5kIHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBleHBs
aWNpdCBHU3RyZWFtZXJSdHBSZWNlaXZlckJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNl
aXZlcj4mJiBydGNSZWNlaXZlcikKKyAgICAgICAgOiBtX3J0Y1JlY2VpdmVyKFdURk1vdmUocnRj
UmVjZWl2ZXIpKQorICAgIHsKKyAgICB9CisKKyAgICBHc3RXZWJSVENSVFBSZWNlaXZlciogcnRj
UmVjZWl2ZXIoKSB7IHJldHVybiBtX3J0Y1JlY2VpdmVyLmdldCgpOyB9CisgICAgUmVmPFJlYWx0
aW1lTWVkaWFTb3VyY2U+IGNyZWF0ZVNvdXJjZShjb25zdCBTdHJpbmcmIHRyYWNrS2luZCwgY29u
c3QgU3RyaW5nJiB0cmFja0lkKTsKKworcHJpdmF0ZToKKyAgICBSVENSdHBQYXJhbWV0ZXJzIGdl
dFBhcmFtZXRlcnMoKSBmaW5hbDsKKyAgICBWZWN0b3I8UlRDUnRwQ29udHJpYnV0aW5nU291cmNl
PiBnZXRDb250cmlidXRpbmdTb3VyY2VzKCkgY29uc3QgZmluYWw7CisgICAgVmVjdG9yPFJUQ1J0
cFN5bmNocm9uaXphdGlvblNvdXJjZT4gZ2V0U3luY2hyb25pemF0aW9uU291cmNlcygpIGNvbnN0
IGZpbmFsOworICAgIFJlZjxSVENSdHBUcmFuc2Zvcm1CYWNrZW5kPiBydGNSdHBUcmFuc2Zvcm1C
YWNrZW5kKCkgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNr
ZW5kPiBkdGxzVHJhbnNwb3J0QmFja2VuZCgpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJS
VENSVFBSZWNlaXZlcj4gbV9ydGNSZWNlaXZlcjsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5z
Zm9ybUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmUyOTA4MmZlY2E0ZDQ4YTgzNzAzNjk3OTE3Njdk
YmFkYWUzM2Y5MGIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQu
Y3BwCkBAIC0wLDAgKzEsNTkgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdh
bGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9y
bUJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsK
Kworc3RhdGljIGlubGluZSBHU3RyZWFtZXJSdHBSZWNlaXZlclRyYW5zZm9ybUJhY2tlbmQ6Ok1l
ZGlhVHlwZSBtZWRpYVR5cGVGcm9tUmVjZWl2ZXIoY29uc3QgR3N0V2ViUlRDUlRQUmVjZWl2ZXIm
KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJUQ1J0cFRyYW5zZm9ybUJh
Y2tlbmQ6Ok1lZGlhVHlwZTo6VmlkZW87Cit9CisKK0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNm
b3JtQmFja2VuZDo6R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKGNvbnN0IEdS
ZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+JiBydGNSZWNlaXZlcikKKyAgICA6IEdTdHJlYW1l
clJ0cFRyYW5zZm9ybUJhY2tlbmQobWVkaWFUeXBlRnJvbVJlY2VpdmVyKCpydGNSZWNlaXZlciks
IFNpZGU6OlJlY2VpdmVyKQorICAgICwgbV9ydGNSZWNlaXZlcihydGNSZWNlaXZlcikKK3sKK30K
KworR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwUmVj
ZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kKCkKK3sKK30KKwordm9pZCBHU3RyZWFtZXJSdHBSZWNlaXZl
clRyYW5zZm9ybUJhY2tlbmQ6OnNldFRyYW5zZm9ybWFibGVGcmFtZUNhbGxiYWNrKENhbGxiYWNr
JiYgY2FsbGJhY2spCit7CisgICAgc2V0SW5wdXRDYWxsYmFjayhXVEZNb3ZlKGNhbGxiYWNrKSk7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBHU3RyZWFtZXJSdHBSZWNlaXZlclRy
YW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlGcmFtZSgpCit7CisgICAgQVNTRVJUKG1lZGlhVHlw
ZSgpID09IE1lZGlhVHlwZTo6VmlkZW8pOworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30g
Ly8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0Uo
R1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZC5o
IGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
UnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODU4NjY3NmEwNmI3YWI5
ZWIwYjMyZTdkZjdjNjM0ODE1YThjOTc5ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFJlY2VpdmVyVHJh
bnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEsNDggQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQg
KEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlm
eSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAq
ICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBl
aXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikg
YW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBp
biB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBX
QVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hB
TlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBH
TlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgor
ICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYg
bm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUx
IEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVT
QQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUg
IkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJXZWJS
VENVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CisKK25hbWVzcGFjZSBXZWJDb3Jl
IHsKKworY2xhc3MgR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kIGZpbmFsIDog
cHVibGljIEdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQgeworcHVibGljOgorICAgIHN0YXRp
YyBSZWY8R1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kPiBjcmVhdGUoY29uc3Qg
R1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4mIHJlY2VpdmVyKSB7IHJldHVybiBhZG9wdFJl
ZigqbmV3IEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZChyZWNlaXZlcikpOyB9
CisgICAgfkdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZCgpOworCitwcml2YXRl
OgorICAgIGV4cGxpY2l0IEdTdHJlYW1lclJ0cFJlY2VpdmVyVHJhbnNmb3JtQmFja2VuZChjb25z
dCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiYpOworCisgICAgLy8gUlRDUnRwVHJhbnNm
b3JtQmFja2VuZAorICAgIHZvaWQgc2V0VHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soQ2FsbGJh
Y2smJikgZmluYWw7CisgICAgdm9pZCByZXF1ZXN0S2V5RnJhbWUoKSBmaW5hbDsKKworICAgIEdS
ZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IG1fcnRjUmVjZWl2ZXI7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLmQ5NmJjYmE5MjVmZTlkZmY3ZjZlNTZhNTUxNjUyZDg1ZTJiODMw
YzcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDE0MSBA
QAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRz
IHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5W
LgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3Ry
aWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBM
aWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZl
ZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFs
b25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJl
CisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwg
Qm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1lckRUTUZT
ZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyRHRsc1RyYW5zcG9ydEJhY2tlbmQu
aCIKKyNpbmNsdWRlICJHU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRl
ICJHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVh
bWVyV2ViUlRDVXRpbHMuaCIKKyNpbmNsdWRlICJKU0RPTVByb21pc2VEZWZlcnJlZC5oIgorI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUlRDUGVlckNvbm5lY3Rpb24uaCIK
KyNpbmNsdWRlICJSVENSdHBTZW5kZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVk
aW9Tb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3Vy
Y2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSdW50aW1lRW5hYmxlZEZlYXR1cmVzLmgiCisjaW5j
bHVkZSAiU2NyaXB0RXhlY3V0aW9uQ29udGV4dC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisK
K3RlbXBsYXRlPHR5cGVuYW1lIFNvdXJjZT4KK3N0YXRpYyBpbmxpbmUgYm9vbCB1cGRhdGVUcmFj
a1NvdXJjZShTb3VyY2UmIHNvdXJjZSwgTWVkaWFTdHJlYW1UcmFjayogdHJhY2spCit7CisgICAg
aWYgKCF0cmFjaykgeworICAgICAgICBzb3VyY2Uuc3RvcCgpOworICAgICAgICByZXR1cm4gdHJ1
ZTsKKyAgICB9CisgICAgcmV0dXJuIHNvdXJjZS5zZXRUcmFjayh0cmFjay0+cHJpdmF0ZVRyYWNr
KCkpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0YXJ0U291cmNlKCkK
K3sKKyAgICBzd2l0Y2hPbihtX3NvdXJjZSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICBzb3VyY2UtPnN0YXJ0KCk7CisgICAg
fSwgW10oUmVmPFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkg
eworICAgICAgICBzb3VyY2UtPnN0YXJ0KCk7CisgICAgfSwgW10oc3RkOjpudWxscHRyX3QmKSB7
CisgICAgfSk7Cit9CisKK1dBUk5fVU5VU0VEX1JFVFVSTiBHUmVmUHRyPEdzdEVsZW1lbnQ+IEdT
dHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnN0b3BTb3VyY2UoKQoreworICAgIHN3aXRjaE9uKG1f
c291cmNlLCBbXShSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiYgc291
cmNlKSB7CisgICAgICAgIHNvdXJjZS0+c3RvcCgpOworICAgICAgICByZXR1cm4gR1JlZlB0cjxH
c3RFbGVtZW50Pihzb3VyY2UtPmJpbigpKTsKKyAgICB9LCBbXShSZWY8UmVhbHRpbWVPdXRnb2lu
Z1ZpZGVvU291cmNlR1N0cmVhbWVyPiYgc291cmNlKSB7CisgICAgICAgIHNvdXJjZS0+c3RvcCgp
OworICAgICAgICByZXR1cm4gR1JlZlB0cjxHc3RFbGVtZW50Pihzb3VyY2UtPmJpbigpKTsKKyAg
ICB9LCBbXShzdGQ6Om51bGxwdHJfdCYpIHsKKyAgICAgICAgcmV0dXJuIEdSZWZQdHI8R3N0RWxl
bWVudD4obnVsbHB0cik7CisgICAgfSk7CisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK2Jvb2wg
R1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6cmVwbGFjZVRyYWNrKFJUQ1J0cFNlbmRlciYgc2Vu
ZGVyLCBNZWRpYVN0cmVhbVRyYWNrKiB0cmFjaykKK3sKKyAgICBpZiAoIXRyYWNrKSB7CisgICAg
ICAgIGF1dG8gc3RvcHBlZFNvdXJjZSA9IHN0b3BTb3VyY2UoKTsKKyAgICAgICAgcmV0dXJuIHRy
dWU7CisgICAgfQorCisgICAgaWYgKHNlbmRlci50cmFjaygpKSB7CisgICAgICAgIHN3aXRjaE9u
KG1fc291cmNlLCBbJl0oUmVmPFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcj4m
IHNvdXJjZSkgeworICAgICAgICAgICAgQVNTRVJUKHRyYWNrLT5zb3VyY2UoKS50eXBlKCkgPT0g
UmVhbHRpbWVNZWRpYVNvdXJjZTo6VHlwZTo6QXVkaW8pOworICAgICAgICAgICAgc291cmNlLT5z
dG9wKCk7CisgICAgICAgICAgICBzb3VyY2UtPnNldFNvdXJjZSh0cmFjay0+cHJpdmF0ZVRyYWNr
KCkpOworICAgICAgICAgICAgc291cmNlLT5zdGFydCgpOworICAgICAgICB9LCBbJl0oUmVmPFJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4mIHNvdXJjZSkgeworICAgICAgICAg
ICAgQVNTRVJUKHRyYWNrLT5zb3VyY2UoKS50eXBlKCkgPT0gUmVhbHRpbWVNZWRpYVNvdXJjZTo6
VHlwZTo6VmlkZW8pOworICAgICAgICAgICAgc291cmNlLT5zdG9wKCk7CisgICAgICAgICAgICBz
b3VyY2UtPnNldFNvdXJjZSh0cmFjay0+cHJpdmF0ZVRyYWNrKCkpOworICAgICAgICAgICAgc291
cmNlLT5zdGFydCgpOworICAgICAgICB9LCBbXShzdGQ6Om51bGxwdHJfdCYpIHsKKyAgICAgICAg
fSk7CisgICAgfQorCisgICAgbV9wZWVyQ29ubmVjdGlvbkJhY2tlbmQtPnNldFNlbmRlclNvdXJj
ZUZyb21UcmFjaygqdGhpcywgKnRyYWNrKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworUlRDUnRw
U2VuZFBhcmFtZXRlcnMgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6Z2V0UGFyYW1ldGVycygp
IGNvbnN0Cit7CisgICAgcmV0dXJuIHRvUlRDUnRwU2VuZFBhcmFtZXRlcnMobV9pbml0RGF0YS5n
ZXQoKSk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZDo6c2V0UGFyYW1ldGVy
cyhjb25zdCBSVENSdHBTZW5kUGFyYW1ldGVycyYsIERPTVByb21pc2VEZWZlcnJlZDx2b2lkPiYm
IHByb21pc2UpCit7CisgICAgaWYgKCFtX3J0Y1NlbmRlcikgeworICAgICAgICBwcm9taXNlLnJl
amVjdChOb3RTdXBwb3J0ZWRFcnJvcik7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHByb21pc2UucmVzb2x2ZSgpOworfQorCitzdGQ6OnVuaXF1
ZV9wdHI8UlRDRFRNRlNlbmRlckJhY2tlbmQ+IEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OmNy
ZWF0ZURUTUZCYWNrZW5kKCkKK3sKKyAgICByZXR1cm4gbWFrZVVuaXF1ZTxHU3RyZWFtZXJEVE1G
U2VuZGVyQmFja2VuZD4oKTsKK30KKworUmVmPFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQ+IEdTdHJl
YW1lclJ0cFNlbmRlckJhY2tlbmQ6OnJ0Y1J0cFRyYW5zZm9ybUJhY2tlbmQoKQoreworICAgIHJl
dHVybiBHU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kOjpjcmVhdGUobV9ydGNTZW5k
ZXIpOworfQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ6OnNldE1lZGlhU3RyZWFt
SWRzKGNvbnN0IEZpeGVkVmVjdG9yPFN0cmluZz4mKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3N0ZDo6dW5pcXVlX3B0cjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gR1N0cmVhbWVy
UnRwU2VuZGVyQmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQoKQoreworICAgIEdSZWZQdHI8
R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJhbnNwb3J0OworICAgIGdfb2JqZWN0X2dldChtX3J0
Y1NlbmRlci5nZXQoKSwgInRyYW5zcG9ydCIsICZ0cmFuc3BvcnQub3V0UHRyKCksIG51bGxwdHIp
OworICAgIHJldHVybiB0cmFuc3BvcnQgPyBtYWtlVW5pcXVlPEdTdHJlYW1lckR0bHNUcmFuc3Bv
cnRCYWNrZW5kPih0cmFuc3BvcnQpIDogbnVsbHB0cjsKK30KKworfSAvLyBuYW1lc3BhY2UgV2Vi
Q29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLjkzMzEwODFjZjdiMjI0YWI1NjU1Y2MzNjg5NTgxM2EwYjMyNjZlZmIKLS0tIC9kZXYvbnVs
bAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgKQEAgLTAsMCArMSwxMjEgQEAKKy8qCisgKiAgQ29weXJp
Z2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBD
b3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu
ZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3Vy
IG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0
cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRI
T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisg
KiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAg
U2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBk
ZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGli
cmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24s
IEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEw
LTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyUGVlckNvbm5lY3Rp
b25CYWNrZW5kLmgiCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUg
IlJUQ1J0cFNlbmRlckJhY2tlbmQuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZDsKKworY2xhc3MgR1N0
cmVhbWVyUnRwU2VuZGVyQmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENSdHBTZW5kZXJCYWNrZW5k
IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1YmxpYzoKKyAgICBHU3RyZWFtZXJS
dHBTZW5kZXJCYWNrZW5kKEdTdHJlYW1lclBlZXJDb25uZWN0aW9uQmFja2VuZCYgYmFja2VuZCwg
R1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+JiYgcnRjU2VuZGVyLCBHVW5pcXVlUHRyPEdzdFN0
cnVjdHVyZT4mJiBpbml0RGF0YSkKKyAgICAgICAgOiBtX3BlZXJDb25uZWN0aW9uQmFja2VuZChX
ZWFrUHRyIHsgJmJhY2tlbmQgfSkKKyAgICAgICAgLCBtX3J0Y1NlbmRlcihXVEZNb3ZlKHJ0Y1Nl
bmRlcikpCisgICAgICAgICwgbV9pbml0RGF0YShXVEZNb3ZlKGluaXREYXRhKSkKKyAgICB7Cisg
ICAgfQorCisgICAgdXNpbmcgU291cmNlID0gc3RkOjp2YXJpYW50PHN0ZDo6bnVsbHB0cl90LCBS
ZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyPiwgUmVmPFJlYWx0aW1lT3V0
Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4+OworICAgIEdTdHJlYW1lclJ0cFNlbmRlckJhY2tl
bmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiBiYWNrZW5kLCBHUmVmUHRyPEdzdFdl
YlJUQ1JUUFNlbmRlcj4mJiBydGNTZW5kZXIsIFNvdXJjZSYmIHNvdXJjZSwgR1VuaXF1ZVB0cjxH
c3RTdHJ1Y3R1cmU+JiYgaW5pdERhdGEpCisgICAgICAgIDogbV9wZWVyQ29ubmVjdGlvbkJhY2tl
bmQoV2Vha1B0ciB7ICZiYWNrZW5kIH0pCisgICAgICAgICwgbV9ydGNTZW5kZXIoV1RGTW92ZShy
dGNTZW5kZXIpKQorICAgICAgICAsIG1fc291cmNlKFdURk1vdmUoc291cmNlKSkKKyAgICAgICAg
LCBtX2luaXREYXRhKFdURk1vdmUoaW5pdERhdGEpKQorICAgIHsKKyAgICB9CisKKyAgICB2b2lk
IHNldFJUQ1NlbmRlcihHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mJiBydGNTZW5kZXIpIHsg
bV9ydGNTZW5kZXIgPSBXVEZNb3ZlKHJ0Y1NlbmRlcik7IH0KKyAgICBHc3RXZWJSVENSVFBTZW5k
ZXIqIHJ0Y1NlbmRlcigpIHsgcmV0dXJuIG1fcnRjU2VuZGVyLmdldCgpOyB9CisKKyAgICBSZWFs
dGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIqIGF1ZGlvU291cmNlKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNlLAorICAgICAgICAgICAgW10gKFJl
ZjxSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI+JiBzb3VyY2UpIHsgcmV0dXJu
IHNvdXJjZS5wdHIoKTsgfSwKKyAgICAgICAgICAgIFtdIChjb25zdCBhdXRvJikgLT4gUmVhbHRp
bWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyKiB7IHJldHVybiBudWxscHRyOyB9CisgICAg
ICAgICk7CisgICAgfQorCisgICAgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVy
KiB2aWRlb1NvdXJjZSgpCisgICAgeworICAgICAgICByZXR1cm4gV1RGOjpzd2l0Y2hPbihtX3Nv
dXJjZSwKKyAgICAgICAgICAgIFtdIChSZWY8UmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0
cmVhbWVyPiYgc291cmNlKSB7IHJldHVybiBzb3VyY2UucHRyKCk7IH0sCisgICAgICAgICAgICBb
XSAoY29uc3QgYXV0byYpIC0+IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lciog
eyByZXR1cm4gbnVsbHB0cjsgfQorICAgICAgICApOworICAgIH0KKworICAgIGJvb2wgaGFzU291
cmNlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBXVEY6OnN3aXRjaE9uKG1fc291cmNl
LAorICAgICAgICAgICAgW10gKGNvbnN0IHN0ZDo6bnVsbHB0cl90JikgeyByZXR1cm4gZmFsc2U7
IH0sCisgICAgICAgICAgICBbXSAoY29uc3QgYXV0byYpIHsgcmV0dXJuIHRydWU7IH0KKyAgICAg
ICAgKTsKKyAgICB9CisKKyAgICB2b2lkIGNsZWFyU291cmNlKCkKKyAgICB7CisgICAgICAgIEFT
U0VSVChoYXNTb3VyY2UoKSk7CisgICAgICAgIG1fc291cmNlID0gbnVsbHB0cjsKKyAgICB9CisK
KyAgICB2b2lkIHNldFNvdXJjZShTb3VyY2UmJiBzb3VyY2UpCisgICAgeworICAgICAgICBBU1NF
UlQoIWhhc1NvdXJjZSgpKTsKKyAgICAgICAgbV9zb3VyY2UgPSBXVEZNb3ZlKHNvdXJjZSk7Cisg
ICAgICAgIEFTU0VSVChoYXNTb3VyY2UoKSk7CisgICAgfQorCisgICAgdm9pZCB0YWtlU291cmNl
KEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQmIGJhY2tlbmQpCisgICAgeworICAgICAgICBBU1NF
UlQoYmFja2VuZC5oYXNTb3VyY2UoKSk7CisgICAgICAgIHNldFNvdXJjZShXVEZNb3ZlKGJhY2tl
bmQubV9zb3VyY2UpKTsKKyAgICB9CisKKyAgICBXQVJOX1VOVVNFRF9SRVRVUk4gR1JlZlB0cjxH
c3RFbGVtZW50PiBzdG9wU291cmNlKCk7CisKK3ByaXZhdGU6CisgICAgYm9vbCByZXBsYWNlVHJh
Y2soUlRDUnRwU2VuZGVyJiwgTWVkaWFTdHJlYW1UcmFjayopIGZpbmFsOworICAgIFJUQ1J0cFNl
bmRQYXJhbWV0ZXJzIGdldFBhcmFtZXRlcnMoKSBjb25zdCBmaW5hbDsKKyAgICB2b2lkIHNldFBh
cmFtZXRlcnMoY29uc3QgUlRDUnRwU2VuZFBhcmFtZXRlcnMmLCBET01Qcm9taXNlRGVmZXJyZWQ8
dm9pZD4mJikgZmluYWw7CisgICAgc3RkOjp1bmlxdWVfcHRyPFJUQ0RUTUZTZW5kZXJCYWNrZW5k
PiBjcmVhdGVEVE1GQmFja2VuZCgpIGZpbmFsOworICAgIFJlZjxSVENSdHBUcmFuc2Zvcm1CYWNr
ZW5kPiBydGNSdHBUcmFuc2Zvcm1CYWNrZW5kKCkgZmluYWw7CisgICAgdm9pZCBzZXRNZWRpYVN0
cmVhbUlkcyhjb25zdCBGaXhlZFZlY3RvcjxTdHJpbmc+JikgZmluYWw7CisgICAgc3RkOjp1bmlx
dWVfcHRyPFJUQ0R0bHNUcmFuc3BvcnRCYWNrZW5kPiBkdGxzVHJhbnNwb3J0QmFja2VuZCgpIGZp
bmFsOworCisgICAgdm9pZCBzdGFydFNvdXJjZSgpOworCisgICAgV2Vha1B0cjxHU3RyZWFtZXJQ
ZWVyQ29ubmVjdGlvbkJhY2tlbmQ+IG1fcGVlckNvbm5lY3Rpb25CYWNrZW5kOworICAgIEdSZWZQ
dHI8R3N0V2ViUlRDUlRQU2VuZGVyPiBtX3J0Y1NlbmRlcjsKKyAgICBTb3VyY2UgbV9zb3VyY2U7
CisgICAgR1VuaXF1ZVB0cjxHc3RTdHJ1Y3R1cmU+IG1faW5pdERhdGE7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNl
bmRlclRyYW5zZm9ybUJhY2tlbmQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmY2NmM0ZGVjMWJiMDNhMzI3N2Q5
MmIwNjU0MjljNjQwNzJiZTE0M2UKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1C
YWNrZW5kLmNwcApAQCAtMCwwICsxLDU5IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0y
MDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAy
MDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVl
IHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQg
dW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGlj
ZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVy
CisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBs
YXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhl
IGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFO
VFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJ
TElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisg
KiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisg
KiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwg
d3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFu
a2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAq
LworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwU2VuZGVyVHJh
bnNmb3JtQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQorCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgaW5saW5lIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6
Ok1lZGlhVHlwZSBtZWRpYVR5cGVGcm9tU2VuZGVyKGNvbnN0IEdzdFdlYlJUQ1JUUFNlbmRlciYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNmb3JtQmFj
a2VuZDo6TWVkaWFUeXBlOjpWaWRlbzsKK30KKworR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3Jt
QmFja2VuZDo6R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRy
PEdzdFdlYlJUQ1JUUFNlbmRlcj4mIHJ0Y1NlbmRlcikKKyAgICA6IEdTdHJlYW1lclJ0cFRyYW5z
Zm9ybUJhY2tlbmQobWVkaWFUeXBlRnJvbVNlbmRlcigqcnRjU2VuZGVyKSwgU2lkZTo6U2VuZGVy
KQorICAgICwgbV9ydGNTZW5kZXIocnRjU2VuZGVyKQoreworfQorCitHU3RyZWFtZXJSdHBTZW5k
ZXJUcmFuc2Zvcm1CYWNrZW5kOjp+R1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZCgp
Cit7Cit9CisKK3ZvaWQgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZDo6c2V0VHJh
bnNmb3JtYWJsZUZyYW1lQ2FsbGJhY2soQ2FsbGJhY2smJiBjYWxsYmFjaykKK3sKKyAgICBzZXRJ
bnB1dENhbGxiYWNrKFdURk1vdmUoY2FsbGJhY2spKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQ6OnJlcXVlc3RLZXlG
cmFtZSgpCit7CisgICAgQVNTRVJUKG1lZGlhVHlwZSgpID09IE1lZGlhVHlwZTo6VmlkZW8pOwor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1l
clJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQuaApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi42YjBhNTc2ZGIxMjY4M2U3NTg5Nzg0MmQxNGE3OTU4YTQ5MGU5MjZmCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEsNTEgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1JlZlB0
ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCIK
KyNpbmNsdWRlICJHU3RyZWFtZXJXZWJSVENVdGlscy5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJk
Lmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyU2VuZGVyVHJhbnNm
b3JtZXI7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFNlbmRlclRyYW5zZm9ybUJhY2tlbmQgZmluYWwg
OiBwdWJsaWMgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFT
VF9BTExPQ0FURUQ7CitwdWJsaWM6CisgICAgc3RhdGljIFJlZjxHU3RyZWFtZXJSdHBTZW5kZXJU
cmFuc2Zvcm1CYWNrZW5kPiBjcmVhdGUoY29uc3QgR1JlZlB0cjxHc3RXZWJSVENSVFBTZW5kZXI+
JiBzZW5kZXIpIHsgcmV0dXJuIGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyUnRwU2VuZGVyVHJhbnNm
b3JtQmFja2VuZChzZW5kZXIpKTsgfQorICAgIH5HU3RyZWFtZXJSdHBTZW5kZXJUcmFuc2Zvcm1C
YWNrZW5kKCk7CisKK3ByaXZhdGU6CisgICAgZXhwbGljaXQgR1N0cmVhbWVyUnRwU2VuZGVyVHJh
bnNmb3JtQmFja2VuZChjb25zdCBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4mKTsKKworICAg
IC8vIFJUQ1J0cFRyYW5zZm9ybUJhY2tlbmQKKyAgICB2b2lkIHNldFRyYW5zZm9ybWFibGVGcmFt
ZUNhbGxiYWNrKENhbGxiYWNrJiYpIGZpbmFsOworICAgIHZvaWQgcmVxdWVzdEtleUZyYW1lKCkg
ZmluYWw7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4gbV9ydGNTZW5kZXI7Cit9
OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykg
JiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVh
bWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4yNDQ5YWU4NWYxNmRkNDFi
MWEzOWEyMDgwYjQ2M2E1ODY3MDA4NDljCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJC
YWNrZW5kLmNwcApAQCAtMCwwICsxLDEyOSBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTkt
MjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykg
MjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJl
ZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0
IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExp
Y2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhl
cgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkg
bGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRo
ZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJB
TlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFC
SUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQor
ICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgor
ICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3Qs
IHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJh
bmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisg
Ki8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zY2Vp
dmVyQmFja2VuZC5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VC
UlRDKQorCisjaW5jbHVkZSAiR1N0cmVhbWVyUnRwUmVjZWl2ZXJCYWNrZW5kLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyUnRwU2VuZGVyQmFja2VuZC5oIgorI2luY2x1ZGUgIkdTdHJlYW1lcldlYlJU
Q1V0aWxzLmgiCisjaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKKyNpbmNsdWRlICJSVENSdHBD
b2RlY0NhcGFiaWxpdHkuaCIKKyNpbmNsdWRlIDx3dGYvZ2xpYi9HVW5pcXVlUHRyLmg+CisKK0dT
VF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7Cisj
ZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisKK25h
bWVzcGFjZSBXZWJDb3JlIHsKKworR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpHU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQoR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZl
cj4mJiBydGNUcmFuc2NlaXZlcikKKyAgICA6IG1fcnRjVHJhbnNjZWl2ZXIoV1RGTW92ZShydGNU
cmFuc2NlaXZlcikpCit7CisgICAgZ19vYmplY3Rfc2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCks
ICJkby1uYWNrIiwgVFJVRSwgImZlYy10eXBlIiwgR1NUX1dFQlJUQ19GRUNfVFlQRV9VTFBfUkVE
LCBudWxscHRyKTsKK30KKworc3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFJlY2VpdmVyQmFj
a2VuZD4gR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kOjpjcmVhdGVSZWNlaXZlckJhY2tl
bmQoKQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+IHJlY2VpdmVyOworICAg
IGdfb2JqZWN0X2dldChtX3J0Y1RyYW5zY2VpdmVyLmdldCgpLCAicmVjZWl2ZXIiLCAmcmVjZWl2
ZXIub3V0UHRyKCksIG51bGxwdHIpOworICAgIHJldHVybiBXVEY6Om1ha2VVbmlxdWU8R1N0cmVh
bWVyUnRwUmVjZWl2ZXJCYWNrZW5kPihXVEZNb3ZlKHJlY2VpdmVyKSk7Cit9CisKK3N0ZDo6dW5p
cXVlX3B0cjxHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZl
ckJhY2tlbmQ6OmNyZWF0ZVNlbmRlckJhY2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNr
ZW5kJiBiYWNrZW5kLCBHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kOjpTb3VyY2UmJiBzb3VyY2Us
IEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmIGluaXREYXRhKQoreworICAgIEdSZWZQdHI8R3N0
V2ViUlRDUlRQU2VuZGVyPiBzZW5kZXI7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2
ZXIuZ2V0KCksICJzZW5kZXIiLCAmc2VuZGVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1
cm4gV1RGOjptYWtlVW5pcXVlPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+KGJhY2tlbmQsIFdU
Rk1vdmUoc2VuZGVyKSwgV1RGTW92ZShzb3VyY2UpLCBXVEZNb3ZlKGluaXREYXRhKSk7Cit9CisK
K1JUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uIEdTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2Vu
ZDo6ZGlyZWN0aW9uKCkgY29uc3QKK3sKKyAgICBHc3RXZWJSVENSVFBUcmFuc2NlaXZlckRpcmVj
dGlvbiBnc3REaXJlY3Rpb247CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0
KCksICJkaXJlY3Rpb24iLCAmZ3N0RGlyZWN0aW9uLCBudWxscHRyKTsKKyAgICByZXR1cm4gdG9S
VENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbihnc3REaXJlY3Rpb24pOworfQorCitzdGQ6Om9wdGlv
bmFsPFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJh
Y2tlbmQ6OmN1cnJlbnREaXJlY3Rpb24oKSBjb25zdAoreworICAgIEdzdFdlYlJUQ1JUUFRyYW5z
Y2VpdmVyRGlyZWN0aW9uIGdzdERpcmVjdGlvbjsKKyAgICBnX29iamVjdF9nZXQobV9ydGNUcmFu
c2NlaXZlci5nZXQoKSwgImN1cnJlbnQtZGlyZWN0aW9uIiwgJmdzdERpcmVjdGlvbiwgbnVsbHB0
cik7CisgICAgaWYgKCFnc3REaXJlY3Rpb24pCisgICAgICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7
CisgICAgcmV0dXJuIHRvUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24oZ3N0RGlyZWN0aW9uKTsK
K30KKwordm9pZCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnNldERpcmVjdGlvbihS
VENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiBkaXJlY3Rpb24pCit7CisgICAgZ19vYmplY3Rfc2V0
KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJkaXJlY3Rpb24iLCBmcm9tUlRDUnRwVHJhbnNjZWl2
ZXJEaXJlY3Rpb24oZGlyZWN0aW9uKSwgbnVsbHB0cik7Cit9CisKK1N0cmluZyBHU3RyZWFtZXJS
dHBUcmFuc2NlaXZlckJhY2tlbmQ6Om1pZCgpCit7CisgICAgR1VuaXF1ZU91dFB0cjxjaGFyPiBt
aWQ7CisgICAgZ19vYmplY3RfZ2V0KG1fcnRjVHJhbnNjZWl2ZXIuZ2V0KCksICJtaWQiLCAmbWlk
Lm91dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gbWlkLmdldCgpOworfQorCit2b2lkIEdT
dHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZDo6c3RvcCgpCit7CisgICAgLy8gRklYTUU6IHdl
YnJ0Y2JpbiB0cmFuc2NlaXZlcnMgY2FuJ3QgYmUgc3RvcHBlZCB5ZXQuCisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKworYm9vbCBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQ6OnN0b3Bw
ZWQoKSBjb25zdAoreworICAgIC8vIEZJWE1FOiB3ZWJydGNiaW4gdHJhbnNjZWl2ZXJzIGNhbid0
IGJlIHN0b3BwZWQgeWV0LgorICAgIHJldHVybiBmYWxzZTsKK30KKworc3RhdGljIGlubGluZSBX
QVJOX1VOVVNFRF9SRVRVUk4gRXhjZXB0aW9uT3I8R3N0Q2Fwcyo+IHRvUnRwQ29kZWNDYXBhYmls
aXR5KGNvbnN0IFJUQ1J0cENvZGVjQ2FwYWJpbGl0eSYgY29kZWMpCit7CisgICAgaWYgKCFjb2Rl
Yy5taW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSAmJiAhY29kZWMubWltZVR5cGUuc3RhcnRz
V2l0aCgiYXVkaW8vIikpCisgICAgICAgIHJldHVybiBFeGNlcHRpb24geyBJbnZhbGlkTW9kaWZp
Y2F0aW9uRXJyb3IsICJSVENSdHBDb2RlY0NhcGFiaWxpdHkgYmFkIG1pbWVUeXBlIiB9OworCisg
ICAgYXV0byBjb21wb25lbnRzID0gY29kZWMubWltZVR5cGUuc3BsaXQoJy8nKTsKKyAgICBhdXRv
KiBjYXBzID0gZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXBwbGljYXRpb24veC1ydHAiLCAibWVkaWEi
LCBHX1RZUEVfU1RSSU5HLCBjb21wb25lbnRzWzBdLmFzY2lpKCkuZGF0YSgpLCAiZW5jb2Rpbmct
bmFtZSIsIEdfVFlQRV9TVFJJTkcsIGNvbXBvbmVudHNbMV0uYXNjaWkoKS5kYXRhKCksIG51bGxw
dHIpOworICAgIGdzdF9jYXBzX3NldF9zaW1wbGUoY2FwcywgImNsb2NrLXJhdGUiLCBHX1RZUEVf
SU5ULCBjb2RlYy5jbG9ja1JhdGUsIG51bGxwdHIpOworICAgIGlmIChjb2RlYy5jaGFubmVscykK
KyAgICAgICAgZ3N0X2NhcHNfc2V0X3NpbXBsZShjYXBzLCAiY2hhbm5lbHMiLCBHX1RZUEVfSU5U
LCAqY29kZWMuY2hhbm5lbHMsIG51bGxwdHIpOworCisgICAgaWYgKCFjb2RlYy5zZHBGbXRwTGlu
ZS5pc0VtcHR5KCkpCisgICAgICAgIEdTVF9GSVhNRSgiVW5wcm9jZXNzZWQgU0RQIEZtdHBMaW5l
OiAlcyIsIGNvZGVjLnNkcEZtdHBMaW5lLnV0ZjgoKS5kYXRhKCkpOworICAgIEdTVF9ERUJVRygi
Q29kZWMgY2FwYWJpbGl0eTogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMpOworICAgIHJldHVybiBj
YXBzOworfQorCitFeGNlcHRpb25Pcjx2b2lkPiBHU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tl
bmQ6OnNldENvZGVjUHJlZmVyZW5jZXMoY29uc3QgVmVjdG9yPFJUQ1J0cENvZGVjQ2FwYWJpbGl0
eT4mIGNvZGVjcykKK3sKKyAgICBhdXRvIGdzdENvZGVjcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19u
ZXdfZW1wdHkoKSk7CisgICAgZm9yIChhdXRvJiBjb2RlYyA6IGNvZGVjcykgeworICAgICAgICBh
dXRvIHJlc3VsdCA9IHRvUnRwQ29kZWNDYXBhYmlsaXR5KGNvZGVjKTsKKyAgICAgICAgaWYgKHJl
c3VsdC5oYXNFeGNlcHRpb24oKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQucmVsZWFzZUV4
Y2VwdGlvbigpOworICAgICAgICBnc3RfY2Fwc19hcHBlbmQoZ3N0Q29kZWNzLmdldCgpLCByZXN1
bHQucmVsZWFzZVJldHVyblZhbHVlKCkpOworICAgIH0KKyAgICBnX29iamVjdF9zZXQobV9ydGNU
cmFuc2NlaXZlci5nZXQoKSwgImNvZGVjLXByZWZlcmVuY2VzIiwgZ3N0Q29kZWNzLmdldCgpLCBu
dWxscHRyKTsKKyAgICByZXR1cm4geyB9OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisK
KyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zY2VpdmVyQmFja2VuZC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmRlYTc3MzA0YjA2ZTQxODBmYzcwNzE0N2Y1NDg4Njk4NTg4MTZhNjkKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9H
U3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuaApAQCAtMCwwICsxLDU3IEBACisvKgorICog
IENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICog
IFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBh
bmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdl
bmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdh
cmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAo
YXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBi
dXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50
eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVS
UE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9y
IG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0
aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3Vu
ZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1B
ICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIEVOQUJMRShXRUJf
UlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdSZWZQdHJHU3RyZWFt
ZXIuaCIKKyNpbmNsdWRlICJHU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmgiCisjaW5jbHVkZSAi
R1VuaXF1ZVB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1J0cFRyYW5zY2VpdmVyQmFja2Vu
ZC5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIEdTdHJlYW1lclJ0cFJlY2VpdmVy
QmFja2VuZDsKKworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kIGZpbmFsIDog
cHVibGljIFJUQ1J0cFRyYW5zY2VpdmVyQmFja2VuZCB7CisgICAgV1RGX01BS0VfRkFTVF9BTExP
Q0FURUQ7CitwdWJsaWM6CisgICAgR1N0cmVhbWVyUnRwVHJhbnNjZWl2ZXJCYWNrZW5kKEdSZWZQ
dHI8R3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXI+JiYpOworCisgICAgc3RkOjp1bmlxdWVfcHRyPEdT
dHJlYW1lclJ0cFJlY2VpdmVyQmFja2VuZD4gY3JlYXRlUmVjZWl2ZXJCYWNrZW5kKCk7CisgICAg
c3RkOjp1bmlxdWVfcHRyPEdTdHJlYW1lclJ0cFNlbmRlckJhY2tlbmQ+IGNyZWF0ZVNlbmRlckJh
Y2tlbmQoR1N0cmVhbWVyUGVlckNvbm5lY3Rpb25CYWNrZW5kJiwgR1N0cmVhbWVyUnRwU2VuZGVy
QmFja2VuZDo6U291cmNlJiYsIEdVbmlxdWVQdHI8R3N0U3RydWN0dXJlPiYmKTsKKworICAgIEdz
dFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiBydGNUcmFuc2NlaXZlcigpIHsgcmV0dXJuIG1fcnRjVHJh
bnNjZWl2ZXIuZ2V0KCk7IH0KKworcHJpdmF0ZToKKyAgICBSVENSdHBUcmFuc2NlaXZlckRpcmVj
dGlvbiBkaXJlY3Rpb24oKSBjb25zdCBmaW5hbDsKKyAgICBzdGQ6Om9wdGlvbmFsPFJUQ1J0cFRy
YW5zY2VpdmVyRGlyZWN0aW9uPiBjdXJyZW50RGlyZWN0aW9uKCkgY29uc3QgZmluYWw7CisgICAg
dm9pZCBzZXREaXJlY3Rpb24oUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb24pIGZpbmFsOworICAg
IFN0cmluZyBtaWQoKSBmaW5hbDsKKyAgICB2b2lkIHN0b3AoKSBmaW5hbDsKKyAgICBib29sIHN0
b3BwZWQoKSBjb25zdCBmaW5hbDsKKyAgICBFeGNlcHRpb25Pcjx2b2lkPiBzZXRDb2RlY1ByZWZl
cmVuY2VzKGNvbnN0IFZlY3RvcjxSVENSdHBDb2RlY0NhcGFiaWxpdHk+JikgZmluYWw7CisKKyAg
ICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPiBtX3J0Y1RyYW5zY2VpdmVyOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxl
cy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJS
dHBUcmFuc2Zvcm1CYWNrZW5kLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi45OWI0YTZhMzdlNWZiMDNjZTk4MzYz
MDZjYmVmY2RmZDlhNWEwZjUzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5j
cHAKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMjEtMjAyMiBJZ2Fs
aWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRy
b2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQu
aCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2lu
Y2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwordm9pZCBH
U3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpzZXRJbnB1dENhbGxiYWNrKENhbGxiYWNrJiYg
Y2FsbGJhY2spCit7CisgICAgTG9ja2VyIGhvbGRMb2NrIHsgbV9pbnB1dENhbGxiYWNrTG9jayB9
OworICAgIG1faW5wdXRDYWxsYmFjayA9IFdURk1vdmUoY2FsbGJhY2spOworfQorCit2b2lkIEdT
dHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQ6OmNsZWFyVHJhbnNmb3JtYWJsZUZyYW1lQ2FsbGJh
Y2soKQoreworICAgIHNldElucHV0Q2FsbGJhY2soeyB9KTsKK30KKwordm9pZCBHU3RyZWFtZXJS
dHBUcmFuc2Zvcm1CYWNrZW5kOjpwcm9jZXNzVHJhbnNmb3JtZWRGcmFtZShSVENSdHBUcmFuc2Zv
cm1hYmxlRnJhbWUmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuaCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tl
bmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi4xOTU0NDhmYzdkMzI2MThmNzhlN2U4MTVmYzE1ZTE0OTYxMWIyYjNi
Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZC5oCkBAIC0wLDAgKzEsNjAgQEAK
Ky8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4K
KyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmli
dXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
ZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vu
c2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMg
bGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVs
LAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVk
IHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj
ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQg
YSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9u
ZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQor
ICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJv
c3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5B
QkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUlRDUnRw
VHJhbnNmb3JtQmFja2VuZC5oIgorI2luY2x1ZGUgPHd0Zi9Mb2NrLmg+CisKK25hbWVzcGFjZSBX
ZWJDb3JlIHsKKworY2xhc3MgR1N0cmVhbWVyUnRwVHJhbnNmb3JtQmFja2VuZCA6IHB1YmxpYyBS
VENSdHBUcmFuc2Zvcm1CYWNrZW5kIHsKK3Byb3RlY3RlZDoKKyAgICBHU3RyZWFtZXJSdHBUcmFu
c2Zvcm1CYWNrZW5kKE1lZGlhVHlwZSwgU2lkZSk7CisgICAgdm9pZCBzZXRJbnB1dENhbGxiYWNr
KENhbGxiYWNrJiYpOworCitwcm90ZWN0ZWQ6CisgICAgTWVkaWFUeXBlIG1lZGlhVHlwZSgpIGNv
bnN0IGZpbmFsIHsgcmV0dXJuIG1fbWVkaWFUeXBlOyB9CisKK3ByaXZhdGU6CisgICAgLy8gUlRD
UnRwVHJhbnNmb3JtQmFja2VuZAorICAgIHZvaWQgcHJvY2Vzc1RyYW5zZm9ybWVkRnJhbWUoUlRD
UnRwVHJhbnNmb3JtYWJsZUZyYW1lJikgZmluYWw7CisgICAgdm9pZCBjbGVhclRyYW5zZm9ybWFi
bGVGcmFtZUNhbGxiYWNrKCkgZmluYWw7CisgICAgU2lkZSBzaWRlKCkgY29uc3QgZmluYWwgeyBy
ZXR1cm4gbV9zaWRlOyB9CisKKyAgICBNZWRpYVR5cGUgbV9tZWRpYVR5cGU7CisgICAgU2lkZSBt
X3NpZGU7CisKKyAgICBMb2NrIG1faW5wdXRDYWxsYmFja0xvY2s7CisgICAgQ2FsbGJhY2sgbV9p
bnB1dENhbGxiYWNrOworCisgICAgTG9jayBtX291dHB1dENhbGxiYWNrTG9jazsKK307CisKK2lu
bGluZSBHU3RyZWFtZXJSdHBUcmFuc2Zvcm1CYWNrZW5kOjpHU3RyZWFtZXJSdHBUcmFuc2Zvcm1C
YWNrZW5kKE1lZGlhVHlwZSBtZWRpYVR5cGUsIFNpZGUgc2lkZSkKKyAgICA6IG1fbWVkaWFUeXBl
KG1lZGlhVHlwZSkKKyAgICAsIG1fc2lkZShzaWRlKQoreworfQorCit9IC8vIG5hbWVzcGFjZSBX
ZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9N
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2Vu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmY3OTIxM2QxNzhkZGI1MDliZmEyY2JkNmY2YzZiYjgzOTBjMjQx
NAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmNwcApAQCAtMCwwICsxLDk3
IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAyMS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBC
LlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlz
dHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBH
TlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhl
IEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBM
aWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVz
ZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1w
bGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBB
UlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGlj
IExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2Vp
dmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdh
cmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29y
LCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgi
CisjaW5jbHVkZSAiR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQuaCIKKworI2lmIEVOQUJM
RShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIkdTdHJlYW1l
ckR0bHNUcmFuc3BvcnRCYWNrZW5kLmgiCisjaW5jbHVkZSAiR1N0cmVhbWVyV2ViUlRDVXRpbHMu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIFJUQ1NjdHBUcmFuc3Bv
cnRTdGF0ZSB0b1JUQ1NjdHBUcmFuc3BvcnRTdGF0ZShHc3RXZWJSVENTQ1RQVHJhbnNwb3J0U3Rh
dGUgc3RhdGUpCit7CisgICAgc3dpdGNoIChzdGF0ZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19T
Q1RQX1RSQU5TUE9SVF9TVEFURV9ORVc6CisgICAgY2FzZSBHU1RfV0VCUlRDX1NDVFBfVFJBTlNQ
T1JUX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgIHJldHVybiBSVENTY3RwVHJhbnNwb3J0U3Rh
dGU6OkNvbm5lY3Rpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NDVFBfVFJBTlNQT1JUX1NUQVRF
X0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ1NjdHBUcmFuc3BvcnRTdGF0ZTo6Q29ubmVj
dGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19TQ1RQX1RSQU5TUE9SVF9TVEFURV9DTE9TRUQ6Cisg
ICAgICAgIHJldHVybiBSVENTY3RwVHJhbnNwb3J0U3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAg
ICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworfQorCitHU3RyZWFtZXJTY3RwVHJhbnNw
b3J0QmFja2VuZDo6R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoR1JlZlB0cjxHc3RXZWJS
VENTQ1RQVHJhbnNwb3J0PiYmIHRyYW5zcG9ydCkKKyAgICA6IG1fYmFja2VuZChXVEZNb3ZlKHRy
YW5zcG9ydCkpCit7CisgICAgQVNTRVJUKG1fYmFja2VuZCk7Cit9CisKK0dTdHJlYW1lclNjdHBU
cmFuc3BvcnRCYWNrZW5kOjp+R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoKQoreworICAg
IHVucmVnaXN0ZXJDbGllbnQoKTsKK30KKworVW5pcXVlUmVmPFJUQ0R0bHNUcmFuc3BvcnRCYWNr
ZW5kPiBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZDo6ZHRsc1RyYW5zcG9ydEJhY2tlbmQo
KQoreworICAgIEdSZWZQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gdHJhbnNwb3J0OworICAg
IGdfb2JqZWN0X2dldChtX2JhY2tlbmQuZ2V0KCksICJ0cmFuc3BvcnQiLCAmdHJhbnNwb3J0Lm91
dFB0cigpLCBudWxscHRyKTsKKyAgICByZXR1cm4gbWFrZVVuaXF1ZVJlZjxHU3RyZWFtZXJEdGxz
VHJhbnNwb3J0QmFja2VuZD4odHJhbnNwb3J0KTsKK30KKwordm9pZCBHU3RyZWFtZXJTY3RwVHJh
bnNwb3J0QmFja2VuZDo6cmVnaXN0ZXJDbGllbnQoQ2xpZW50JiBjbGllbnQpCit7CisgICAgQVNT
RVJUKCFtX2NsaWVudCk7CisgICAgbV9jbGllbnQgPSBjbGllbnQ7CisgICAgZ19zaWduYWxfY29u
bmVjdF9zd2FwcGVkKG1fYmFja2VuZC5nZXQoKSwgIm5vdGlmeTo6c3RhdGUiLCBHX0NBTExCQUNL
KCtbXShHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCogYmFja2VuZCkgeworICAgICAgICBi
YWNrZW5kLT5zdGF0ZUNoYW5nZWQoKTsKKyAgICB9KSwgdGhpcyk7Cit9CisKK3ZvaWQgR1N0cmVh
bWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQ6OnVucmVnaXN0ZXJDbGllbnQoKQoreworICAgIGdfc2ln
bmFsX2hhbmRsZXJzX2Rpc2Nvbm5lY3RfYnlfZGF0YShtX2JhY2tlbmQuZ2V0KCksIHRoaXMpOwor
ICAgIG1fY2xpZW50LmNsZWFyKCk7Cit9CisKK3ZvaWQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJh
Y2tlbmQ6OnN0YXRlQ2hhbmdlZCgpCit7CisgICAgaWYgKCFtX2NsaWVudCkKKyAgICAgICAgcmV0
dXJuOworCisgICAgR3N0V2ViUlRDU0NUUFRyYW5zcG9ydFN0YXRlIHRyYW5zcG9ydFN0YXRlOwor
ICAgIGd1aW50MTYgbWF4Q2hhbm5lbHM7CisgICAgdWludDY0X3QgbWF4TWVzc2FnZVNpemU7Cisg
ICAgZ19vYmplY3RfZ2V0KG1fYmFja2VuZC5nZXQoKSwgInN0YXRlIiwgJnRyYW5zcG9ydFN0YXRl
LCAibWF4LW1lc3NhZ2Utc2l6ZSIsICZtYXhNZXNzYWdlU2l6ZSwgIm1heC1jaGFubmVscyIsICZt
YXhDaGFubmVscywgbnVsbHB0cik7CisgICAgY2FsbE9uTWFpblRocmVhZChbY2xpZW50ID0gbV9j
bGllbnQsIHRyYW5zcG9ydFN0YXRlLCBtYXhDaGFubmVscywgbWF4TWVzc2FnZVNpemVdIHsKKyAg
ICAgICAgaWYgKCFjbGllbnQpCisgICAgICAgICAgICByZXR1cm47CisKKyAgICAgICAgY2xpZW50
LT5vblN0YXRlQ2hhbmdlZCh0b1JUQ1NjdHBUcmFuc3BvcnRTdGF0ZSh0cmFuc3BvcnRTdGF0ZSks
IG1heE1lc3NhZ2VTaXplLCBtYXhDaGFubmVscyk7CisgICAgfSk7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRCYWNrZW5kLmggYi9Tb3VyY2UvV2ViQ29y
ZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFj
a2VuZC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjQ5ODBmYzg0OThjMDVjMzk3ZGNiMDZjNzBjNDMzMDhiMDI5MGYw
MjUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9HU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZC5oCkBAIC0wLDAgKzEsNTQg
QEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDIxLTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIu
Vi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0
cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdO
VSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUg
RnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExp
Y2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl
ZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBs
aWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBh
bG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2Fy
ZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3Is
IEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYg
RU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1Jl
ZlB0ckdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kLmgiCisj
aW5jbHVkZSA8d3RmL1dlYWtQdHIuaD4KKwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1NDVFBU
cmFuc3BvcnQgR3N0V2ViUlRDU0NUUFRyYW5zcG9ydDsKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitjbGFzcyBHU3RyZWFtZXJTY3RwVHJhbnNwb3J0QmFja2VuZCBmaW5hbCA6IHB1YmxpYyBSVENT
Y3RwVHJhbnNwb3J0QmFja2VuZCwgcHVibGljIENhbk1ha2VXZWFrUHRyPEdTdHJlYW1lclNjdHBU
cmFuc3BvcnRCYWNrZW5kPiB7CisgICAgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CitwdWJsaWM6
CisgICAgZXhwbGljaXQgR1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tlbmQoR1JlZlB0cjxHc3RX
ZWJSVENTQ1RQVHJhbnNwb3J0PiYmKTsKKyAgICB+R1N0cmVhbWVyU2N0cFRyYW5zcG9ydEJhY2tl
bmQoKTsKKworcHJvdGVjdGVkOgorICAgIHZvaWQgc3RhdGVDaGFuZ2VkKCk7CisKK3ByaXZhdGUg
OgorICAgIC8vIFJUQ1NjdHBUcmFuc3BvcnRCYWNrZW5kCisgICAgY29uc3Qgdm9pZCogYmFja2Vu
ZCgpIGNvbnN0IGZpbmFsIHsgcmV0dXJuIG1fYmFja2VuZC5nZXQoKTsgfQorICAgIFVuaXF1ZVJl
ZjxSVENEdGxzVHJhbnNwb3J0QmFja2VuZD4gZHRsc1RyYW5zcG9ydEJhY2tlbmQoKSBmaW5hbDsK
KyAgICB2b2lkIHJlZ2lzdGVyQ2xpZW50KENsaWVudCYpIGZpbmFsOworICAgIHZvaWQgdW5yZWdp
c3RlckNsaWVudCgpIGZpbmFsOworCisgICAgR1JlZlB0cjxHc3RXZWJSVENTQ1RQVHJhbnNwb3J0
PiBtX2JhY2tlbmQ7CisgICAgV2Vha1B0cjxDbGllbnQ+IG1fY2xpZW50OworfTsKKworfSAvLyBu
YW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RS
RUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IuY3BwIGIvU291cmNlL1dlYkNv
cmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3Iu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLmEwYTI4MmMyNGYxMzY3NGFlZjg5NTRlZWFhNjM1MDZhMGU1Y2RlZjEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dz
dHJlYW1lci9HU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5jcHAKQEAgLTAsMCArMSwyODYgQEAKKy8q
CisgKiAgQ29weXJpZ2h0IChDKSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNl
cnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRl
IGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBT
b2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2Us
IG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAor
ICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5z
ZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBj
b3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3
aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICog
IEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3Rv
biwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvci5oIgorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYm
IFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1VuaXF1ZVB0ckdTdHJlYW1lci5o
IgorI2luY2x1ZGUgIkpTRE9NTWFwTGlrZS5oIgorI2luY2x1ZGUgIkpTUlRDU3RhdHNSZXBvcnQu
aCIKKworI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93ZWJydGMv
d2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKworI2luY2x1ZGUgPHd0Zi9N
YWluVGhyZWFkLmg+CisjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KKworR1NUX0RFQlVH
X0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUg
R1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1N0YXRzKFJUQ1N0YXRzUmVw
b3J0OjpTdGF0cyYgc3RhdHMsIGNvbnN0IEdzdFN0cnVjdHVyZSogc3RydWN0dXJlKQoreworICAg
IGRvdWJsZSB0aW1lc3RhbXA7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2RvdWJsZShzdHJ1
Y3R1cmUsICJ0aW1lc3RhbXAiLCAmdGltZXN0YW1wKSkKKyAgICAgICAgc3RhdHMudGltZXN0YW1w
ID0gdGltZXN0YW1wOworICAgIHN0YXRzLmlkID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0
cnVjdHVyZSwgImlkIik7Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsUlRDUlRQU3RyZWFt
U3RhdHMoUlRDU3RhdHNSZXBvcnQ6OlJ0cFN0cmVhbVN0YXRzJiBzdGF0cywgY29uc3QgR3N0U3Ry
dWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZmlsbFJUQ1N0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUp
OworCisgICAgc3RhdHMudHJhbnNwb3J0SWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3Ry
dWN0dXJlLCAidHJhbnNwb3J0LWlkIik7CisgICAgc3RhdHMuY29kZWNJZCA9IGdzdF9zdHJ1Y3R1
cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJjb2RlYy1pZCIpOworCisgICAgdW5zaWduZWQgdmFs
dWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJlLCAic3NyYyIsICZ2
YWx1ZSkpCisgICAgICAgIHN0YXRzLnNzcmMgPSB2YWx1ZTsKKworICAgIC8vIEZJWE1FOgorICAg
IC8vIHN0YXRzLnRyYW5zcG9ydElkCisgICAgLy8gc3RhdHMuY29kZWNJZAorICAgIC8vIHN0YXRz
Lm1lZGlhVHlwZQorICAgIC8vIHN0YXRzLmtpbmQKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZp
bGxSVENDb2RlY1N0YXRzKFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzJiBzdGF0cywgY29uc3Qg
R3N0U3RydWN0dXJlKiBzdHJ1Y3R1cmUpCit7CisgICAgZmlsbFJUQ1N0YXRzKHN0YXRzLCBzdHJ1
Y3R1cmUpOworCisgICAgdW5zaWduZWQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0
X3VpbnQoc3RydWN0dXJlLCAicGF5bG9hZC10eXBlIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMu
cGF5bG9hZFR5cGUgPSB2YWx1ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChzdHJ1
Y3R1cmUsICJjbG9jay1yYXRlIiwgJnZhbHVlKSkKKyAgICAgICAgc3RhdHMuY2xvY2tSYXRlID0g
dmFsdWU7CisKKyAgICAvLyBGSVhNRToKKyAgICAvLyBzdGF0cy5taW1lVHlwZSA9CisgICAgLy8g
c3RhdHMuY2hhbm5lbHMgPQorICAgIC8vIHN0YXRzLnNkcEZtdHBMaW5lID0KKyAgICAvLyBzdGF0
cy5pbXBsZW1lbnRhdGlvbiA9Cit9CisKK3N0YXRpYyBpbmxpbmUgdm9pZCBmaWxsSW5ib3VuZFJU
UFN0cmVhbVN0YXRzKFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMmIHN0YXRz
LCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDUlRQU3RyZWFt
U3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICB1aW50NjRfdCB2YWx1ZTsKKyAgICBpZiAo
Z3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgInBhY2tldHMtcmVjZWl2ZWQiLCAm
dmFsdWUpKQorICAgICAgICBzdGF0cy5wYWNrZXRzUmVjZWl2ZWQgPSB2YWx1ZTsKKyAgICBpZiAo
Z3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgImJ5dGVzLXJlY2VpdmVkIiwgJnZh
bHVlKSkKKyAgICAgICAgc3RhdHMuYnl0ZXNSZWNlaXZlZCA9IHZhbHVlOworCisgICAgdW5zaWdu
ZWQgcGFja2V0c0xvc3Q7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X3VpbnQoc3RydWN0dXJl
LCAicGFja2V0cy1sb3N0IiwgJnBhY2tldHNMb3N0KSkKKyAgICAgICAgc3RhdHMucGFja2V0c0xv
c3QgPSBwYWNrZXRzTG9zdDsKKworICAgIGRvdWJsZSBqaXR0ZXI7CisgICAgaWYgKGdzdF9zdHJ1
Y3R1cmVfZ2V0X2RvdWJsZShzdHJ1Y3R1cmUsICJqaXR0ZXIiLCAmaml0dGVyKSkKKyAgICAgICAg
c3RhdHMuaml0dGVyID0gaml0dGVyOworCisgICAgLy8gRklYTUU6CisgICAgLy8gc3RhdHMuZnJh
Y3Rpb25Mb3N0ID0KKyAgICAvLyBzdGF0cy5wYWNrZXRzRGlzY2FyZGVkID0KKyAgICAvLyBzdGF0
cy5wYWNrZXRzUmVwYWlyZWQgPQorICAgIC8vIHN0YXRzLmJ1cnN0UGFja2V0c0xvc3QgPQorICAg
IC8vIHN0YXRzLmJ1cnN0UGFja2V0c0Rpc2NhcmRlZCA9CisgICAgLy8gc3RhdHMuYnVyc3RMb3Nz
Q291bnQgPQorICAgIC8vIHN0YXRzLmJ1cnN0RGlzY2FyZENvdW50ID0KKyAgICAvLyBzdGF0cy5i
dXJzdExvc3NSYXRlID0KKyAgICAvLyBzdGF0cy5idXJzdERpc2NhcmRSYXRlID0KKyAgICAvLyBz
dGF0cy5nYXBMb3NzUmF0ZSA9CisgICAgLy8gc3RhdHMuZ2FwRGlzY2FyZFJhdGUgPQorICAgIC8v
IHN0YXRzLmZyYW1lc0RlY29kZWQgPQorfQorCitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbE91dGJv
dW5kUlRQU3RyZWFtU3RhdHMoUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMm
IHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDUlRQ
U3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICB1aW50NjRfdCB2YWx1ZTsKKyAg
ICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHN0cnVjdHVyZSwgInBhY2tldHMtc2VudCIs
ICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLnBhY2tldHNTZW50ID0gdmFsdWU7CisgICAgaWYgKGdz
dF9zdHJ1Y3R1cmVfZ2V0X3VpbnQ2NChzdHJ1Y3R1cmUsICJieXRlcy1zZW50IiwgJnZhbHVlKSkK
KyAgICAgICAgc3RhdHMuYnl0ZXNTZW50ID0gdmFsdWU7CisKKyAgICAvLyBGSVhNRQorICAgIC8v
IHN0YXRzLnRhcmdldEJpdHJhdGUgPQorICAgIC8vIHN0YXRzLmZyYW1lc0VuY29kZWQgPQorfQor
CitzdGF0aWMgaW5saW5lIHZvaWQgZmlsbFJUQ1BlZXJDb25uZWN0aW9uU3RhdHMoUlRDU3RhdHNS
ZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHMmIHN0YXRzLCBjb25zdCBHc3RTdHJ1Y3R1cmUqIHN0
cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisKKyAgICBp
bnQgdmFsdWU7CisgICAgaWYgKGdzdF9zdHJ1Y3R1cmVfZ2V0X2ludChzdHJ1Y3R1cmUsICJkYXRh
LWNoYW5uZWxzLW9wZW5lZCIsICZ2YWx1ZSkpCisgICAgICAgIHN0YXRzLmRhdGFDaGFubmVsc09w
ZW5lZCA9IHZhbHVlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAi
ZGF0YS1jaGFubmVscy1jbG9zZWQiLCAmdmFsdWUpKQorICAgICAgICBzdGF0cy5kYXRhQ2hhbm5l
bHNDbG9zZWQgPSB2YWx1ZTsKK30KKworc3RhdGljIGlubGluZSB2b2lkIGZpbGxSVENUcmFuc3Bv
cnRTdGF0cyhSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHMmIHN0YXRzLCBjb25zdCBHc3RT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSkKK3sKKyAgICBmaWxsUlRDU3RhdHMoc3RhdHMsIHN0cnVjdHVy
ZSk7CisKKyAgICAvLyBGSVhNRQorICAgIC8vIHN0YXRzLmJ5dGVzU2VudCA9CisgICAgLy8gc3Rh
dHMuYnl0ZXNSZWNlaXZlZCA9CisgICAgLy8gc3RhdHMucnRjcFRyYW5zcG9ydFN0YXRzSWQgPQor
ICAgIC8vIHN0YXRzLnNlbGVjdGVkQ2FuZGlkYXRlUGFpcklkID0KKyAgICAvLyBzdGF0cy5sb2Nh
bENlcnRpZmljYXRlSWQgPQorICAgIC8vIHN0YXRzLnJlbW90ZUNlcnRpZmljYXRlSWQgPQorICAg
IC8vIHN0YXRzLmR0bHNTdGF0ZSA9CisgICAgLy8gc3RhdHMudGxzVmVyc2lvbiA9CisgICAgLy8g
c3RhdHMuZHRsc0NpcGhlciA9CisgICAgLy8gc3RhdHMuc3J0cENpcGhlciA9Cit9CisKK3N0YXRp
YyBnYm9vbGVhbiBmaWxsUmVwb3J0Q2FsbGJhY2soR1F1YXJrLCBjb25zdCBHVmFsdWUqIHZhbHVl
LCBncG9pbnRlciB1c2VyRGF0YSkKK3sKKyAgICBpZiAoIUdTVF9WQUxVRV9IT0xEU19TVFJVQ1RV
UkUodmFsdWUpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIGNvbnN0IEdzdFN0cnVjdHVy
ZSogc3RydWN0dXJlID0gZ3N0X3ZhbHVlX2dldF9zdHJ1Y3R1cmUodmFsdWUpOworICAgIEdzdFdl
YlJUQ1N0YXRzVHlwZSBzdGF0c1R5cGU7CisgICAgaWYgKCFnc3Rfc3RydWN0dXJlX2dldChzdHJ1
Y3R1cmUsICJ0eXBlIiwgR1NUX1RZUEVfV0VCUlRDX1NUQVRTX1RZUEUsICZzdGF0c1R5cGUsIG51
bGxwdHIpKQorICAgICAgICByZXR1cm4gVFJVRTsKKworICAgIERPTU1hcEFkYXB0ZXImIHJlcG9y
dCA9ICpyZWludGVycHJldF9jYXN0PERPTU1hcEFkYXB0ZXIqPih1c2VyRGF0YSk7CisKKyAgICBz
d2l0Y2ggKHN0YXRzVHlwZSkgeworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19DT0RFQzogewor
ICAgICAgICBSVENTdGF0c1JlcG9ydDo6Q29kZWNTdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJU
Q0NvZGVjU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5zZXQ8SURMRE9N
U3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpDb2RlY1N0YXRzPj4oc3RhdHMu
aWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2UgR1NU
X1dFQlJUQ19TVEFUU19JTkJPVU5EX1JUUDogeworICAgICAgICBSVENTdGF0c1JlcG9ydDo6SW5i
b3VuZFJ0cFN0cmVhbVN0YXRzIHN0YXRzOworICAgICAgICBmaWxsSW5ib3VuZFJUUFN0cmVhbVN0
YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywg
SURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6SW5ib3VuZFJ0cFN0cmVhbVN0YXRzPj4oc3Rh
dHMuaWQsIFdURk1vdmUoc3RhdHMpKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIGNhc2Ug
R1NUX1dFQlJUQ19TVEFUU19PVVRCT1VORF9SVFA6IHsKKyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6
Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxPdXRib3VuZFJUUFN0
cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0
cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0
cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAg
ICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfUkVNT1RFX0lOQk9VTkRfUlRQOiB7CisgICAgICAgIFJU
Q1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxJ
bmJvdW5kUlRQU3RyZWFtU3RhdHMoc3RhdHMsIHN0cnVjdHVyZSk7CisgICAgICAgIHJlcG9ydC5z
ZXQ8SURMRE9NU3RyaW5nLCBJRExEaWN0aW9uYXJ5PFJUQ1N0YXRzUmVwb3J0OjpJbmJvdW5kUnRw
U3RyZWFtU3RhdHM+PihzdGF0cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsK
KyAgICB9CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX1JFTU9URV9PVVRCT1VORF9SVFA6IHsK
KyAgICAgICAgUlRDU3RhdHNSZXBvcnQ6Ok91dGJvdW5kUnRwU3RyZWFtU3RhdHMgc3RhdHM7Cisg
ICAgICAgIGZpbGxPdXRib3VuZFJUUFN0cmVhbVN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAg
ICAgICByZXBvcnQuc2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9y
dDo6T3V0Ym91bmRSdHBTdHJlYW1TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7Cisg
ICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfQ1NSQzoKKyAg
ICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0YXRzOiBjc3JjIik7CisgICAgICAgIGJyZWFr
OworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19QRUVSX0NPTk5FQ1RJT046IHsKKyAgICAgICAg
UlRDU3RhdHNSZXBvcnQ6OlBlZXJDb25uZWN0aW9uU3RhdHMgc3RhdHM7CisgICAgICAgIGZpbGxS
VENQZWVyQ29ubmVjdGlvblN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQu
c2V0PElETERPTVN0cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6UGVlckNvbm5l
Y3Rpb25TdGF0cz4+KHN0YXRzLmlkLCBXVEZNb3ZlKHN0YXRzKSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfVFJBTlNQT1JUOiB7CisgICAgICAgIFJU
Q1N0YXRzUmVwb3J0OjpUcmFuc3BvcnRTdGF0cyBzdGF0czsKKyAgICAgICAgZmlsbFJUQ1RyYW5z
cG9ydFN0YXRzKHN0YXRzLCBzdHJ1Y3R1cmUpOworICAgICAgICByZXBvcnQuc2V0PElETERPTVN0
cmluZywgSURMRGljdGlvbmFyeTxSVENTdGF0c1JlcG9ydDo6VHJhbnNwb3J0U3RhdHM+PihzdGF0
cy5pZCwgV1RGTW92ZShzdGF0cykpOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2FzZSBH
U1RfV0VCUlRDX1NUQVRTX1NUUkVBTToKKyAgICAgICAgR1NUX0ZJWE1FKCJEZXByZWNhdGVkIHN0
YXRzOiBzdHJlYW0iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRT
X0RBVEFfQ0hBTk5FTDoKKyAgICAgICAgR1NUX0ZJWE1FKCJNaXNzaW5nIGRhdGEtY2hhbm5lbCBz
dGF0cyBzdXBwb3J0Iik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFU
U19DQU5ESURBVEVfUEFJUjoKKyAgICBjYXNlIEdTVF9XRUJSVENfU1RBVFNfTE9DQUxfQ0FORElE
QVRFOgorICAgIGNhc2UgR1NUX1dFQlJUQ19TVEFUU19SRU1PVEVfQ0FORElEQVRFOgorICAgICAg
ICBHU1RfRklYTUUoIk1pc3NpbmcgY2FuZGlkYXRlIHN0YXRzIHN1cHBvcnQiKTsKKyAgICAgICAg
YnJlYWs7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NUQVRTX0NFUlRJRklDQVRFOgorICAgICAgICBH
U1RfRklYTUUoIk1pc3NpbmcgY2VydGlmaWNhdGUgc3RhdHMgc3VwcG9ydCIpOworICAgICAgICBi
cmVhazsKKyAgICB9CisKKyAgICByZXR1cm4gVFJVRTsKK30KKworc3RydWN0IENhbGxiYWNrSG9s
ZGVyIHsKKyAgICBHU3RyZWFtZXJTdGF0c0NvbGxlY3Rvcjo6Q29sbGVjdG9yQ2FsbGJhY2sgY2Fs
bGJhY2s7Cit9OworCitXRUJLSVRfREVGSU5FX0FTWU5DX0RBVEFfU1RSVUNUKENhbGxiYWNrSG9s
ZGVyKQorCit2b2lkIEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yOjpnZXRTdGF0cyhDb2xsZWN0b3JD
YWxsYmFjayYmIGNhbGxiYWNrLCBHc3RQYWQqIHBhZCkKK3sKKyAgICBpZiAoIW1fd2VicnRjQmlu
KSB7CisgICAgICAgIGNhbGxiYWNrKG51bGxwdHIpOworICAgICAgICByZXR1cm47CisgICAgfQor
CisgICAgYXV0byogaG9sZGVyID0gY3JlYXRlQ2FsbGJhY2tIb2xkZXIoKTsKKyAgICBob2xkZXIt
PmNhbGxiYWNrID0gV1RGTW92ZShjYWxsYmFjayk7CisgICAgZ19zaWduYWxfZW1pdF9ieV9uYW1l
KG1fd2VicnRjQmluLmdldCgpLCAiZ2V0LXN0YXRzIiwgcGFkLCBnc3RfcHJvbWlzZV9uZXdfd2l0
aF9jaGFuZ2VfZnVuYyhbXShHc3RQcm9taXNlKiByYXdQcm9taXNlLCBncG9pbnRlciB1c2VyRGF0
YSkgeworICAgICAgICBhdXRvIHByb21pc2UgPSBhZG9wdEdSZWYocmF3UHJvbWlzZSk7CisgICAg
ICAgIGF1dG8qIGhvbGRlciA9IHN0YXRpY19jYXN0PENhbGxiYWNrSG9sZGVyKj4odXNlckRhdGEp
OworICAgICAgICBpZiAoZ3N0X3Byb21pc2Vfd2FpdChwcm9taXNlLmdldCgpKSAhPSBHU1RfUFJP
TUlTRV9SRVNVTFRfUkVQTElFRCkgeworICAgICAgICAgICAgaG9sZGVyLT5jYWxsYmFjayhudWxs
cHRyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorCisgICAgICAgIGNvbnN0IGF1
dG8qIHN0YXRzID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UuZ2V0KCkpOworICAgICAg
ICBpZiAoIXN0YXRzKSB7CisgICAgICAgICAgICBob2xkZXItPmNhbGxiYWNrKG51bGxwdHIpOwor
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgaWYgKGdzdF9zdHJ1Y3R1
cmVfaGFzX2ZpZWxkKHN0YXRzLCAiZXJyb3IiKSkgeworICAgICAgICAgICAgR1VuaXF1ZU91dFB0
cjxHRXJyb3I+IGVycm9yOworICAgICAgICAgICAgZ3N0X3N0cnVjdHVyZV9nZXQoc3RhdHMsICJl
cnJvciIsIEdfVFlQRV9FUlJPUiwgJmVycm9yLm91dFB0cigpLCBudWxscHRyKTsKKyAgICAgICAg
ICAgIEdTVF9XQVJOSU5HKCJVbmFibGUgdG8gZ2V0IHN0YXRzLCBlcnJvcjogJXMiLCBlcnJvci0+
bWVzc2FnZSk7CisgICAgICAgICAgICBob2xkZXItPmNhbGxiYWNrKG51bGxwdHIpOworICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICB9CisKKyAgICAgICAgY2FsbE9uTWFpblRocmVhZEFuZFdh
aXQoW3Byb21pc2UgPSBXVEZNb3ZlKHByb21pc2UpLCBob2xkZXJdIHsKKyAgICAgICAgICAgIC8v
IEhvbGQgYW4gYWRkaXRpb25hbCByZWYgdG8gdGhlIHByb21pc2UgYmVjYXVzZSBpdCBpcyBhc3lu
Y2hyb25vdXNseSB1c2VkIGZyb20gdGhlIEpTIGJpbmRpbmdzLgorICAgICAgICAgICAgaG9sZGVy
LT5jYWxsYmFjayhSVENTdGF0c1JlcG9ydDo6Y3JlYXRlKFtwcm9taXNlID0gR1JlZlB0cjxHc3RQ
cm9taXNlPihwcm9taXNlLmdldCgpKV0oYXV0byYgbWFwQWRhcHRlcikgeworICAgICAgICAgICAg
ICAgIGNvbnN0IGF1dG8qIHN0YXRzID0gZ3N0X3Byb21pc2VfZ2V0X3JlcGx5KHByb21pc2UuZ2V0
KCkpOworICAgICAgICAgICAgICAgIGdzdF9zdHJ1Y3R1cmVfZm9yZWFjaChzdGF0cywgZmlsbFJl
cG9ydENhbGxiYWNrLCAmbWFwQWRhcHRlcik7CisgICAgICAgICAgICB9KSk7CisgICAgICAgIH0p
OworICAgIH0sIGhvbGRlciwgcmVpbnRlcnByZXRfY2FzdDxHRGVzdHJveU5vdGlmeT4oZGVzdHJv
eUNhbGxiYWNrSG9sZGVyKSkpOworfQorCit9OyAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5k
aWYgLy8gRU5BQkxFKFdFQl9SVEMpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVy
U3RhdHNDb2xsZWN0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTQyNzM1NTNmODI1
MTM3MjYxZmE5NDc2YmZlMGFlMTcyYmQwODFiNgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclN0YXRzQ29sbGVj
dG9yLmgKQEAgLTAsMCArMSw0OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJ
Z2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBN
ZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0
d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVy
IHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2Ug
YXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICog
IHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIg
dmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3Bl
IHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3
aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkg
b3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExl
c3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlv
dSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQ
dWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRl
IHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4g
U3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKwor
I3ByYWdtYSBvbmNlCisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisKKyNpbmNsdWRlICJHUmVmUHRyR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlIDx3dGYvQ29t
cGxldGlvbkhhbmRsZXIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZFNhZmVSZWZDb3VudGVkLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3Mg
UlRDU3RhdHNSZXBvcnQ7CisKK2NsYXNzIEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yIDogcHVibGlj
IFRocmVhZFNhZmVSZWZDb3VudGVkPEdTdHJlYW1lclN0YXRzQ29sbGVjdG9yLCBXVEY6OkRlc3Ry
dWN0aW9uVGhyZWFkOjpNYWluPiB7CitwdWJsaWM6CisgICAgdXNpbmcgQ29sbGVjdG9yQ2FsbGJh
Y2sgPSBDb21wbGV0aW9uSGFuZGxlcjx2b2lkKFJlZlB0cjxSVENTdGF0c1JlcG9ydD4mJik+Owor
ICAgIHN0YXRpYyBSZWY8R1N0cmVhbWVyU3RhdHNDb2xsZWN0b3I+IGNyZWF0ZSgpIHsgcmV0dXJu
IGFkb3B0UmVmKCpuZXcgR1N0cmVhbWVyU3RhdHNDb2xsZWN0b3IoKSk7IH0KKworICAgIHZvaWQg
c2V0RWxlbWVudChHc3RFbGVtZW50KiBlbGVtZW50KSB7IG1fd2VicnRjQmluID0gZWxlbWVudDsg
fQorICAgIHZvaWQgZ2V0U3RhdHMoQ29sbGVjdG9yQ2FsbGJhY2smJiwgR3N0UGFkKik7CisKK3By
aXZhdGU6CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX3dlYnJ0Y0JpbjsKK307CisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL01vZHVsZXMvbWVkaWFz
dHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L01vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lcldlYlJUQ1V0aWxzLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi41NGI5NzRkM2E3MmQ2YjdhNDlkMzI4YzEyYjNhMTQyYjFhMWVhM2QxCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwCkBAIC0wLDAgKzEsNDQ3IEBACisvKgorICogIENv
cHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRo
aXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQv
b3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUg
Rm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQg
eW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMg
ZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQg
V0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBv
ZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9T
RS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1v
cmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0
aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlz
IGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0
aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAw
MjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUo
V0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiR1N0cmVhbWVyV2Vi
UlRDVXRpbHMuaCIKKworI2luY2x1ZGUgIlJUQ0ljZUNhbmRpZGF0ZS5oIgorI2luY2x1ZGUgIlJU
Q0ljZVByb3RvY29sLmgiCisKKyNpbmNsdWRlIDxvcGVuc3NsL2JuLmg+CisjaW5jbHVkZSA8b3Bl
bnNzbC9yc2EuaD4KKyNpbmNsdWRlIDxvcGVuc3NsL3NzbC5oPgorI2luY2x1ZGUgPHd0Zi9Dcnlw
dG9ncmFwaGljYWxseVJhbmRvbU51bWJlci5oPgorI2luY2x1ZGUgPHd0Zi9TY29wZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9XYWxsVGltZS5oPgorI2luY2x1ZGUgPHd0Zi90ZXh0L0Jhc2U2NC5oPgorI2lu
Y2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ1RvSW50ZWdlckNvbnZlcnNpb24uaD4KKworR1NUX0RFQlVH
X0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRfd2VicnRjX3V0aWxzX2RlYnVnKTsKKyNkZWZpbmUgR1NU
X0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfdXRpbHNfZGVidWcKKworbmFtZXNwYWNlIFdlYkNv
cmUgeworCitzdGF0aWMgaW5saW5lIFJUQ0ljZUNvbXBvbmVudCB0b1JUQ0ljZUNvbXBvbmVudChp
bnQgY29tcG9uZW50KQoreworICAgIHJldHVybiBjb21wb25lbnQgPT0gMSA/IFJUQ0ljZUNvbXBv
bmVudDo6UnRwIDogUlRDSWNlQ29tcG9uZW50OjpSdGNwOworfQorCitzdGF0aWMgaW5saW5lIHN0
ZDo6b3B0aW9uYWw8UlRDSWNlUHJvdG9jb2w+IHRvUlRDSWNlUHJvdG9jb2woY29uc3QgU3RyaW5n
JiBwcm90b2NvbCkKK3sKKyAgICBpZiAocHJvdG9jb2wuaXNFbXB0eSgpKQorICAgICAgICByZXR1
cm4geyB9OworICAgIGlmIChwcm90b2NvbCA9PSAidWRwIikKKyAgICAgICAgcmV0dXJuIFJUQ0lj
ZVByb3RvY29sOjpVZHA7CisgICAgQVNTRVJUKHByb3RvY29sID09ICJ0Y3AiKTsKKyAgICByZXR1
cm4gUlRDSWNlUHJvdG9jb2w6OlRjcDsKK30KKworc3RhdGljIGlubGluZSBzdGQ6Om9wdGlvbmFs
PFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU+IHRvUlRDSWNlVGNwQ2FuZGlkYXRlVHlwZShjb25zdCBT
dHJpbmcmIHR5cGUpCit7CisgICAgaWYgKHR5cGUuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4g
eyB9OworICAgIGlmICh0eXBlID09ICJhY3RpdmUiKQorICAgICAgICByZXR1cm4gUlRDSWNlVGNw
Q2FuZGlkYXRlVHlwZTo6QWN0aXZlOworICAgIGlmICh0eXBlID09ICJwYXNzaXZlIikKKyAgICAg
ICAgcmV0dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU6OlBhc3NpdmU7CisgICAgQVNTRVJUKHR5
cGUgPT0gInNvIik7CisgICAgcmV0dXJuIFJUQ0ljZVRjcENhbmRpZGF0ZVR5cGU6OlNvOworfQor
CitzdGF0aWMgaW5saW5lIHN0ZDo6b3B0aW9uYWw8UlRDSWNlQ2FuZGlkYXRlVHlwZT4gdG9SVENJ
Y2VDYW5kaWRhdGVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAodHlwZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiB7IH07CisgICAgaWYgKHR5cGUgPT0gImhvc3QiKQorICAg
ICAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6SG9zdDsKKyAgICBpZiAodHlwZSA9PSAi
c3JmbHgiKQorICAgICAgICByZXR1cm4gUlRDSWNlQ2FuZGlkYXRlVHlwZTo6U3JmbHg7CisgICAg
aWYgKHR5cGUgPT0gInByZmx4IikKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNhbmRpZGF0ZVR5cGU6
OlByZmx4OworICAgIEFTU0VSVCh0eXBlID09ICJyZWxheSIpOworICAgIHJldHVybiBSVENJY2VD
YW5kaWRhdGVUeXBlOjpSZWxheTsKK30KKworUmVmUHRyPFJUQ0Vycm9yPiB0b1JUQ0Vycm9yKEdF
cnJvciogcnRjRXJyb3IpCit7CisgICAgYXV0byBkZXRhaWwgPSB0b1JUQ0Vycm9yRGV0YWlsVHlw
ZShzdGF0aWNfY2FzdDxHc3RXZWJSVENFcnJvcj4ocnRjRXJyb3ItPmNvZGUpKTsKKyAgICBpZiAo
IWRldGFpbCkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgcmV0dXJuIFJUQ0Vycm9yOjpj
cmVhdGUoKmRldGFpbCwgcnRjRXJyb3ItPm1lc3NhZ2UpOworfQorCitzdGF0aWMgaW5saW5lIGRv
dWJsZSB0b1dlYlJUQ0JpdFJhdGVQcmlvcml0eShSVENQcmlvcml0eVR5cGUgcHJpb3JpdHkpCit7
CisgICAgc3dpdGNoIChwcmlvcml0eSkgeworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpWZXJ5
TG93OgorICAgICAgICByZXR1cm4gMC41OworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpMb3c6
CisgICAgICAgIHJldHVybiAxOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpNZWRpdW06Cisg
ICAgICAgIHJldHVybiAyOworICAgIGNhc2UgUlRDUHJpb3JpdHlUeXBlOjpIaWdoOgorICAgICAg
ICByZXR1cm4gNDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
fQorCitHVW5pcXVlUHRyPEdzdFN0cnVjdHVyZT4gZnJvbVJUQ0VuY29kaW5nUGFyYW1ldGVycyhj
b25zdCBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMmIHBhcmFtZXRlcnMpCit7CisgICAgR1VuaXF1
ZVB0cjxHc3RTdHJ1Y3R1cmU+IHJ0Y1BhcmFtZXRlcnMoZ3N0X3N0cnVjdHVyZV9uZXcoImVuY29k
aW5nLXBhcmFtZXRlcnMiLCAiYWN0aXZlIiwgR19UWVBFX0JPT0xFQU4sIHBhcmFtZXRlcnMuYWN0
aXZlLAorICAgICAgICAicmlkIiwgR19UWVBFX1NUUklORywgcGFyYW1ldGVycy5yaWQudXRmOCgp
LmRhdGEoKSwgImJpdHJhdGUtcHJpb3JpdHkiLCBHX1RZUEVfRE9VQkxFLCB0b1dlYlJUQ0JpdFJh
dGVQcmlvcml0eShwYXJhbWV0ZXJzLnByaW9yaXR5KSwgbnVsbHB0cikpOworCisgICAgaWYgKHBh
cmFtZXRlcnMuc3NyYykKKyAgICAgICAgZ3N0X3N0cnVjdHVyZV9zZXQocnRjUGFyYW1ldGVycy5n
ZXQoKSwgInNzcmMiLCBHX1RZUEVfVUxPTkcsIHBhcmFtZXRlcnMuc3NyYywgbnVsbHB0cik7CisK
KyAgICBpZiAocGFyYW1ldGVycy5tYXhCaXRyYXRlKQorICAgICAgICBnc3Rfc3RydWN0dXJlX3Nl
dChydGNQYXJhbWV0ZXJzLmdldCgpLCAibWF4LWJpdHJhdGUiLCBHX1RZUEVfVUxPTkcsIHBhcmFt
ZXRlcnMubWF4Qml0cmF0ZSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5tYXhGcmFt
ZXJhdGUpCisgICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJt
YXgtZnJhbWVyYXRlIiwgR19UWVBFX1VMT05HLCBwYXJhbWV0ZXJzLm1heEZyYW1lcmF0ZSwgbnVs
bHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5zY2FsZVJlc29sdXRpb25Eb3duQnkpCisgICAg
ICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJzY2FsZS1yZXNvbHV0
aW9uLWRvd24tYnkiLCBHX1RZUEVfRE9VQkxFLCBwYXJhbWV0ZXJzLnNjYWxlUmVzb2x1dGlvbkRv
d25CeSwgbnVsbHB0cik7CisKKyAgICBpZiAocGFyYW1ldGVycy5uZXR3b3JrUHJpb3JpdHkpCisg
ICAgICAgIGdzdF9zdHJ1Y3R1cmVfc2V0KHJ0Y1BhcmFtZXRlcnMuZ2V0KCksICJuZXR3b3JrLXBy
aW9yaXR5IiwgR19UWVBFX0lOVCwgKnBhcmFtZXRlcnMubmV0d29ya1ByaW9yaXR5LCBudWxscHRy
KTsKKworICAgIHJldHVybiBydGNQYXJhbWV0ZXJzOworfQorCitzdGF0aWMgaW5saW5lIFJUQ1By
aW9yaXR5VHlwZSBmcm9tV2ViUlRDQml0UmF0ZVByaW9yaXR5KGRvdWJsZSBwcmlvcml0eSkKK3sK
KyAgICBpZiAocHJpb3JpdHkgPCAwLjcpCisgICAgICAgIHJldHVybiBSVENQcmlvcml0eVR5cGU6
OlZlcnlMb3c7CisgICAgaWYgKHByaW9yaXR5IDwgMS41KQorICAgICAgICByZXR1cm4gUlRDUHJp
b3JpdHlUeXBlOjpMb3c7CisgICAgaWYgKHByaW9yaXR5IDwgMi41KQorICAgICAgICByZXR1cm4g
UlRDUHJpb3JpdHlUeXBlOjpNZWRpdW07CisgICAgcmV0dXJuIFJUQ1ByaW9yaXR5VHlwZTo6SGln
aDsKK30KKworc3RhdGljIGlubGluZSBSVENSdHBFbmNvZGluZ1BhcmFtZXRlcnMgdG9SVENFbmNv
ZGluZ1BhcmFtZXRlcnMoY29uc3QgR3N0U3RydWN0dXJlKiBydGNQYXJhbWV0ZXJzKQoreworICAg
IFJUQ1J0cEVuY29kaW5nUGFyYW1ldGVycyBwYXJhbWV0ZXJzOworCisgICAgdW5zaWduZWQgc3Ny
YzsKKyAgICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludChydGNQYXJhbWV0ZXJzLCAic3NyYyIs
ICZzc3JjKSkKKyAgICAgICAgcGFyYW1ldGVycy5zc3JjID0gc3NyYzsKKworICAgIGdzdF9zdHJ1
Y3R1cmVfZ2V0KHJ0Y1BhcmFtZXRlcnMsICJhY3RpdmUiLCBHX1RZUEVfQk9PTEVBTiwgJihwYXJh
bWV0ZXJzLmFjdGl2ZSksIG51bGxwdHIpOworCisgICAgdWludDY0X3QgbWF4Qml0cmF0ZTsKKyAg
ICBpZiAoZ3N0X3N0cnVjdHVyZV9nZXRfdWludDY0KHJ0Y1BhcmFtZXRlcnMsICJtYXgtYml0cmF0
ZSIsICZtYXhCaXRyYXRlKSkKKyAgICAgICAgcGFyYW1ldGVycy5tYXhCaXRyYXRlID0gbWF4Qml0
cmF0ZTsKKworICAgIHVpbnQ2NF90IG1heEZyYW1lcmF0ZTsKKyAgICBpZiAoZ3N0X3N0cnVjdHVy
ZV9nZXRfdWludDY0KHJ0Y1BhcmFtZXRlcnMsICJtYXgtZnJhbWVyYXRlIiwgJm1heEZyYW1lcmF0
ZSkpCisgICAgICAgIHBhcmFtZXRlcnMubWF4RnJhbWVyYXRlID0gbWF4RnJhbWVyYXRlOworCisg
ICAgcGFyYW1ldGVycy5yaWQgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcocnRjUGFyYW1ldGVy
cywgInJpZCIpOworCisgICAgZG91YmxlIHNjYWxlUmVzb2x1dGlvbkRvd25CeTsKKyAgICBpZiAo
Z3N0X3N0cnVjdHVyZV9nZXRfZG91YmxlKHJ0Y1BhcmFtZXRlcnMsICJzY2FsZS1yZXNvbHV0aW9u
LWRvd24tYnkiLCAmc2NhbGVSZXNvbHV0aW9uRG93bkJ5KSkKKyAgICAgICAgcGFyYW1ldGVycy5z
Y2FsZVJlc29sdXRpb25Eb3duQnkgPSBzY2FsZVJlc29sdXRpb25Eb3duQnk7CisKKyAgICBkb3Vi
bGUgYml0cmF0ZVByaW9yaXR5OworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9kb3VibGUocnRj
UGFyYW1ldGVycywgImJpdHJhdGUtcHJpb3JpdHkiLCAmYml0cmF0ZVByaW9yaXR5KSkKKyAgICAg
ICAgcGFyYW1ldGVycy5wcmlvcml0eSA9IGZyb21XZWJSVENCaXRSYXRlUHJpb3JpdHkoYml0cmF0
ZVByaW9yaXR5KTsKKworICAgIGludCBuZXR3b3JrUHJpb3JpdHk7CisgICAgaWYgKGdzdF9zdHJ1
Y3R1cmVfZ2V0X2ludChydGNQYXJhbWV0ZXJzLCAibmV0d29yay1wcmlvcml0eSIsICZuZXR3b3Jr
UHJpb3JpdHkpKQorICAgICAgICBwYXJhbWV0ZXJzLm5ldHdvcmtQcmlvcml0eSA9IHN0YXRpY19j
YXN0PFJUQ1ByaW9yaXR5VHlwZT4obmV0d29ya1ByaW9yaXR5KTsKKworICAgIHJldHVybiBwYXJh
bWV0ZXJzOworfQorCitSVENSdHBTZW5kUGFyYW1ldGVycyB0b1JUQ1J0cFNlbmRQYXJhbWV0ZXJz
KGNvbnN0IEdzdFN0cnVjdHVyZSogcnRjUGFyYW1ldGVycykKK3sKKyAgICBpZiAoIXJ0Y1BhcmFt
ZXRlcnMpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBSVENSdHBTZW5kUGFyYW1ldGVycyBw
YXJhbWV0ZXJzOworICAgIGF1dG8qIGVuY29kaW5ncyA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X3ZhbHVl
KHJ0Y1BhcmFtZXRlcnMsICJlbmNvZGluZ3MiKTsKKyAgICB1bnNpZ25lZCBzaXplID0gZ3N0X3Zh
bHVlX2xpc3RfZ2V0X3NpemUoZW5jb2RpbmdzKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBp
IDwgc2l6ZTsgaSsrKSB7CisgICAgICAgIGNvbnN0IGF1dG8qIHZhbHVlID0gZ3N0X3ZhbHVlX2xp
c3RfZ2V0X3ZhbHVlKGVuY29kaW5ncywgaSk7CisgICAgICAgIHBhcmFtZXRlcnMuZW5jb2Rpbmdz
LmFwcGVuZCh0b1JUQ0VuY29kaW5nUGFyYW1ldGVycyhHU1RfU1RSVUNUVVJFX0NBU1QodmFsdWUp
KSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IEhhbmRsZSBydGNQYXJhbWV0ZXJzLmRlZ3JhZGF0
aW9uX3ByZWZlcmVuY2UuCisgICAgcmV0dXJuIHBhcmFtZXRlcnM7Cit9CisKKworc3RhdGljIHZv
aWQgZW5zdXJlRGVidWdDYXRlZ29yeUluaXRpYWxpemVkKCkKK3sKKyAgICBzdGF0aWMgc3RkOjpv
bmNlX2ZsYWcgb25jZUZsYWc7CisgICAgc3RkOjpjYWxsX29uY2Uob25jZUZsYWcsIFtdIHsKKyAg
ICAgICAgR1NUX0RFQlVHX0NBVEVHT1JZX0lOSVQod2Via2l0X3dlYnJ0Y191dGlsc19kZWJ1Zywg
IndlYmtpdHdlYnJ0Y3V0aWxzIiwgMCwgIldlYktpdCBXZWJSVEMgdXRpbGl0aWVzIik7CisgICAg
fSk7Cit9CisKK3N0ZDo6b3B0aW9uYWw8UlRDSWNlQ2FuZGlkYXRlOjpGaWVsZHM+IHBhcnNlSWNl
Q2FuZGlkYXRlU0RQKGNvbnN0IFN0cmluZyYgc2RwKQoreworICAgIGVuc3VyZURlYnVnQ2F0ZWdv
cnlJbml0aWFsaXplZCgpOworICAgIEdTVF9ERUJVRygiUGFyc2luZyBJQ0UgQ2FuZGlkYXRlOiAl
cyIsIHNkcC51dGY4KCkuZGF0YSgpKTsKKyAgICBpZiAoIXNkcC5zdGFydHNXaXRoKCJjYW5kaWRh
dGU6IikpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBTdHJpbmcgZm91bmRhdGlvbjsKKyAg
ICB1bnNpZ25lZCBjb21wb25lbnRJZCA9IDA7CisgICAgU3RyaW5nIHRyYW5zcG9ydDsKKyAgICB1
bnNpZ25lZCBwcmlvcml0eSA9IDA7CisgICAgU3RyaW5nIGFkZHJlc3M7CisgICAgdWludDMyX3Qg
cG9ydCA9IDA7CisgICAgU3RyaW5nIHR5cGU7CisgICAgU3RyaW5nIHRjcHR5cGU7CisgICAgU3Ry
aW5nIHJlbGF0ZWRBZGRyZXNzOworICAgIGd1aW50MTYgcmVsYXRlZFBvcnQgPSAwOworICAgIFN0
cmluZyB1c2VybmFtZUZyYWdtZW50OworICAgIGF1dG8gdG9rZW5zID0gc2RwLmNvbnZlcnRUb0FT
Q0lJTG93ZXJjYXNlKCkuc3Vic3RyaW5nKDEwKS5zcGxpdCgnICcpOworCisgICAgZm9yIChhdXRv
IGl0ID0gdG9rZW5zLmJlZ2luKCk7IGl0ICE9IHRva2Vucy5lbmQoKTsgKytpdCkgeworICAgICAg
ICBhdXRvIGkgPSBzdGQ6OmRpc3RhbmNlKHRva2Vucy5iZWdpbigpLCBpdCk7CisgICAgICAgIGF1
dG8gdG9rZW4gPSAqaXQ7CisgICAgICAgIHN3aXRjaCAoaSkgeworICAgICAgICBjYXNlIDA6Cisg
ICAgICAgICAgICBmb3VuZGF0aW9uID0gdG9rZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgY2FzZSAxOgorICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZUludGVnZXI8dW5z
aWduZWQ+KHRva2VuKSkKKyAgICAgICAgICAgICAgICBjb21wb25lbnRJZCA9ICp2YWx1ZTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgIGNhc2UgMjoKKyAgICAgICAgICAgIHRyYW5zcG9ydCA9IHRva2VuOwor
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGNhc2UgMzoKKyAgICAgICAgICAgIGlmIChhdXRv
IHZhbHVlID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVkPih0b2tlbikpCisgICAgICAgICAgICAgICAg
cHJpb3JpdHkgPSAqdmFsdWU7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgcmV0
dXJuIHsgfTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICBjYXNlIDQ6CisgICAgICAgICAg
ICBhZGRyZXNzID0gdG9rZW47CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgY2FzZSA1Ogor
ICAgICAgICAgICAgaWYgKGF1dG8gdmFsdWUgPSBwYXJzZUludGVnZXI8dW5zaWduZWQ+KHRva2Vu
KSkKKyAgICAgICAgICAgICAgICBwb3J0ID0gKnZhbHVlOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIHJldHVybiB7IH07CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgZGVm
YXVsdDoKKyAgICAgICAgICAgIGlmIChpdCArIDEgPT0gdG9rZW5zLmVuZCgpKQorICAgICAgICAg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICAgICAgICAgIGl0Kys7CisgICAgICAgICAgICBpZiAo
dG9rZW4gPT0gInR5cCIpCisgICAgICAgICAgICAgICAgdHlwZSA9ICppdDsKKyAgICAgICAgICAg
IGVsc2UgaWYgKHRva2VuID09ICJyYWRkciIpCisgICAgICAgICAgICAgICAgcmVsYXRlZEFkZHJl
c3MgPSAqaXQ7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAicnBvcnQiKQorICAgICAg
ICAgICAgICAgIHJlbGF0ZWRQb3J0ID0gcGFyc2VJbnRlZ2VyPHVuc2lnbmVkPigqaXQpLnZhbHVl
X29yKDApOworICAgICAgICAgICAgZWxzZSBpZiAodG9rZW4gPT0gInRjcHR5cGUiKQorICAgICAg
ICAgICAgICAgIHRjcHR5cGUgPSAqaXQ7CisgICAgICAgICAgICBlbHNlIGlmICh0b2tlbiA9PSAi
dWZyYWciKQorICAgICAgICAgICAgICAgIHVzZXJuYW1lRnJhZ21lbnQgPSAqaXQ7CisgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIGlmICh0eXBlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIFJUQ0ljZUNhbmRpZGF0ZTo6RmllbGRzIGZpZWxk
czsKKyAgICBmaWVsZHMuZm91bmRhdGlvbiA9IGZvdW5kYXRpb247CisgICAgZmllbGRzLmNvbXBv
bmVudCA9IHRvUlRDSWNlQ29tcG9uZW50KGNvbXBvbmVudElkKTsKKyAgICBmaWVsZHMucHJpb3Jp
dHkgPSBwcmlvcml0eTsKKyAgICBmaWVsZHMucHJvdG9jb2wgPSB0b1JUQ0ljZVByb3RvY29sKHRy
YW5zcG9ydCk7CisgICAgaWYgKCFhZGRyZXNzLmlzRW1wdHkoKSkgeworICAgICAgICBmaWVsZHMu
YWRkcmVzcyA9IGFkZHJlc3M7CisgICAgICAgIGZpZWxkcy5wb3J0ID0gcG9ydDsKKyAgICB9Cisg
ICAgZmllbGRzLnR5cGUgPSB0b1JUQ0ljZUNhbmRpZGF0ZVR5cGUodHlwZSk7CisgICAgZmllbGRz
LnRjcFR5cGUgPSB0b1JUQ0ljZVRjcENhbmRpZGF0ZVR5cGUodGNwdHlwZSk7CisgICAgaWYgKCFy
ZWxhdGVkQWRkcmVzcy5pc0VtcHR5KCkpIHsKKyAgICAgICAgZmllbGRzLnJlbGF0ZWRBZGRyZXNz
ID0gcmVsYXRlZEFkZHJlc3M7CisgICAgICAgIGZpZWxkcy5yZWxhdGVkUG9ydCA9IHJlbGF0ZWRQ
b3J0OworICAgIH0KKyAgICBmaWVsZHMudXNlcm5hbWVGcmFnbWVudCA9IHVzZXJuYW1lRnJhZ21l
bnQ7CisgICAgcmV0dXJuIGZpZWxkczsKK30KKworc3RhdGljIFN0cmluZyB4NTA5U2VyaWFsaXpl
KFg1MDkqIHg1MDkpCit7CisgICAgQklPKiBiaW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAg
ICBpZiAoIWJpbykKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIGF1dG8gc2NvcGVFeGl0ID0g
V1RGOjptYWtlU2NvcGVFeGl0KFsmXSB7CisgICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgfSk7
CisKKyAgICBpZiAoIVBFTV93cml0ZV9iaW9fWDUwOShiaW8sIHg1MDkpKQorICAgICAgICByZXR1
cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZlcjsKKyAgICBidWZmZXIucmVzZXJ2ZUNh
cGFjaXR5KDQwOTYpOworICAgIGludCBsZW5ndGggPSBCSU9fcmVhZChiaW8sIGJ1ZmZlci5kYXRh
KCksIDQwOTYpOworICAgIGlmICghbGVuZ3RoKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
cmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5ndGgpOworfQorCitzdGF0aWMgU3RyaW5n
IHByaXZhdGVLZXlTZXJpYWxpemUoRVZQX1BLRVkqIHByaXZhdGVLZXkpCit7CisgICAgQklPKiBi
aW8gPSBCSU9fbmV3KEJJT19zX21lbSgpKTsKKyAgICBpZiAoIWJpbykKKyAgICAgICAgcmV0dXJu
IHsgfTsKKworICAgIGF1dG8gc2NvcGVFeGl0ID0gV1RGOjptYWtlU2NvcGVFeGl0KFsmXSB7Cisg
ICAgICAgIEJJT19mcmVlKGJpbyk7CisgICAgfSk7CisKKyAgICBpZiAoIVBFTV93cml0ZV9iaW9f
UHJpdmF0ZUtleShiaW8sIHByaXZhdGVLZXksIG51bGxwdHIsIG51bGxwdHIsIDAsIG51bGxwdHIs
IG51bGxwdHIpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgVmVjdG9yPGNoYXI+IGJ1ZmZl
cjsKKyAgICBidWZmZXIucmVzZXJ2ZUNhcGFjaXR5KDQwOTYpOworICAgIGludCBsZW5ndGggPSBC
SU9fcmVhZChiaW8sIGJ1ZmZlci5kYXRhKCksIDQwOTYpOworICAgIGlmICghbGVuZ3RoKQorICAg
ICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIFN0cmluZyhidWZmZXIuZGF0YSgpLCBsZW5n
dGgpOworfQorCitzdGQ6Om9wdGlvbmFsPFJlZjxSVENDZXJ0aWZpY2F0ZT4+IGdlbmVyYXRlQ2Vy
dGlmaWNhdGUoUmVmPFNlY3VyaXR5T3JpZ2luPiYmIG9yaWdpbiwgY29uc3QgUGVlckNvbm5lY3Rp
b25CYWNrZW5kOjpDZXJ0aWZpY2F0ZUluZm9ybWF0aW9uJiBpbmZvKQoreworICAgIGVuc3VyZURl
YnVnQ2F0ZWdvcnlJbml0aWFsaXplZCgpOworICAgIEVWUF9QS0VZKiBwcml2YXRlS2V5ID0gRVZQ
X1BLRVlfbmV3KCk7CisgICAgaWYgKCFwcml2YXRlS2V5KSB7CisgICAgICAgIEdTVF9XQVJOSU5H
KCJGYWlsZWQgdG8gY3JlYXRlIHByaXZhdGUga2V5Iik7CisgICAgICAgIHJldHVybiB7IH07Cisg
ICAgfQorCisgICAgYXV0byBzY29wZUV4aXQgPSBXVEY6Om1ha2VTY29wZUV4aXQoWyZdIHsKKyAg
ICAgICAgRVZQX1BLRVlfZnJlZShwcml2YXRlS2V5KTsKKyAgICB9KTsKKworICAgIHN3aXRjaCAo
aW5mby50eXBlKSB7CisgICAgY2FzZSBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRl
SW5mb3JtYXRpb246OlR5cGU6OkVDRFNBUDI1NjogeworICAgICAgICBFQ19LRVkqIGVjS2V5ID0g
RUNfS0VZX25ld19ieV9jdXJ2ZV9uYW1lKE5JRF9YOV82Ml9wcmltZTI1NnYxKTsKKyAgICAgICAg
Ly8gRW5zdXJlIGN1cnZlIG5hbWUgaXMgaW5jbHVkZWQgd2hlbiBFQyBrZXkgaXMgc2VyaWFsaXpl
ZC4KKyAgICAgICAgLy8gV2l0aG91dCB0aGlzIGNhbGwsIE9wZW5TU0wgdmVyc2lvbnMgYmVmb3Jl
IDEuMS4wIHdpbGwgY3JlYXRlCisgICAgICAgIC8vIGNlcnRpZmljYXRlcyB0aGF0IGRvbid0IHdv
cmsgZm9yIFRMUy4KKyAgICAgICAgLy8gVGhpcyBpcyBhIG5vLW9wIGZvciBCb3JpbmdTU0wgYW5k
IE9wZW5TU0wgMS4xLjArCisgICAgICAgIEVDX0tFWV9zZXRfYXNuMV9mbGFnKGVjS2V5LCBPUEVO
U1NMX0VDX05BTUVEX0NVUlZFKTsKKyAgICAgICAgaWYgKCFwcml2YXRlS2V5IHx8ICFlY0tleSB8
fCAhRUNfS0VZX2dlbmVyYXRlX2tleShlY0tleSkgfHwgIUVWUF9QS0VZX2Fzc2lnbl9FQ19LRVko
cHJpdmF0ZUtleSwgZWNLZXkpKSB7CisgICAgICAgICAgICBFQ19LRVlfZnJlZShlY0tleSk7Cisg
ICAgICAgICAgICByZXR1cm4geyB9OworICAgICAgICB9CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIFBlZXJDb25uZWN0aW9uQmFja2VuZDo6Q2VydGlmaWNhdGVJbmZvcm1hdGlvbjo6
VHlwZTo6UlNBU1NBUEtDUzF2MTU6IHsKKyAgICAgICAgUlNBKiByc2EgPSBSU0FfbmV3KCk7Cisg
ICAgICAgIGlmICghcnNhKQorICAgICAgICAgICAgcmV0dXJuIHsgfTsKKworICAgICAgICBCSUdO
VU0qIGV4cG9uZW50ID0gQk5fbmV3KCk7CisgICAgICAgIGludCBwdWJsaWNFeHBvbmVudCA9IGlu
Zm8ucnNhUGFyYW1ldGVycyA/IGluZm8ucnNhUGFyYW1ldGVycy0+cHVibGljRXhwb25lbnQgOiA2
NTUzNzsKKyAgICAgICAgYXV0byBtb2R1bHVzTGVuZ3RoID0gaW5mby5yc2FQYXJhbWV0ZXJzID8g
aW5mby5yc2FQYXJhbWV0ZXJzLT5tb2R1bHVzTGVuZ3RoIDogMjA0ODsKKyAgICAgICAgaWYgKCFC
Tl9zZXRfd29yZChleHBvbmVudCwgcHVibGljRXhwb25lbnQpIHx8ICFSU0FfZ2VuZXJhdGVfa2V5
X2V4KHJzYSwgbW9kdWx1c0xlbmd0aCwgZXhwb25lbnQsIG51bGxwdHIpCisgICAgICAgICAgICB8
fCAhRVZQX1BLRVlfYXNzaWduX1JTQShwcml2YXRlS2V5LCByc2EpKSB7CisgICAgICAgICAgICBS
U0FfZnJlZShyc2EpOworICAgICAgICAgICAgcmV0dXJuIHsgfTsKKyAgICAgICAgfQorICAgICAg
ICBCTl9mcmVlKGV4cG9uZW50KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIH0KKworICAg
IFg1MDkqIHg1MDkgPSBYNTA5X25ldygpOworICAgIGlmICgheDUwOSkgeworICAgICAgICBHU1Rf
V0FSTklORygiRmFpbGVkIHRvIGNyZWF0ZSBjZXJ0aWZpY2F0ZSIpOworICAgICAgICByZXR1cm4g
eyB9OworICAgIH0KKworICAgIGF1dG8gY2VydFNjb3BlRXhpdCA9IFdURjo6bWFrZVNjb3BlRXhp
dChbJl0geworICAgICAgICBYNTA5X2ZyZWUoeDUwOSk7CisgICAgfSk7CisKKyAgICBYNTA5X3Nl
dF92ZXJzaW9uKHg1MDksIDIpOworCisgICAgLy8gU2V0IGEgcmFuZG9tIDY0IGJpdCBpbnRlZ2Vy
IGFzIHNlcmlhbCBudW1iZXIuCisgICAgQklHTlVNKiBzZXJpYWxOdW1iZXIgPSBCTl9uZXcoKTsK
KyAgICBCTl9wc2V1ZG9fcmFuZChzZXJpYWxOdW1iZXIsIDY0LCAwLCAwKTsKKyAgICBBU04xX0lO
VEVHRVIqIGFzbjFTZXJpYWxOdW1iZXIgPSBYNTA5X2dldF9zZXJpYWxOdW1iZXIoeDUwOSk7Cisg
ICAgQk5fdG9fQVNOMV9JTlRFR0VSKHNlcmlhbE51bWJlciwgYXNuMVNlcmlhbE51bWJlcik7Cisg
ICAgQk5fZnJlZShzZXJpYWxOdW1iZXIpOworCisgICAgLy8gU2V0IGEgcmFuZG9tIDggYnl0ZSBi
YXNlNjQgc3RyaW5nIGFzIGlzc3Vlci9zdWJqZWN0LgorICAgIFg1MDlfTkFNRSogbmFtZSA9IFg1
MDlfTkFNRV9uZXcoKTsKKyAgICBWZWN0b3I8dWludDhfdD4gYnVmZmVyKDgpOworICAgIFdURjo6
Y3J5cHRvZ3JhcGhpY2FsbHlSYW5kb21WYWx1ZXMoYnVmZmVyLmRhdGEoKSwgYnVmZmVyLnNpemUo
KSk7CisgICAgYXV0byBjb21tb25OYW1lID0gYmFzZTY0RW5jb2RlVG9TdHJpbmcoYnVmZmVyKTsK
KyAgICBYNTA5X05BTUVfYWRkX2VudHJ5X2J5X05JRChuYW1lLCBOSURfY29tbW9uTmFtZSwgTUJT
VFJJTkdfQVNDLCAoY29uc3QgZ3VjaGFyKiljb21tb25OYW1lLmFzY2lpKCkuZGF0YSgpLCAtMSwg
LTEsIDApOworICAgIFg1MDlfc2V0X3N1YmplY3RfbmFtZSh4NTA5LCBuYW1lKTsKKyAgICBYNTA5
X3NldF9pc3N1ZXJfbmFtZSh4NTA5LCBuYW1lKTsKKyAgICBYNTA5X05BTUVfZnJlZShuYW1lKTsK
KworICAgIC8vIEZhbGxiYWNrIHRvIDMwIGRheXMsIG1heCBvdXQgYXQgb25lIHllYXIuCisgICAg
dWludDY0X3QgZXhwaXJlcyA9IGluZm8uZXhwaXJlcy52YWx1ZV9vcigyNTkyMDAwKTsKKyAgICBl
eHBpcmVzID0gc3RkOjptaW48dWludDY0X3Q+KGV4cGlyZXMsIDMxNTM2MDAwMDAwKTsKKyAgICBY
NTA5X2dtdGltZV9hZGooWDUwOV9nZXRtX25vdEJlZm9yZSh4NTA5KSwgMCk7CisgICAgWDUwOV9n
bXRpbWVfYWRqKFg1MDlfZ2V0bV9ub3RBZnRlcih4NTA5KSwgZXhwaXJlcyk7CisgICAgWDUwOV9z
ZXRfcHVia2V5KHg1MDksIHByaXZhdGVLZXkpOworCisgICAgaWYgKCFYNTA5X3NpZ24oeDUwOSwg
cHJpdmF0ZUtleSwgRVZQX3NoYTI1NigpKSkgeworICAgICAgICBHU1RfV0FSTklORygiRmFpbGVk
IHRvIHNpZ24gY2VydGlmaWNhdGUiKTsKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICB9CisKKyAg
ICBhdXRvIHBlbSA9IHg1MDlTZXJpYWxpemUoeDUwOSk7CisgICAgR1NUX0RFQlVHKCJHZW5lcmF0
ZWQgY2VydGlmaWNhdGUgUEVNOiAlcyIsIHBlbS5hc2NpaSgpLmRhdGEoKSk7CisgICAgYXV0byBz
ZXJpYWxpemVkUHJpdmF0ZUtleSA9IHByaXZhdGVLZXlTZXJpYWxpemUocHJpdmF0ZUtleSk7Cisg
ICAgVmVjdG9yPFJUQ0NlcnRpZmljYXRlOjpEdGxzRmluZ2VycHJpbnQ+IGZpbmdlcnByaW50czsK
KyAgICAvLyBGSVhNRTogRmlsbCBmaW5nZXJwcmludHMuCisgICAgYXV0byBleHBpcmF0aW9uVGlt
ZSA9IFdURjo6V2FsbFRpbWU6Om5vdygpLnNlY29uZHNTaW5jZUVwb2NoKCkgKyBXVEY6OlNlY29u
ZHMoZXhwaXJlcyk7CisgICAgcmV0dXJuIFJUQ0NlcnRpZmljYXRlOjpjcmVhdGUoV1RGTW92ZShv
cmlnaW4pLCBleHBpcmF0aW9uVGltZS5taWxsaXNlY29uZHMoKSwgV1RGTW92ZShmaW5nZXJwcmlu
dHMpLCBXVEZNb3ZlKHBlbSksIFdURk1vdmUoc2VyaWFsaXplZFByaXZhdGVLZXkpKTsKK30KKwor
Ym9vbCBzZHBNZWRpYUhhc0F0dHJpYnV0ZUtleShjb25zdCBHc3RTRFBNZWRpYSogbWVkaWEsIGNv
bnN0IGNoYXIqIGtleSkKK3sKKyAgICB1bnNpZ25lZCBsZW4gPSBnc3Rfc2RwX21lZGlhX2F0dHJp
YnV0ZXNfbGVuKG1lZGlhKTsKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbGVuOyBpKysp
IHsKKyAgICAgICAgY29uc3QgYXV0byogYXR0cmlidXRlID0gZ3N0X3NkcF9tZWRpYV9nZXRfYXR0
cmlidXRlKG1lZGlhLCBpKTsKKyAgICAgICAgaWYgKCFnX3N0cmNtcDAoYXR0cmlidXRlLT5rZXks
IGtleSkpCisgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gZmFs
c2U7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9Nb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJXZWJS
VENVdGlscy5oIGIvU291cmNlL1dlYkNvcmUvTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyV2ViUlRDVXRpbHMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjg4ZmE0ZGIwNDdhZmY4YWRhYjhk
OTI5OWM1N2I5ZWNjNWRhMThmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvTW9k
dWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuaApAQCAtMCww
ICsxLDI2NyBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTktMjAyMiBJZ2FsaWEgUy5MLiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwg
R3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNh
biByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBv
ZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVk
IGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBv
ZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAq
CisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2ls
bCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4g
dGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBG
T1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFs
IFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2
ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBM
aWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVl
IFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0
aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNl
CisKKyNpZiBFTkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNs
dWRlICJHVW5pcXVlUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFFbmRwb2ludENvbmZp
Z3VyYXRpb24uaCIKKyNpbmNsdWRlICJQZWVyQ29ubmVjdGlvbkJhY2tlbmQuaCIKKyNpbmNsdWRl
ICJSVENCdW5kbGVQb2xpY3kuaCIKKyNpbmNsdWRlICJSVENDZXJ0aWZpY2F0ZS5oIgorI2luY2x1
ZGUgIlJUQ0R0bHNUcmFuc3BvcnQuaCIKKyNpbmNsdWRlICJSVENFcnJvci5oIgorI2luY2x1ZGUg
IlJUQ0ljZUNvbm5lY3Rpb25TdGF0ZS5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFBvbGlj
eS5oIgorI2luY2x1ZGUgIlJUQ0ljZVRyYW5zcG9ydFN0YXRlLmgiCisjaW5jbHVkZSAiUlRDUnRw
U2VuZFBhcmFtZXRlcnMuaCIKKyNpbmNsdWRlICJSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbi5o
IgorI2luY2x1ZGUgIlJUQ1NkcFR5cGUuaCIKKyNpbmNsdWRlICJSVENTaWduYWxpbmdTdGF0ZS5o
IgorCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0L3dlYnJ0Yy93
ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2lubGluZSBSVENSdHBUcmFuc2NlaXZlckRpcmVjdGlvbiB0b1JUQ1J0cFRyYW5zY2Vp
dmVyRGlyZWN0aW9uKEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyRGlyZWN0aW9uIGRpcmVjdGlvbikK
K3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgR1NUX1dFQlJUQ19SVFBfVFJB
TlNDRUlWRVJfRElSRUNUSU9OX05PTkU6CisgICAgICAgIC8vIMKvXF8o44OEKV8vwq8KKyAgICAg
ICAgcmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBjYXNl
IEdTVF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9JTkFDVElWRToKKyAgICAgICAg
cmV0dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpJbmFjdGl2ZTsKKyAgICBjYXNlIEdT
VF9XRUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5ET05MWToKKyAgICAgICAgcmV0
dXJuIFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kb25seTsKKyAgICBjYXNlIEdTVF9X
RUJSVENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9SRUNWT05MWToKKyAgICAgICAgcmV0dXJu
IFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpSZWN2b25seTsKKyAgICBjYXNlIEdTVF9XRUJS
VENfUlRQX1RSQU5TQ0VJVkVSX0RJUkVDVElPTl9TRU5EUkVDVjoKKyAgICAgICAgcmV0dXJuIFJU
Q1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uOjpTZW5kcmVjdjsKKyAgICB9CisgICAgUkVMRUFTRV9B
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDUnRwVHJhbnNjZWl2ZXJEaXJlY3Rp
b246OkluYWN0aXZlOworfQorCitpbmxpbmUgR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXJEaXJlY3Rp
b24gZnJvbVJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0aW9uKFJUQ1J0cFRyYW5zY2VpdmVyRGlyZWN0
aW9uIGRpcmVjdGlvbikKK3sKKyAgICBzd2l0Y2ggKGRpcmVjdGlvbikgeworICAgIGNhc2UgUlRD
UnRwVHJhbnNjZWl2ZXJEaXJlY3Rpb246OkluYWN0aXZlOgorICAgICAgICByZXR1cm4gR1NUX1dF
QlJUQ19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX0lOQUNUSVZFOworICAgIGNhc2UgUlRDUnRw
VHJhbnNjZWl2ZXJEaXJlY3Rpb246OlNlbmRvbmx5OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJU
Q19SVFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1NFTkRPTkxZOworICAgIGNhc2UgUlRDUnRwVHJh
bnNjZWl2ZXJEaXJlY3Rpb246OlJlY3Zvbmx5OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19S
VFBfVFJBTlNDRUlWRVJfRElSRUNUSU9OX1JFQ1ZPTkxZOworICAgIGNhc2UgUlRDUnRwVHJhbnNj
ZWl2ZXJEaXJlY3Rpb246OlNlbmRyZWN2OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19SVFBf
VFJBTlNDRUlWRVJfRElSRUNUSU9OX1NFTkRSRUNWOworICAgIH0KKyAgICBSRUxFQVNFX0FTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX1JUUF9UUkFOU0NFSVZFUl9E
SVJFQ1RJT05fTk9ORTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENTRFBUeXBlIHRvU2Vz
c2lvbkRlc2NyaXB0aW9uVHlwZShSVENTZHBUeXBlIHNkcFR5cGUpCit7CisgICAgc3dpdGNoIChz
ZHBUeXBlKSB7CisgICAgY2FzZSBSVENTZHBUeXBlOjpPZmZlcjoKKyAgICAgICAgcmV0dXJuIEdT
VF9XRUJSVENfU0RQX1RZUEVfT0ZGRVI7CisgICAgY2FzZSBSVENTZHBUeXBlOjpQcmFuc3dlcjoK
KyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfU0RQX1RZUEVfUFJBTlNXRVI7CisgICAgY2FzZSBS
VENTZHBUeXBlOjpBbnN3ZXI6CisgICAgICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX0FO
U1dFUjsKKyAgICBjYXNlIFJUQ1NkcFR5cGU6OlJvbGxiYWNrOgorICAgICAgICByZXR1cm4gR1NU
X1dFQlJUQ19TRFBfVFlQRV9ST0xMQkFDSzsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBHU1RfV0VCUlRDX1NEUF9UWVBFX09GRkVSOworfQor
CitzdGF0aWMgaW5saW5lIFJUQ1NkcFR5cGUgZnJvbVNlc3Npb25EZXNjcmlwdGlvblR5cGUoY29u
c3QgR3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uJiBkZXNjcmlwdGlvbikKK3sKKyAgICBhdXRv
IHR5cGUgPSBkZXNjcmlwdGlvbi50eXBlOworICAgIGlmICh0eXBlID09IEdTVF9XRUJSVENfU0RQ
X1RZUEVfT0ZGRVIpCisgICAgICAgIHJldHVybiBSVENTZHBUeXBlOjpPZmZlcjsKKyAgICBpZiAo
dHlwZSA9PSBHU1RfV0VCUlRDX1NEUF9UWVBFX0FOU1dFUikKKyAgICAgICAgcmV0dXJuIFJUQ1Nk
cFR5cGU6OkFuc3dlcjsKKyAgICBBU1NFUlQodHlwZSA9PSBHU1RfV0VCUlRDX1NEUF9UWVBFX1BS
QU5TV0VSKTsKKyAgICByZXR1cm4gUlRDU2RwVHlwZTo6UHJhbnN3ZXI7Cit9CisKK3N0YXRpYyBp
bmxpbmUgUlRDU2lnbmFsaW5nU3RhdGUgdG9TaWduYWxpbmdTdGF0ZShHc3RXZWJSVENTaWduYWxp
bmdTdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2ggKHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VC
UlRDX1NJR05BTElOR19TVEFURV9TVEFCTEU6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdT
dGF0ZTo6U3RhYmxlOworICAgIGNhc2UgR1NUX1dFQlJUQ19TSUdOQUxJTkdfU1RBVEVfSEFWRV9M
T0NBTF9PRkZFUjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlTG9jYWxP
ZmZlcjsKKyAgICBjYXNlIEdTVF9XRUJSVENfU0lHTkFMSU5HX1NUQVRFX0hBVkVfTE9DQUxfUFJB
TlNXRVI6CisgICAgICAgIHJldHVybiBSVENTaWduYWxpbmdTdGF0ZTo6SGF2ZUxvY2FsUHJhbnN3
ZXI7CisgICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX1JFTU9URV9PRkZF
UjoKKyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlUmVtb3RlT2ZmZXI7Cisg
ICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9IQVZFX1JFTU9URV9QUkFOU1dFUjoK
KyAgICAgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpIYXZlUmVtb3RlUHJhbnN3ZXI7Cisg
ICAgY2FzZSBHU1RfV0VCUlRDX1NJR05BTElOR19TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVy
biBSVENTaWduYWxpbmdTdGF0ZTo6Q2xvc2VkOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIFJUQ1NpZ25hbGluZ1N0YXRlOjpTdGFibGU7Cit9
CisKK3N0YXRpYyBpbmxpbmUgUlRDSWNlQ29ubmVjdGlvblN0YXRlIHRvUlRDSWNlQ29ubmVjdGlv
blN0YXRlKEdzdFdlYlJUQ0lDRUNvbm5lY3Rpb25TdGF0ZSBzdGF0ZSkKK3sKKyAgICBzd2l0Y2gg
KHN0YXRlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX05FVzoK
KyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6TmV3OworICAgIGNhc2UgR1NU
X1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DSEVDS0lORzoKKyAgICAgICAgcmV0dXJuIFJU
Q0ljZUNvbm5lY3Rpb25TdGF0ZTo6Q2hlY2tpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9D
T05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZUNvbm5lY3Rp
b25TdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9T
VEFURV9DT01QTEVURUQ6CisgICAgICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6OkNv
bXBsZXRlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfRkFJTEVE
OgorICAgICAgICByZXR1cm4gUlRDSWNlQ29ubmVjdGlvblN0YXRlOjpGYWlsZWQ7CisgICAgY2Fz
ZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0RJU0NPTk5FQ1RFRDoKKyAgICAgICAg
cmV0dXJuIFJUQ0ljZUNvbm5lY3Rpb25TdGF0ZTo6RGlzY29ubmVjdGVkOworICAgIGNhc2UgR1NU
X1dFQlJUQ19JQ0VfQ09OTkVDVElPTl9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENJ
Y2VDb25uZWN0aW9uU3RhdGU6OkNsb3NlZDsKKyAgICB9CisKKyAgICBSRUxFQVNFX0FTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBSVENJY2VDb25uZWN0aW9uU3RhdGU6Ok5ldzsKK30K
Kworc3RhdGljIGlubGluZSBSVENEdGxzVHJhbnNwb3J0U3RhdGUgdG9SVENEdGxzVHJhbnNwb3J0
U3RhdGUoR3N0V2ViUlRDRFRMU1RyYW5zcG9ydFN0YXRlIHN0YXRlKQoreworICAgIHN3aXRjaCAo
c3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVfTkVXOgor
ICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpOZXc7CisgICAgY2FzZSBHU1Rf
V0VCUlRDX0RUTFNfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RJTkc6CisgICAgICAgIHJldHVybiBS
VENEdGxzVHJhbnNwb3J0U3RhdGU6OkNvbm5lY3Rpbmc7CisgICAgY2FzZSBHU1RfV0VCUlRDX0RU
TFNfVFJBTlNQT1JUX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0R0bHNUcmFu
c3BvcnRTdGF0ZTo6Q29ubmVjdGVkOworICAgIGNhc2UgR1NUX1dFQlJUQ19EVExTX1RSQU5TUE9S
VF9TVEFURV9DTE9TRUQ6CisgICAgICAgIHJldHVybiBSVENEdGxzVHJhbnNwb3J0U3RhdGU6OkNs
b3NlZDsKKyAgICBjYXNlIEdTVF9XRUJSVENfRFRMU19UUkFOU1BPUlRfU1RBVEVfRkFJTEVEOgor
ICAgICAgICByZXR1cm4gUlRDRHRsc1RyYW5zcG9ydFN0YXRlOjpGYWlsZWQ7CisgICAgfQorCisg
ICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlubGluZSBSVENJ
Y2VUcmFuc3BvcnRTdGF0ZSB0b1JUQ0ljZVRyYW5zcG9ydFN0YXRlKEdzdFdlYlJUQ0lDRUNvbm5l
Y3Rpb25TdGF0ZSBzdGF0ZSkKK3sKKyAgICAvLyBGSVhNRTogTm8gR3N0V2ViUlRDSUNFVHJhbnNw
b3J0U3RhdGUgPworICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNF
X0NPTk5FQ1RJT05fU1RBVEVfTkVXOgorICAgICAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0U3Rh
dGU6Ok5ldzsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0NPTk5FQ1RJT05fU1RBVEVfQ0hFQ0tJ
Tkc6CisgICAgICAgIHJldHVybiBSVENJY2VUcmFuc3BvcnRTdGF0ZTo6Q2hlY2tpbmc7CisgICAg
Y2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NPTk5FQ1RFRDoKKyAgICAgICAg
cmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDb25uZWN0ZWQ7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NPTVBMRVRFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0lj
ZVRyYW5zcG9ydFN0YXRlOjpDb21wbGV0ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05O
RUNUSU9OX1NUQVRFX0ZBSUxFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRl
OjpGYWlsZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0RJU0NP
Tk5FQ1RFRDoKKyAgICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpEaXNjb25uZWN0
ZWQ7CisgICAgY2FzZSBHU1RfV0VCUlRDX0lDRV9DT05ORUNUSU9OX1NUQVRFX0NMT1NFRDoKKyAg
ICAgICAgcmV0dXJuIFJUQ0ljZVRyYW5zcG9ydFN0YXRlOjpDbG9zZWQ7CisgICAgfQorCisgICAg
UkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gUlRDSWNlVHJhbnNwb3J0
U3RhdGU6Ok5ldzsKK30KKworc3RhdGljIGlubGluZSBSVENJY2VHYXRoZXJpbmdTdGF0ZSB0b1JU
Q0ljZUdhdGhlcmluZ1N0YXRlKEdzdFdlYlJUQ0lDRUdhdGhlcmluZ1N0YXRlIHN0YXRlKQorewor
ICAgIHN3aXRjaCAoc3RhdGUpIHsKKyAgICBjYXNlIEdTVF9XRUJSVENfSUNFX0dBVEhFUklOR19T
VEFURV9ORVc6CisgICAgICAgIHJldHVybiBSVENJY2VHYXRoZXJpbmdTdGF0ZTo6TmV3OworICAg
IGNhc2UgR1NUX1dFQlJUQ19JQ0VfR0FUSEVSSU5HX1NUQVRFX0dBVEhFUklORzoKKyAgICAgICAg
cmV0dXJuIFJUQ0ljZUdhdGhlcmluZ1N0YXRlOjpHYXRoZXJpbmc7CisgICAgY2FzZSBHU1RfV0VC
UlRDX0lDRV9HQVRIRVJJTkdfU1RBVEVfQ09NUExFVEU6CisgICAgICAgIHJldHVybiBSVENJY2VH
YXRoZXJpbmdTdGF0ZTo6Q29tcGxldGU7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9U
X1JFQUNIRUQoKTsKK30KKworc3RhdGljIGlubGluZSBHc3RXZWJSVENCdW5kbGVQb2xpY3kgYnVu
ZGxlUG9saWN5RnJvbUNvbmZpZ3VyYXRpb24oY29uc3QgTWVkaWFFbmRwb2ludENvbmZpZ3VyYXRp
b24mIGNvbmZpZ3VyYXRpb24pCit7CisgICAgc3dpdGNoIChjb25maWd1cmF0aW9uLmJ1bmRsZVBv
bGljeSkgeworICAgIGNhc2UgUlRDQnVuZGxlUG9saWN5OjpCYWxhbmNlZDoKKyAgICAgICAgcmV0
dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElDWV9CQUxBTkNFRDsKKyAgICBjYXNlIFJUQ0J1bmRs
ZVBvbGljeTo6TWF4Q29tcGF0OgorICAgICAgICByZXR1cm4gR1NUX1dFQlJUQ19CVU5ETEVfUE9M
SUNZX01BWF9DT01QQVQ7CisgICAgY2FzZSBSVENCdW5kbGVQb2xpY3k6Ok1heEJ1bmRsZToKKyAg
ICAgICAgcmV0dXJuIEdTVF9XRUJSVENfQlVORExFX1BPTElDWV9NQVhfQlVORExFOworICAgIH0K
KworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJuIEdTVF9XRUJS
VENfQlVORExFX1BPTElDWV9OT05FOworfQorCitzdGF0aWMgaW5saW5lIEdzdFdlYlJUQ0lDRVRy
YW5zcG9ydFBvbGljeSBpY2VUcmFuc3BvcnRQb2xpY3lGcm9tQ29uZmlndXJhdGlvbihjb25zdCBN
ZWRpYUVuZHBvaW50Q29uZmlndXJhdGlvbiYgY29uZmlndXJhdGlvbikKK3sKKyAgICBzd2l0Y2gg
KGNvbmZpZ3VyYXRpb24uaWNlVHJhbnNwb3J0UG9saWN5KSB7CisgICAgY2FzZSBSVENJY2VUcmFu
c3BvcnRQb2xpY3k6OkFsbDoKKyAgICAgICAgcmV0dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5TUE9S
VF9QT0xJQ1lfQUxMOworICAgIGNhc2UgUlRDSWNlVHJhbnNwb3J0UG9saWN5OjpSZWxheToKKyAg
ICAgICAgcmV0dXJuIEdTVF9XRUJSVENfSUNFX1RSQU5TUE9SVF9QT0xJQ1lfUkVMQVk7CisgICAg
fQorCisgICAgUkVMRUFTRV9BU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gR1NUX1dF
QlJUQ19JQ0VfVFJBTlNQT1JUX1BPTElDWV9BTEw7Cit9CisKK3N0YXRpYyBpbmxpbmUgc3RkOjpv
cHRpb25hbDxSVENFcnJvckRldGFpbFR5cGU+IHRvUlRDRXJyb3JEZXRhaWxUeXBlKEdzdFdlYlJU
Q0Vycm9yIGNvZGUpCit7CisgICAgc3dpdGNoIChjb2RlKSB7CisgICAgY2FzZSBHU1RfV0VCUlRD
X0VSUk9SX0RBVEFfQ0hBTk5FTF9GQUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJyb3JEZXRh
aWxUeXBlOjpEYXRhQ2hhbm5lbEZhaWx1cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0RU
TFNfRkFJTFVSRToKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6RHRsc0ZhaWx1
cmU7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0ZJTkdFUlBSSU5UX0ZBSUxVUkU6CisgICAg
ICAgIHJldHVybiBSVENFcnJvckRldGFpbFR5cGU6OkZpbmdlcnByaW50RmFpbHVyZTsKKyAgICBj
YXNlIEdTVF9XRUJSVENfRVJST1JfU0NUUF9GQUlMVVJFOgorICAgICAgICByZXR1cm4gUlRDRXJy
b3JEZXRhaWxUeXBlOjpTY3RwRmFpbHVyZTsKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfU0RQ
X1NZTlRBWF9FUlJPUjoKKyAgICAgICAgcmV0dXJuIFJUQ0Vycm9yRGV0YWlsVHlwZTo6U2RwU3lu
dGF4RXJyb3I7CisgICAgY2FzZSBHU1RfV0VCUlRDX0VSUk9SX0hBUkRXQVJFX0VOQ09ERVJfTk9U
X0FWQUlMQUJMRToKKyAgICBjYXNlIEdTVF9XRUJSVENfRVJST1JfRU5DT0RFUl9FUlJPUjoKKyAg
ICAgICAgLy8gRklYTUUKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4geyB9OworICAgIH07
Cit9CisKK1JlZlB0cjxSVENFcnJvcj4gdG9SVENFcnJvcihHRXJyb3IqKTsKKworR1VuaXF1ZVB0
cjxHc3RTdHJ1Y3R1cmU+IGZyb21SVENFbmNvZGluZ1BhcmFtZXRlcnMoY29uc3QgUlRDUnRwRW5j
b2RpbmdQYXJhbWV0ZXJzJik7CitSVENSdHBTZW5kUGFyYW1ldGVycyB0b1JUQ1J0cFNlbmRQYXJh
bWV0ZXJzKGNvbnN0IEdzdFN0cnVjdHVyZSopOworCitzdGQ6Om9wdGlvbmFsPFJlZjxSVENDZXJ0
aWZpY2F0ZT4+IGdlbmVyYXRlQ2VydGlmaWNhdGUoUmVmPFNlY3VyaXR5T3JpZ2luPiYmLCBjb25z
dCBQZWVyQ29ubmVjdGlvbkJhY2tlbmQ6OkNlcnRpZmljYXRlSW5mb3JtYXRpb24mKTsKKworYm9v
bCBzZHBNZWRpYUhhc0F0dHJpYnV0ZUtleShjb25zdCBHc3RTRFBNZWRpYSosIGNvbnN0IGNoYXIq
IGtleSk7CisKK30KKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
R1N0cmVhbWVyLmNtYWtlIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vR1N0cmVhbWVyLmNtYWtl
CmluZGV4IGIzZGNjY2JkOTc0Yzg3NzcxZmFjZjU5YTM5NmQ0ZjQwODE2MGNjNTkuLjc0ZjViNjE5
YmYxMjFkOGI1NDFiMmI5M2M5YjkxM2I5ZTAxZjZiM2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL0dTdHJlYW1lci5jbWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9HU3RyZWFtZXIuY21ha2UKQEAgLTEsNSArMSw2IEBACiBpZiAoRU5BQkxFX1ZJREVPIE9SIEVO
QUJMRV9XRUJfQVVESU8pCiAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9QUklWQVRFX0lOQ0xVREVf
RElSRUNUT1JJRVMKKyAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L01vZHVsZXMvbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyIgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyIgogICAgICAgICAiJHtXRUJDT1JFX0RJUn0vcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVh
bWVyL21zZSIKICAgICAgICAgIiR7V0VCQ09SRV9ESVJ9L3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJl
YW1lci9lbWUiCkBAIC03LDcgKzgsMjMgQEAgaWYgKEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VC
X0FVRElPKQogICAgICkKIAogICAgIGxpc3QoQVBQRU5EIFdlYkNvcmVfU09VUkNFUworICAgICAg
ICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJEYXRhQ2hhbm5lbEhhbmRs
ZXIuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckR0
bHNUcmFuc3BvcnRCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJl
YW1lci9HU3RyZWFtZXJJY2VUcmFuc3BvcnRCYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYUVuZHBvaW50LmNwcAorICAgICAgICBN
b2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJQZWVyQ29ubmVjdGlvbkJhY2tl
bmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0
cFJlY2VpdmVyQmFja2VuZC5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyUnRwUmVjZWl2ZXJUcmFuc2Zvcm1CYWNrZW5kLmNwcAorICAgICAgICBNb2R1
bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJCYWNrZW5kLmNwcAor
ICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJSdHBTZW5kZXJU
cmFuc2Zvcm1CYWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1l
ci9HU3RyZWFtZXJSdHBUcmFuc2NlaXZlckJhY2tlbmQuY3BwCisgICAgICAgIE1vZHVsZXMvbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclJ0cFRyYW5zZm9ybUJhY2tlbmQuY3BwCisgICAg
ICAgIE1vZHVsZXMvbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclNjdHBUcmFuc3BvcnRC
YWNrZW5kLmNwcAorICAgICAgICBNb2R1bGVzL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJTdGF0c0NvbGxlY3Rvci5jcHAKKyAgICAgICAgTW9kdWxlcy9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyV2ViUlRDVXRpbHMuY3BwCisKICAgICAgICAgTW9kdWxlcy93ZWJhdWRpby9N
ZWRpYVN0cmVhbUF1ZGlvU291cmNlR1N0cmVhbWVyLmNwcAorCiAgICAgICAgIHBsYXRmb3JtL2dy
YXBoaWNzL2dzdHJlYW1lci9BdWRpb1RyYWNrUHJpdmF0ZUdTdHJlYW1lci5jcHAKICAgICAgICAg
cGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0RNQUJ1ZlZpZGVvU2lua0dTdHJlYW1lci5jcHAK
ICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dMVmlkZW9TaW5rR1N0cmVhbWVy
LmNwcApAQCAtNjUsNiArODIsNyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVE
SU8pCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRp
b0NhcHR1cmVyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyQ2FwdHVyZURldmljZU1hbmFnZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJDYXB0dXJlci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcAogICAgICAg
ICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyRGlzcGxheUNhcHR1cmVE
ZXZpY2VNYW5hZ2VyLmNwcAogICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIv
R1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL21lZGlhc3Ry
ZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuY3BwCkBAIC03Miw3ICs5
MCwxMyBAQCBpZiAoRU5BQkxFX1ZJREVPIE9SIEVOQUJMRV9XRUJfQVVESU8pCiAgICAgICAgIHBs
YXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJWaWRlb0VuY29kZXIuY3BwCiAg
ICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9Nb2NrUmVhbHRpbWVBdWRpb1Nv
dXJjZUdTdHJlYW1lci5jcHAKICAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L01vY2tSZWFsdGltZVZpZGVvU291cmNlR1N0cmVhbWVyLmNwcAorICAgICAgICBwbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
LmNwcAorICAgICAgICBwbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNv
bWluZ1NvdXJjZUdTdHJlYW1lci5jcHAKKyAgICAgICAgcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5jcHAKICAgICAgICAg
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lTWVkaWFTb3VyY2VDZW50ZXJH
U3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFs
dGltZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIuY3BwCisgICAgICAgIHBsYXRmb3JtL21l
ZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIu
Y3BwCisgICAgICAgIHBsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdv
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCiAgICAgKQogCiAgICAgbGlzdChBUFBFTkQgV2Vi
Q29yZV9QUklWQVRFX0ZSQU1FV09SS19IRUFERVJTCkBAIC0xNjIsNyArMTg2LDcgQEAgaWYgKEVO
QUJMRV9WSURFTykKICAgICAgICAgKQogICAgIGVuZGlmICgpCiAKLSAgICBpZiAoRU5BQkxFX01F
RElBX1NUUkVBTSBPUiBFTkFCTEVfV0VCX1JUQykKKyAgICBpZiAoVVNFX0xJQldFQlJUQykKICAg
ICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUwogICAg
ICAgICAgICAgJHtHU1RSRUFNRVJfQ09ERUNQQVJTRVJTX0lOQ0xVREVfRElSU30KICAgICAgICAg
KQpAQCAtMTcxLDYgKzE5NSwyMSBAQCBpZiAoRU5BQkxFX1ZJREVPKQogICAgICAgICAgICAgICAg
ICR7R1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJRVN9CiAgICAgICAgICAgICApCiAgICAg
ICAgIGVuZGlmICgpCisgICAgZWxzZWlmIChVU0VfR1NUUkVBTUVSX1dFQlJUQykKKyAgICAgICAg
bGlzdChBUFBFTkQgV2ViQ29yZV9TWVNURU1fSU5DTFVERV9ESVJFQ1RPUklFUworICAgICAgICAg
ICAgJHtHU1RSRUFNRVJfUlRQX0lOQ0xVREVfRElSU30KKyAgICAgICAgICAgICR7R1NUUkVBTUVS
X1NEUF9JTkNMVURFX0RJUlN9CisgICAgICAgICAgICAke0dTVFJFQU1FUl9XRUJSVENfSU5DTFVE
RV9ESVJTfQorICAgICAgICApCisgICAgICAgIGlmIChOT1QgVVNFX0dTVFJFQU1FUl9GVUxMKQor
ICAgICAgICAgICAgbGlzdChBUFBFTkQgV2ViQ29yZV9MSUJSQVJJRVMKKyAgICAgICAgICAgICAg
ICAke0dTVFJFQU1FUl9SVFBfTElCUkFSSUVTfQorICAgICAgICAgICAgICAgICR7R1NUUkVBTUVS
X1NEUF9MSUJSQVJJRVN9CisgICAgICAgICAgICAgICAgJHtHU1RSRUFNRVJfV0VCUlRDX0xJQlJB
UklFU30KKyAgICAgICAgICAgICkKKyAgICAgICAgZW5kaWYgKCkKKworICAgICAgICBsaXN0KEFQ
UEVORCBXZWJDb3JlX0xJQlJBUklFUyBPcGVuU1NMOjpDcnlwdG8pCiAgICAgZW5kaWYgKCkKIGVu
ZGlmICgpCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJl
YW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9BdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyLmNwcApp
bmRleCBiNGQ1ZjY3MDNlOTI5ZWRmMTdmMTA5ZWY2NDgxMzBhY2UwMzhjYWM0Li5hMWFjZTk3NjFk
YTJjZTJhYWQ0NjQyMWI5YmU2ZGY4ZDNhOWU1NDkxIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvQXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0cmVhbWVyL0F1ZGlvU291
cmNlUHJvdmlkZXJHU3RyZWFtZXIuY3BwCkBAIC0xMDAsMTAgKzEwMCw1OCBAQCBBdWRpb1NvdXJj
ZVByb3ZpZGVyR1N0cmVhbWVyOjpBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyKE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YQogCiAgICAgbV9hdWRpb1NpbmtCaW4gPSBnc3RfcGFyc2VfYmluX2Zyb21f
ZGVzY3JpcHRpb24oInRlZSBuYW1lPWF1ZGlvVGVlIiwgdHJ1ZSwgbnVsbHB0cik7CiAKLSAgICBn
c3RfYmluX2FkZF9tYW55KEdTVF9CSU5fQ0FTVChtX3BpcGVsaW5lLmdldCgpKSwgc3JjLCBtX2F1
ZGlvU2lua0Jpbi5nZXQoKSwgbnVsbHB0cik7Ci0gICAgZ3N0X2VsZW1lbnRfbGluayhzcmMsIG1f
YXVkaW9TaW5rQmluLmdldCgpKTsKKyAgICBhdXRvKiBkZWNvZGViaW4gPSBtYWtlR1N0cmVhbWVy
RWxlbWVudCgiZGVjb2RlYmluMyIsIG51bGxwdHIpOworICAgIGdfc2lnbmFsX2Nvbm5lY3Rfc3dh
cHBlZChkZWNvZGViaW4sICJwYWQtYWRkZWQiLCBHX0NBTExCQUNLKCtbXShBdWRpb1NvdXJjZVBy
b3ZpZGVyR1N0cmVhbWVyKiBwcm92aWRlciwgR3N0UGFkKiBwYWQpIHsKKyAgICAgICAgYXV0byBw
YWRDYXBzID0gYWRvcHRHUmVmKGdzdF9wYWRfcXVlcnlfY2FwcyhwYWQsIG51bGxwdHIpKTsKKyAg
ICAgICAgYm9vbCBpc0F1ZGlvID0gZG9DYXBzSGF2ZVR5cGUocGFkQ2Fwcy5nZXQoKSwgImF1ZGlv
Iik7CisgICAgICAgIGlmICh3ZWJraXRHc3RDaGVja1ZlcnNpb24oMSwgMTgsIDApKQorICAgICAg
ICAgICAgUkVMRUFTRV9BU1NFUlQoaXNBdWRpbyk7CisgICAgICAgIGVsc2UgaWYgKCFpc0F1ZGlv
KQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1Jl
Zihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZChwcm92aWRlci0+bV9hdWRpb1NpbmtCaW4uZ2V0
KCksICJzaW5rIikpOworICAgICAgICBnc3RfcGFkX2xpbmsocGFkLCBzaW5rUGFkLmdldCgpKTsK
KyAgICAgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChwcm92aWRlci0+bV9h
dWRpb1NpbmtCaW4uZ2V0KCkpOworICAgIH0pLCB0aGlzKTsKKworICAgIGdzdF9iaW5fYWRkX21h
bnkoR1NUX0JJTl9DQVNUKG1fcGlwZWxpbmUuZ2V0KCkpLCBzcmMsIGRlY29kZWJpbiwgbV9hdWRp
b1NpbmtCaW4uZ2V0KCksIG51bGxwdHIpOworICAgIGdzdF9lbGVtZW50X2xpbmsoc3JjLCBkZWNv
ZGViaW4pOworCisgICAgYXV0byBidXMgPSBhZG9wdEdSZWYoZ3N0X3BpcGVsaW5lX2dldF9idXMo
R1NUX1BJUEVMSU5FKG1fcGlwZWxpbmUuZ2V0KCkpKSk7CisgICAgQVNTRVJUKGJ1cyk7CisKKyAg
ICBnc3RfYnVzX3NldF9zeW5jX2hhbmRsZXIoYnVzLmdldCgpLCBbXShHc3RCdXMqLCBHc3RNZXNz
YWdlKiBtZXNzYWdlLCBncG9pbnRlciB1c2VyRGF0YSkgLT4gR3N0QnVzU3luY1JlcGx5IHsKKyAg
ICAgICAgYXV0byogZGVjb2RlYmluID0gR1NUX0VMRU1FTlRfQ0FTVCh1c2VyRGF0YSk7CisgICAg
ICAgIGlmIChHU1RfTUVTU0FHRV9UWVBFKG1lc3NhZ2UpICE9IEdTVF9NRVNTQUdFX1NUUkVBTV9D
T0xMRUNUSU9OIHx8IEdTVF9NRVNTQUdFX1NSQyhtZXNzYWdlKSAhPSBHU1RfT0JKRUNUX0NBU1Qo
ZGVjb2RlYmluKSkgeworICAgICAgICAgICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7Cisg
ICAgICAgICAgICByZXR1cm4gR1NUX0JVU19EUk9QOworICAgICAgICB9CisKKyAgICAgICAgR1Jl
ZlB0cjxHc3RTdHJlYW1Db2xsZWN0aW9uPiBjb2xsZWN0aW9uOworICAgICAgICBnc3RfbWVzc2Fn
ZV9wYXJzZV9zdHJlYW1fY29sbGVjdGlvbihtZXNzYWdlLCAmY29sbGVjdGlvbi5vdXRQdHIoKSk7
CisgICAgICAgIGlmICghY29sbGVjdGlvbikgeworICAgICAgICAgICAgZ3N0X21lc3NhZ2VfdW5y
ZWYobWVzc2FnZSk7CisgICAgICAgICAgICByZXR1cm4gR1NUX0JVU19EUk9QOworICAgICAgICB9
CisKKyAgICAgICAgdW5zaWduZWQgc2l6ZSA9IGdzdF9zdHJlYW1fY29sbGVjdGlvbl9nZXRfc2l6
ZShjb2xsZWN0aW9uLmdldCgpKTsKKyAgICAgICAgR0xpc3QqIHN0cmVhbXMgPSBudWxscHRyOwor
ICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgc2l6ZTsgaSsrKSB7CisgICAgICAgICAg
ICBhdXRvKiBzdHJlYW0gPSBnc3Rfc3RyZWFtX2NvbGxlY3Rpb25fZ2V0X3N0cmVhbShjb2xsZWN0
aW9uLmdldCgpLCBpKTsKKyAgICAgICAgICAgIGF1dG8gc3RyZWFtVHlwZSA9IGdzdF9zdHJlYW1f
Z2V0X3N0cmVhbV90eXBlKHN0cmVhbSk7CisgICAgICAgICAgICBpZiAoc3RyZWFtVHlwZSA9PSBH
U1RfU1RSRUFNX1RZUEVfQVVESU8pIHsKKyAgICAgICAgICAgICAgICBzdHJlYW1zID0gZ19saXN0
X2FwcGVuZChzdHJlYW1zLCBjb25zdF9jYXN0PGNoYXIqPihnc3Rfc3RyZWFtX2dldF9zdHJlYW1f
aWQoc3RyZWFtKSkpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICAgIGlmIChzdHJlYW1zKSB7CisgICAgICAgICAgICBnc3RfZWxlbWVudF9z
ZW5kX2V2ZW50KGRlY29kZWJpbiwgZ3N0X2V2ZW50X25ld19zZWxlY3Rfc3RyZWFtcyhzdHJlYW1z
KSk7CisgICAgICAgICAgICBnX2xpc3RfZnJlZShzdHJlYW1zKTsKKyAgICAgICAgfQogCi0gICAg
Y29ubmVjdFNpbXBsZUJ1c01lc3NhZ2VDYWxsYmFjayhtX3BpcGVsaW5lLmdldCgpKTsKKyAgICAg
ICAgZ3N0X21lc3NhZ2VfdW5yZWYobWVzc2FnZSk7CisgICAgICAgIHJldHVybiBHU1RfQlVTX0RS
T1A7CisgICAgfSwgZ3N0X29iamVjdF9yZWYoZGVjb2RlYmluKSwgZ3N0X29iamVjdF91bnJlZik7
CiB9CiAjZW5kaWYKIApAQCAtMTIwLDEwICsxNjgsOCBAQCBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0
cmVhbWVyOjp+QXVkaW9Tb3VyY2VQcm92aWRlckdTdHJlYW1lcigpCiAKICAgICBzZXRDbGllbnQo
bnVsbHB0cik7CiAjaWYgRU5BQkxFKE1FRElBX1NUUkVBTSkKLSAgICBpZiAobV9waXBlbGluZSkg
ewotICAgICAgICBkaXNjb25uZWN0U2ltcGxlQnVzTWVzc2FnZUNhbGxiYWNrKG1fcGlwZWxpbmUu
Z2V0KCkpOworICAgIGlmIChtX3BpcGVsaW5lKQogICAgICAgICBnc3RfZWxlbWVudF9zZXRfc3Rh
dGUobV9waXBlbGluZS5nZXQoKSwgR1NUX1NUQVRFX05VTEwpOwotICAgIH0KICNlbmRpZgogfQog
CkBAIC0zNDUsNyArMzkxLDYgQEAgdm9pZCBBdWRpb1NvdXJjZVByb3ZpZGVyR1N0cmVhbWVyOjpo
YW5kbGVOZXdEZWludGVybGVhdmVQYWQoR3N0UGFkKiBwYWQpCiAKICAgICBHUXVhcmsgcXVhcmsg
PSBnX3F1YXJrX2Zyb21fc3RhdGljX3N0cmluZygicGVlciIpOwogICAgIGdfb2JqZWN0X3NldF9x
ZGF0YShHX09CSkVDVChwYWQpLCBxdWFyaywgc2lua1BhZC5nZXQoKSk7Ci0KICAgICBtX2RlaW50
ZXJsZWF2ZVNvdXJjZVBhZHMrKzsKICAgICBHUXVhcmsgY2hhbm5lbElkUXVhcmsgPSBnX3F1YXJr
X2Zyb21fc3RhdGljX3N0cmluZygiY2hhbm5lbC1pZCIpOwogICAgIGdfb2JqZWN0X3NldF9xZGF0
YShHX09CSkVDVChzaW5rKSwgY2hhbm5lbElkUXVhcmssIEdJTlRfVE9fUE9JTlRFUihtX2RlaW50
ZXJsZWF2ZVNvdXJjZVBhZHMpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2F1ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9hdWRpby9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbi5oCmluZGV4IDZmMjg4NzJhZmIxMTc2ZTUxM2QyYmRmNTVhNjIyMWQ0ZjZmYjBh
ZTcuLmRkMzEzYjMxNDI0MDZjYWY1Nzk0ZWFjN2NjMmFmOGQ2NGU1NDVhYTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2F1ZGlvL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb1N0
cmVhbURlc2NyaXB0aW9uLmgKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vYXVkaW8vZ3N0
cmVhbWVyL0dTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24uaApAQCAtMzIsMTkgKzMyLDE2
IEBAIGNsYXNzIEdTdHJlYW1lckF1ZGlvU3RyZWFtRGVzY3JpcHRpb24gZmluYWw6IHB1YmxpYyBB
dWRpb1N0cmVhbURlc2NyaXB0aW9uIHsKIHB1YmxpYzoKICAgICBHU3RyZWFtZXJBdWRpb1N0cmVh
bURlc2NyaXB0aW9uKEdzdEF1ZGlvSW5mbyYmIGluZm8pCiAgICAgICAgIDogbV9pbmZvKFdURk1v
dmUoaW5mbykpCi0gICAgICAgICwgbV9jYXBzKGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19j
YXBzKCZtX2luZm8pKSkKICAgICB7CiAgICAgfQogCiAgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1E
ZXNjcmlwdGlvbihjb25zdCBHc3RBdWRpb0luZm8mIGluZm8pCiAgICAgICAgIDogbV9pbmZvKGlu
Zm8pCi0gICAgICAgICwgbV9jYXBzKGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZt
X2luZm8pKSkKICAgICB7CiAgICAgfQogCiAgICAgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlw
dGlvbihHc3RBdWRpb0luZm8qIGluZm8pCiAgICAgICAgIDogbV9pbmZvKCppbmZvKQotICAgICAg
ICAsIG1fY2FwcyhhZG9wdEdSZWYoZ3N0X2F1ZGlvX2luZm9fdG9fY2FwcygmbV9pbmZvKSkpCiAg
ICAgewogICAgIH0KIApAQCAtOTksNyArOTYsMTIgQEAgcHVibGljOgogICAgIGJvb2wgb3BlcmF0
b3I9PShjb25zdCBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uJiBvdGhlcikgeyByZXR1
cm4gZ3N0X2F1ZGlvX2luZm9faXNfZXF1YWwoJm1faW5mbywgJm90aGVyLm1faW5mbyk7IH0KICAg
ICBib29sIG9wZXJhdG9yIT0oY29uc3QgR1N0cmVhbWVyQXVkaW9TdHJlYW1EZXNjcmlwdGlvbiYg
b3RoZXIpIHsgcmV0dXJuICFvcGVyYXRvciA9PSAob3RoZXIpOyB9CiAKLSAgICBjb25zdCBHUmVm
UHRyPEdzdENhcHM+JiBjYXBzKCkgY29uc3QgeyByZXR1cm4gbV9jYXBzOyB9CisgICAgY29uc3Qg
R1JlZlB0cjxHc3RDYXBzPiYgY2FwcygpCisgICAgeworICAgICAgICBpZiAoIW1fY2FwcykKKyAg
ICAgICAgICAgIG1fY2FwcyA9IGFkb3B0R1JlZihnc3RfYXVkaW9faW5mb190b19jYXBzKCZtX2lu
Zm8pKTsKKyAgICAgICAgcmV0dXJuIG1fY2FwczsKKyAgICB9CiAgICAgY29uc3QgR3N0QXVkaW9J
bmZvJiBnZXRJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pbmZvOyB9CiAKIHByaXZhdGU6CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFtZXIvR1JlZlB0
ckdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3RyZWFt
ZXIvR1JlZlB0ckdTdHJlYW1lci5jcHAKaW5kZXggMzEwYmVhZDcyYTQ4Y2JkYjMzMGI0NTM3ZWUw
MTA2MmFhN2IyZDAwOC4uZDE2YjdjMGIwNTk1NGFlNmYwN2U3MzkzYzYxZWRmYzFlYTUzODMyZiAx
MDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dS
ZWZQdHJHU3RyZWFtZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HUmVmUHRyR1N0cmVhbWVyLmNwcApAQCAtMjcsNiArMjcsMTIgQEAKICNpbmNs
dWRlIDxnc3QvZ2wvZWdsL2dzdGVnbGltYWdlLmg+CiAjZW5kaWYKIAorI2lmIFVTRShHU1RSRUFN
RVJfV0VCUlRDKQorI2RlZmluZSBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2luY2x1ZGUgPGdzdC93
ZWJydGMvd2VicnRjLmg+CisjdW5kZWYgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNlbmRpZgorCiBu
YW1lc3BhY2UgV1RGIHsKIAogdGVtcGxhdGU8PiBHUmVmUHRyPEdzdE1pbmlPYmplY3Q+IGFkb3B0
R1JlZihHc3RNaW5pT2JqZWN0KiBwdHIpCkBAIC01ODQsMTMgKzU5MCwxNTAgQEAgR3N0RW5jb2Rp
bmdQcm9maWxlKiByZWZHUHRyPEdzdEVuY29kaW5nUHJvZmlsZT4oR3N0RW5jb2RpbmdQcm9maWxl
KiBwdHIpCiAgICAgcmV0dXJuIHB0cjsKIH0KIAotdGVtcGxhdGUgPD4KK3RlbXBsYXRlPD4KIHZv
aWQgZGVyZWZHUHRyPEdzdEVuY29kaW5nUHJvZmlsZT4oR3N0RW5jb2RpbmdQcm9maWxlKiBwdHIp
CiB7CiAgICAgaWYgKHB0cikKICAgICAgICAgZ3N0X2VuY29kaW5nX3Byb2ZpbGVfdW5yZWYocHRy
KTsKIH0KIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRy
PEdzdFdlYlJUQ1JUUFJlY2VpdmVyPiBhZG9wdEdSZWYoR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHB0
cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4ocHRyLCBHUmVm
UHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBSZWNlaXZlciogcmVmR1B0
cjxHc3RXZWJSVENSVFBSZWNlaXZlcj4oR3N0V2ViUlRDUlRQUmVjZWl2ZXIqIHB0cikKK3sKKyAg
ICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisg
ICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRD
UlRQUmVjZWl2ZXI+KEdzdFdlYlJUQ1JUUFJlY2VpdmVyKiBwdHIpCit7CisgICAgaWYgKHB0cikK
KyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0ZW1wbGF0ZSA8PiBHUmVmUHRy
PEdzdFdlYlJUQ1JUUFNlbmRlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFNlbmRlciogcHRyKQor
eworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4ocHRyLCBHUmVmUHRyQWRv
cHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBTZW5kZXIqIHJlZkdQdHI8R3N0V2Vi
UlRDUlRQU2VuZGVyPihHc3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQor
ICAgICAgICBnc3Rfb2JqZWN0X3JlZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0
cjsKK30KKwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDUlRQU2VuZGVyPihH
c3RXZWJSVENSVFBTZW5kZXIqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2Jq
ZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQVHJh
bnNjZWl2ZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcHRyKQoreworICAg
IHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihwdHIsIEdSZWZQdHJBZG9w
dCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyKiByZWZHUHRyPEdz
dFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcHRyKQorewor
ICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpFQ1QocHRyKSk7CisK
KyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJS
VENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqIHB0cikKK3sKKyAgICBp
ZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+
IEdSZWZQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+IGFkb3B0R1JlZihHc3RXZWJSVENEYXRhQ2hh
bm5lbCogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihw
dHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RhdGFDaGFubmVs
KiByZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCogcHRy
KQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdfb2JqZWN0X3JlZihHX09CSkVDVChwdHIpKTsK
KworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFdl
YlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hhbm5lbCogcHRyKQoreworICAgIGlmIChw
dHIpCisgICAgICAgIGdfb2JqZWN0X3VucmVmKHB0cik7Cit9CisKK3RlbXBsYXRlIDw+IEdSZWZQ
dHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQqIHB0cikKK3sKKyAgICByZXR1cm4gR1JlZlB0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0Pihw
dHIsIEdSZWZQdHJBZG9wdCk7Cit9CisKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0RUTFNUcmFuc3Bv
cnQqIHJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9y
dCogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdzdF9vYmplY3RfcmVmKEdTVF9PQkpF
Q1QocHRyKSk7CisKKyAgICByZXR1cm4gcHRyOworfQorCit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVm
R1B0cjxHc3RXZWJSVENEVExTVHJhbnNwb3J0PihHc3RXZWJSVENEVExTVHJhbnNwb3J0KiBwdHIp
Cit7CisgICAgaWYgKHB0cikKKyAgICAgICAgZ3N0X29iamVjdF91bnJlZihwdHIpOworfQorCit0
ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdl
YlJUQ0lDRVRyYW5zcG9ydCogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFdlYlJUQ0lD
RVRyYW5zcG9ydD4ocHRyLCBHUmVmUHRyQWRvcHQpOworfQorCit0ZW1wbGF0ZSA8PiBHc3RXZWJS
VENJQ0VUcmFuc3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJ
Q0VUcmFuc3BvcnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3Jl
ZihHU1RfT0JKRUNUKHB0cikpOworCisgICAgcmV0dXJuIHB0cjsKK30KKwordGVtcGxhdGUgPD4g
dm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDSUNFVHJhbnNwb3J0PihHc3RXZWJSVENJQ0VUcmFuc3Bv
cnQqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3Rfb2JqZWN0X3VucmVmKHB0cik7
Cit9CisKK3RlbXBsYXRlPD4gR1JlZlB0cjxHc3RQcm9taXNlPiBhZG9wdEdSZWYoR3N0UHJvbWlz
ZSogcHRyKQoreworICAgIHJldHVybiBHUmVmUHRyPEdzdFByb21pc2U+KHB0ciwgR1JlZlB0ckFk
b3B0KTsKK30KKwordGVtcGxhdGU8PiBHc3RQcm9taXNlKiByZWZHUHRyPEdzdFByb21pc2U+KEdz
dFByb21pc2UqIHB0cikKK3sKKyAgICBpZiAocHRyKQorICAgICAgICBnc3RfcHJvbWlzZV9yZWYo
cHRyKTsKKworICAgIHJldHVybiBwdHI7Cit9CisKK3RlbXBsYXRlPD4gdm9pZCBkZXJlZkdQdHI8
R3N0UHJvbWlzZT4oR3N0UHJvbWlzZSogcHRyKQoreworICAgIGlmIChwdHIpCisgICAgICAgIGdz
dF9wcm9taXNlX3VucmVmKHB0cik7Cit9CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKwogfSAvLyBuYW1lc3BhY2UgV1RGCiAKICNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQ
dHJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1l
ci9HUmVmUHRyR1N0cmVhbWVyLmgKaW5kZXggN2EwYjVhMTFkZGZhODE2NzA5Njg4ZTgxMzY2ZGI3
YjViMzVkM2E0MS4uZjlkZWFlZGY1MGZlYjk1Mzg4ZDI1ZjczMGRiZGM2ODJmYzRlYWExZCAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVyL0dSZWZQ
dHJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nc3Ry
ZWFtZXIvR1JlZlB0ckdTdHJlYW1lci5oCkBAIC0zNCw2ICszNCwxNiBAQCB0eXBlZGVmIHN0cnVj
dCBfR3N0R0xDb250ZXh0IEdzdEdMQ29udGV4dDsKIHR5cGVkZWYgc3RydWN0IF9Hc3RFR0xJbWFn
ZSBHc3RFR0xJbWFnZTsKICNlbmRpZgogCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCit0eXBl
ZGVmIHN0cnVjdCBfR3N0UHJvbWlzZSBHc3RQcm9taXNlOwordHlwZWRlZiBzdHJ1Y3QgX0dzdFdl
YlJUQ0RUTFNUcmFuc3BvcnQgR3N0V2ViUlRDRFRMU1RyYW5zcG9ydDsKK3R5cGVkZWYgc3RydWN0
IF9Hc3RXZWJSVENEYXRhQ2hhbm5lbCBHc3RXZWJSVENEYXRhQ2hhbm5lbDsKK3R5cGVkZWYgc3Ry
dWN0IF9Hc3RXZWJSVENJQ0VUcmFuc3BvcnQgR3N0V2ViUlRDSUNFVHJhbnNwb3J0OwordHlwZWRl
ZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFJlY2VpdmVyIEdzdFdlYlJUQ1JUUFJlY2VpdmVyOwordHlw
ZWRlZiBzdHJ1Y3QgX0dzdFdlYlJUQ1JUUFNlbmRlciBHc3RXZWJSVENSVFBTZW5kZXI7Cit0eXBl
ZGVmIHN0cnVjdCBfR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIgR3N0V2ViUlRDUlRQVHJhbnNjZWl2
ZXI7CisjZW5kaWYKKwogbmFtZXNwYWNlIFdURiB7CiAKIHRlbXBsYXRlPD4gR1JlZlB0cjxHc3RQ
bHVnaW4+IGFkb3B0R1JlZihHc3RQbHVnaW4qIHB0cik7CkBAIC0xNTEsNiArMTYxLDM2IEBAIHRl
bXBsYXRlPD4gR1JlZlB0cjxHc3RFbmNvZGluZ1Byb2ZpbGU+IGFkb3B0R1JlZihHc3RFbmNvZGlu
Z1Byb2ZpbGUqKTsKIHRlbXBsYXRlPD4gR3N0RW5jb2RpbmdQcm9maWxlKiByZWZHUHRyPEdzdEVu
Y29kaW5nUHJvZmlsZT4oR3N0RW5jb2RpbmdQcm9maWxlKik7CiB0ZW1wbGF0ZTw+IHZvaWQgZGVy
ZWZHUHRyPEdzdEVuY29kaW5nUHJvZmlsZT4oR3N0RW5jb2RpbmdQcm9maWxlKik7CiAKKyNpZiBV
U0UoR1NUUkVBTUVSX1dFQlJUQykKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRDUlRQUmVj
ZWl2ZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBSZWNlaXZlciopOwordGVtcGxhdGUgPD4gR3N0
V2ViUlRDUlRQUmVjZWl2ZXIqIHJlZkdQdHI8R3N0V2ViUlRDUlRQUmVjZWl2ZXI+KEdzdFdlYlJU
Q1JUUFJlY2VpdmVyKik7Cit0ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENSVFBS
ZWNlaXZlcj4oR3N0V2ViUlRDUlRQUmVjZWl2ZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxH
c3RXZWJSVENSVFBTZW5kZXI+IGFkb3B0R1JlZihHc3RXZWJSVENSVFBTZW5kZXIqKTsKK3RlbXBs
YXRlIDw+IEdzdFdlYlJUQ1JUUFNlbmRlciogcmVmR1B0cjxHc3RXZWJSVENSVFBTZW5kZXI+KEdz
dFdlYlJUQ1JUUFNlbmRlciopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRD
UlRQU2VuZGVyPihHc3RXZWJSVENSVFBTZW5kZXIqKTsKKwordGVtcGxhdGUgPD4gR1JlZlB0cjxH
c3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gYWRvcHRHUmVmKEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVy
Kik7Cit0ZW1wbGF0ZSA8PiBHc3RXZWJSVENSVFBUcmFuc2NlaXZlciogcmVmR1B0cjxHc3RXZWJS
VENSVFBUcmFuc2NlaXZlcj4oR3N0V2ViUlRDUlRQVHJhbnNjZWl2ZXIqKTsKK3RlbXBsYXRlIDw+
IHZvaWQgZGVyZWZHUHRyPEdzdFdlYlJUQ1JUUFRyYW5zY2VpdmVyPihHc3RXZWJSVENSVFBUcmFu
c2NlaXZlciopOworCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPiBh
ZG9wdEdSZWYoR3N0V2ViUlRDRGF0YUNoYW5uZWwqKTsKK3RlbXBsYXRlIDw+IEdzdFdlYlJUQ0Rh
dGFDaGFubmVsKiByZWZHUHRyPEdzdFdlYlJUQ0RhdGFDaGFubmVsPihHc3RXZWJSVENEYXRhQ2hh
bm5lbCopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQdHI8R3N0V2ViUlRDRGF0YUNoYW5uZWw+
KEdzdFdlYlJUQ0RhdGFDaGFubmVsKik7CisKK3RlbXBsYXRlIDw+IEdSZWZQdHI8R3N0V2ViUlRD
RFRMU1RyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqKTsKK3RlbXBs
YXRlIDw+IEdzdFdlYlJUQ0RUTFNUcmFuc3BvcnQqIHJlZkdQdHI8R3N0V2ViUlRDRFRMU1RyYW5z
cG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCopOwordGVtcGxhdGUgPD4gdm9pZCBkZXJlZkdQ
dHI8R3N0V2ViUlRDRFRMU1RyYW5zcG9ydD4oR3N0V2ViUlRDRFRMU1RyYW5zcG9ydCopOworCit0
ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4gYWRvcHRHUmVmKEdzdFdl
YlJUQ0lDRVRyYW5zcG9ydCopOwordGVtcGxhdGUgPD4gR3N0V2ViUlRDSUNFVHJhbnNwb3J0KiBy
ZWZHUHRyPEdzdFdlYlJUQ0lDRVRyYW5zcG9ydD4oR3N0V2ViUlRDSUNFVHJhbnNwb3J0Kik7Cit0
ZW1wbGF0ZSA8PiB2b2lkIGRlcmVmR1B0cjxHc3RXZWJSVENJQ0VUcmFuc3BvcnQ+KEdzdFdlYlJU
Q0lDRVRyYW5zcG9ydCopOworCit0ZW1wbGF0ZSA8PiBHUmVmUHRyPEdzdFByb21pc2U+IGFkb3B0
R1JlZihHc3RQcm9taXNlKik7Cit0ZW1wbGF0ZSA8PiBHc3RQcm9taXNlKiByZWZHUHRyPEdzdFBy
b21pc2U+KEdzdFByb21pc2UqKTsKK3RlbXBsYXRlIDw+IHZvaWQgZGVyZWZHUHRyPEdzdFByb21p
c2U+KEdzdFByb21pc2UqKTsKKyNlbmRpZgorCiB9IC8vIG5hbWVzcGFjZSBXVEYKIAogI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVIpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9nc3RyZWFtZXIvR1N0cmVhbWVyQ29tbW9uLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCmluZGV4IGUwYTZm
OTBkN2M3ZjMzMDkyMmNiM2ZkYTVmYjVhNzc4ZTI1OGJmOTguLjljYTFjNTgyYjk5ZjA0Y2Y3Zjhk
YzY2NDk0Y2JiNmM3ODQxMDBlYWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dzdHJlYW1lci9HU3RyZWFtZXJDb21tb24uY3BwCkBAIC0x
ODgsNiArMTg4LDkgQEAgY29uc3QgY2hhciogY2Fwc01lZGlhVHlwZShjb25zdCBHc3RDYXBzKiBj
YXBzKQogICAgIGlmIChnc3Rfc3RydWN0dXJlX2hhc19uYW1lKHN0cnVjdHVyZSwgImFwcGxpY2F0
aW9uL3gtY2VuYyIpIHx8IGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiYXBwbGlj
YXRpb24veC1jYmNzIikgfHwgZ3N0X3N0cnVjdHVyZV9oYXNfbmFtZShzdHJ1Y3R1cmUsICJhcHBs
aWNhdGlvbi94LXdlYm0tZW5jIikpCiAgICAgICAgIHJldHVybiBnc3Rfc3RydWN0dXJlX2dldF9z
dHJpbmcoc3RydWN0dXJlLCAib3JpZ2luYWwtbWVkaWEtdHlwZSIpOwogI2VuZGlmCisgICAgaWYg
KGdzdF9zdHJ1Y3R1cmVfaGFzX25hbWUoc3RydWN0dXJlLCAiYXBwbGljYXRpb24veC1ydHAiKSkK
KyAgICAgICAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X3N0cmluZyhzdHJ1Y3R1cmUsICJtZWRp
YSIpOworCiAgICAgcmV0dXJuIGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsKIH0K
IApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0cmVhbWVy
L0dVbmlxdWVQdHJHU3RyZWFtZXIuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2dzdHJlYW1lci9HVW5pcXVlUHRyR1N0cmVhbWVyLmgKaW5kZXggYmY3NGVjZjAyY2MyMmY2MDZl
YmNiOWZlODVjMDM0YjI2YzQwNjQ0MS4uZTUyNDcxY2E3ZWE2MmEzMTU4YzUyMzMzNjA2MzUyZWM2
MzE1MmEzNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3N0
cmVhbWVyL0dVbmlxdWVQdHJHU3RyZWFtZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ncmFwaGljcy9nc3RyZWFtZXIvR1VuaXF1ZVB0ckdTdHJlYW1lci5oCkBAIC0zMCw2ICszMCwx
MiBAQAogI2luY2x1ZGUgPGdzdC92aWRlby92aWRlby5oPgogI2luY2x1ZGUgPHd0Zi9nbGliL0dV
bmlxdWVQdHIuaD4KIAorI2lmIGRlZmluZWQoQlVJTERJTkdfV2ViQ29yZSkgJiYgVVNFKEdTVFJF
QU1FUl9XRUJSVEMpCisjZGVmaW5lIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisjaW5jbHVkZSA8Z3N0
L3dlYnJ0Yy93ZWJydGMuaD4KKyN1bmRlZiBHU1RfVVNFX1VOU1RBQkxFX0FQSQorI2VuZGlmCisK
ICNpZiBVU0UoV1BFX1ZJREVPX1BMQU5FX0RJU1BMQVlfRE1BQlVGKQogI2luY2x1ZGUgPHdwZS9l
eHRlbnNpb25zL3ZpZGVvLXBsYW5lLWRpc3BsYXktZG1hYnVmLmg+CiAjZW5kaWYKQEAgLTQ5LDYg
KzU1LDEwIEBAIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdEJ5dGVSZWFkZXIsIGdzdF9ieXRl
X3JlYWRlcl9mcmVlKQogV1RGX0RFRklORV9HUFRSX0RFTEVURVIoR3N0VmlkZW9Db252ZXJ0ZXIs
IGdzdF92aWRlb19jb252ZXJ0ZXJfZnJlZSkKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKEdzdEF1
ZGlvQ29udmVydGVyLCBnc3RfYXVkaW9fY29udmVydGVyX2ZyZWUpCiAKKyNpZiBkZWZpbmVkKEJV
SUxESU5HX1dlYkNvcmUpICYmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorV1RGX0RFRklORV9HUFRS
X0RFTEVURVIoR3N0V2ViUlRDU2Vzc2lvbkRlc2NyaXB0aW9uLCBnc3Rfd2VicnRjX3Nlc3Npb25f
ZGVzY3JpcHRpb25fZnJlZSkKKyNlbmRpZgorCiAjaWYgVVNFKFdQRV9WSURFT19QTEFORV9ESVNQ
TEFZX0RNQUJVRikKIFdURl9ERUZJTkVfR1BUUl9ERUxFVEVSKHN0cnVjdCB3cGVfdmlkZW9fcGxh
bmVfZGlzcGxheV9kbWFidWZfc291cmNlLCB3cGVfdmlkZW9fcGxhbmVfZGlzcGxheV9kbWFidWZf
c291cmNlX2Rlc3Ryb3kpCiAjZW5kaWYKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL01lZGlhU3RyZWFtVHJhY2tQcml2YXRlLmNwcAppbmRl
eCBlYzMyYmE4NWNjZjg0NzI1MzgzNTI2ODE4NTljNDA3N2ViZDQ5OTJkLi4xODI2NmYxMjJjNGIx
ODY3NGExZjc5YmFiOTFmMDU0OTY3ZmNiNzAwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZS5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUu
Y3BwCkBAIC0zOCw3ICszOCw3IEBACiAKICNpZiBQTEFURk9STShDT0NPQSkKICNpbmNsdWRlICJN
ZWRpYVN0cmVhbVRyYWNrQXVkaW9Tb3VyY2VQcm92aWRlckNvY29hLmgiCi0jZWxpZiBFTkFCTEUo
V0VCX0FVRElPKSAmJiBFTkFCTEUoTUVESUFfU1RSRUFNKSAmJiBVU0UoTElCV0VCUlRDKSAmJiBV
U0UoR1NUUkVBTUVSKQorI2VsaWYgRU5BQkxFKFdFQl9BVURJTykgJiYgRU5BQkxFKE1FRElBX1NU
UkVBTSkgJiYgVVNFKEdTVFJFQU1FUikKICNpbmNsdWRlICJBdWRpb1NvdXJjZVByb3ZpZGVyR1N0
cmVhbWVyLmgiCiAjZWxzZQogI2luY2x1ZGUgIldlYkF1ZGlvU291cmNlUHJvdmlkZXIuaCIKQEAg
LTE5OSw3ICsxOTksNyBAQCBSZWZQdHI8V2ViQXVkaW9Tb3VyY2VQcm92aWRlcj4gTWVkaWFTdHJl
YW1UcmFja1ByaXZhdGU6OmNyZWF0ZUF1ZGlvU291cmNlUHJvdmlkZQogCiAjaWYgUExBVEZPUk0o
Q09DT0EpCiAgICAgcmV0dXJuIE1lZGlhU3RyZWFtVHJhY2tBdWRpb1NvdXJjZVByb3ZpZGVyQ29j
b2E6OmNyZWF0ZSgqdGhpcyk7Ci0jZWxpZiBVU0UoTElCV0VCUlRDKSAmJiBVU0UoR1NUUkVBTUVS
KQorI2VsaWYgVVNFKEdTVFJFQU1FUikKICAgICByZXR1cm4gQXVkaW9Tb3VyY2VQcm92aWRlckdT
dHJlYW1lcjo6Y3JlYXRlKCp0aGlzKTsKICNlbHNlCiAgICAgcmV0dXJuIG51bGxwdHI7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0
cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyQXVkaW9DYXB0dXJlci5jcHAKaW5kZXggMjZlZTQyNjNi
OWRiODc4MWRiYWU2MWUxYTMwMTJlZjdkYzcwOTcyNS4uMzVlNjVjMGViMGJkNDgxZDNmODVhOWRk
MDViNjZiZjk1NjkwZTdlMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckF1ZGlvQ2FwdHVyZXIuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJBdWRpb0Nh
cHR1cmVyLmNwcApAQCAtMjksMjkgKzI5LDQ2IEBACiAjaW5jbHVkZSAiTGliV2ViUlRDQXVkaW9G
b3JtYXQuaCIKICNlbmRpZgogCi0jaW5jbHVkZSA8Z3N0L2FwcC9nc3RhcHBzaW5rLmg+Ci0KIG5h
bWVzcGFjZSBXZWJDb3JlIHsKIAogI2lmIFVTRShMSUJXRUJSVEMpCi1zdGF0aWMgY29uc3RleHBy
IHNpemVfdCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gTGliV2ViUlRDQXVkaW9Gb3JtYXQ6OnNh
bXBsZVJhdGU7CitzdGF0aWMgY29uc3RleHByIHNpemVfdCBzX2F1ZGlvQ2FwdHVyZVNhbXBsZVJh
dGUgPSBMaWJXZWJSVENBdWRpb0Zvcm1hdDo6c2FtcGxlUmF0ZTsKICNlbHNlCi1zdGF0aWMgY29u
c3RleHByIHNpemVfdCBBdWRpb0NhcHR1cmVTYW1wbGVSYXRlID0gNDgwMDA7CitzdGF0aWMgY29u
c3RleHByIHNpemVfdCBzX2F1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUgPSA0ODAwMDsKICNlbmRpZgog
CiBHU3RyZWFtZXJBdWRpb0NhcHR1cmVyOjpHU3RyZWFtZXJBdWRpb0NhcHR1cmVyKEdTdHJlYW1l
ckNhcHR1cmVEZXZpY2UgZGV2aWNlKQotICAgIDogR1N0cmVhbWVyQ2FwdHVyZXIoZGV2aWNlLCBh
ZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X3NpbXBsZSgiYXVkaW8veC1yYXciLCAicmF0ZSIsIEdfVFlQ
RV9JTlQsIEF1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51bGxwdHIpKSkKKyAgICA6IEdTdHJlYW1l
ckNhcHR1cmVyKGRldmljZSwgYWRvcHRHUmVmKGdzdF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gt
cmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBzX2F1ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51bGxw
dHIpKSkKIHsKIH0KIAogR1N0cmVhbWVyQXVkaW9DYXB0dXJlcjo6R1N0cmVhbWVyQXVkaW9DYXB0
dXJlcigpCi0gICAgOiBHU3RyZWFtZXJDYXB0dXJlcigiYXBwc3JjIiwgYWRvcHRHUmVmKGdzdF9j
YXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBBdWRpb0Nh
cHR1cmVTYW1wbGVSYXRlLCBudWxscHRyKSksIENhcHR1cmVEZXZpY2U6OkRldmljZVR5cGU6Ok1p
Y3JvcGhvbmUpCisgICAgOiBHU3RyZWFtZXJDYXB0dXJlcigiYXBwc3JjIiwgYWRvcHRHUmVmKGdz
dF9jYXBzX25ld19zaW1wbGUoImF1ZGlvL3gtcmF3IiwgInJhdGUiLCBHX1RZUEVfSU5ULCBzX2F1
ZGlvQ2FwdHVyZVNhbXBsZVJhdGUsIG51bGxwdHIpKSwgQ2FwdHVyZURldmljZTo6RGV2aWNlVHlw
ZTo6TWljcm9waG9uZSkKIHsKIH0KIAogR3N0RWxlbWVudCogR1N0cmVhbWVyQXVkaW9DYXB0dXJl
cjo6Y3JlYXRlQ29udmVydGVyKCkKIHsKLSAgICByZXR1cm4gbWFrZUdTdHJlYW1lckJpbigiYXVk
aW9jb252ZXJ0ICEgYXVkaW9yZXNhbXBsZSIsIHRydWUpOworICAgIGF1dG8qIGJpbiA9IGdzdF9i
aW5fbmV3KG51bGxwdHIpOworICAgIGF1dG8qIGF1ZGlvY29udmVydCA9IGdzdF9lbGVtZW50X2Zh
Y3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgbnVsbHB0cik7CisgICAgYXV0byogYXVkaW9yZXNh
bXBsZSA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9yZXNhbXBsZSIsIG51bGxwdHIp
OworICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKGJpbiksIGF1ZGlvY29udmVydCwg
YXVkaW9yZXNhbXBsZSwgbnVsbHB0cik7CisgICAgZ3N0X2VsZW1lbnRfbGluayhhdWRpb2NvbnZl
cnQsIGF1ZGlvcmVzYW1wbGUpOworCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisgICAgaWYg
KGF1dG8qIHdlYnJ0Y2RzcCA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJ3ZWJydGNkc3AiLCBudWxs
cHRyKSkgeworICAgICAgICBnX29iamVjdF9zZXQod2VicnRjZHNwLCAiZWNoby1jYW5jZWwiLCBm
YWxzZSwgInZvaWNlLWRldGVjdGlvbiIsIHRydWUsIG51bGxwdHIpOworICAgICAgICBnc3RfYmlu
X2FkZChHU1RfQklOX0NBU1QoYmluKSwgd2VicnRjZHNwKTsKKyAgICAgICAgZ3N0X2VsZW1lbnRf
bGluayh3ZWJydGNkc3AsIGF1ZGlvY29udmVydCk7CisgICAgfQorI2VuZGlmCisKKyAgICBpZiAo
YXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZChHU1RfQklOX0NB
U1QoYmluKSwgR1NUX1BBRF9TUkMpKSkKKyAgICAgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChHU1Rf
RUxFTUVOVF9DQVNUKGJpbiksIGdzdF9naG9zdF9wYWRfbmV3KCJzcmMiLCBwYWQuZ2V0KCkpKTsK
KyAgICBpZiAoYXV0byBwYWQgPSBhZG9wdEdSZWYoZ3N0X2Jpbl9maW5kX3VubGlua2VkX3BhZChH
U1RfQklOX0NBU1QoYmluKSwgR1NUX1BBRF9TSU5LKSkpCisgICAgICAgIGdzdF9lbGVtZW50X2Fk
ZF9wYWQoR1NUX0VMRU1FTlRfQ0FTVChiaW4pLCBnc3RfZ2hvc3RfcGFkX25ldygic2luayIsIHBh
ZC5nZXQoKSkpOworCisgICAgcmV0dXJuIGJpbjsKIH0KIAogYm9vbCBHU3RyZWFtZXJBdWRpb0Nh
cHR1cmVyOjpzZXRTYW1wbGVSYXRlKGludCBzYW1wbGVSYXRlKQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckNhcHR1cmVy
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3Ry
ZWFtZXJDYXB0dXJlci5jcHAKaW5kZXggNDc4Yzc3NWUwZTNmNjlkN2NlMzZmNjc1Y2JiZjRjYTZm
YjNiNjM1MS4uOWUwMDhkOGY0NmE2ZmQ1ZDUyMjgyNmUwOGZiZjdmYjZiOTlkYjcxNCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJl
YW1lckNhcHR1cmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvR1N0cmVhbWVyQ2FwdHVyZXIuY3BwCkBAIC0xMDAsNyArMTAwLDcgQEAgR3N0
RWxlbWVudCogR1N0cmVhbWVyQ2FwdHVyZXI6OmNyZWF0ZVNvdXJjZSgpCiAgICAgICAgIG1fc3Jj
ID0gbWFrZUVsZW1lbnQobV9zb3VyY2VGYWN0b3J5KTsKICAgICAgICAgQVNTRVJUKG1fc3JjKTsK
ICAgICAgICAgaWYgKEdTVF9JU19BUFBfU1JDKG1fc3JjLmdldCgpKSkKLSAgICAgICAgICAgIGdf
b2JqZWN0X3NldChtX3NyYy5nZXQoKSwgImlzLWxpdmUiLCB0cnVlLCAiZm9ybWF0IiwgR1NUX0ZP
Uk1BVF9USU1FLCBudWxscHRyKTsKKyAgICAgICAgICAgIGdfb2JqZWN0X3NldChtX3NyYy5nZXQo
KSwgImlzLWxpdmUiLCB0cnVlLCAiZm9ybWF0IiwgR1NUX0ZPUk1BVF9USU1FLCAiZG8tdGltZXN0
YW1wIiwgdHJ1ZSwgbnVsbHB0cik7CiAKICAgICAgICAgYXV0byBzcmNQYWQgPSBhZG9wdEdSZWYo
Z3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9zcmMuZ2V0KCksICJzcmMiKSk7CiAgICAgICAg
IGlmIChtX2RldmljZVR5cGUgPT0gQ2FwdHVyZURldmljZTo6RGV2aWNlVHlwZTo6Q2FtZXJhKSB7
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFt
ZXIvR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcApu
ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwLi5mYTFkZTUyYmQ1ODE5NGM3Mzc2YTZhMWE0ZjNmZmU0ZGVkYzFhNzJhCi0tLSAv
ZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVh
bWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmNwcApAQCAtMCwwICsxLDc2IEBACisvKgor
ICogIENvcHlyaWdodCAoQykgMjAxOS0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgor
ICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBp
dCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy
IEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29m
dHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBv
ciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJh
cnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAq
ICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJy
YW50eSBvZgorICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIg
UFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2Ug
Zm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBG
b3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24s
IE1BICAwMjExMC0xMzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVk
ZSAiR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQuaCIKKworI2lmIEVOQUJMRShXRUJfUlRDKSAm
JiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKworI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisj
aW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitHU3Ry
ZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjp+
R1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9
CisKK2Jvb2wgR1N0cmVhbWVyRFRNRlNlbmRlckJhY2tlbmQ6OmNhbkluc2VydERUTUYoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCit2b2lkIEdTdHJl
YW1lckRUTUZTZW5kZXJCYWNrZW5kOjpwbGF5VG9uZShjb25zdCBTdHJpbmcmLCBzaXplX3QsIHNp
emVfdCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCitTdHJpbmcgR1N0cmVhbWVyRFRN
RlNlbmRlckJhY2tlbmQ6OnRvbmVzKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
ICAgIHJldHVybiB7IH07Cit9CisKK3NpemVfdCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6
ZHVyYXRpb24oKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIDA7
Cit9CisKK3NpemVfdCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZDo6aW50ZXJUb25lR2FwKCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiAwOworfQorCit2b2lk
IEdTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kOjpvblRvbmVQbGF5ZWQoRnVuY3Rpb248dm9pZChj
b25zdCBTdHJpbmcmKT4mJiBvblRvbmVQbGF5ZWQpCit7CisgICAgbV9vblRvbmVQbGF5ZWQgPSBX
VEZNb3ZlKG9uVG9uZVBsYXllZCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2Vu
ZGlmIC8vIEVOQUJMRShXRUJfUlRDKSAmJiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFt
ZXJEVE1GU2VuZGVyQmFja2VuZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJl
YW0vZ3N0cmVhbWVyL0dTdHJlYW1lckRUTUZTZW5kZXJCYWNrZW5kLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYzU3
OTcwNTBjZWM5YjRiMGFhNmQ5ZWZlOTgwOGFlNWM5MDg4ZmIzMwotLS0gL2Rldi9udWxsCisrKyBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJE
VE1GU2VuZGVyQmFja2VuZC5oCkBAIC0wLDAgKzEsNTAgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChD
KSAyMDE5LTIwMjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmln
aHQgKEMpIDIwMjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5
IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1v
ZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9u
OyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlv
bikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRl
ZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFO
WSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVS
Q0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRo
ZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxz
LgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVz
c2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
aWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4s
IDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEg
IFVTQQorICovCisKKyNwcmFnbWEgb25jZQorCisjaWYgRU5BQkxFKFdFQl9SVEMpICYmIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiUlRDRFRNRlNlbmRlckJhY2tlbmQuaCIKKyNp
bmNsdWRlIDx3dGYvV2Vha1B0ci5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKKy8vIFVzZSBl
YWdlciBpbml0aWFsaXphdGlvbiBmb3IgdGhlIFdlYWtQdHJGYWN0b3J5IHNpbmNlIHdlIGNhbGwg
bWFrZVdlYWtQdHIoKSBmcm9tIGFub3RoZXIgdGhyZWFkLgorY2xhc3MgR1N0cmVhbWVyRFRNRlNl
bmRlckJhY2tlbmQgZmluYWwgOiBwdWJsaWMgUlRDRFRNRlNlbmRlckJhY2tlbmQsIHB1YmxpYyBD
YW5NYWtlV2Vha1B0cjxHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCwgV2Vha1B0ckZhY3RvcnlJ
bml0aWFsaXphdGlvbjo6RWFnZXI+IHsKKyAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKK3B1
YmxpYzoKKyAgICBleHBsaWNpdCBHU3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCgpOworICAgIH5H
U3RyZWFtZXJEVE1GU2VuZGVyQmFja2VuZCgpOworCitwcml2YXRlOgorICAgIC8vIFJUQ0RUTUZT
ZW5kZXJCYWNrZW5kCisgICAgYm9vbCBjYW5JbnNlcnREVE1GKCkgZmluYWw7CisgICAgdm9pZCBw
bGF5VG9uZShjb25zdCBTdHJpbmcmIHRvbmUsIHNpemVfdCBkdXJhdGlvbiwgc2l6ZV90IGludGVy
VG9uZUdhcCkgZmluYWw7CisgICAgdm9pZCBvblRvbmVQbGF5ZWQoRnVuY3Rpb248dm9pZChjb25z
dCBTdHJpbmcmKT4mJikgZmluYWw7CisgICAgU3RyaW5nIHRvbmVzKCkgY29uc3QgZmluYWw7Cisg
ICAgc2l6ZV90IGR1cmF0aW9uKCkgY29uc3QgZmluYWw7CisgICAgc2l6ZV90IGludGVyVG9uZUdh
cCgpIGNvbnN0IGZpbmFsOworCisgICAgRnVuY3Rpb248dm9pZChjb25zdCBTdHJpbmcmKT4gbV9v
blRvbmVQbGF5ZWQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBF
TkFCTEUoV0VCX1JUQykgJiYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFT
dHJlYW1Tb3VyY2UuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0
cmVhbWVyL0dTdHJlYW1lck1lZGlhU3RyZWFtU291cmNlLmNwcAppbmRleCA2YWIxYWFhMTE1MThh
M2I3OTc1N2QwMWRmMmE2OWFmYjY2MzY2MGVkLi4yNDNjYWFhNWM0Y2Y3MWZlYTg1ZDkyOTI4OGM2
OTA3NTRiYWY5NDA0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0
cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyTWVkaWFTdHJlYW1Tb3VyY2UuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9HU3RyZWFtZXJNZWRpYVN0
cmVhbVNvdXJjZS5jcHAKQEAgLTM0LDE3ICszNCwyMyBAQAogI2luY2x1ZGUgIlZpZGVvRnJhbWVN
ZXRhZGF0YUdTdHJlYW1lci5oIgogI2luY2x1ZGUgIlZpZGVvVHJhY2tQcml2YXRlTWVkaWFTdHJl
YW0uaCIKIAorI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorI2luY2x1ZGUgIlJlYWx0aW1lSW5j
b21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdW
aWRlb1NvdXJjZUdTdHJlYW1lci5oIgorI2VuZGlmCisKICNpbmNsdWRlIDxnc3QvYXBwL2dzdGFw
cHNyYy5oPgorI2luY2x1ZGUgPGdzdC9iYXNlL2dzdGZsb3djb21iaW5lci5oPgogI2luY2x1ZGUg
PHd0Zi9VVUlELmg+CiAjaW5jbHVkZSA8d3RmL2dsaWIvV1RGR1R5cGUuaD4KIAogdXNpbmcgbmFt
ZXNwYWNlIFdlYkNvcmU7CiAKIHN0YXRpYyBHc3RTdGF0aWNQYWRUZW1wbGF0ZSB2aWRlb1NyY1Rl
bXBsYXRlID0gR1NUX1NUQVRJQ19QQURfVEVNUExBVEUoInZpZGVvX3NyYyV1IiwgR1NUX1BBRF9T
UkMsIEdTVF9QQURfU09NRVRJTUVTLAotICAgIEdTVF9TVEFUSUNfQ0FQUygidmlkZW8veC1yYXc7
dmlkZW8veC1oMjY0O3ZpZGVvL3gtdnA4IikpOworICAgIEdTVF9TVEFUSUNfQ0FQUygidmlkZW8v
eC1yYXc7dmlkZW8veC1oMjY0O3ZpZGVvL3gtdnA4O3ZpZGVvL3gtdnA5O2FwcGxpY2F0aW9uL3gt
cnRwLCBtZWRpYT0oc3RyaW5nKXZpZGVvIikpOwogCiBzdGF0aWMgR3N0U3RhdGljUGFkVGVtcGxh
dGUgYXVkaW9TcmNUZW1wbGF0ZSA9IEdTVF9TVEFUSUNfUEFEX1RFTVBMQVRFKCJhdWRpb19zcmMl
dSIsIEdTVF9QQURfU1JDLCBHU1RfUEFEX1NPTUVUSU1FUywKLSAgICBHU1RfU1RBVElDX0NBUFMo
ImF1ZGlvL3gtcmF3KEFOWSk7IikpOworICAgIEdTVF9TVEFUSUNfQ0FQUygiYXVkaW8veC1yYXco
QU5ZKTthcHBsaWNhdGlvbi94LXJ0cCwgbWVkaWE9KHN0cmluZylhdWRpbyIpKTsKIAogR1NUX0RF
QlVHX0NBVEVHT1JZX1NUQVRJQyh3ZWJraXRNZWRpYVN0cmVhbVNyY0RlYnVnKTsKICNkZWZpbmUg
R1NUX0NBVF9ERUZBVUxUIHdlYmtpdE1lZGlhU3RyZWFtU3JjRGVidWcKQEAgLTIzNiw3ICsyNDIs
NyBAQCBwdWJsaWM6CiAKICAgICAgICAgaWYgKGRyb3ApIHsKICAgICAgICAgICAgIG1fbmVlZHNE
aXNjb250ID0gdHJ1ZTsKLSAgICAgICAgICAgIEdTVF9JTkZPX09CSkVDVChtX3NyYy5nZXQoKSwg
IiVzIHF1ZXVlIGZ1bGwgYWxyZWFkeS4uLiBub3QgcHVzaGluZyIsIG1fdHJhY2suaGFzVmlkZW8o
KSA/ICJWaWRlbyIgOiAiQXVkaW8iKTsKKyAgICAgICAgICAgIEdTVF9UUkFDRV9PQkpFQ1QobV9z
cmMuZ2V0KCksICIlcyBxdWV1ZSBmdWxsIGFscmVhZHkuLi4gbm90IHB1c2hpbmciLCBtX3RyYWNr
Lmhhc1ZpZGVvKCkgPyAiVmlkZW8iIDogIkF1ZGlvIik7CiAgICAgICAgICAgICByZXR1cm47CiAg
ICAgICAgIH0KIApAQCAtNjg4LDYgKzY5NCw3IEBAIHZvaWQgd2Via2l0TWVkaWFTdHJlYW1TcmNB
ZGRUcmFjayhXZWJLaXRNZWRpYVN0cmVhbVNyYyogc2VsZiwgTWVkaWFTdHJlYW1UcmFja1ByCiAg
ICAgY29uc3QgY2hhciogc291cmNlVHlwZTsKICAgICB1bnNpZ25lZCBjb3VudGVyOwogICAgIEdz
dFN0YXRpY1BhZFRlbXBsYXRlKiBwYWRUZW1wbGF0ZTsKKwogICAgIGlmICh0cmFjay0+aGFzQXVk
aW8oKSkgewogICAgICAgICBwYWRUZW1wbGF0ZSA9ICZhdWRpb1NyY1RlbXBsYXRlOwogICAgICAg
ICBzb3VyY2VUeXBlID0gImF1ZGlvIjsKQEAgLTY5OSw5ICs3MDYsMTkgQEAgdm9pZCB3ZWJraXRN
ZWRpYVN0cmVhbVNyY0FkZFRyYWNrKFdlYktpdE1lZGlhU3RyZWFtU3JjKiBzZWxmLCBNZWRpYVN0
cmVhbVRyYWNrUHIKICAgICAgICAgY291bnRlciA9IHNlbGYtPnByaXYtPnZpZGVvUGFkQ291bnRl
ci5leGNoYW5nZUFkZCgxKTsKICAgICB9CiAKLSAgICBhdXRvIHBhZE5hbWUgPSBtYWtlU3RyaW5n
KHNvdXJjZVR5cGUsICJfc3JjIiwgY291bnRlcik7CisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMp
CisgICAgaWYgKHRyYWNrLT5zb3VyY2UoKS5pc0luY29taW5nQXVkaW9Tb3VyY2UoKSkgeworICAg
ICAgICBhdXRvJiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZUluY29taW5nQXVkaW9Tb3Vy
Y2VHU3RyZWFtZXImPih0cmFjay0+c291cmNlKCkpOworICAgICAgICBzb3VyY2UucmVnaXN0ZXJD
bGllbnQoKTsKKyAgICB9IGVsc2UgaWYgKHRyYWNrLT5zb3VyY2UoKS5pc0luY29taW5nVmlkZW9T
b3VyY2UoKSkgeworICAgICAgICBhdXRvJiBzb3VyY2UgPSBzdGF0aWNfY2FzdDxSZWFsdGltZUlu
Y29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXImPih0cmFjay0+c291cmNlKCkpOworICAgICAgICBz
b3VyY2UucmVnaXN0ZXJDbGllbnQoKTsKKyAgICB9CisjZW5kaWYKKwogICAgIEdTVF9ERUJVR19P
QkpFQ1Qoc2VsZiwgIlNldHVwICVzIHNvdXJjZSBmb3IgdHJhY2sgJXMsIG9ubHkgdHJhY2s6ICVz
Iiwgc291cmNlVHlwZSwgdHJhY2stPmlkKCkudXRmOCgpLmRhdGEoKSwgYm9vbEZvclByaW50aW5n
KG9ubHlUcmFjaykpOwogCisgICAgYXV0byBwYWROYW1lID0gbWFrZVN0cmluZyhzb3VyY2VUeXBl
LCAiX3NyYyIsIGNvdW50ZXIpOwogICAgIGF1dG8gc291cmNlID0gbWFrZVVuaXF1ZTxJbnRlcm5h
bFNvdXJjZT4oR1NUX0VMRU1FTlRfQ0FTVChzZWxmKSwgKnRyYWNrLCBwYWROYW1lKTsKICAgICBh
dXRvKiBlbGVtZW50ID0gc291cmNlLT5nZXQoKTsKICAgICBnc3RfYmluX2FkZChHU1RfQklOX0NB
U1Qoc2VsZiksIGVsZW1lbnQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWVkaWFzdHJlYW0vZ3N0cmVhbWVyL0dTdHJlYW1lclZpZGVvRW5jb2Rlci5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNv
ZGVyLmNwcAppbmRleCBmYWM0NzA1ZmI4YTdjZjJkYzIzZWE1MTFiMTVmY2Y0ODU1MmNmMzNhLi5h
NzZlZjFlZmZkMTZmYTI2YjZkZTM1NzRmNDY0ZjVkMjMzYzk1ZWZlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvR1N0cmVhbWVyVmlkZW9F
bmNvZGVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvR1N0cmVhbWVyVmlkZW9FbmNvZGVyLmNwcApAQCAtMjk3LDkgKzI5NywxMSBAQCBzdGF0
aWMgdm9pZCB3ZWJraXRfd2VicnRjX3ZpZGVvX2VuY29kZXJfY2xhc3NfaW5pdChXZWJLaXRXZWJy
dGNWaWRlb0VuY29kZXJDbGFzcwogICAgICAgICAgICAgZ19vYmplY3Rfc2V0KHNlbGYtPnByaXYt
PnBhcnNlci5nZXQoKSwgImNvbmZpZy1pbnRlcnZhbCIsIDEsIG51bGxwdHIpOwogICAgICAgICB9
LCAidGFyZ2V0LWJpdHJhdGUiLCBzZXRCaXRyYXRlQml0UGVyU2VjLCAiaW50ZXJ2YWwtaW50cmFm
cmFtZXMiKTsKICAgICBFbmNvZGVyczo6cmVnaXN0ZXJFbmNvZGVyKFgyNjQsICJ4MjY0ZW5jIiwg
ImgyNjRwYXJzZSIsICJ2aWRlby94LWgyNjQiLAotICAgICAgICAidmlkZW8veC1oMjY0LGFsaWdu
bWVudD1hdSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFtLHByb2ZpbGU9YmFzZWxpbmUiLAorICAg
ICAgICAidmlkZW8veC1oMjY0LGFsaWdubWVudD1hdSxzdHJlYW0tZm9ybWF0PWJ5dGUtc3RyZWFt
LHByb2ZpbGU9Y29uc3RyYWluZWQtYmFzZWxpbmUiLAogICAgICAgICBbXShXZWJLaXRXZWJydGNW
aWRlb0VuY29kZXIqIHNlbGYpIHsKICAgICAgICAgICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJn
KEdfT0JKRUNUKHNlbGYtPnByaXYtPmVuY29kZXIuZ2V0KCkpLCAidHVuZSIsICJ6ZXJvbGF0ZW5j
eSIpOworICAgICAgICAgICAgZ3N0X3V0aWxfc2V0X29iamVjdF9hcmcoR19PQkpFQ1Qoc2VsZi0+
cHJpdi0+ZW5jb2Rlci5nZXQoKSksICJzcGVlZC1wcmVzZXQiLCAidWx0cmFmYXN0Iik7CisgICAg
ICAgICAgICBnX29iamVjdF9zZXQoR19PQkpFQ1Qoc2VsZi0+cHJpdi0+ZW5jb2Rlci5nZXQoKSks
ICJrZXktaW50LW1heCIsIDE1LCBOVUxMKTsKICAgICAgICAgICAgIGdfb2JqZWN0X3NldChzZWxm
LT5wcml2LT5wYXJzZXIuZ2V0KCksICJjb25maWctaW50ZXJ2YWwiLCAxLCBudWxscHRyKTsKICAg
ICAgICAgfSwgImJpdHJhdGUiLCBzZXRCaXRyYXRlS2JpdFBlclNlYywgImtleS1pbnQtbWF4Iik7
CiAgICAgRW5jb2RlcnM6OnJlZ2lzdGVyRW5jb2RlcihPcGVuSDI2NCwgIm9wZW5oMjY0ZW5jIiwg
ImgyNjRwYXJzZSIsICJ2aWRlby94LWgyNjQiLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJj
ZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3Ry
ZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmNwcApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li41NmY1NWEyZDVmYTNiMDU3OGY1NDE4MDI2ZmY5ODU5OGJlZGJhNTYzCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAKQEAgLTAsMCArMSw3MyBAQAorLyoK
KyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoK
KyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg
aXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNv
ZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwg
b3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJy
YXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisg
KiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2Fy
cmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNv
cHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdp
dGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAg
Rm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9u
LCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYg
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291
cmNlR1N0cmVhbWVyLmgiCisKKyNpbmNsdWRlICJHU3RyZWFtZXJBdWRpb0RhdGEuaCIKKyNpbmNs
dWRlICJHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZUlu
Y29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIoU3RyaW5nJiYgYXVkaW9UcmFja0lkKQorICAgIDog
UmVhbHRpbWVNZWRpYVNvdXJjZShSZWFsdGltZU1lZGlhU291cmNlOjpUeXBlOjpBdWRpbywgV1RG
TW92ZShhdWRpb1RyYWNrSWQpKQorICAgICwgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1l
cigpCit7CisgICAgc3RhcnQoKTsKK30KKworUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0
cmVhbWVyOjp+UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyKCkKK3sKKyAgICBz
dG9wKCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpz
dGFydFByb2R1Y2luZ0RhdGEoKQoreworICAgIG9wZW5WYWx2ZSgpOworfQorCit2b2lkIFJlYWx0
aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c3RvcFByb2R1Y2luZ0RhdGEoKQorewor
ICAgIGNsb3NlVmFsdmUoKTsKK30KKworY29uc3QgUmVhbHRpbWVNZWRpYVNvdXJjZUNhcGFiaWxp
dGllcyYgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyOjpjYXBhYmlsaXRpZXMo
KQoreworICAgIHJldHVybiBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzOjplbXB0eUNh
cGFiaWxpdGllcygpOworfQorCitjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIFJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6c2V0dGluZ3MoKQoreworICAgIHJl
dHVybiBtX2N1cnJlbnRTZXR0aW5nczsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nQXVkaW9T
b3VyY2VHU3RyZWFtZXI6OmRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmIGdzdFNh
bXBsZSkKK3sKKyAgICBhdXRvKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoZ3N0U2Ft
cGxlLmdldCgpKTsKKyAgICBHU3RyZWFtZXJBdWRpb1N0cmVhbURlc2NyaXB0aW9uIGRlc2NyaXB0
aW9uOworICAgIEdTdHJlYW1lckF1ZGlvRGF0YSBmcmFtZXMoV1RGTW92ZShnc3RTYW1wbGUpLCBk
ZXNjcmlwdGlvbi5nZXRJbmZvKCkpOworCisgICAgYXVkaW9TYW1wbGVzQXZhaWxhYmxlKE1lZGlh
VGltZShHU1RfVElNRV9BU19VU0VDT05EUyhHU1RfQlVGRkVSX1BUUyhidWZmZXIpKSwgR19VU0VD
X1BFUl9TRUMpLCBmcmFtZXMsIGRlc2NyaXB0aW9uLCAwKTsKK30KKworfQorCisjZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVh
bWVyLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVh
bHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjY2OGRiNTNi
Y2Y5YzE2ZDMwMWI4MTcyZTY4YjE5MTg5MDdmZGFlYwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29taW5n
QXVkaW9Tb3VyY2VHU3RyZWFtZXIuaApAQCAtMCwwICsxLDU3IEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRD
KQorCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oIgorI2luY2x1
ZGUgIlJlYWx0aW1lTWVkaWFTb3VyY2UuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFz
cyBSZWFsdGltZUluY29taW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXIgOiBwdWJsaWMgUmVhbHRpbWVN
ZWRpYVNvdXJjZSwgcHVibGljIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgeworcHVi
bGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
PiBjcmVhdGUoU3RyaW5nJiYgYXVkaW9UcmFja0lkKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJl
YWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKGF1ZGlvVHJhY2tJZCkp
KTsgfQorCitwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVh
bWVyKFN0cmluZyYmKTsKKyAgICB+UmVhbHRpbWVJbmNvbWluZ0F1ZGlvU291cmNlR1N0cmVhbWVy
KCk7CisKK3ByaXZhdGU6CisgICAgLy8gUmVhbHRpbWVNZWRpYVNvdXJjZSBBUEkKKyAgICB2b2lk
IHN0YXJ0UHJvZHVjaW5nRGF0YSgpIGZpbmFsOworICAgIHZvaWQgc3RvcFByb2R1Y2luZ0RhdGEo
KSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBh
YmlsaXRpZXMoKSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3Mm
IHNldHRpbmdzKCkgZmluYWw7CisgICAgYm9vbCBpc0luY29taW5nQXVkaW9Tb3VyY2UoKSBjb25z
dCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICAvLyBSZWFsdGltZUluY29taW5nU291cmNl
R1N0cmVhbWVyIEFQSQorICAgIHZvaWQgZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+
JiYpIGZpbmFsOworCisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIG1fY3VycmVudFNl
dHRpbmdzOworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVf
VFJBSVRTX0JFR0lOKFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdBdWRpb1NvdXJjZUdTdHJlYW1l
cikKKyAgICBzdGF0aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNv
dXJjZSYgc291cmNlKSB7IHJldHVybiBzb3VyY2UuaXNJbmNvbWluZ0F1ZGlvU291cmNlKCk7IH0K
K1NQRUNJQUxJWkVfVFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJf
V0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
Z3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuY3BwIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3Vy
Y2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY0YjE2NTQyYjc3NTEwMmQyNmYxNWQyMGU2ZmVm
NWUzM2M5ZWRkNzEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9t
ZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5jcHAK
QEAgLTAsMCArMSw5NCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEg
Uy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xv
Z2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsg
eW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0
ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVi
bGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNp
b24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lv
bi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQg
aXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0
IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklU
TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBH
ZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91
bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMK
KyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRo
ZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0
LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisjaW5jbHVkZSAiUmVh
bHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5oIgorCisjaW5jbHVkZSAiTWVkaWFTYW1wbGVH
U3RyZWFtZXIuaCIKKyNpbmNsdWRlIDxnc3QvYXBwL2dzdGFwcHNpbmsuaD4KKyNpbmNsdWRlIDx3
dGYvdGV4dC9XVEZTdHJpbmcuaD4KKworR1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRf
d2VicnRjX2VuZHBvaW50X2RlYnVnKTsKKyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93
ZWJydGNfZW5kcG9pbnRfZGVidWcKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZUlu
Y29taW5nU291cmNlR1N0cmVhbWVyOjpSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyKCkK
K3sKKyAgICBtX2JpbiA9IGdzdF9iaW5fbmV3KG51bGxwdHIpOworICAgIG1fdmFsdmUgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoInZhbHZlIiwgbnVsbHB0cik7CisgICAgbV90ZWUgPSBnc3Rf
ZWxlbWVudF9mYWN0b3J5X21ha2UoInRlZSIsIG51bGxwdHIpOworICAgIGdfb2JqZWN0X3NldCht
X3RlZS5nZXQoKSwgImFsbG93LW5vdC1saW5rZWQiLCB0cnVlLCBudWxscHRyKTsKKworICAgIGF1
dG8qIHF1ZXVlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOwor
ICAgIGdzdF9iaW5fYWRkX21hbnkoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwgbV92YWx2ZS5n
ZXQoKSwgcXVldWUsIG1fdGVlLmdldCgpLCBudWxscHRyKTsKKworICAgIGdzdF9lbGVtZW50X2xp
bmtfbWFueShtX3ZhbHZlLmdldCgpLCBxdWV1ZSwgbV90ZWUuZ2V0KCksIG51bGxwdHIpOworICAg
IGdzdF9lbGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV92YWx2ZS5nZXQoKSk7CisgICAg
Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChxdWV1ZSk7CisgICAgZ3N0X2VsZW1l
bnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChtX3RlZS5nZXQoKSk7CisKKyAgICBhdXRvIHNpbmtQ
YWQgPSBhZG9wdEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV92YWx2ZS5nZXQoKSwg
InNpbmsiKSk7CisgICAgZ3N0X2VsZW1lbnRfYWRkX3BhZChtX2Jpbi5nZXQoKSwgZ3N0X2dob3N0
X3BhZF9uZXcoInNpbmsiLCBzaW5rUGFkLmdldCgpKSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNv
bWluZ1NvdXJjZUdTdHJlYW1lcjo6Y2xvc2VWYWx2ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fdmFs
dmUpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3ZhbHZlLmdldCgpLCAiZHJvcCIsIHRydWUsIG51
bGxwdHIpOworfQorCit2b2lkIFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXI6Om9wZW5W
YWx2ZSgpIGNvbnN0Cit7CisgICAgaWYgKG1fdmFsdmUpCisgICAgICAgIGdfb2JqZWN0X3NldCht
X3ZhbHZlLmdldCgpLCAiZHJvcCIsIGZhbHNlLCBudWxscHRyKTsKK30KKwordm9pZCBSZWFsdGlt
ZUluY29taW5nU291cmNlR1N0cmVhbWVyOjpyZWdpc3RlckNsaWVudCgpCit7CisgICAgR1NUX0RF
QlVHKCJSZWdpc3RlcmluZyBuZXcgY2xpZW50Iik7CisgICAgYXV0byogcXVldWUgPSBnc3RfZWxl
bWVudF9mYWN0b3J5X21ha2UoInF1ZXVlIiwgbnVsbHB0cik7CisgICAgYXV0byogc2luayA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXBwc2luayIsIG51bGxwdHIpOworICAgIGdfb2JqZWN0
X3NldChzaW5rLCAiZW5hYmxlLWxhc3Qtc2FtcGxlIiwgRkFMU0UsICJlbWl0LXNpZ25hbHMiLCBU
UlVFLCAibWF4LWJ1ZmZlcnMiLCAxLCBudWxscHRyKTsKKyAgICBnX3NpZ25hbF9jb25uZWN0X3N3
YXBwZWQoc2luaywgIm5ldy1zYW1wbGUiLCBHX0NBTExCQUNLKCtbXShSZWFsdGltZUluY29taW5n
U291cmNlR1N0cmVhbWVyKiBzZWxmLCBHc3RFbGVtZW50KiBzaW5rKSAtPiBHc3RGbG93UmV0dXJu
IHsKKyAgICAgICAgYXV0byBzYW1wbGUgPSBhZG9wdEdSZWYoZ3N0X2FwcF9zaW5rX3B1bGxfc2Ft
cGxlKEdTVF9BUFBfU0lOSyhzaW5rKSkpOworICAgICAgICBzZWxmLT5kaXNwYXRjaFNhbXBsZShX
VEZNb3ZlKHNhbXBsZSkpOworICAgICAgICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfSksIHRo
aXMpOworCisgICAgZ19zaWduYWxfY29ubmVjdF9zd2FwcGVkKHNpbmssICJuZXctcHJlcm9sbCIs
IEdfQ0FMTEJBQ0soK1tdKFJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIqIHNlbGYsIEdz
dEVsZW1lbnQqIHNpbmspIC0+IEdzdEZsb3dSZXR1cm4geworICAgICAgICBhdXRvIHNhbXBsZSA9
IGFkb3B0R1JlZihnc3RfYXBwX3NpbmtfcHVsbF9wcmVyb2xsKEdTVF9BUFBfU0lOSyhzaW5rKSkp
OworICAgICAgICBzZWxmLT5kaXNwYXRjaFNhbXBsZShXVEZNb3ZlKHNhbXBsZSkpOworICAgICAg
ICByZXR1cm4gR1NUX0ZMT1dfT0s7CisgICAgfSksIHRoaXMpOworCisgICAgZ3N0X2Jpbl9hZGRf
bWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBxdWV1ZSwgc2luaywgbnVsbHB0cik7Cisg
ICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KG1fdGVlLmdldCgpLCBxdWV1ZSwgc2luaywgbnVsbHB0
cik7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChxdWV1ZSk7CisgICAg
Z3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChzaW5rKTsKKworICAgIGF1dG8gZG90
RmlsZU5hbWUgPSBtYWtlU3RyaW5nKEdTVF9PQkpFQ1RfTkFNRShtX2Jpbi5nZXQoKSksICIuaW5j
b21pbmciKTsKKyAgICBHU1RfREVCVUdfQklOX1RPX0RPVF9GSUxFX1dJVEhfVFMoR1NUX0JJTl9D
QVNUKG1fYmluLmdldCgpKSwgR1NUX0RFQlVHX0dSQVBIX1NIT1dfQUxMLCBkb3RGaWxlTmFtZS51
dGY4KCkuZGF0YSgpKTsKK30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
SW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZDY0YzQ5NzBjY2I4ZDExYjc5
YTVjMjBkN2YxMzUyZTZmNGFmYmIzCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3Ry
ZWFtZXIuaApAQCAtMCwwICsxLDUwIEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
R1JlZlB0ckdTdHJlYW1lci5oIgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0
aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIgeworcHVibGljOgorICAgIEdzdEVsZW1lbnQqIGJp
bigpIHsgcmV0dXJuIG1fYmluLmdldCgpOyB9CisgICAgdm9pZCByZWdpc3RlckNsaWVudCgpOwor
Citwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1NvdXJjZUdTdHJlYW1lcigpOworCisg
ICAgdm9pZCBjbG9zZVZhbHZlKCkgY29uc3Q7CisgICAgdm9pZCBvcGVuVmFsdmUoKSBjb25zdDsK
KworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV92YWx2ZTsKKworcHJpdmF0ZToKKyAgICB2aXJ0
dWFsIHZvaWQgZGlzcGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYpIHsgfQorCisgICAg
R1JlZlB0cjxHc3RFbGVtZW50PiBtX2JpbjsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdGVl
OworfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVh
bS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZUluY29t
aW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhhY2EwNDM5ZjQ5YmNjMDYy
OTI0NWFmNmI3YTllODUyOTFmOTVmMWMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291
cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDEwOCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJS
VEMpCisjaW5jbHVkZSAiUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmgiCisK
KyNpbmNsdWRlICJWaWRlb0ZyYW1lR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiVmlkZW9GcmFtZU1l
dGFkYXRhR1N0cmVhbWVyLmgiCisjaW5jbHVkZSA8Z3N0L3J0cC9ydHAuaD4KKworbmFtZXNwYWNl
IFdlYkNvcmUgeworCitSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OlJlYWx0
aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihTdHJpbmcmJiB2aWRlb1RyYWNrSWQpCisg
ICAgOiBSZWFsdGltZU1lZGlhU291cmNlKFJlYWx0aW1lTWVkaWFTb3VyY2U6OlR5cGU6OlZpZGVv
LCBXVEZNb3ZlKHZpZGVvVHJhY2tJZCkpCisgICAgLCBSZWFsdGltZUluY29taW5nU291cmNlR1N0
cmVhbWVyKCkKK3sKKyAgICBSZWFsdGltZU1lZGlhU291cmNlU3VwcG9ydGVkQ29uc3RyYWludHMg
Y29uc3RyYWludHM7CisgICAgY29uc3RyYWludHMuc2V0U3VwcG9ydHNXaWR0aCh0cnVlKTsKKyAg
ICBjb25zdHJhaW50cy5zZXRTdXBwb3J0c0hlaWdodCh0cnVlKTsKKyAgICBtX2N1cnJlbnRTZXR0
aW5ncyA9IFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0aW5ncyB7IH07CisgICAgbV9jdXJyZW50U2V0
dGluZ3MtPnNldFN1cHBvcnRlZENvbnN0cmFpbnRzKFdURk1vdmUoY29uc3RyYWludHMpKTsKKwor
ICAgIGF1dG8gc2lua1BhZCA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfc3RhdGljX3BhZCht
X3ZhbHZlLmdldCgpLCAic2luayIpKTsKKyAgICBnc3RfcGFkX2FkZF9wcm9iZShzaW5rUGFkLmdl
dCgpLCBzdGF0aWNfY2FzdDxHc3RQYWRQcm9iZVR5cGU+KEdTVF9QQURfUFJPQkVfVFlQRV9CVUZG
RVIpLCBbXShHc3RQYWQqLCBHc3RQYWRQcm9iZUluZm8qIGluZm8sIGdwb2ludGVyKSAtPiBHc3RQ
YWRQcm9iZVJldHVybiB7CisgICAgICAgIGF1dG8gdmlkZW9GcmFtZVRpbWVNZXRhZGF0YSA9IHN0
ZDo6bWFrZV9vcHRpb25hbDxWaWRlb0ZyYW1lVGltZU1ldGFkYXRhPih7IH0pOworICAgICAgICB2
aWRlb0ZyYW1lVGltZU1ldGFkYXRhLT5yZWNlaXZlVGltZSA9IE1vbm90b25pY1RpbWU6Om5vdygp
LnNlY29uZHNTaW5jZUVwb2NoKCk7CisKKyAgICAgICAgYXV0byogYnVmZmVyID0gR1NUX0JVRkZF
Ul9DQVNUKEdTVF9QQURfUFJPQkVfSU5GT19EQVRBKGluZm8pKTsKKyAgICAgICAgR3N0UlRQQnVm
ZmVyIHJ0cEJ1ZmZlciBHU1RfUlRQX0JVRkZFUl9JTklUOworICAgICAgICBpZiAoZ3N0X3J0cF9i
dWZmZXJfbWFwKGJ1ZmZlciwgR1NUX01BUF9SRUFELCAmcnRwQnVmZmVyKSkgeworICAgICAgICAg
ICAgdmlkZW9GcmFtZVRpbWVNZXRhZGF0YS0+cnRwVGltZXN0YW1wID0gZ3N0X3J0cF9idWZmZXJf
Z2V0X3RpbWVzdGFtcCgmcnRwQnVmZmVyKTsKKyAgICAgICAgICAgIGdzdF9ydHBfYnVmZmVyX3Vu
bWFwKCZydHBCdWZmZXIpOworICAgICAgICB9CisgICAgICAgIGJ1ZmZlciA9IHdlYmtpdEdzdEJ1
ZmZlclNldFZpZGVvRnJhbWVUaW1lTWV0YWRhdGEoYnVmZmVyLCBXVEZNb3ZlKHZpZGVvRnJhbWVU
aW1lTWV0YWRhdGEpKTsKKyAgICAgICAgR1NUX1BBRF9QUk9CRV9JTkZPX0RBVEEoaW5mbykgPSBi
dWZmZXI7CisgICAgICAgIHJldHVybiBHU1RfUEFEX1BST0JFX09LOworICAgIH0sIG51bGxwdHIs
IG51bGxwdHIpOworCisgICAgc3RhcnQoKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlk
ZW9Tb3VyY2VHU3RyZWFtZXI6OnN0YXJ0UHJvZHVjaW5nRGF0YSgpCit7CisgICAgb3BlblZhbHZl
KCk7Cit9CisKK3ZvaWQgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpzdG9w
UHJvZHVjaW5nRGF0YSgpCit7CisgICAgY2xvc2VWYWx2ZSgpOworfQorCitjb25zdCBSZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXI6OmNhcGFiaWxpdGllcygpCit7CisgICAgcmV0dXJuIFJlYWx0aW1lTWVkaWFTb3VyY2VD
YXBhYmlsaXRpZXM6OmVtcHR5Q2FwYWJpbGl0aWVzKCk7Cit9CisKK2NvbnN0IFJlYWx0aW1lTWVk
aWFTb3VyY2VTZXR0aW5ncyYgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyOjpz
ZXR0aW5ncygpCit7CisgICAgaWYgKG1fY3VycmVudFNldHRpbmdzKQorICAgICAgICByZXR1cm4g
bV9jdXJyZW50U2V0dGluZ3MudmFsdWUoKTsKKworICAgIFJlYWx0aW1lTWVkaWFTb3VyY2VTdXBw
b3J0ZWRDb25zdHJhaW50cyBjb25zdHJhaW50czsKKyAgICBjb25zdHJhaW50cy5zZXRTdXBwb3J0
c1dpZHRoKHRydWUpOworICAgIGNvbnN0cmFpbnRzLnNldFN1cHBvcnRzSGVpZ2h0KHRydWUpOwor
CisgICAgUmVhbHRpbWVNZWRpYVNvdXJjZVNldHRpbmdzIHNldHRpbmdzOworICAgIGF1dG8mIHNp
emUgPSB0aGlzLT5zaXplKCk7CisgICAgc2V0dGluZ3Muc2V0V2lkdGgoc2l6ZS53aWR0aCgpKTsK
KyAgICBzZXR0aW5ncy5zZXRIZWlnaHQoc2l6ZS5oZWlnaHQoKSk7CisgICAgc2V0dGluZ3Muc2V0
U3VwcG9ydGVkQ29uc3RyYWludHMoY29uc3RyYWludHMpOworCisgICAgbV9jdXJyZW50U2V0dGlu
Z3MgPSBXVEZNb3ZlKHNldHRpbmdzKTsKKyAgICByZXR1cm4gbV9jdXJyZW50U2V0dGluZ3MudmFs
dWUoKTsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6OnNl
dHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZs
YWc+IHNldHRpbmdzKQoreworICAgIGlmIChzZXR0aW5ncy5jb250YWluc0FueSh7IFJlYWx0aW1l
TWVkaWFTb3VyY2VTZXR0aW5nczo6RmxhZzo6V2lkdGgsIFJlYWx0aW1lTWVkaWFTb3VyY2VTZXR0
aW5nczo6RmxhZzo6SGVpZ2h0IH0pKQorICAgICAgICBtX2N1cnJlbnRTZXR0aW5ncyA9IHN0ZDo6
bnVsbG9wdDsKK30KKwordm9pZCBSZWFsdGltZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI6
OmRpc3BhdGNoU2FtcGxlKEdSZWZQdHI8R3N0U2FtcGxlPiYmIGdzdFNhbXBsZSkKK3sKKyAgICBh
dXRvKiBidWZmZXIgPSBnc3Rfc2FtcGxlX2dldF9idWZmZXIoZ3N0U2FtcGxlLmdldCgpKTsKKyAg
ICB2aWRlb1NhbXBsZUF2YWlsYWJsZShWaWRlb0ZyYW1lR1N0cmVhbWVyOjpjcmVhdGVXcmFwcGVk
U2FtcGxlKGdzdFNhbXBsZSwgZnJvbUdzdENsb2NrVGltZShHU1RfQlVGRkVSX1BUUyhidWZmZXIp
KSksIHsgfSk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIFVTRShH
U1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5o
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
SW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmE5YmMzMDA2OWNkMzMy
MDkyMzE4YmJmNzc4YWI5M2Q5MTg0ODMxZmIKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVJbmNvbWluZ1ZpZGVv
U291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw1OCBAQAorLyoKKyAqICBDb3B5cmlnaHQgKEMp
IDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogIENvcHlyaWdo
dCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlzIGxpYnJhcnkg
aXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9k
aWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwor
ICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247
IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9u
KSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVk
IGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5Z
IFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJD
SEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhl
IEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMu
CisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBp
ZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwg
NTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAg
VVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJUQykKKwor
I2luY2x1ZGUgIlJlYWx0aW1lSW5jb21pbmdTb3VyY2VHU3RyZWFtZXIuaCIKKyNpbmNsdWRlICJS
ZWFsdGltZU1lZGlhU291cmNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgUmVh
bHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyIDogcHVibGljIFJlYWx0aW1lTWVkaWFT
b3VyY2UsIHB1YmxpYyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIHsKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUmVmPFJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcj4gY3Jl
YXRlKFN0cmluZyYmIHZpZGVvVHJhY2tJZCkgeyByZXR1cm4gYWRvcHRSZWYoKm5ldyBSZWFsdGlt
ZUluY29taW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIoV1RGTW92ZSh2aWRlb1RyYWNrSWQpKSk7IH0K
KyAgICB+UmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKCkgPSBkZWZhdWx0Owor
Citwcm90ZWN0ZWQ6CisgICAgUmVhbHRpbWVJbmNvbWluZ1ZpZGVvU291cmNlR1N0cmVhbWVyKFN0
cmluZyYmKTsKKworcHJpdmF0ZToKKyAgICAvLyBSZWFsdGltZU1lZGlhU291cmNlIEFQSQorICAg
IHZvaWQgc3RhcnRQcm9kdWNpbmdEYXRhKCkgZmluYWw7CisgICAgdm9pZCBzdG9wUHJvZHVjaW5n
RGF0YSgpICBmaW5hbDsKKyAgICB2b2lkIHNldHRpbmdzRGlkQ2hhbmdlKE9wdGlvblNldDxSZWFs
dGltZU1lZGlhU291cmNlU2V0dGluZ3M6OkZsYWc+KSBmaW5hbDsKKyAgICBjb25zdCBSZWFsdGlt
ZU1lZGlhU291cmNlQ2FwYWJpbGl0aWVzJiBjYXBhYmlsaXRpZXMoKSBmaW5hbDsKKyAgICBjb25z
dCBSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3MmIHNldHRpbmdzKCkgZmluYWw7CisgICAgYm9v
bCBpc0luY29taW5nVmlkZW9Tb3VyY2UoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisK
KyAgICAvLyBSZWFsdGltZUluY29taW5nU291cmNlR1N0cmVhbWVyIEFQSQorICAgIHZvaWQgZGlz
cGF0Y2hTYW1wbGUoR1JlZlB0cjxHc3RTYW1wbGU+JiYpIGZpbmFsOworCisgICAgc3RkOjpvcHRp
b25hbDxSZWFsdGltZU1lZGlhU291cmNlU2V0dGluZ3M+IG1fY3VycmVudFNldHRpbmdzOworfTsK
KworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCitTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX0JFR0lO
KFdlYkNvcmU6OlJlYWx0aW1lSW5jb21pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcikKKyAgICBzdGF0
aWMgYm9vbCBpc1R5cGUoY29uc3QgV2ViQ29yZTo6UmVhbHRpbWVNZWRpYVNvdXJjZSYgc291cmNl
KSB7IHJldHVybiBzb3VyY2UuaXNJbmNvbWluZ1ZpZGVvU291cmNlKCk7IH0KK1NQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfRU5EKCkKKworI2VuZGlmIC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1Jl
YWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNl
R1N0cmVhbWVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYTc0YjI1ZDRlZmQ1OGNmNzViNzNjZmQ2MmIwNzU3
NDJmNTI4OGY3Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVk
aWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5j
cHAKQEAgLTAsMCArMSwxMTcgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIwMjIgSWdh
bGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIwMjIgTWV0
cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdh
cmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0
aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFz
IHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2
ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZl
cnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0
aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0
aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9y
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNz
ZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ug
c2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0
byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJSZWFsdGltZU91dGdvaW5nQXVkaW9Tb3VyY2VH
U3RyZWFtZXIuaCIKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAiR1N0
cmVhbWVyQXVkaW9DYXB0dXJlU291cmNlLmgiCisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nVG9J
bnRlZ2VyQ29udmVyc2lvbi5oPgorCitHU1RfREVCVUdfQ0FURUdPUllfRVhURVJOKHdlYmtpdF93
ZWJydGNfZW5kcG9pbnRfZGVidWcpOworI2RlZmluZSBHU1RfQ0FUX0RFRkFVTFQgd2Via2l0X3dl
YnJ0Y19lbmRwb2ludF9kZWJ1ZworCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1JlYWx0aW1lT3V0
Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcjo6UmVhbHRpbWVPdXRnb2luZ0F1ZGlvU291cmNlR1N0
cmVhbWVyKFJlZjxNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJiBzb3VyY2UpCisgICAgOiBSZWFs
dGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIFZlY3RvcjxzdGQ6OnBh
aXI8Y29uc3QgY2hhciosIGludD4+IGVuY29kaW5nczsKKyAgICBlbmNvZGluZ3MucmVzZXJ2ZUlu
aXRpYWxDYXBhY2l0eSg0KTsKKyAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBwZW5kKHsgIk9QVVMi
LCA0ODAwMCB9KTsKKyAgICBlbmNvZGluZ3MudW5jaGVja2VkQXBwZW5kKHsgIkc3MjIiLCA4MDAw
IH0pOworICAgIGVuY29kaW5ncy51bmNoZWNrZWRBcHBlbmQoeyAiUENNQSIsIDgwMDAgfSk7Cisg
ICAgZW5jb2RpbmdzLnVuY2hlY2tlZEFwcGVuZCh7ICJQQ01VIiwgODAwMCB9KTsKKyAgICBtX2Fs
bG93ZWRDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eSgpKTsKKyAgICBmb3IgKGF1
dG8mIFtlbmNvZGluZ05hbWUsIGNsb2NrUmF0ZV0gOiBlbmNvZGluZ3MpCisgICAgICAgIGdzdF9j
YXBzX2FwcGVuZF9zdHJ1Y3R1cmUobV9hbGxvd2VkQ2Fwcy5nZXQoKSwgZ3N0X3N0cnVjdHVyZV9u
ZXcoImFwcGxpY2F0aW9uL3gtcnRwIiwgIm1lZGlhIiwgR19UWVBFX1NUUklORywgImF1ZGlvIiwg
ImVuY29kaW5nLW5hbWUiLCBHX1RZUEVfU1RSSU5HLCBlbmNvZGluZ05hbWUsICJjbG9jay1yYXRl
IiwgR19UWVBFX0lOVCwgY2xvY2tSYXRlLCBudWxscHRyKSk7CisKKyAgICBtX2F1ZGlvY29udmVy
dCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiYXVkaW9jb252ZXJ0IiwgbnVsbHB0cik7Cisg
ICAgbV9hdWRpb3Jlc2FtcGxlID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtlKCJhdWRpb3Jlc2Ft
cGxlIiwgbnVsbHB0cik7CisgICAgZ3N0X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4u
Z2V0KCkpLCBtX2F1ZGlvY29udmVydC5nZXQoKSwgbV9hdWRpb3Jlc2FtcGxlLmdldCgpLCBudWxs
cHRyKTsKKyAgICBzZXRTb3VyY2UoV1RGTW92ZShzb3VyY2UpKTsKK30KKworYm9vbCBSZWFsdGlt
ZU91dGdvaW5nQXVkaW9Tb3VyY2VHU3RyZWFtZXI6OnNldFBheWxvYWRUeXBlKGNvbnN0IEdSZWZQ
dHI8R3N0Q2Fwcz4mIGNhcHMpCit7CisgICAgR1NUX0RFQlVHX09CSkVDVChtX2Jpbi5nZXQoKSwg
Ik91dGdvaW5nIGF1ZGlvIHNvdXJjZSBwYXlsb2FkIGNhcHM6ICUiIEdTVF9QVFJfRk9STUFULCBj
YXBzLmdldCgpKTsKKyAgICBhdXRvKiBzdHJ1Y3R1cmUgPSBnc3RfY2Fwc19nZXRfc3RydWN0dXJl
KGNhcHMuZ2V0KCksIDApOworICAgIGlmIChjb25zdCBjaGFyKiBlbmNvZGluZ05hbWUgPSBnc3Rf
c3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAiZW5jb2RpbmctbmFtZSIpKSB7CisgICAg
ICAgIGlmIChlcXVhbChlbmNvZGluZ05hbWUsICJPUFVTIikpIHsKKyAgICAgICAgICAgIG1fZW5j
b2RlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJvcHVzZW5jIiwgbnVsbHB0cik7CisgICAgICAg
ICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KCJydHBvcHVzcGF5IiwgbnVs
bHB0cik7CisgICAgICAgICAgICBpZiAoIW1fZW5jb2RlciB8fCAhbV9wYXlsb2FkZXIpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgICAgICAvLyBGSVhNRTogRW5hYmxl
IGR0eCB0b28/CisgICAgICAgICAgICBnc3RfdXRpbF9zZXRfb2JqZWN0X2FyZyhHX09CSkVDVCht
X2VuY29kZXIuZ2V0KCkpLCAiYXVkaW8tdHlwZSIsICJ2b2ljZSIpOworCisgICAgICAgICAgICBp
ZiAoY29uc3QgY2hhciogdXNlSW5iYW5kRmVjID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0
cnVjdHVyZSwgInVzZWluYmFuZGZlYyIpKSB7CisgICAgICAgICAgICAgICAgaWYgKCFzdHJjbXAo
dXNlSW5iYW5kRmVjLCAiMSIpKQorICAgICAgICAgICAgICAgICAgICBnX29iamVjdF9zZXQobV9l
bmNvZGVyLmdldCgpLCAiaW5iYW5kLWZlYyIsIHRydWUsIG51bGxwdHIpOworICAgICAgICAgICAg
fQorICAgICAgICB9IGVsc2UgaWYgKGVxdWFsKGVuY29kaW5nTmFtZSwgIkc3MjIiKSkgeworICAg
ICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwZzcyMnBheSIs
IG51bGxwdHIpOworICAgICAgICAgICAgaWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAi
UENNQSIpIHx8IGVxdWFsKGVuY29kaW5nTmFtZSwgIlBDTVUiKSkgeworICAgICAgICAgICAgYXV0
byBwYXlsb2FkZXJOYW1lID0gbWFrZVN0cmluZygicnRwIiwgZW5jb2RpbmdOYW1lLCAicGF5Iik7
CisgICAgICAgICAgICBtX3BheWxvYWRlciA9IG1ha2VHU3RyZWFtZXJFbGVtZW50KHBheWxvYWRl
ck5hbWUuY29udmVydFRvQVNDSUlMb3dlcmNhc2UoKS5hc2NpaSgpLmRhdGEoKSwgbnVsbHB0cik7
CisgICAgICAgICAgICBtX2VuY29kZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgiYWxhd2VuYyIs
IG51bGxwdHIpOworICAgICAgICAgICAgaWYgKCFtX3BheWxvYWRlciB8fCAhbV9lbmNvZGVyKQor
ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgIEdTVF9FUlJPUl9PQkpFQ1QobV9iaW4uZ2V0KCksICJVbnN1cHBvcnRlZCBvdXRnb2luZyBh
dWRpbyBlbmNvZGluZzogJXMiLCBlbmNvZGluZ05hbWUpOworICAgICAgICAgICAgcmV0dXJuIGZh
bHNlOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgR1NUX0VSUk9SX09CSkVDVCht
X2Jpbi5nZXQoKSwgImVuY29kaW5nLW5hbWUgbm90IGZvdW5kIik7CisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICB9CisKKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJhdXRv
LWhlYWRlci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAgICBpZiAoY29uc3QgY2hh
ciogbWluUFRpbWUgPSBnc3Rfc3RydWN0dXJlX2dldF9zdHJpbmcoc3RydWN0dXJlLCAibWlucHRp
bWUiKSkgeworICAgICAgICBTdHJpbmcgdGltZShtaW5QVGltZSk7CisgICAgICAgIGlmIChhdXRv
IHZhbHVlID0gcGFyc2VJbnRlZ2VyQWxsb3dpbmdUcmFpbGluZ0p1bms8aW50NjRfdD4odGltZSkp
CisgICAgICAgICAgICBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0KCksICJtaW4tcHRpbWUi
LCAqdmFsdWUgKiBHU1RfTVNFQ09ORCwgbnVsbHB0cik7CisgICAgfQorCisgICAgaW50IHBheWxv
YWRUeXBlOworICAgIGlmIChnc3Rfc3RydWN0dXJlX2dldF9pbnQoc3RydWN0dXJlLCAicGF5bG9h
ZCIsICZwYXlsb2FkVHlwZSkpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQo
KSwgInB0IiwgcGF5bG9hZFR5cGUsIG51bGxwdHIpOworCisgICAgZ19vYmplY3Rfc2V0KG1fY2Fw
c0ZpbHRlci5nZXQoKSwgImNhcHMiLCBjYXBzLmdldCgpLCBudWxscHRyKTsKKworICAgIGdzdF9i
aW5fYWRkKEdTVF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fcGF5bG9hZGVyLmdldCgpKTsKKyAg
ICBpZiAobV9lbmNvZGVyKSB7CisgICAgICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX2Jp
bi5nZXQoKSksIG1fZW5jb2Rlci5nZXQoKSk7CisgICAgICAgIGdzdF9lbGVtZW50X2xpbmtfbWFu
eShtX291dGdvaW5nU291cmNlLmdldCgpLCBtX3ZhbHZlLmdldCgpLCBtX2F1ZGlvY29udmVydC5n
ZXQoKSwgbV9hdWRpb3Jlc2FtcGxlLmdldCgpLAorICAgICAgICAgICAgbV9wcmVFbmNvZGVyUXVl
dWUuZ2V0KCksIG1fZW5jb2Rlci5nZXQoKSwgbV9wYXlsb2FkZXIuZ2V0KCksIG1fcG9zdEVuY29k
ZXJRdWV1ZS5nZXQoKSwgbnVsbHB0cik7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ3N0X2VsZW1l
bnRfbGlua19tYW55KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIG1fdmFsdmUuZ2V0KCksIG1fYXVk
aW9jb252ZXJ0LmdldCgpLCBtX2F1ZGlvcmVzYW1wbGUuZ2V0KCksCisgICAgICAgICAgICBtX3Bh
eWxvYWRlci5nZXQoKSwgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBudWxscHRyKTsKKyAgICB9
CisgICAgcmV0dXJuIHRydWU7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlm
IC8vIFVTRShHU1RSRUFNRVJfV0VCUlRDKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdT
dHJlYW1lci5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVy
L1JlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lci5oCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmMxOTAy
YjVmNjkxNDI1NDhiYTE3YzcwNjM0NzY4ZWU1YWM5YjViYTEKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRn
b2luZ0F1ZGlvU291cmNlR1N0cmVhbWVyLmgKQEAgLTAsMCArMSw0NCBAQAorLyoKKyAqICBDb3B5
cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
IENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBUaGlz
IGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29y
CisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZv
dW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlv
dXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRp
c3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJ
VEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YK
KyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Uu
ICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3Jl
IGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhl
IEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBs
aWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlv
biwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIx
MTAtMTMwMSAgVVNBCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dF
QlJUQykKKworI2luY2x1ZGUgIlJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5o
IgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lciBmaW5hbCA6IHB1YmxpYyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VH
U3RyZWFtZXIgeworcHVibGljOgorICAgIHN0YXRpYyBSZWY8UmVhbHRpbWVPdXRnb2luZ0F1ZGlv
U291cmNlR1N0cmVhbWVyPiBjcmVhdGUoUmVmPE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlPiYmIGF1
ZGlvU291cmNlKSB7IHJldHVybiBhZG9wdFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1Nv
dXJjZUdTdHJlYW1lcihXVEZNb3ZlKGF1ZGlvU291cmNlKSkpOyB9CisKKyAgICBib29sIHNldFBh
eWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5hbDsKKworcHJvdGVjdGVkOgor
ICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdBdWRpb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVk
aWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCitwcml2YXRlOgorICAgIEdSZWZQdHI8R3N0RWxl
bWVudD4gbV9hdWRpb2NvbnZlcnQ7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBtX2F1ZGlvcmVz
YW1wbGU7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NU
UkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlh
c3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uN2Y3NmQxOTVjZGY4
ZWE3YmQwOWE1Zjg3Njc5N2Q4OWYyNzM1Y2RlZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXIuY3BwCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICogIENvcHlyaWdo
dCAoQykgMjAxNy0yMDIyIElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29w
eXJpZ2h0IChDKSAyMDIyIE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGli
cmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAq
ICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVi
bGljCisgKiAgTGljZW5zZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRh
dGlvbjsgZWl0aGVyCisgKiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJp
YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9V
VCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICog
IE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNl
ZSB0aGUgR05VCisgKiAgTGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0
YWlscy4KKyAqCisgKiAgWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V
IExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJh
cnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJ
bmMuLCA1MSBGcmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0x
MzAxICBVU0EKKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiUmVhbHRpbWVP
dXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKKyNpZiBVU0UoR1NUUkVBTUVSX1dFQlJU
QykKKworI2luY2x1ZGUgIkdTdHJlYW1lckNvbW1vbi5oIgorI2luY2x1ZGUgIkdTdHJlYW1lck1l
ZGlhU3RyZWFtU291cmNlLmgiCisKKyNkZWZpbmUgR1NUX1VTRV9VTlNUQUJMRV9BUEkKKyNpbmNs
dWRlIDxnc3Qvd2VicnRjL3dlYnJ0Yy5oPgorI3VuZGVmIEdTVF9VU0VfVU5TVEFCTEVfQVBJCisK
K0dTVF9ERUJVR19DQVRFR09SWV9FWFRFUk4od2Via2l0X3dlYnJ0Y19lbmRwb2ludF9kZWJ1Zyk7
CisjZGVmaW5lIEdTVF9DQVRfREVGQVVMVCB3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnCisK
K25hbWVzcGFjZSBXZWJDb3JlIHsKKworUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVh
bWVyOjpSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIoKQoreworICAgIG1fYmlu
ID0gZ3N0X2Jpbl9uZXcobnVsbHB0cik7CisKKyAgICBtX3ZhbHZlID0gZ3N0X2VsZW1lbnRfZmFj
dG9yeV9tYWtlKCJ2YWx2ZSIsIG51bGxwdHIpOworICAgIGdzdF91dGlsX3NldF9vYmplY3RfYXJn
KEdfT0JKRUNUKG1fdmFsdmUuZ2V0KCkpLCAiZHJvcC1tb2RlIiwgImZvcndhcmQtc3RpY2t5LWV2
ZW50cyIpOworCisgICAgbV9wcmVFbmNvZGVyUXVldWUgPSBnc3RfZWxlbWVudF9mYWN0b3J5X21h
a2UoInF1ZXVlIiwgbnVsbHB0cik7CisgICAgbV9wb3N0RW5jb2RlclF1ZXVlID0gZ3N0X2VsZW1l
bnRfZmFjdG9yeV9tYWtlKCJxdWV1ZSIsIG51bGxwdHIpOworICAgIG1fY2Fwc0ZpbHRlciA9IGdz
dF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgiY2Fwc2ZpbHRlciIsIG51bGxwdHIpOworCisgICAgZ3N0
X2Jpbl9hZGRfbWFueShHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3ZhbHZlLmdldCgpLCBt
X3ByZUVuY29kZXJRdWV1ZS5nZXQoKSwKKyAgICAgICAgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgp
LCBtX2NhcHNGaWx0ZXIuZ2V0KCksIG51bGxwdHIpOworCisgICAgYXV0byBzcmNQYWQgPSBhZG9w
dEdSZWYoZ3N0X2VsZW1lbnRfZ2V0X3N0YXRpY19wYWQobV9jYXBzRmlsdGVyLmdldCgpLCAic3Jj
IikpOworICAgIGdzdF9lbGVtZW50X2FkZF9wYWQobV9iaW4uZ2V0KCksIGdzdF9naG9zdF9wYWRf
bmV3KCJzcmMiLCBzcmNQYWQuZ2V0KCkpKTsKK30KKworUmVhbHRpbWVPdXRnb2luZ01lZGlhU291
cmNlR1N0cmVhbWVyOjp+UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyKCkKK3sK
KyAgICBzdG9wKCk7CisKKyAgICBpZiAobV93ZWJydGNTaW5rUGFkKSB7CisgICAgICAgIGF1dG8g
c3JjUGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYmluLmdldCgp
LCAic3JjIikpOworICAgICAgICBnc3RfcGFkX3VubGluayhzcmNQYWQuZ2V0KCksIG1fd2VicnRj
U2lua1BhZC5nZXQoKSk7CisKKyAgICAgICAgYXV0byBwYXJlbnQgPSBhZG9wdEdSZWYoZ3N0X3Bh
ZF9nZXRfcGFyZW50X2VsZW1lbnQobV93ZWJydGNTaW5rUGFkLmdldCgpKSk7CisgICAgICAgIEdT
VF9ERUJVR19PQkpFQ1QocGFyZW50LmdldCgpLCAiUmVtb3ZpbmcgcGFkICUiIEdTVF9QVFJfRk9S
TUFULCBtX3dlYnJ0Y1NpbmtQYWQuZ2V0KCkpOworICAgICAgICBnc3RfZWxlbWVudF9yZWxlYXNl
X3JlcXVlc3RfcGFkKHBhcmVudC5nZXQoKSwgbV93ZWJydGNTaW5rUGFkLmdldCgpKTsKKyAgICB9
CisKKyAgICBnc3RfZWxlbWVudF9zZXRfc3RhdGUobV9iaW4uZ2V0KCksIEdTVF9TVEFURV9OVUxM
KTsKKyAgICBpZiAoYXV0byBwaXBlbGluZSA9IGFkb3B0R1JlZihnc3RfZWxlbWVudF9nZXRfcGFy
ZW50KG1fYmluLmdldCgpKSkpCisgICAgICAgIGdzdF9iaW5fcmVtb3ZlKEdTVF9CSU5fQ0FTVChw
aXBlbGluZS5nZXQoKSksIG1fYmluLmdldCgpKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXI6OnNldFNvdXJjZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZh
dGU+JiYgbmV3U291cmNlKQoreworICAgIGlmIChtX3NvdXJjZSAmJiAhbV9pbml0aWFsU2V0dGlu
Z3MpCisgICAgICAgIG1faW5pdGlhbFNldHRpbmdzID0gbV9zb3VyY2UudmFsdWUoKS0+c2V0dGlu
Z3MoKTsKKworICAgIGlmIChtX3NvdXJjZSkKKyAgICAgICAgbV9zb3VyY2UudmFsdWUoKS0+cmVt
b3ZlT2JzZXJ2ZXIoKnRoaXMpOworICAgIG1fc291cmNlID0gV1RGTW92ZShuZXdTb3VyY2UpOwor
ICAgIGluaXRpYWxpemVGcm9tVHJhY2soKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVk
aWFTb3VyY2VHU3RyZWFtZXI6OnN0YXJ0KCkKK3sKKyAgICBtX3NvdXJjZS52YWx1ZSgpLT5hZGRP
YnNlcnZlcigqdGhpcyk7CisgICAgbV9pc1N0b3BwZWQgPSBmYWxzZTsKKyAgICBnc3RfZWxlbWVu
dF9saW5rKG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIG1fdmFsdmUuZ2V0KCkpOworICAgIGdzdF9l
bGVtZW50X3N5bmNfc3RhdGVfd2l0aF9wYXJlbnQobV9iaW4uZ2V0KCkpOworfQorCit2b2lkIFJl
YWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6c3RvcCgpCit7CisgICAgbV9pc1N0
b3BwZWQgPSB0cnVlOworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKworICAg
IG1fc291cmNlLnZhbHVlKCktPnJlbW92ZU9ic2VydmVyKCp0aGlzKTsKKyAgICBnc3RfZWxlbWVu
dF9zZW5kX2V2ZW50KG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCksIGdzdF9ldmVudF9uZXdfZW9zKCkp
OworICAgIGdzdF9lbGVtZW50X3NldF9sb2NrZWRfc3RhdGUobV9iaW4uZ2V0KCksIFRSVUUpOwor
ICAgIGdzdF9lbGVtZW50X3NldF9zdGF0ZShtX291dGdvaW5nU291cmNlLmdldCgpLCBHU1RfU1RB
VEVfTlVMTCk7CisgICAgZ3N0X2Jpbl9yZW1vdmUoR1NUX0JJTl9DQVNUKG1fYmluLmdldCgpKSwg
bV9vdXRnb2luZ1NvdXJjZS5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc2V0X2xvY2tlZF9zdGF0
ZShtX2Jpbi5nZXQoKSwgRkFMU0UpOworICAgIG1fc291cmNlLnJlc2V0KCk7Cit9CisKK3ZvaWQg
UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzb3VyY2VNdXRlZENoYW5nZWQo
KQoreworICAgIGlmICghbV9zb3VyY2UpCisgICAgICAgIHJldHVybjsKKyAgICBBU1NFUlQobV9t
dXRlZCAhPSBtX3NvdXJjZS52YWx1ZSgpLT5tdXRlZCgpKTsKKyAgICBtX211dGVkID0gbV9zb3Vy
Y2UudmFsdWUoKS0+bXV0ZWQoKTsKK30KKwordm9pZCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3Vy
Y2VHU3RyZWFtZXI6OnNvdXJjZUVuYWJsZWRDaGFuZ2VkKCkKK3sKKyAgICBpZiAoIW1fc291cmNl
KQorICAgICAgICByZXR1cm47CisKKyAgICBtX2VuYWJsZWQgPSBtX3NvdXJjZS52YWx1ZSgpLT5l
bmFibGVkKCk7CisgICAgaWYgKG1fdmFsdmUpCisgICAgICAgIGdfb2JqZWN0X3NldChtX3ZhbHZl
LmdldCgpLCAiZHJvcCIsICFtX2VuYWJsZWQsIG51bGxwdHIpOworfQorCit2b2lkIFJlYWx0aW1l
T3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcjo6aW5pdGlhbGl6ZUZyb21UcmFjaygpCit7Cisg
ICAgbV9tdXRlZCA9IG1fc291cmNlLnZhbHVlKCktPm11dGVkKCk7CisgICAgbV9lbmFibGVkID0g
bV9zb3VyY2UudmFsdWUoKS0+ZW5hYmxlZCgpOworICAgIG1fb3V0Z29pbmdTb3VyY2UgPSB3ZWJr
aXRNZWRpYVN0cmVhbVNyY05ldygpOworICAgIGdzdF9iaW5fYWRkKEdTVF9CSU5fQ0FTVChtX2Jp
bi5nZXQoKSksIG1fb3V0Z29pbmdTb3VyY2UuZ2V0KCkpOworICAgIHdlYmtpdE1lZGlhU3RyZWFt
U3JjQWRkVHJhY2soV0VCS0lUX01FRElBX1NUUkVBTV9TUkMobV9vdXRnb2luZ1NvdXJjZS5nZXQo
KSksIG1fc291cmNlLT5wdHIoKSwgdHJ1ZSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01l
ZGlhU291cmNlR1N0cmVhbWVyOjpsaW5rKCkKK3sKKyAgICBnc3RfZWxlbWVudF9saW5rKG1fcG9z
dEVuY29kZXJRdWV1ZS5nZXQoKSwgbV9jYXBzRmlsdGVyLmdldCgpKTsKKworICAgIGF1dG8gc3Jj
UGFkID0gYWRvcHRHUmVmKGdzdF9lbGVtZW50X2dldF9zdGF0aWNfcGFkKG1fYmluLmdldCgpLCAi
c3JjIikpOworICAgIGdzdF9wYWRfbGluayhzcmNQYWQuZ2V0KCksIG1fd2VicnRjU2lua1BhZC5n
ZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfc3luY19zdGF0ZV93aXRoX3BhcmVudChtX2Jpbi5nZXQo
KSk7Cit9CisKK3ZvaWQgUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyOjpzZXRT
aW5rUGFkKEdSZWZQdHI8R3N0UGFkPiYmIHBhZCkKK3sKKyAgICBtX3dlYnJ0Y1NpbmtQYWQgPSBX
VEZNb3ZlKHBhZCk7CisgICAgR1JlZlB0cjxHc3RXZWJSVENSVFBUcmFuc2NlaXZlcj4gdHJhbnNj
ZWl2ZXI7CisgICAgZ19vYmplY3RfZ2V0KG1fd2VicnRjU2lua1BhZC5nZXQoKSwgInRyYW5zY2Vp
dmVyIiwgJnRyYW5zY2VpdmVyLm91dFB0cigpLCBudWxscHRyKTsKKyAgICBnX29iamVjdF9nZXQo
dHJhbnNjZWl2ZXIuZ2V0KCksICJzZW5kZXIiLCAmbV9zZW5kZXIub3V0UHRyKCksIG51bGxwdHIp
OworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVS
X1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFt
L2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIuaCBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5n
TWVkaWFTb3VyY2VHU3RyZWFtZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42ZTVjMWNkMmRlNWQ2NGMzNjFhY2Vm
ZTZmNDMwN2ZhZmQ3NDhkYWM2Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWVkaWFzdHJlYW0vZ3N0cmVhbWVyL1JlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdT
dHJlYW1lci5oCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiAgQ29weXJpZ2h0IChDKSAyMDE3LTIw
MjIgSWdhbGlhIFMuTC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqICBDb3B5cmlnaHQgKEMpIDIw
MjIgTWV0cm9sb2dpY2FsIEdyb3VwIEIuVi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUg
c29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1
bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNl
bnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIK
KyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxh
dGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUg
aG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5U
WTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklM
SVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAq
ICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAq
ICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVy
YWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3
cml0ZSB0byB0aGUgRnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5r
bGluIFN0cmVldCwgRmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICov
CisKKyNwcmFnbWEgb25jZQorCisjaWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisKKyNpbmNsdWRl
ICJHUmVmUHRyR1N0cmVhbWVyLmgiCisjaW5jbHVkZSAiTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUu
aCIKKyNpbmNsdWRlIDx3dGYvVGhyZWFkU2FmZVJlZkNvdW50ZWQuaD4KKworbmFtZXNwYWNlIFdl
YkNvcmUgeworCitjbGFzcyBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3RyZWFtZXIgOiBw
dWJsaWMgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0
cmVhbWVyPiwgcHVibGljIE1lZGlhU3RyZWFtVHJhY2tQcml2YXRlOjpPYnNlcnZlciB7CitwdWJs
aWM6CisgICAgflJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lcigpOworCisgICAg
dm9pZCBzdGFydCgpOworICAgIHZvaWQgc3RvcCgpOworICAgIHZvaWQgc2V0U291cmNlKFJlZjxN
ZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZT4mJik7CisgICAgTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUm
IHNvdXJjZSgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLT5nZXQoKTsgfQorCisgICAgY29uc3Qg
R1JlZlB0cjxHc3RDYXBzPiYgYWxsb3dlZENhcHMoKSBjb25zdCB7IHJldHVybiBtX2FsbG93ZWRD
YXBzOyB9CisKKyAgICB2b2lkIGxpbmsoKTsKKyAgICBjb25zdCBHUmVmUHRyPEdzdFBhZD4mIHBh
ZCgpIGNvbnN0IHsgcmV0dXJuIG1fd2VicnRjU2lua1BhZDsgfQorICAgIHZvaWQgc2V0U2lua1Bh
ZChHUmVmUHRyPEdzdFBhZD4mJik7CisKKyAgICBHUmVmUHRyPEdzdFdlYlJUQ1JUUFNlbmRlcj4g
c2VuZGVyKCkgY29uc3QgeyByZXR1cm4gbV9zZW5kZXI7IH0KKyAgICBHUmVmUHRyPEdzdEVsZW1l
bnQ+IGJpbigpIGNvbnN0IHsgcmV0dXJuIG1fYmluOyB9CisKKyAgICB2aXJ0dWFsIGJvb2wgc2V0
UGF5bG9hZFR5cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYpIHsgcmV0dXJuIGZhbHNlOyB9CisK
K3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBSZWFsdGltZU91dGdvaW5nTWVkaWFTb3VyY2VHU3Ry
ZWFtZXIoKTsKKworICAgIHZvaWQgaW5pdGlhbGl6ZUZyb21UcmFjaygpOworCisgICAgYm9vbCBt
X2VuYWJsZWQgeyB0cnVlIH07CisgICAgYm9vbCBtX211dGVkIHsgZmFsc2UgfTsKKyAgICBib29s
IG1faXNTdG9wcGVkIHsgZmFsc2UgfTsKKyAgICBzdGQ6Om9wdGlvbmFsPFJlZjxNZWRpYVN0cmVh
bVRyYWNrUHJpdmF0ZT4+IG1fc291cmNlOworICAgIHN0ZDo6b3B0aW9uYWw8UmVhbHRpbWVNZWRp
YVNvdXJjZVNldHRpbmdzPiBtX2luaXRpYWxTZXR0aW5nczsKKyAgICBHUmVmUHRyPEdzdEVsZW1l
bnQ+IG1fYmluOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9vdXRnb2luZ1NvdXJjZTsKKyAg
ICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fdmFsdmU7CisgICAgR1JlZlB0cjxHc3RFbGVtZW50PiBt
X3ByZUVuY29kZXJRdWV1ZTsKKyAgICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fZW5jb2RlcjsKKyAg
ICBHUmVmUHRyPEdzdEVsZW1lbnQ+IG1fcGF5bG9hZGVyOworICAgIEdSZWZQdHI8R3N0RWxlbWVu
dD4gbV9wb3N0RW5jb2RlclF1ZXVlOworICAgIEdSZWZQdHI8R3N0RWxlbWVudD4gbV9jYXBzRmls
dGVyOworICAgIEdSZWZQdHI8R3N0Q2Fwcz4gbV9hbGxvd2VkQ2FwczsKKyAgICBHUmVmUHRyPEdz
dFdlYlJUQ1JUUFNlbmRlcj4gbV9zZW5kZXI7CisgICAgR1JlZlB0cjxHc3RQYWQ+IG1fd2VicnRj
U2lua1BhZDsKKworcHJpdmF0ZToKKyAgICB2b2lkIHNvdXJjZU11dGVkQ2hhbmdlZCgpOworICAg
IHZvaWQgc291cmNlRW5hYmxlZENoYW5nZWQoKTsKKworICAgIC8vIE1lZGlhU3RyZWFtVHJhY2tQ
cml2YXRlOjpPYnNlcnZlciBBUEkKKyAgICB2b2lkIHRyYWNrTXV0ZWRDaGFuZ2VkKE1lZGlhU3Ry
ZWFtVHJhY2tQcml2YXRlJikgb3ZlcnJpZGUgeyBzb3VyY2VNdXRlZENoYW5nZWQoKTsgfQorICAg
IHZvaWQgdHJhY2tFbmFibGVkQ2hhbmdlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYpIG92ZXJy
aWRlIHsgc291cmNlRW5hYmxlZENoYW5nZWQoKTsgfQorICAgIHZvaWQgdHJhY2tTZXR0aW5nc0No
YW5nZWQoTWVkaWFTdHJlYW1UcmFja1ByaXZhdGUmKSBvdmVycmlkZSB7IGluaXRpYWxpemVGcm9t
VHJhY2soKTsgfQorICAgIHZvaWQgdHJhY2tFbmRlZChNZWRpYVN0cmVhbVRyYWNrUHJpdmF0ZSYp
IG92ZXJyaWRlIHsgfQorfTsKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8g
VVNFKEdTVFJFQU1FUl9XRUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVh
bWVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9S
ZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXIuY3BwCm5ldyBmaWxlIG1vZGUgMTAw
NjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjRiOGY2
MzRiMjM0MDA3YjFlOTYwYmJhMWU1NjczOTNmNjEyY2YyY2QKLS0tIC9kZXYvbnVsbAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRn
b2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmNwcApAQCAtMCwwICsxLDExMSBAQAorLyoKKyAqICBD
b3B5cmlnaHQgKEMpIDIwMTctMjAyMiBJZ2FsaWEgUy5MLiBBbGwgcmlnaHRzIHJlc2VydmVkLgor
ICogIENvcHlyaWdodCAoQykgMjAyMiBNZXRyb2xvZ2ljYWwgR3JvdXAgQi5WLgorICoKKyAqICBU
aGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5k
L29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5l
cmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJl
IEZvdW5kYXRpb247IGVpdGhlcgorICogIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0
IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlz
IGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0
IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkg
b2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UuICBTZWUgdGhlIEdOVQorICogIExlc3NlciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBt
b3JlIGRldGFpbHMuCisgKgorICogIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2Yg
dGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhp
cyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRvIHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRh
dGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAg
MDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIlJl
YWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lci5oIgorCisjaWYgVVNFKEdTVFJFQU1F
Ul9XRUJSVEMpCisKKyNpbmNsdWRlICJHU3RyZWFtZXJWaWRlb0NhcHR1cmVTb3VyY2UuaCIKKwor
R1NUX0RFQlVHX0NBVEVHT1JZX0VYVEVSTih3ZWJraXRfd2VicnRjX2VuZHBvaW50X2RlYnVnKTsK
KyNkZWZpbmUgR1NUX0NBVF9ERUZBVUxUIHdlYmtpdF93ZWJydGNfZW5kcG9pbnRfZGVidWcKKwor
bmFtZXNwYWNlIFdlYkNvcmUgeworCitSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFt
ZXI6OlJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1U
cmFja1ByaXZhdGU+JiYgc291cmNlKQorICAgIDogUmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNl
R1N0cmVhbWVyKCkKK3sKKyAgICByZWdpc3RlcldlYktpdEdTdHJlYW1lckVsZW1lbnRzKCk7CisK
KyAgICBtX3ZpZGVvQ29udmVydCA9IGdzdF9lbGVtZW50X2ZhY3RvcnlfbWFrZSgidmlkZW9jb252
ZXJ0IiwgbnVsbHB0cik7CisgICAgbV9lbmNvZGVyID0gZ3N0X2VsZW1lbnRfZmFjdG9yeV9tYWtl
KCJ3ZWJydGN2aWRlb2VuY29kZXIiLCBudWxscHRyKTsKKyAgICBnc3RfYmluX2FkZF9tYW55KEdT
VF9CSU5fQ0FTVChtX2Jpbi5nZXQoKSksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX2VuY29kZXIu
Z2V0KCksIG51bGxwdHIpOworCisgICAgYXV0byogcGFkVGVtcGxhdGUgPSBnc3RfZWxlbWVudF9n
ZXRfcGFkX3RlbXBsYXRlKG1fZW5jb2Rlci5nZXQoKSwgInNyYyIpOworICAgIGF1dG8gY2FwcyA9
IGFkb3B0R1JlZihnc3RfcGFkX3RlbXBsYXRlX2dldF9jYXBzKHBhZFRlbXBsYXRlKSk7CisgICAg
bV9hbGxvd2VkQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1wdHkoKSk7CisgICAgZ3N0
X2NhcHNfZm9yZWFjaChjYXBzLmdldCgpLCByZWludGVycHJldF9jYXN0PEdzdENhcHNGb3JlYWNo
RnVuYz4oK1tdKEdzdENhcHNGZWF0dXJlcyosIEdzdFN0cnVjdHVyZSogc3RydWN0dXJlLCBncG9p
bnRlciB1c2VyRGF0YSkgeworICAgICAgICBhdXRvKiBzb3VyY2UgPSByZWludGVycHJldF9jYXN0
PFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcio+KHVzZXJEYXRhKTsKKyAgICAg
ICAgY29uc3QgY2hhciogbmFtZSA9IGdzdF9zdHJ1Y3R1cmVfZ2V0X25hbWUoc3RydWN0dXJlKTsK
KyAgICAgICAgY29uc3QgY2hhciogZW5jb2RpbmdOYW1lID0gbnVsbHB0cjsKKyAgICAgICAgaWYg
KGVxdWFsKG5hbWUsICJ2aWRlby94LXZwOCIpKQorICAgICAgICAgICAgZW5jb2RpbmdOYW1lID0g
IlZQOCI7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsKG5hbWUsICJ2aWRlby94LXZwOSIpKQorICAg
ICAgICAgICAgZW5jb2RpbmdOYW1lID0gIlZQOSI7CisgICAgICAgIGVsc2UgaWYgKGVxdWFsKG5h
bWUsICJ2aWRlby94LWgyNjQiKSkKKyAgICAgICAgICAgIGVuY29kaW5nTmFtZSA9ICJIMjY0IjsK
KyAgICAgICAgaWYgKGVuY29kaW5nTmFtZSkKKyAgICAgICAgICAgIGdzdF9jYXBzX2FwcGVuZF9z
dHJ1Y3R1cmUoc291cmNlLT5tX2FsbG93ZWRDYXBzLmdldCgpLCBnc3Rfc3RydWN0dXJlX25ldygi
YXBwbGljYXRpb24veC1ydHAiLCAibWVkaWEiLCBHX1RZUEVfU1RSSU5HLCAidmlkZW8iLCAiZW5j
b2RpbmctbmFtZSIsIEdfVFlQRV9TVFJJTkcsIGVuY29kaW5nTmFtZSwgImNsb2NrLXJhdGUiLCBH
X1RZUEVfSU5ULCA5MDAwMCwgbnVsbHB0cikpOworICAgIH0pLCB0aGlzKTsKKworICAgIHNldFNv
dXJjZShXVEZNb3ZlKHNvdXJjZSkpOworfQorCitib29sIFJlYWx0aW1lT3V0Z29pbmdWaWRlb1Nv
dXJjZUdTdHJlYW1lcjo6c2V0UGF5bG9hZFR5cGUoY29uc3QgR1JlZlB0cjxHc3RDYXBzPiYgY2Fw
cykKK3sKKyAgICBHU1RfREVCVUdfT0JKRUNUKG1fYmluLmdldCgpLCAiT3V0Z29pbmcgdmlkZW8g
c291cmNlIHBheWxvYWQgY2FwczogJSIgR1NUX1BUUl9GT1JNQVQsIGNhcHMuZ2V0KCkpOworICAg
IGF1dG8qIHN0cnVjdHVyZSA9IGdzdF9jYXBzX2dldF9zdHJ1Y3R1cmUoY2Fwcy5nZXQoKSwgMCk7
CisgICAgR1JlZlB0cjxHc3RDYXBzPiBlbmNvZGVyQ2FwczsKKyAgICBpZiAoY29uc3QgY2hhciog
ZW5jb2RpbmdOYW1lID0gZ3N0X3N0cnVjdHVyZV9nZXRfc3RyaW5nKHN0cnVjdHVyZSwgImVuY29k
aW5nLW5hbWUiKSkgeworICAgICAgICBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiVlA4IikpIHsK
KyAgICAgICAgICAgIGVuY29kZXJDYXBzID0gYWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9z
aW1wbGUoInZpZGVvL3gtdnA4IikpOworICAgICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0
cmVhbWVyRWxlbWVudCgicnRwdnA4cGF5IiwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAo
ZXF1YWwoZW5jb2RpbmdOYW1lLCAiVlA5IikpIHsKKyAgICAgICAgICAgIGVuY29kZXJDYXBzID0g
YWRvcHRHUmVmKGdzdF9jYXBzX25ld19lbXB0eV9zaW1wbGUoInZpZGVvL3gtdnA5IikpOworICAg
ICAgICAgICAgbV9wYXlsb2FkZXIgPSBtYWtlR1N0cmVhbWVyRWxlbWVudCgicnRwdnA5cGF5Iiwg
bnVsbHB0cik7CisgICAgICAgIH0gZWxzZSBpZiAoZXF1YWwoZW5jb2RpbmdOYW1lLCAiSDI2NCIp
KSB7CisgICAgICAgICAgICBlbmNvZGVyQ2FwcyA9IGFkb3B0R1JlZihnc3RfY2Fwc19uZXdfZW1w
dHlfc2ltcGxlKCJ2aWRlby94LWgyNjQiKSk7CisgICAgICAgICAgICBtX3BheWxvYWRlciA9IG1h
a2VHU3RyZWFtZXJFbGVtZW50KCJydHBoMjY0cGF5IiwgbnVsbHB0cik7CisgICAgICAgICAgICAv
LyBGSVhNRTogaHR0cHM6Ly9naXRsYWIuZnJlZWRlc2t0b3Aub3JnL2dzdHJlYW1lci9nc3QtcGx1
Z2lucy1nb29kLy0vaXNzdWVzLzg5MworICAgICAgICAgICAgLy8gZ3N0X3V0aWxfc2V0X29iamVj
dF9hcmcoR19PQkpFQ1QobV9wYXlsb2FkZXIuZ2V0KCkpLCAiYWdncmVnYXRlLW1vZGUiLCAiemVy
by1sYXRlbmN5Iik7CisgICAgICAgICAgICAvLyBnX29iamVjdF9zZXQobV9wYXlsb2FkZXIuZ2V0
KCksICJjb25maWctaW50ZXJ2YWwiLCAtMSwgbnVsbHB0cik7CisgICAgICAgIH0gZWxzZSB7Cisg
ICAgICAgICAgICBHU1RfRVJST1JfT0JKRUNUKG1fYmluLmdldCgpLCAiVW5zdXBwb3J0ZWQgb3V0
Z29pbmcgdmlkZW8gZW5jb2Rpbmc6ICVzIiwgZW5jb2RpbmdOYW1lKTsKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIEdTVF9FUlJPUl9P
QkpFQ1QobV9iaW4uZ2V0KCksICJlbmNvZGluZy1uYW1lIG5vdCBmb3VuZCIpOworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgaWYgKCFtX3BheWxvYWRlcikKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgLy8gRklYTUU6IFJlLWVuYWJsZSB0aGlzLiBDdXJyZW50bHkgdHJp
Z2dlcnMgY2FwcyBuZWdvdGlhdGlvbiBlcnJvci4KKyAgICBnX29iamVjdF9zZXQobV9wYXlsb2Fk
ZXIuZ2V0KCksICJhdXRvLWhlYWRlci1leHRlbnNpb24iLCBGQUxTRSwgbnVsbHB0cik7CisKKyAg
ICBnX29iamVjdF9zZXQobV9lbmNvZGVyLmdldCgpLCAiZm9ybWF0IiwgZW5jb2RlckNhcHMuZ2V0
KCksIG51bGxwdHIpOworCisgICAgaW50IHBheWxvYWRUeXBlOworICAgIGlmIChnc3Rfc3RydWN0
dXJlX2dldF9pbnQoc3RydWN0dXJlLCAicGF5bG9hZCIsICZwYXlsb2FkVHlwZSkpCisgICAgICAg
IGdfb2JqZWN0X3NldChtX3BheWxvYWRlci5nZXQoKSwgInB0IiwgcGF5bG9hZFR5cGUsIG51bGxw
dHIpOworCisgICAgYXV0byBmaWx0ZXJlZENhcHMgPSBhZG9wdEdSZWYoZ3N0X2NhcHNfbmV3X2Z1
bGwoZ3N0X3N0cnVjdHVyZV9jb3B5KHN0cnVjdHVyZSksIG51bGxwdHIpKTsKKyAgICBnX29iamVj
dF9zZXQobV9jYXBzRmlsdGVyLmdldCgpLCAiY2FwcyIsIGZpbHRlcmVkQ2Fwcy5nZXQoKSwgbnVs
bHB0cik7CisKKyAgICBnc3RfYmluX2FkZChHU1RfQklOX0NBU1QobV9iaW4uZ2V0KCkpLCBtX3Bh
eWxvYWRlci5nZXQoKSk7CisgICAgZ3N0X2VsZW1lbnRfbGlua19tYW55KG1fb3V0Z29pbmdTb3Vy
Y2UuZ2V0KCksIG1fdmFsdmUuZ2V0KCksIG1fdmlkZW9Db252ZXJ0LmdldCgpLCBtX3ByZUVuY29k
ZXJRdWV1ZS5nZXQoKSwKKyAgICAgICAgbV9lbmNvZGVyLmdldCgpLCBtX3BheWxvYWRlci5nZXQo
KSwgbV9wb3N0RW5jb2RlclF1ZXVlLmdldCgpLCBudWxscHRyKTsKKyAgICByZXR1cm4gdHJ1ZTsK
K30KKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gVVNFKEdTVFJFQU1FUl9X
RUJSVEMpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9n
c3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyLmggYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9nc3RyZWFtZXIvUmVhbHRpbWVPdXRnb2luZ1Zp
ZGVvU291cmNlR1N0cmVhbWVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uODE1MWZkY2EwMjMzMjI0NWFjYzlhZmYy
MTVkMjk1MGQxZWY1MzQ3ZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21lZGlhc3RyZWFtL2dzdHJlYW1lci9SZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3Ry
ZWFtZXIuaApAQCAtMCwwICsxLDQ3IEBACisvKgorICogIENvcHlyaWdodCAoQykgMjAxNy0yMDIy
IElnYWxpYSBTLkwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiAgQ29weXJpZ2h0IChDKSAyMDIy
IE1ldHJvbG9naWNhbCBHcm91cCBCLlYuCisgKgorICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNv
ZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKKyAqICBtb2RpZnkgaXQgdW5k
ZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5z
ZSBhcyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCisg
KiAgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRl
ciB2ZXJzaW9uLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhv
cGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7
IHdpdGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgorICogIE1FUkNIQU5UQUJJTElU
WSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCisgKiAg
TGVzc2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KKyAqCisgKiAg
WW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFs
IFB1YmxpYworICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3Jp
dGUgdG8gdGhlIEZyZWUgU29mdHdhcmUKKyAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xp
biBTdHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKKyAqLwor
CisjcHJhZ21hIG9uY2UKKworI2lmIFVTRShHU1RSRUFNRVJfV0VCUlRDKQorCisjaW5jbHVkZSAi
UmVhbHRpbWVPdXRnb2luZ01lZGlhU291cmNlR1N0cmVhbWVyLmgiCisKK25hbWVzcGFjZSBXZWJD
b3JlIHsKKworY2xhc3MgUmVhbHRpbWVPdXRnb2luZ1ZpZGVvU291cmNlR1N0cmVhbWVyIGZpbmFs
IDogcHVibGljIFJlYWx0aW1lT3V0Z29pbmdNZWRpYVNvdXJjZUdTdHJlYW1lciB7CitwdWJsaWM6
CisgICAgc3RhdGljIFJlZjxSZWFsdGltZU91dGdvaW5nVmlkZW9Tb3VyY2VHU3RyZWFtZXI+IGNy
ZWF0ZShSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYgc291cmNlKSB7IHJldHVybiBhZG9w
dFJlZigqbmV3IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJjZUdTdHJlYW1lcihXVEZNb3ZlKHNv
dXJjZSkpKTsgfQorCisgICAgdm9pZCBzZXRBcHBseVJvdGF0aW9uKGJvb2wgc2hvdWxkQXBwbHlS
b3RhdGlvbikgeyBtX3Nob3VsZEFwcGx5Um90YXRpb24gPSBzaG91bGRBcHBseVJvdGF0aW9uOyB9
CisKKyAgICBib29sIHNldFBheWxvYWRUeXBlKGNvbnN0IEdSZWZQdHI8R3N0Q2Fwcz4mKSBmaW5h
bDsKKworcHJvdGVjdGVkOgorICAgIGV4cGxpY2l0IFJlYWx0aW1lT3V0Z29pbmdWaWRlb1NvdXJj
ZUdTdHJlYW1lcihSZWY8TWVkaWFTdHJlYW1UcmFja1ByaXZhdGU+JiYpOworCisgICAgYm9vbCBt
X3Nob3VsZEFwcGx5Um90YXRpb24geyBmYWxzZSB9OworCitwcml2YXRlOgorICAgIEdSZWZQdHI8
R3N0RWxlbWVudD4gbV92aWRlb0NvbnZlcnQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBXZWJDb3Jl
CisKKyNlbmRpZiAvLyBVU0UoR1NUUkVBTUVSX1dFQlJUQykKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJSVENQcm92aWRlci5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tZWRpYXN0cmVhbS9saWJ3ZWJydGMvTGliV2Vi
UlRDUHJvdmlkZXIuY3BwCmluZGV4IDEwNjQ2YjdlOTMzZjZhYmJjZmQ1YTU5MjkzNTE4MjY4NmRk
NDY0OWUuLmUxZjhlMTQyNGRmYzkxZDExYjc5NzM0YWY2ZmNmOGVlYjg5ZTQxZGIgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21lZGlhc3RyZWFtL2xpYndlYnJ0Yy9MaWJXZWJS
VENQcm92aWRlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWVkaWFzdHJlYW0v
bGlid2VicnRjL0xpYldlYlJUQ1Byb3ZpZGVyLmNwcApAQCAtNTcxLDcgKzU3MSw2IEBAIHN0ZDo6
b3B0aW9uYWw8UlRDUnRwQ29kZWNDYXBhYmlsaXR5PiBMaWJXZWJSVENQcm92aWRlcjo6Y29kZWND
YXBhYmlsaXR5KGNvbnN0IENvCiAgICAgfQogICAgIHJldHVybiB7IH07CiB9Ci0jZW5kaWYgLy8g
VVNFKExJQldFQlJUQykKIAogI2lmICFQTEFURk9STShDT0NPQSkKIC8vIEZJWE1FOiBJbXBsZW1l
bnQgdGhlc2Ugcm91dGluZXMuCkBAIC01ODQsNyArNTgzLDkgQEAgc3RhdGljIGJvb2wgaXNWUFNv
ZnR3YXJlRGVjb2RlclNtb290aChjb25zdCBWaWRlb0NvbmZpZ3VyYXRpb24mKQogewogICAgIHJl
dHVybiB0cnVlOwogfQotI2VuZGlmCisjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQorCisjZW5k
aWYgLy8gVVNFKExJQldFQlJUQykKIAogdm9pZCBMaWJXZWJSVENQcm92aWRlcjo6Y3JlYXRlRGVj
b2RpbmdDb25maWd1cmF0aW9uKE1lZGlhRGVjb2RpbmdDb25maWd1cmF0aW9uJiYgY29uZmlndXJh
dGlvbiwgRGVjb2RpbmdDb25maWd1cmF0aW9uQ2FsbGJhY2smJiBjYWxsYmFjaykKIHsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcCBiL1NvdXJjZS9XZWJD
b3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmNwcAppbmRleCAxODNjY2UxOTc2MzgyMDFiZTdiNGViY2Q0
Nzg3OTMxNjJlNjE0NjNkLi5iNzM1YmYxNDBiZTNmN2VlYmQ1MGUzMjU0MjRiNzIwNjhiNGYyMjYx
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRlcm5hbHMuY3BwCkBAIC01OTksNiArNTk5LDkgQEAg
dm9pZCBJbnRlcm5hbHM6OnJlc2V0VG9Db25zaXN0ZW50U3RhdGUoUGFnZSYgcGFnZSkKICAgICBy
dGNQcm92aWRlci5zZXRIMjY1U3VwcG9ydCh0cnVlKTsKICAgICBydGNQcm92aWRlci5zZXRWUDlT
dXBwb3J0KHRydWUsIHRydWUpOwogICAgIHJ0Y1Byb3ZpZGVyLmNsZWFyRmFjdG9yeSgpOworI2Vs
aWYgVVNFKEdTVFJFQU1FUl9XRUJSVEMpCisgICAgcGFnZS5zZXR0aW5ncygpLnNldFdlYlJUQ0Vu
Y3J5cHRpb25FbmFibGVkKHRydWUpOworICAgIHBhZ2Uuc2V0dGluZ3MoKS5zZXRQZWVyQ29ubmVj
dGlvbkVuYWJsZWQodHJ1ZSk7CiAjZW5kaWYKIAogICAgIHBhZ2Uuc2V0RnVsbHNjcmVlbkF1dG9I
aWRlRHVyYXRpb24oMF9zKTsKQEAgLTE2MTksNiArMTYyMiw3IEBAIHZvaWQgSW50ZXJuYWxzOjph
cHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1NvdXJjZXMoUlRDUGVlckNvbm5lY3Rpb24mIGNv
bm5lY3RpCiB7CiAgICAgY29ubmVjdGlvbi5hcHBseVJvdGF0aW9uRm9yT3V0Z29pbmdWaWRlb1Nv
dXJjZXMoKTsKIH0KKwogdm9pZCBJbnRlcm5hbHM6OnNldFdlYlJUQ0gyNjVTdXBwb3J0KGJvb2wg
dmFsdWUpCiB7CiAjaWYgVVNFKExJQldFQlJUQykKQEAgLTE2MjYsNiArMTYzMCw4IEBAIHZvaWQg
SW50ZXJuYWxzOjpzZXRXZWJSVENIMjY1U3VwcG9ydChib29sIHZhbHVlKQogICAgICAgICBwYWdl
LT5saWJXZWJSVENQcm92aWRlcigpLnNldEgyNjVTdXBwb3J0KHZhbHVlKTsKICAgICAgICAgcGFn
ZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9CisjZWxzZQorICAg
IFVOVVNFRF9QQVJBTSh2YWx1ZSk7CiAjZW5kaWYKIH0KIApAQCAtMTYzNiw2ICsxNjQyLDkgQEAg
dm9pZCBJbnRlcm5hbHM6OnNldFdlYlJUQ1ZQOVN1cHBvcnQoYm9vbCBzdXBwb3J0VlA5UHJvZmls
ZTAsIGJvb2wgc3VwcG9ydFZQOVByb2YKICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIo
KS5zZXRWUDlTdXBwb3J0KHN1cHBvcnRWUDlQcm9maWxlMCwgc3VwcG9ydFZQOVByb2ZpbGUyKTsK
ICAgICAgICAgcGFnZS0+bGliV2ViUlRDUHJvdmlkZXIoKS5jbGVhckZhY3RvcnkoKTsKICAgICB9
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShzdXBwb3J0VlA5UHJvZmlsZTApOworICAgIFVOVVNF
RF9QQVJBTShzdXBwb3J0VlA5UHJvZmlsZTIpOwogI2VuZGlmCiB9CiAKQEAgLTE2NDYsNiArMTY1
NSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRXZWJSVENWUDlWVEJTdXBwb3J0KGJvb2wgdmFsdWUp
CiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuc2V0VlA5VlRCU3VwcG9ydCh2YWx1
ZSk7CiAgICAgICAgIHBhZ2UtPmxpYldlYlJUQ1Byb3ZpZGVyKCkuY2xlYXJGYWN0b3J5KCk7CiAg
ICAgfQorI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmFsdWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2
ODYsNiArMTY5Nyw4IEBAIHZvaWQgSW50ZXJuYWxzOjpzZXRFbmFibGVXZWJSVENFbmNyeXB0aW9u
KGJvb2wgdmFsdWUpCiAjaWYgVVNFKExJQldFQlJUQykKICAgICBpZiAoYXV0byogcGFnZSA9IGNv
bnRleHREb2N1bWVudCgpLT5wYWdlKCkpCiAgICAgICAgIHBhZ2UtPnNldHRpbmdzKCkuc2V0V2Vi
UlRDRW5jcnlwdGlvbkVuYWJsZWQodmFsdWUpOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0odmFs
dWUpOwogI2VuZGlmCiB9CiAKQEAgLTE2OTYsNiArMTcwOSw4IEBAIHZvaWQgSW50ZXJuYWxzOjpz
ZXRVc2VEVExTMTAoYm9vbCB1c2VEVExTMTApCiAgICAgaWYgKCFkb2N1bWVudCB8fCAhZG9jdW1l
bnQtPnBhZ2UoKSkKICAgICAgICAgcmV0dXJuOwogICAgIGRvY3VtZW50LT5wYWdlKCktPmxpYldl
YlJUQ1Byb3ZpZGVyKCkuc2V0VXNlRFRMUzEwKHVzZURUTFMxMCk7CisjZWxzZQorICAgIFVOVVNF
RF9QQVJBTSh1c2VEVExTMTApOwogI2VuZGlmCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9jbWFr
ZS9GaW5kR1N0cmVhbWVyLmNtYWtlIGIvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21ha2UK
aW5kZXggMDY2MzNlZDRkODk5ZjI4M2NlZDQ1OGNkYjgzOTE4MjhiOGJjNWQzZS4uMzIxNmY2OTc0
YjUzYzBjNzM4NzRmOWZlZGNhZmYyOWM4YmMwYTIyYSAxMDA2NDQKLS0tIGEvU291cmNlL2NtYWtl
L0ZpbmRHU3RyZWFtZXIuY21ha2UKKysrIGIvU291cmNlL2NtYWtlL0ZpbmRHU3RyZWFtZXIuY21h
a2UKQEAgLTI4LDYgKzI4LDkgQEAKICMgIGdzdHJlYW1lci1jb2RlY3BhcnNlcjpHU1RSRUFNRVJf
Q09ERUNQQVJTRVJTX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJS
QVJJRVMKICMgIGdzdHJlYW1lci1mdWxsOiAgICAgICBHU1RSRUFNRVJfRlVMTF9JTkNMVURFX0RJ
UlMgYW5kIEdTVFJFQU1FUl9GVUxMX0xJQlJBUklFUwogIyAgZ3N0cmVhbWVyLXRyYW5zY29kZXI6
IEdTVFJFQU1FUl9UUkFOU0NPREVSX0lOQ0xVREVfRElSUyBhbmQgR1NUUkVBTUVSX1RSQU5TQ09E
RVJfTElCUkFSSUVTCisjICBnc3RyZWFtZXItcnRwOiAgICAgICAgR1NUUkVBTUVSX1JUUF9JTkNM
VURFX0RJUlMgYW5kIEdTVFJFQU1FUl9SVFBfTElCUkFSSUVTCisjICBnc3RyZWFtZXItc2RwOiAg
ICAgICAgR1NUUkVBTUVSX1NEUF9JTkNMVURFX0RJUlMgYW5kIEdTVFJFQU1FUl9TRFBfTElCUkFS
SUVTCisjICBnc3RyZWFtZXItd2VicnRjOiAgICAgR1NUUkVBTUVSX1dFQlJUQ19JTkNMVURFX0RJ
UlMgYW5kIEdTVFJFQU1FUl9XRUJSVENfTElCUkFSSUVTCiAjCiAjIENvcHlyaWdodCAoQykgMjAx
MiBSYXBoYWVsIEt1Ym8gZGEgQ29zdGEgPHJha3Vjb0B3ZWJraXQub3JnPgogIwpAQCAtMTEwLDYg
KzExMyw5IEBAIEZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFNRVJfVEFHIGdzdHJlYW1l
ci10YWctMS4wIGdzdHRhZy0xLjApCiBGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVS
X1ZJREVPIGdzdHJlYW1lci12aWRlby0xLjAgZ3N0dmlkZW8tMS4wKQogRklORF9HU1RSRUFNRVJf
Q09NUE9ORU5UKEdTVFJFQU1FUl9DT0RFQ1BBUlNFUlMgZ3N0cmVhbWVyLWNvZGVjcGFyc2Vycy0x
LjAgZ3N0Y29kZWNwYXJzZXJzLTEuMCkKIEZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RSRUFN
RVJfVFJBTlNDT0RFUiBnc3RyZWFtZXItdHJhbnNjb2Rlci0xLjAgZ3N0dHJhbnNjb2Rlci0xLjAp
CitGSU5EX0dTVFJFQU1FUl9DT01QT05FTlQoR1NUUkVBTUVSX1JUUCBnc3RyZWFtZXItcnRwLTEu
MCBnc3RydHAtMS4wKQorRklORF9HU1RSRUFNRVJfQ09NUE9ORU5UKEdTVFJFQU1FUl9TRFAgZ3N0
cmVhbWVyLXNkcC0xLjAgZ3N0c2RwLTEuMCkKK0ZJTkRfR1NUUkVBTUVSX0NPTVBPTkVOVChHU1RS
RUFNRVJfV0VCUlRDIGdzdHJlYW1lci13ZWJydGMtMS4wIGdzdHdlYnJ0Yy0xLjApCiAKICMgLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAjIDMuIFByb2Nl
c3MgdGhlIENPTVBPTkVOVFMgcGFzc2VkIHRvIEZJTkRfUEFDS0FHRQpAQCAtMTU0LDQgKzE2MCw2
IEBAIG1hcmtfYXNfYWR2YW5jZWQoCiAgICAgR1NUUkVBTUVSX0NPREVDUEFSU0VSU19MSUJSQVJJ
RVMKICAgICBHU1RSRUFNRVJfRlVMTF9JTkNMVURFX0RJUlMKICAgICBHU1RSRUFNRVJfRlVMTF9M
SUJSQVJJRVMKKyAgICBHU1RSRUFNRVJfV0VCUlRDX0lOQ0xVREVfRElSUworICAgIEdTVFJFQU1F
Ul9XRUJSVENfTElCUkFSSUVTCiApCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVy
Q2hlY2tzLmNtYWtlIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckNoZWNrcy5jbWFrZQppbmRleCA5
MTFmNmU2Yzk1YWI4MzBiNmZjMDJlMDFlZGI3NzU0ZmE5MTJmMzRhLi4xZTc1NmJkMTY3MzQyNTNk
NjU4YmFhODZmNTY3MmE2NTljODgzOGFkIDEwMDY0NAotLS0gYS9Tb3VyY2UvY21ha2UvR1N0cmVh
bWVyQ2hlY2tzLmNtYWtlCisrKyBiL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJDaGVja3MuY21ha2UK
QEAgLTMyLDYgKzMyLDEwIEBAIGlmIChFTkFCTEVfVklERU8gT1IgRU5BQkxFX1dFQl9BVURJTykK
ICAgICAgICAgICAgICAgbGlzdChBUFBFTkQgR1NUUkVBTUVSX0NPTVBPTkVOVFMgdHJhbnNjb2Rl
cikKICAgICAgICAgICBlbmRpZiAoKQogCisgICAgICAgICAgaWYgKFVTRV9HU1RSRUFNRVJfV0VC
X1JUQykKKyAgICAgICAgICAgICAgbGlzdChBUFBFTkQgR1NUUkVBTUVSX0NPTVBPTkVOVFMgd2Vi
cnRjKQorICAgICAgICAgIGVuZGlmICgpCisKICAgICAgICAgICBmaW5kX3BhY2thZ2UoR1N0cmVh
bWVyIDEuMTQuMCBSRVFVSVJFRCBDT01QT05FTlRTICR7R1NUUkVBTUVSX0NPTVBPTkVOVFN9KQog
CiAgICAgICAgICAgaWYgKEVOQUJMRV9XRUJfQVVESU8pCkBAIC01OCwxMSArNjIsMjMgQEAgaWYg
KEVOQUJMRV9WSURFTyBPUiBFTkFCTEVfV0VCX0FVRElPKQogICAgICAgICAgICAgICBtZXNzYWdl
KEZBVEFMX0VSUk9SICJHU3RyZWFtZXJUcmFuc2NvZGVyID49IDEuMjAgaXMgbmVlZGVkIGZvciBV
U0VfR1NUUkVBTUVSX1RSQU5TQ09ERVIuIikKICAgICAgICAgICBlbmRpZiAoKQogCisgICAgICAg
ICAgaWYgKFVTRV9HU1RSRUFNRVJfV0VCUlRDIEFORCAoUENfR1NUUkVBTUVSX1ZFUlNJT04gVkVS
U0lPTl9MRVNTICIxLjIwIiBPUiBOT1QgUENfR1NUUkVBTUVSX1dFQlJUQ19GT1VORCkpCisgICAg
ICAgICAgICAgIG1lc3NhZ2UoRkFUQUxfRVJST1IgIkdTdHJlYW1lcldlYlJUQyA+PSAxLjIwIGlz
IG5lZWRlZCBmb3IgVVNFX0dTVFJFQU1FUl9XRUJSVEMuIikKKyAgICAgICAgICBlbmRpZiAoKQog
ICAgICAgZW5kaWYgKCkKIGVuZGlmICgpCiAKIGlmIChFTkFCTEVfTUVESUFfU1RSRUFNIEFORCBF
TkFCTEVfV0VCX1JUQykKLSAgICBTRVRfQU5EX0VYUE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRD
IFRSVUUpCisgICAgaWYgKFVTRV9HU1RSRUFNRVJfV0VCUlRDKQorICAgICAgICBTRVRfQU5EX0VY
UE9TRV9UT19CVUlMRChVU0VfTElCV0VCUlRDIEZBTFNFKQorCisgICAgICAgIGZpbmRfcGFja2Fn
ZShPcGVuU1NMKQorICAgICAgICBpZiAoTk9UIE9QRU5TU0xfRk9VTkQpCisgICAgICAgICAgICBt
ZXNzYWdlKEZBVEFMX0VSUk9SICJPcGVuU1NMIGlzIG5lZWRlZCBmb3IgVVNFX0dTVFJFQU1FUl9X
RUJSVEMuIikKKyAgICAgICAgZW5kaWYgKCkKKyAgICBlbHNlICgpCisgICAgICAgIFNFVF9BTkRf
RVhQT1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJSVEMgVFJVRSkKKyAgICBlbmRpZiAoKQogZWxzZSAo
KQogICAgIFNFVF9BTkRfRVhQT1NFX1RPX0JVSUxEKFVTRV9MSUJXRUJSVEMgRkFMU0UpCiBlbmRp
ZiAoKQpkaWZmIC0tZ2l0IGEvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtl
IGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRlZmluaXRpb25zLmNtYWtlCmluZGV4IDM5NGY4MGNh
MjQ3ZTU5Y2EzODk5NWUwOTE2YTEwMDg0OGYzYjY3M2MuLmQ1YWYwZTIyYjA0MThhYzQwODA4MjU5
MjFjZGVjNWQ0YjQ4M2QxYjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9jbWFrZS9HU3RyZWFtZXJEZWZp
bml0aW9ucy5jbWFrZQorKysgYi9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMuY21h
a2UKQEAgLTExLDMgKzExLDQgQEAgV0VCS0lUX09QVElPTl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9O
QVRJVkVfVklERU8gIlRvZ2dsZSBuYXRpdmUgdmlkZW8gc3VwcG9ydCBpbgogV0VCS0lUX09QVElP
Tl9ERUZJTkUoVVNFX0dTVFJFQU1FUl9OQVRJVkVfQVVESU8gIlRvZ2dsZSBuYXRpdmUgYXVkaW8g
c3VwcG9ydCBpbiBHU3RyZWFtZXIgbWVkaWEgcGxheWVyIiBQUklWQVRFIE9GRikKIFdFQktJVF9P
UFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJfVEVYVF9TSU5LICJUb2dnbGUgdGV4dCBzaW5rIHN1
cHBvcnQgaW4gR1N0cmVhbWVyIG1lZGlhIHBsYXllciIgUFJJVkFURSBPTikKIFdFQktJVF9PUFRJ
T05fREVGSU5FKFVTRV9HU1RSRUFNRVJfVFJBTlNDT0RFUiAiV2hldGhlciB0byBlbmFibGUgc3Vw
cG9ydCBmb3IgR1N0cmVhbWVyIE1lZGlhUmVjb3JkZXIgYmFja2VuZCIgUFJJVkFURSBPTikKK1dF
QktJVF9PUFRJT05fREVGSU5FKFVTRV9HU1RSRUFNRVJfV0VCUlRDICJXaGV0aGVyIHRvIGVuYWJs
ZSBzdXBwb3J0IGZvciBXZWJSVEMiIFBSSVZBVEUgT04pCmRpZmYgLS1naXQgYS9Tb3VyY2UvY21h
a2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlIGIvU291cmNlL2NtYWtlL0dTdHJlYW1lckRl
cGVuZGVuY2llcy5jbWFrZQppbmRleCAyM2QyMWY1MmQwNTUwNTMyNTY5NWQzYTFhZmExZjg3MTY3
MWMwYTFjLi43M2Y5M2M4MTU3MjZhNzE3N2UyZjk1NGNiMTZjNjRiODNkZDIyYjIxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVwZW5kZW5jaWVzLmNtYWtlCisrKyBiL1NvdXJj
ZS9jbWFrZS9HU3RyZWFtZXJEZXBlbmRlbmNpZXMuY21ha2UKQEAgLTIsMyArMiw0IEBAIFdFQktJ
VF9PUFRJT05fREVQRU5EKFVTRV9HU1RSRUFNRVJfR0wgRU5BQkxFX1ZJREVPKQogV0VCS0lUX09Q
VElPTl9ERVBFTkQoVVNFX0dTVFJFQU1FUl9NUEVHVFMgRU5BQkxFX1ZJREVPKQogV0VCS0lUX09Q
VElPTl9ERVBFTkQoVVNFX1dQRV9WSURFT19QTEFORV9ESVNQTEFZX0RNQUJVRiBVU0VfR1NUUkVB
TUVSX0dMKQogV0VCS0lUX09QVElPTl9ERVBFTkQoVVNFX0dTVFJFQU1FUl9UUkFOU0NPREVSIEVO
QUJMRV9NRURJQV9SRUNPUkRFUikKK1dFQktJVF9PUFRJT05fREVQRU5EKFVTRV9HU1RSRUFNRVJf
V0VCUlRDIEVOQUJMRV9XRUJfUlRDKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9v
bHMvQ2hhbmdlTG9nCmluZGV4IDBhNGIxYTg5NzU1YWUzNjQ4OTA0ZmQ3NjJlM2NhZjhlZWIyMWJi
YmEuLjExN2U2MTU3MWYzZDA3ZjMyNDlkOGVjMzRlYjgzODA2MmRmMmZkZjAgMTAwNjQ0Ci0tLSBh
L1Rvb2xzL0NoYW5nZUxvZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAor
MjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CisKKyAg
ICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhlIEdzdFdlYlJUQyBiYWNrZW5k
CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMzY1NDAK
KworICAgICAgICBSZXZpZXdlZCBieSBDYXJsb3MgR2FyY2lhIENhbXBvcyBhbmQgWGFiaWVyIFJv
ZHJpZ3Vlei1DYWx2YXIuCisKKyAgICAgICAgKiBmbGF0cGFrL2ZsYXRwYWt1dGlscy5weToKKyAg
ICAgICAgKFdlYmtpdEZsYXRwYWsucnVuX2luX3NhbmRib3gpOiBBbGxvdyBsaWJuaWNlIGRlYnVn
IGxvZyBlbnZpcm9ubWVudCB2YXJpYWJsZSBpbiBydW50aW1lIHNhbmRib3guCisKIDIwMjItMDMt
MTggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29tPgogCiAgICAgICAg
IFtHTElCXSBNYWtlIGl0IHBvc3NpYmxlIHRvIGNhbGwgR1JlZlB0cjo6b3V0UHRyKCkgbXVsdGlw
bGUgdGltZXMgd2lodG91dCBhbiBleHBsaWNpdCBjbGVhcgpkaWZmIC0tZ2l0IGEvVG9vbHMvZmxh
dHBhay9mbGF0cGFrdXRpbHMucHkgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQppbmRl
eCA0YTY5NWMyNmRjNGNiNWIwNzZkYzNhZmM4YzMyN2UxMTUzNTdlMDEzLi42YzdiYmY5MjQ1YzNh
ZDk4MmVmYTljOGY3MzI0NjE1ODliZWE4NjlkIDEwMDY0NAotLS0gYS9Ub29scy9mbGF0cGFrL2Zs
YXRwYWt1dGlscy5weQorKysgYi9Ub29scy9mbGF0cGFrL2ZsYXRwYWt1dGlscy5weQpAQCAtODM4
LDYgKzgzOCw3IEBAIGNsYXNzIFdlYmtpdEZsYXRwYWs6CiAgICAgICAgICAgICAiTUVTQSIsCiAg
ICAgICAgICAgICAiTElCR0wiLAogICAgICAgICAgICAgIlBJUEVXSVJFIiwKKyAgICAgICAgICAg
ICJOSUNFIiwKICAgICAgICAgICAgICJSVVNUIiwKICAgICAgICAgICAgICJTQ0NBQ0hFIiwKICAg
ICAgICAgICAgICJTUEEiLApkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nIGIvTGF5
b3V0VGVzdHMvQ2hhbmdlTG9nCmluZGV4IDhjODJiYzVjZjM1NzM2NjYwYzYyMzExMDYxZGY2OWQz
M2UwNjQ3ZmIuLmVjMTUwYjAwZGFmNWQzMTk1YjY4ZmQwYmJkNzUxYTVmNTM0N2VhOTQgMTAwNjQ0
Ci0tLSBhL0xheW91dFRlc3RzL0NoYW5nZUxvZworKysgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxOCBAQAorMjAyMi0wMi0xMiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5k
QGlnYWxpYS5jb20+CisKKyAgICAgICAgW0dTdHJlYW1lcl0gSW5pdGlhbCBpbXBvcnQgb2YgdGhl
IEdzdFdlYlJUQyBiYWNrZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0yMzY1NDAKKworICAgICAgICBSZXZpZXdlZCBieSBDYXJsb3MgR2FyY2lhIENh
bXBvcyBhbmQgWGFiaWVyIFJvZHJpZ3Vlei1DYWx2YXIuCisKKyAgICAgICAgKiBwbGF0Zm9ybS9n
bGliL1Rlc3RFeHBlY3RhdGlvbnM6IEZsYWcgbW9zdCBXZWJSVEMgYXMgZmFpbGluZy4gRHVyaW5n
IHRoaXMgZmlyc3QgZGV2ZWxvcG1lbnQKKyAgICAgICAgY3ljbGUgSSBmb2N1c2VkIG1vc3RseSBv
biBmaXhpbmcgY3Jhc2hlcyBhbmQgb25seSBmaXhlZCBhIGZldyBmYWlsdXJlcy4gVGhlIHJlbWFp
bmluZyBvbmVzCisgICAgICAgIHdpbGwgYmUgYWRyZXNzZWQgaW4gZm9sbG93LXVwIHBhdGNoZXMu
CisgICAgICAgICogcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0
aW9uLWxvY2FsRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0
Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3RlRGVzY3Jp
cHRpb24tZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2Zhc3Qv
bWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXIt
ZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFz
dHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tc3RhYmxlLWV4cGVjdGVkLnR4dDogQWRkZWQuCisKIDIw
MjItMDMtMTggIEtpbW1vIEtpbm51bmVuICA8a2tpbm51bmVuQGFwcGxlLmNvbT4KIAogICAgICAg
ICBSZWN5Y2xpbmcgYSB3ZWJnbCBjb250ZXh0IHdoZW4gaXQgaGFzIGJlZW4gbG9zdCBhbmQgcmVz
dG9yZWQgY2F1c2VzIGEgY3Jhc2gKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3BsYXRmb3JtL2ds
aWIvVGVzdEV4cGVjdGF0aW9ucyBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvVGVzdEV4cGVj
dGF0aW9ucwppbmRleCA3ZGZhYTZkNTVmNjdkYzQyZTI1ZTgzNjUwZDIyNGIxNzc0MmZhMmQwLi41
NGRiM2E1ZTg1ZjQxNzA1MjVmN2Y1MTJkZmI4ZTg5MWIxMDk0NGQ3IDEwMDY0NAotLS0gYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9nbGliL1Rlc3RFeHBlY3RhdGlvbnMKKysrIGIvTGF5b3V0VGVzdHMv
cGxhdGZvcm0vZ2xpYi9UZXN0RXhwZWN0YXRpb25zCkBAIC04NjQsNyArODY0LDYgQEAgd2Via2l0
Lm9yZy9iLzIyOTk3MyBtZWRpYS90cmFjay9pbi1iYW5kL3RyYWNrLWluLWJhbmQtc3J0LW1rdi1j
dWVzLWFkZGVkLW9uY2UuaHQKIAogd2Via2l0Lm9yZy9iLzIzMDAyOCBtZWRpYS9tZWRpYS1zb3Vy
Y2UvbWVkaWEtc291cmNlLXNlZWstdHdpY2UuaHRtbCBbIFBhc3MgVGltZW91dCBdCiAKLXdlYmtp
dC5vcmcvYi8yMzE4MTEgZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS12aWRlby1lbGVtZW50
LWVudGVyLWJhY2tncm91bmQuaHRtbCBbIEZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSBt
ZWRpYS9hdWRpby1iYWNrZ3JvdW5kLXBsYXliYWNrLXBsYXlsaXN0Lmh0bWwgWyBGYWlsdXJlIF0K
IHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvbWVkaWEtc2Vzc2lvbi9hY3Rpb25IYW5kbGVySW50
ZXJuYWxNYXBwaW5ncy5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlh
L21lZGlhLXNlc3Npb24vZGVmYXVsdC1hY3Rpb25IYW5kbGVycy5odG1sIFsgRmFpbHVyZSBdCkBA
IC04NzMsNyArODcyLDYgQEAgd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS92aWRlby1jb25jdXJy
ZW50LXBsYXliYWNrLmh0bWwgWyBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEv
dmlkZW8taW50ZXJydXB0aW9uLXdpdGgtcmVzdW1lLW5vdC1hbGxvd2luZy1wbGF5Lmh0bWwgWyBG
YWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvdmlkZW8tbXVsdGlwbGUtY29uY3Vy
cmVudC1wbGF5YmFjay5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlh
L3dlYmF1ZGlvLWJhY2tncm91bmQtcGxheWJhY2suaHRtbCBbIEZhaWx1cmUgXQotd2Via2l0Lm9y
Zy9iLzIzMTgxMSB3ZWJydGMvY29uY3VycmVudFZpZGVvUGxheWJhY2syLmh0bWwgWyBGYWlsdXJl
IF0KIHdlYmtpdC5vcmcvYi8yMzE4MTEgbWVkaWEvbWVkaWEtc2Vzc2lvbi9jYWxsQWN0aW9uSGFu
ZGxlci5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMjMxODExIG1lZGlhL21lZGlhLXNl
c3Npb24vcGxheS1hZnRlci1zZWVrLmh0bWwgWyBUaW1lb3V0IF0KIHdlYmtpdC5vcmcvYi8yMzE4
MTEgbWVkaWEvcmVtb3RlLWNvbnRyb2wtY29tbWFuZC1pcy11c2VyLWdlc3R1cmUuaHRtbCBbIFRp
bWVvdXQgXQpAQCAtODg2LDEwICs4ODQsMTAgQEAgd2Via2l0Lm9yZy9iLzIzMTgxMSBtZWRpYS92
aWRlby1zeXN0ZW0tc2xlZXAuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9yZy9iLzIzMTgxMSB3
ZWJhdWRpby9hdWRpb2NvbnRleHQtc3RhdGUtaW50ZXJydXB0ZWQuaHRtbCBbIFRpbWVvdXQgXQog
d2Via2l0Lm9yZy9iLzIzMTgxMSB3ZWJhdWRpby9zdXNwZW5kLWNvbnRleHQtd2hpbGUtaW50ZXJy
dXB0ZWQuaHRtbCBbIFRpbWVvdXQgXQogCisjIHJ2ZmMgcmVsYXRlZCBmYWlsdXJlcwogaW1wb3J0
ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy92aWRlby1ydmZjIFsgUGFzcyBdCiBmYXN0L21lZGlh
c3RyZWFtL2dldFVzZXJNZWRpYS1ydmZjLmh0bWwgWyBQYXNzIEZhaWx1cmUgXQogd2VicnRjL3Bl
ZXJDb25uZWN0aW9uLXJ2ZmMuaHRtbCBbIEZhaWx1cmUgXQotd2VicnRjL2NhbnZhcy10by1wZWVy
LWNvbm5lY3Rpb24uaHRtbCBbIEZhaWx1cmUgXQogaW1wb3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10
ZXN0cy92aWRlby1ydmZjL3JlcXVlc3QtdmlkZW8tZnJhbWUtY2FsbGJhY2std2VicnRjLmh0dHBz
Lmh0bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdmlkZW8tcnZm
Yy9yZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWJlZm9yZS14ci1zZXNzaW9uLmh0dHBzLmh0
bWwgWyBTa2lwIF0KIGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvdmlkZW8tcnZmYy9y
ZXF1ZXN0LXZpZGVvLWZyYW1lLWNhbGxiYWNrLWR1cmluZy14ci1zZXNzaW9uLmh0dHBzLmh0bWwg
WyBTa2lwIF0KQEAgLTkwNywxMCArOTA1LDg5IEBAIHdlYmtpdC5vcmcvYi8yMzQwODQgbWVkaWEv
dHJhY2svYXVkaW8tdHJhY2stY29uZmlndXJhdGlvbi5odG1sIFsgRmFpbHVyZSBdCiAjIGJpdHJh
dGUgZXN0aW1hdGlvbi4KIHdlYmtpdC5vcmcvYi8yMzQwODQgbWVkaWEvdHJhY2svdmlkZW8tdHJh
Y2stY29uZmlndXJhdGlvbi5odG1sIFsgRmFpbHVyZSBdCiAKLXdlYmtpdC5vcmcvYi8yMzc4NzIg
d2VicnRjL3ZwOC10aGVuLWgyNjQuaHRtbCBbIENyYXNoIF0KLQogd2Via2l0Lm9yZy9iLzIzNzkw
MSBtZWRpYS9tZWRpYS1zb3VyY2UvbWVkaWEtc291cmNlLWludGVycnVwdGlvbi13aXRoLXJlc3Vt
ZS1hbGxvd2luZy1wbGF5Lmh0bWwgWyBTbG93IF0KIAorIyBEYXRhQ2hhbm5lbCBHc3RXZWJSVEMg
aW1wbGVtZW50YXRpb24gaW5jb21wbGV0ZQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGF0
YWNoYW5uZWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaHR0cC93cHQvd2VicnRjL3Ry
YW5zZmVyLWRhdGFjaGFubmVsLXNlcnZpY2Utd29ya2VyLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGF0
c1NlbGVjdG9yLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0
cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1kYXRhY2hhbm5lbC5odG1sIFsgU2tpcCBdCisKKyMgVGhl
IEdzdFdlYlJUQyBiYWNrZW5kIGRvZXNuJ3Qgc3VwcG9ydCB0cmFuc2Zvcm1zIHlldC4KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgaHR0cC93cHQvd2VicnRjL2F1ZGlvdmlkZW8tc2NyaXB0LXRyYW5zZm9y
bS5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy92aWRl
by1zY3JpcHQtdHJhbnNmb3JtLWtleWZyYW1lLW9ubHkuaHRtbCBbIFNraXAgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSBodHRwL3dwdC93ZWJydGMvdmlkZW8tc2NyaXB0LXRyYW5zZm9ybS5odG1sIFsg
U2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVz
dHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3JtL3NjcmlwdC1hdWRpby10cmFuc2Zvcm0uaHR0cHMu
aHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRm
b3JtLXRlc3RzL3dlYnJ0Yy1lbmNvZGVkLXRyYW5zZm9ybS9zY3JpcHQtY2hhbmdlLXRyYW5zZm9y
bS5odHRwcy5odG1sIFsgU2tpcCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93
ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWVuY29kZWQtdHJhbnNmb3JtL3NjcmlwdC1tZXRhZGF0
YS10cmFuc2Zvcm0uaHR0cHMuaHRtbCBbIFNraXAgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1lbmNvZGVkLXRyYW5zZm9ybS9zY3Jp
cHQtdHJhbnNmb3JtLmh0dHBzLmh0bWwgWyBTa2lwIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1w
b3J0ZWQvdzNjL3dlYi1wbGF0Zm9ybS10ZXN0cy93ZWJydGMtZW5jb2RlZC10cmFuc2Zvcm0vc2Ny
aXB0LXdyaXRlLXR3aWNlLXRyYW5zZm9ybS5odHRwcy5odG1sIFsgU2tpcCBdCisKKyMgVGhlIGdl
bmVyYXRlZCBTRFAgb2ZmZXIgY3VycmVudGx5IGRvZXMgbm90IHJlZmxlY3QgdGhlIGNvZGVjLXBy
ZWZlcmVuY2VzIHNldAorIyBvbiB0cmFuc2NlaXZlcnMuIEluc3RlYWQgdGhlIG5lZ290aWF0ZWQg
b3V0Z29pbmcgbWVkaWEgc291cmNlIGNhcHMgYXJlIHVzZWQKKyMgYW5kIG91ciBjdXJyZW50IGlt
cGxlbWVudGF0aW9uIG9mIG91dGdvaW5nIHNvdXJjZSBkb2Vzbid0IHN1cHBvcnQgbXVsdGlwbGUK
KyMgcGF5bG9hZCB0eXBlcy4KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2F1ZGlvLXBlZXIt
Y29ubmVjdGlvbi1nNzIyLmh0bWwgWyBGYWlsdXJlIF0KKword2Via2l0Lm9yZy9iLzIzNTg4NSBm
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWFkZEljZUNhbmRpZGF0ZS5odG1sIFsg
RmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tYWRkVHJhY2stcmV1c2Utc2VuZGVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLWxvY2Fs
LW9mZmVyLmh0bWwgWyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24taGF2ZS1sb2NhbC1wcmFuc3dlci5odG1sIFsgQ3Jhc2ggXQor
d2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWhh
dmUtcmVtb3RlLW9mZmVyLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgZmFz
dC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1oYXZlLXJlbW90ZS1wcmFuc3dlci5odG1s
IFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJD
b25uZWN0aW9uLWljZWNhbmRpZGF0ZS1ldmVudC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3Jn
L2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24taW5zcGVjdC1hbnN3
ZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFt
L1JUQ1BlZXJDb25uZWN0aW9uLWluc3BlY3Qtb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW1lZGlhLXNl
dHVwLWNhbGxiYWNrcy1zaW5nbGUtZGlhbG9nLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC10
d28tZGlhbG9ncy5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLW9ubmVnb3RpYXRpb25uZWVkZWQuaHRtbCBbIFBhc3Mg
VGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGZhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tcGFnZS1jYWNoZS5odG1sIFsgQ3Jhc2ggXQord2Via2l0Lm9yZy9iLzIzNTg4NSBm
YXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZWx5LWFzc2lnbmVkLXRyYW5z
Y2VpdmVyLW1pZC5odG1sIFsgUGFzcyBGYWlsdXJlIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSBmYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldExvY2FsRGVzY3JpcHRp
b24tb2ZmZXIuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBmYXN0L21lZGlh
c3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLmh0bWwg
WyBDcmFzaCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IGh0dHAvd3B0L3dlYnJ0Yy90aGlyZC1wYXJ0
eS1mcmFtZS1pY2UtY2FuZGlkYXRlLWZpbHRlcmluZy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQu
b3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjLWV4dGVu
c2lvbnMvUlRDUnRwUGFyYW1ldGVycy1tYXhGcmFtZXJhdGUuaHRtbCBbIEZhaWx1cmUgXQord2Vi
a2l0Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL3dlYnJ0Yy1l
eHRlbnNpb25zL1JUQ1J0cFN5bmNocm9uaXphdGlvblNvdXJjZS1jYXB0dXJlVGltZXN0YW1wLmh0
bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgaW1wb3J0ZWQvdzNjL3dlYi1wbGF0
Zm9ybS10ZXN0cy93ZWJydGMtcHJpb3JpdHkvUlRDUnRwUGFyYW1ldGVycy1lbmNvZGluZ3MuaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSBpbnNwZWN0b3IvcGFnZS9vdmVycmlk
ZVNldHRpbmctSUNFQ2FuZGlkYXRlRmlsdGVyaW5nRW5hYmxlZC5odG1sIFsgVGltZW91dCBdCit3
ZWJraXQub3JnL2IvMjM1ODg1IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvbWVkaWEt
Y2FwYWJpbGl0aWVzL2RlY29kaW5nSW5mby53ZWJydGMuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0
Lm9yZy9iLzIzNTg4NSBpbXBvcnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLWNhcGFi
aWxpdGllcy9lbmNvZGluZ0luZm8ud2VicnRjLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL2FkZFRyYW5zY2VpdmVyLXRoZW4tYWRkVHJhY2suaHRtbCBbIEZhaWx1
cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvYXVkaW8tdmlkZW8tZWxlbWVudC1wbGF5
aW5nLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2NhbmRpZGF0
ZS1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9jYW52
YXMtdG8tcGVlci1jb25uZWN0aW9uLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL2NhcHR1cmVDYW52YXMtd2VicnRjLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5v
cmcvYi8yMzU4ODUgd2VicnRjL2Nsb3NpbmctcGVlcmNvbm5lY3Rpb24uaHRtbCBbIFRpbWVvdXQg
XQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZGlyZWN0aW9uLWNoYW5nZS5odG1sIFsgRmFp
bHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9kaXNhYmxlLWVuY3J5cHRpb24uaHRt
bCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvZXBoZW1lcmFsLWNlcnRp
ZmljYXRlcy1hbmQtY25hbWVzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL2ZpbHRlcmluZy1pY2UtY2FuZGlkYXRlLWFmdGVyLXJlbG9hZC5odG1sIFsgVGltZW91
dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9oMjY0LXBhY2tldGl6YXRpb24tbW9kZS5o
dG1sIFsgVGltZW91dCBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL2xpYndl
YnJ0Yy9zZXRMb2NhbERlc2NyaXB0aW9uQ3Jhc2guaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9y
Zy9iLzIzNTg4NSB3ZWJydGMvbm8tcG9ydC16ZXJvLWluLXVwZC1jYW5kaWRhdGVzLmh0bWwgWyBG
YWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi1yZW1v
dGUtYXVkaW8tbXV0ZS5odG1sIFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0
Yy9wZWVyLWNvbm5lY3Rpb24tcmVtb3RlLWF1ZGlvLW11dGUyLmh0bWwgWyBUaW1lb3V0IF0KK3dl
YmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3BlZXItY29ubmVjdGlvbi10cmFjay1lbmQuaHRtbCBb
IFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvcGVlcmNvbm5lY3Rpb24tcGFn
ZS1jYWNoZS1sb25nLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3BlZXJjb25uZWN0aW9uLXBhZ2UtY2FjaGUuaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9i
LzIzNTg4NSB3ZWJydGMvcmVjZWl2ZXItdHJhY2stc2hvdWxkLXN0YXktbGl2ZS1ldmVuLWlmLXJl
Y2VpdmVyLWlzLWluYWN0aXZlLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL3JlbW92ZS10cmFjay5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy91dGY4LXNkcC5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdl
YnJ0Yy92aWRlby1hZGRUcmFuc2NlaXZlci5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2Iv
MjM1ODg1IHdlYnJ0Yy92aWRlby1nZXRQYXJhbWV0ZXJzLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtp
dC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLW1lZGlhc3RyZWFtdHJhY2stc3RhdHMuaHRtbCBb
IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tbXV0ZS12cDguaHRt
bCBbIFRpbWVvdXQgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvdmlkZW8tbXV0ZS5odG1s
IFsgVGltZW91dCBdCit3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1yZXBsYWNlLXRy
YWNrLXRvLW51bGwuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMv
dmlkZW8tcmVwbGFjZS10cmFjay5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy92aWRlby1zdGF0cy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy92aWRlby11bm11dGUuaHRtbCBbIENyYXNoIF0KK3dlYmtpdC5vcmcvYi8yMzU4ODUg
d2VicnRjL3ZpZGVvLXZwOC12aWRlb3JhbmdlLmh0bWwgWyBUaW1lb3V0IF0KK3dlYmtpdC5vcmcv
Yi8yMzU4ODUgd2VicnRjL3ZpZGVvLmh0bWwgWyBGYWlsdXJlIF0KK3dlYmtpdC5vcmcvYi8yMzU4
ODUgd2VicnRjL3ZwOC10aGVuLWgyNjQuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzIz
NTg4NSB3ZWJydGMvdnA5LXN2Yy5odG1sIFsgRmFpbHVyZSBdCit3ZWJraXQub3JnL2IvMjM1ODg1
IHdlYnJ0Yy92cDkuaHRtbCBbIEZhaWx1cmUgXQorCiAjLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLwogIyBFbmQgb2YgR1N0cmVhbWVyLXJlbGF0ZWQgYnVncwogIy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8v
Ly8vLy8vLy8vLy8vLy8vLy8KQEAgLTE0MzEsMTYgKzE1MDgsMTQgQEAgd2Via2l0Lm9yZy9iLzc5
MjAzIHdlYmtpdC5vcmcvYi8xODY2NzggZmFzdC9tZWRpYXN0cmVhbS9NZWRpYVN0cmVhbS12aWRl
by1lbGVtZW4KIAogZmFzdC9tZWRpYXN0cmVhbS9NZWRpYURldmljZXMtYWRkRXZlbnRMaXN0ZW5l
ci5odG1sIFsgRHVtcEpTQ29uc29sZUxvZ0luU3RkRXJyIF0KIAotd2Via2l0Lm9yZy9iLzE5MTAw
NiB3ZWJydGMvc2ltdWxjYXN0LWgyNjQuaHRtbCBbIEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzE5
MTAwNiB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9zaW11bGNhc3QtaDI2NC5odG1sIFsgRmFp
bHVyZSBUaW1lb3V0IF0KIAotd2Via2l0Lm9yZy9iLzE5MzY0MSB3ZWJydGMvdmlkZW8tc2V0RGly
ZWN0aW9uLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQord2Via2l0Lm9yZy9iLzE5MzY0MSB3ZWJraXQu
b3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1zZXREaXJlY3Rpb24uaHRtbCBbIEZhaWx1cmUgUGFz
cyBUaW1lb3V0IF0KIAogd2Via2l0Lm9yZy9iLzE5NDYxMSBodHRwL3dwdC93ZWJydGMvZ2V0VXNl
ck1lZGlhLXByb2Nlc3NTd2FwcGluZy5odG1sIFsgRmFpbHVyZSBdCiAKIHdlYmtpdC5vcmcvYi8y
MDEyNjcgWyBSZWxlYXNlIF0gd2VicnRjL3ZpZGVvLWgyNjQuaHRtbCBbIFRpbWVvdXQgRmFpbHVy
ZSBdCi13ZWJraXQub3JnL2IvMjIyNTg1IFsgRGVidWcgXSB3ZWJydGMvdmlkZW8taDI2NC5odG1s
IFsgQ3Jhc2ggXQotCi13ZWJraXQub3JnL2IvMjEwMjcyIHdlYnJ0Yy9kYXRhY2hhbm5lbC9tdWx0
aXBsZS1jb25uZWN0aW9ucy5odG1sIFsgVGltZW91dCBQYXNzIF0KK3dlYmtpdC5vcmcvYi8yMjI1
ODUgd2Via2l0Lm9yZy9iLzIzNTg4NSBbIERlYnVnIF0gd2VicnRjL3ZpZGVvLWgyNjQuaHRtbCBb
IENyYXNoIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMjE1MDA1IHdlYmtpdC5vcmcvYi8yMTg3
ODcgd2VicnRjL2gyNjQtYmFzZWxpbmUuaHRtbCBbIENyYXNoIFRpbWVvdXQgXQogIyBoMjY0LWhp
Z2guaHRtbCBpcyBtYXJrZWQgYXMgc2xvdyBpbiB0aGUgcm9vdCBleHBlY3RhdGlvbgpAQCAtMTQ0
OSw3ICsxNTI0LDcgQEAgd2Via2l0Lm9yZy9iLzIxNTAwNyBbIERlYnVnIF0gd2VicnRjL2gyNjQt
aGlnaC5odG1sIFsgU2xvdyBGYWlsdXJlIF0KIAogd2Via2l0Lm9yZy9iLzIxNjUzOCB3ZWJydGMv
Y2FwdHVyZUNhbnZhcy13ZWJydGMtc29mdHdhcmUtaDI2NC1iYXNlbGluZS5odG1sIFsgU2xvdyBG
YWlsdXJlIF0KIAotd2Via2l0Lm9yZy9iLzIxNjc2MyB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJy
dGMtc29mdHdhcmUtaDI2NC1oaWdoLmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KK3dlYmtpdC5vcmcv
Yi8yMTY3NjMgd2Via2l0Lm9yZy9iLzIzNTg4NSB3ZWJydGMvY2FwdHVyZUNhbnZhcy13ZWJydGMt
c29mdHdhcmUtaDI2NC1oaWdoLmh0bWwgWyBDcmFzaCBGYWlsdXJlIFRpbWVvdXQgXQogCiB3ZWJr
aXQub3JnL2IvMjE4MjIxIHdlYnJ0Yy92cDktcHJvZmlsZTIuaHRtbCBbIFRpbWVvdXQgRmFpbHVy
ZSBdCiAKQEAgLTIyNDEsMTMgKzIzMTYsMTIgQEAgd2Via2l0Lm9yZy9iLzE4NjEwMCBjc3MzL2Nv
bG9yLWZpbHRlcnMvY29sb3ItZmlsdGVyLWNvbG9yLXByb3BlcnR5LWxpc3QtaXRlbS5odG0KIHdl
YmtpdC5vcmcvYi8xODYxMDAgZmFzdC9oaWRwaS9maWx0ZXJzLXR1cmJ1bGVuY2UuaHRtbCBbIElt
YWdlT25seUZhaWx1cmUgXQogd2Via2l0Lm9yZy9iLzE4NzA0NCB3ZWJhbmltYXRpb25zL29wYWNp
dHktYW5pbWF0aW9uLXlpZWxkcy1jb21wb3NpdGluZy1zcGFuLmh0bWwgWyBGYWlsdXJlIF0KIAot
d2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMvZGF0YWNoYW5uZWwvbWRucy1pY2UtY2FuZGlkYXRl
cy5odG1sIFsgVGltZW91dCBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1hZGRU
cmFjay5odG1sIFsgRmFpbHVyZSBdCi13ZWJraXQub3JnL2IvMTg3MDY0IHdlYnJ0Yy92aWRlby1k
aXNhYmxlZC1ibGFjay5odG1sIFsgQ3Jhc2ggXQotd2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJydGMv
dmlkZW8tcmVtb3RlLW11dGUuaHRtbCBbIENyYXNoIF0KLXdlYmtpdC5vcmcvYi8xODcwNjQgd2Vi
cnRjL3ZpZGVvLXJlcGxhY2UtbXV0ZWQtdHJhY2suaHRtbCBbIFRpbWVvdXQgXQord2Via2l0Lm9y
Zy9iLzE4NzA2NCB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1yZXBsYWNlLW11dGVk
LXRyYWNrLmh0bWwgWyBUaW1lb3V0IEZhaWx1cmUgXQord2Via2l0Lm9yZy9iLzE4NzA2NCB3ZWJr
aXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy92aWRlby1kaXNhYmxlZC1ibGFjay5odG1sIFsgQ3Jhc2gg
VGltZW91dCBdCit3ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRj
L3ZpZGVvLXJlbW90ZS1tdXRlLmh0bWwgWyBDcmFzaCBGYWlsdXJlIF0KIHdlYmtpdC5vcmcvYi8x
ODcwNjQgd2VicnRjL3ZpZGVvLXJvdGF0aW9uLmh0bWwgWyBGYWlsdXJlIF0KLXdlYmtpdC5vcmcv
Yi8xODcwNjQgd2VicnRjL3ZpZGVvLXJvdGF0aW9uLW5vLWN2by5odG1sIFsgRmFpbHVyZSBdCit3
ZWJraXQub3JnL2IvMTg3MDY0IHdlYmtpdC5vcmcvYi8yMzU4ODUgd2VicnRjL3ZpZGVvLXJvdGF0
aW9uLW5vLWN2by5odG1sIFsgRmFpbHVyZSBDcmFzaCBdCiB3ZWJraXQub3JnL2IvMTg3MDY0IHdl
YnJ0Yy92aWRlby13aXRoLWRhdGEtY2hhbm5lbC5odG1sIFsgRmFpbHVyZSBdCiB3ZWJraXQub3Jn
L2IvMTg3MDY0IGltcG9ydGVkL3czYy93ZWItcGxhdGZvcm0tdGVzdHMvd2VicnRjL1JUQ1BlZXJD
b25uZWN0aW9uLWdldFN0YXRzLmh0dHBzLmh0bWwgWyBGYWlsdXJlIFBhc3MgXQogCkBAIC0yNDU0
LDkgKzI1MjgsNiBAQCB3ZWJraXQub3JnL2IvMTc0MjQyIG1lZGlhL21lZGlhLWZ1bGxzY3JlZW4t
cGF1c2UtaW5saW5lLmh0bWwgWyBTa2lwIF0KIHdlYmtpdC5vcmcvYi8xODIxMDggaHR0cC90ZXN0
cy9tZWRpYS9obHMvaGxzLXdlYnZ0dC10cmFja3MuaHRtbCBbIFRpbWVvdXQgXQogd2Via2l0Lm9y
Zy9iLzEzNzMxMSBtZWRpYS92aWRlby1mdWxsc2NyZWVuLW9ubHktcGxheWJhY2suaHRtbCBbIFRp
bWVvdXQgQ3Jhc2ggXQogCi13ZWJraXQub3JnL2IvMTk4MTEzIFsgUmVsZWFzZSBdIGZhc3QvbWVk
aWFzdHJlYW0vbWVkaWEtc3RyZWFtLXBhZ2UtbXV0ZWQuaHRtbCBbIFBhc3MgXQotd2Via2l0Lm9y
Zy9iLzE5ODExMyBbIERlYnVnIF0gZmFzdC9tZWRpYXN0cmVhbS9tZWRpYS1zdHJlYW0tcGFnZS1t
dXRlZC5odG1sIFsgVGltZW91dCBdCi0KIHdlYmtpdC5vcmcvYi8xOTQwNDQgaW1wb3J0ZWQvdzNj
L3dlYi1wbGF0Zm9ybS10ZXN0cy9tZWRpYS1zb3VyY2UvbWVkaWFzb3VyY2UtYWRkc291cmNlYnVm
ZmVyLmh0bWwgWyBGYWlsdXJlIF0KIAogIyBSZW1vdmVkIGZyb20gZ2VuZXJhbCBUZXN0RXhwZWN0
YXRpb25zIGluIHIyNzYzOTMsIGJ1dCBjb25zb2xlIGVycm9yIG1lc3NhZ2Ugc3RpbGwgaGFwcGVu
aW5nIGluIEdMaWIuCkBAIC0yNTQxLDEwICsyNjEyLDcgQEAgbWVkaWEvdmlkZW8tcmVtb3RlLWNv
bnRyb2wtcGxheXBhdXNlLmh0bWwgWyBTa2lwIF0KIAogd2Via2l0Lm9yZy9iLzIwNzA2MiBpbXBv
cnRlZC93M2Mvd2ViLXBsYXRmb3JtLXRlc3RzL21lZGlhLXNvdXJjZS9tZWRpYXNvdXJjZS1yZXBs
YXkuaHRtbCBbIEZhaWx1cmUgUGFzcyBdCiAKLXdlYmtpdC5vcmcvYi8yMjkzNDYgd2VicnRjL211
bHRpLWF1ZGlvLmh0bWwgWyBUaW1lb3V0IFBhc3MgXQotCi13ZWJraXQub3JnL2IvMjI5NzE1IFsg
RGVidWcgXSBmYXN0L21lZGlhc3RyZWFtL2dldERpc3BsYXlNZWRpYS1tYXgtY29uc3RyYWludHMz
Lmh0bWwgWyBUaW1lb3V0IF0KLXdlYmtpdC5vcmcvYi8yMjk3MTUgWyBEZWJ1ZyBdIGZhc3QvbWVk
aWFzdHJlYW0vc2NyZWVuY2FwdHVyZS11c2VyLWdlc3R1cmUuaHRtbCBbIFRpbWVvdXQgXQord2Vi
a2l0Lm9yZy9iLzIyOTM0NiB3ZWJraXQub3JnL2IvMjM1ODg1IHdlYnJ0Yy9tdWx0aS1hdWRpby5o
dG1sIFsgVGltZW91dCBQYXNzIEZhaWx1cmUgXQogCiB3ZWJraXQub3JnL2IvMjI5NzM4IGZhc3Qv
dGV4dC93aGl0ZXNwYWNlL3RhYi1jaGFyYWN0ZXItYmFzaWNzLmh0bWwgWyBGYWlsdXJlIF0KIHdl
YmtpdC5vcmcvYi8yMjk3MzggZmFzdC90ZXh0L3dvcmQtYnJlYWsuaHRtbCBbIEZhaWx1cmUgXQpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JU
Q1BlZXJDb25uZWN0aW9uLWxvY2FsRGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0IGIvTGF5b3V0VGVz
dHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLWxvY2Fs
RGVzY3JpcHRpb24tZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmM5NWE5YjYxOTAwOWE3NDMyYTEy
OTM2YTdjNmE4MTg5MDg0ZDJjN2YKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0
Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbG9jYWxEZXNjcmlw
dGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGVzdHMgUlRDUGVlckNvbm5lY3Rp
b24gbG9jYWxEZXNjcmlwdGlvbi4KKworT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVz
IG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgorCisKK1BB
U1MgcGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVz
dFN1Y2NlZWRlZDEsIHJlcXVlc3RGYWlsZWQxKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQ
QVNTIHJlcXVlc3RTdWNjZWVkZWQgd2FzIGNhbGxlZC4KK1BBU1MgcGMuc2V0TG9jYWxEZXNjcmlw
dGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDIsIHJlcXVlc3RG
YWlsZWQyKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHJlcXVlc3RGYWlsZWQgd2Fz
IGNhbGxlZC4KK1BBU1MgcGMubG9jYWxEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwg
cGMubG9jYWxEZXNjcmlwdGlvbi5zZHAgc2hvdWxkIGJlIGxvY2FsLiBXYXMgdD0wIDAKKy4KK1BB
U1MgcGMubG9jYWxEZXNjcmlwdGlvbi50eXBlIGlzICJvZmZlciIKK0ZBSUwgcGMubG9jYWxEZXNj
cmlwdGlvbi5zZHAgc2hvdWxkIGJlIGxvY2FsLiBXYXMgdD0wIDAKKy4KK1BBU1Mgc3VjY2Vzc2Z1
bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlvdXRU
ZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbWVk
aWEtc2V0dXAtc2luZ2xlLWRpYWxvZy1leHBlY3RlZC50eHQgYi9MYXlvdXRUZXN0cy9wbGF0Zm9y
bS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24tbWVkaWEtc2V0dXAtc2lu
Z2xlLWRpYWxvZy1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZDkzNDJkZTcyODE5ZDdhOWM1MTdm
NTMxYjFmNWZkMTdkNWEwNDIyNAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3BsYXRm
b3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1tZWRpYS1zZXR1cC1z
aW5nbGUtZGlhbG9nLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDYxIEBACitUZXN0IHNldHRpbmcg
dXAgbWVkaWEgYmV0d2VlbiB0d28gUlRDUGVlckNvbm5lY3Rpb24gaW5zdGFuY2VzIHdpdGggb25l
IHNpbmdsZSBTRFAgZGlhbG9nLgorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJpZXMg
b2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKworQ3Jl
YXRlIFJUQ1BlZXJDb25uZWN0aW9uIEEKK1BBU1MgcGNBLnNpZ25hbGluZ1N0YXRlIGlzICdzdGFi
bGUnCitQQVNTIHBjQS5wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjQS5j
dXJyZW50TG9jYWxEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjQS5wZW5kaW5nUmVtb3RlRGVz
Y3JpcHRpb24gaXMgbnVsbAorUEFTUyBwY0EuY3VycmVudFJlbW90ZURlc2NyaXB0aW9uIGlzIG51
bGwKKworQ3JlYXRlIFJUQ1BlZXJDb25uZWN0aW9uIEIKK1BBU1MgcGNCLnNpZ25hbGluZ1N0YXRl
IGlzICdzdGFibGUnCitQQVNTIHBjQi5wZW5kaW5nTG9jYWxEZXNjcmlwdGlvbiBpcyBudWxsCitQ
QVNTIHBjQi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbiBpcyBudWxsCitQQVNTIHBjQi5wZW5kaW5n
UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorUEFTUyBwY0IuY3VycmVudFJlbW90ZURlc2NyaXB0
aW9uIGlzIG51bGwKKworQTogYWRkIG1lZGlhCitBOiBjcmVhdGUgb2ZmZXIKK0E6IGdvdCBvZmZl
ciwgc2V0IGl0IGFzIGxvY2FsIGRlc2NyaXB0aW9uCitBOiBsb2NhbCBvZmZlciBzZXQKK1BBU1Mg
cGNBLnNpZ25hbGluZ1N0YXRlIGlzICdoYXZlLWxvY2FsLW9mZmVyJworUEFTUyBwY0EucGVuZGlu
Z0xvY2FsRGVzY3JpcHRpb24gaXMgYW4gaW5zdGFuY2Ugb2YgUlRDU2Vzc2lvbkRlc2NyaXB0aW9u
CitQQVNTIHBjQS5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbiBpcyBudWxsCisKK0E6IHNlbmQgb2Zm
ZXIgdG8gQgorQSAtLS0gb2ZmZXIgLS0+IEIKK0I6IGdvdCBvZmZlciBmcm9tIEEsIHNldCBpdCBh
cyByZW1vdGUgZGVzY3JpcHRpb24KK0I6IHJlbW90ZSBvZmZlciBzZXQKK1BBU1MgcGNCLnNpZ25h
bGluZ1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKK1BBU1MgcGNCLnBlbmRpbmdSZW1vdGVE
ZXNjcmlwdGlvbiBpcyBhbiBpbnN0YW5jZSBvZiBSVENTZXNzaW9uRGVzY3JpcHRpb24KK1BBU1Mg
cGNCLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK0I6IGFkZCBtZWRpYSAodG8g
aW5jbHVkZSBpbiBhbnN3ZXIpCitCOiBjcmVhdGUgYW5zd2VyCitCOiBnb3QgYW5zd2VyLCBzZXQg
aXQgYXMgbG9jYWwgZGVzY3JpcHRpb24KK0I6IGxvY2FsIGFuc3dlciBzZXQKK1BBU1MgcGNCLnNp
Z25hbGluZ1N0YXRlIGlzICdzdGFibGUnCitQQVNTIHBjQi5wZW5kaW5nTG9jYWxEZXNjcmlwdGlv
biBpcyBudWxsCitQQVNTIHBjQi5jdXJyZW50TG9jYWxEZXNjcmlwdGlvbiBpcyBhbiBpbnN0YW5j
ZSBvZiBSVENTZXNzaW9uRGVzY3JpcHRpb24KK1BBU1MgcGNCLnBlbmRpbmdSZW1vdGVEZXNjcmlw
dGlvbiBpcyBudWxsCitGQUlMIHBjQi5jdXJyZW50UmVtb2V0RGVzY3JpcHRpb24gaXMgbm90IGFu
IGluc3RhbmNlIG9mIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbgorCitCOiBzZW5kIGFuc3dlciB0byBB
CitBIDwtLSBhbnN3ZXIgLS0gQgorQTogZ290IGFuc3dlciBmcm9tIEIsIHNldCBpdCBhcyByZW1v
dGUgZGVzY3JpcHRpb24KK0E6IHJlbW90ZSBhbnN3ZXIgc2V0CitQQVNTIHBjQS5zaWduYWxpbmdT
dGF0ZSBpcyAnc3RhYmxlJworUEFTUyBwY0EucGVuZGluZ0xvY2FsRGVzY3JpcHRpb24gaXMgbnVs
bAorUEFTUyBwY0EuY3VycmVudExvY2FsRGVzY3JpcHRpb24gaXMgYW4gaW5zdGFuY2Ugb2YgUlRD
U2Vzc2lvbkRlc2NyaXB0aW9uCitQQVNTIHBjQS5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gaXMg
bnVsbAorRkFJTCBwY0EuY3VycmVudFJlbW9ldERlc2NyaXB0aW9uIGlzIG5vdCBhbiBpbnN0YW5j
ZSBvZiBSVENTZXNzaW9uRGVzY3JpcHRpb24KKworUEFTUyBPZmZlci9hbnN3ZXIgZGlhbG9nIGNv
bXBsZXRlZAorCitQQVNTIHN1Y2Nlc3NmdWxseVBhcnNlZCBpcyB0cnVlCisKK1RFU1QgQ09NUExF
VEUKKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3Ry
ZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXJlbW90ZURlc2NyaXB0aW9uLWV4cGVjdGVkLnR4dCBiL0xh
eW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlv
bi1yZW1vdGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5k
ZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uOWQ1M2VjNWMyMTYw
ZDAzMjczYzE5ODFmOGVkOWZhMTgzODRmZDA3NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRl
c3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1yZW1v
dGVEZXNjcmlwdGlvbi1leHBlY3RlZC50eHQKQEAgLTAsMCArMSwxOSBAQAorVGVzdHMgUlRDUGVl
ckNvbm5lY3Rpb24gcmVtb3RlRGVzY3JpcHRpb24uCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIHBjLnNldFJlbW90ZURlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbiku
dGhlbihyZXF1ZXN0U3VjY2VlZGVkMSwgcmVxdWVzdEZhaWxlZDEpOyBkaWQgbm90IHRocm93IGV4
Y2VwdGlvbi4KK1BBU1MgcmVxdWVzdFN1Y2NlZWRlZCB3YXMgY2FsbGVkLgorUEFTUyBwYy5zZXRS
ZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1Y2NlZWRl
ZDIsIHJlcXVlc3RGYWlsZWQyKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHJlcXVl
c3RGYWlsZWQgd2FzIGNhbGxlZC4KK1BBU1MgcGMucmVtb3RlRGVzY3JpcHRpb24udHlwZSBpcyAi
b2ZmZXIiCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgcmVtb3RlLiBX
YXMgdD0wIDAKKy4KK1BBU1MgcGMucmVtb3RlRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitG
QUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgcmVtb3RlLiBXYXMgdD0wIDAK
Ky4KK1BBU1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRD
UGVlckNvbm5lY3Rpb24tcmVtb3RlbHktYXNzaWduZWQtdHJhbnNjZWl2ZXItbWlkLWV4cGVjdGVk
LnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRpYXN0cmVhbS9SVENQZWVy
Q29ubmVjdGlvbi1yZW1vdGVseS1hc3NpZ25lZC10cmFuc2NlaXZlci1taWQtZXhwZWN0ZWQudHh0
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmRmZjAyYWE3NGY3MjIwZWRhY2NlMzdkM2YxYmE3NGRlYzUxYWRjZTEKLS0t
IC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJl
YW0vUlRDUGVlckNvbm5lY3Rpb24tcmVtb3RlbHktYXNzaWduZWQtdHJhbnNjZWl2ZXItbWlkLWV4
cGVjdGVkLnR4dApAQCAtMCwwICsxLDI2IEBACitUZXN0IHRoZSBjYXNlIHdoZXJlIGFuIFJUQ1J0
cFRyYW5zY2VpdmVyIGdldHMgYSByZW1vdGVseSBhc3NpZ25lZCBtaWQgYW5kIGFsc28gdW5tdXRl
IHRoZSBhc3NvY2lhdGVkIHNvdXJjZQorCitPbiBzdWNjZXNzLCB5b3Ugd2lsbCBzZWUgYSBzZXJp
ZXMgb2YgIlBBU1MiIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAiVEVTVCBDT01QTEVURSIuCisKKwor
cGNBLmFkZFRyYWNrKHN0cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdLCBzdHJlYW0pCitBJ3MgdHJh
bnNjZWl2ZXIgaXMgbm90IHlldCBhc3NvY2lhdGVkIHdpdGggYSBtZWRpYSBkZXNjcmlwdGlvbiBh
bmQgc2hvdWxkIGhhdmUgYSBudWxsIG1pZAorUEFTUyBwY0EuZ2V0VHJhbnNjZWl2ZXJzKClbMF0u
bWlkIGlzIG51bGwKK0E6IGxvY2FsIG9mZmVyIHNldCAobWlkIGdldHMgZGVmaW5lZCkKK21pZEFz
c2lnbmVkQnlBID0gcGNBLmdldFRyYW5zY2VpdmVycygpWzBdLm1pZAorRkFJTCBtaWRBc3NpZ25l
ZEJ5QSAhPT0gbnVsbCBzaG91bGQgYmUgdHJ1ZS4gV2FzIGZhbHNlLgorcGNCLmFkZFRyYWNrKHN0
cmVhbS5nZXRBdWRpb1RyYWNrcygpWzBdLCBzdHJlYW0pCitCJ3MgdHJhbnNjZWl2ZXIgaXMgbm90
IHlldCBhc3NvY2lhdGVkIHdpdGggYSBtZWRpYSBkZXNjcmlwdGlvbiBhbmQgc2hvdWxkIGhhdmUg
YSBudWxsIG1pZAorUEFTUyBwY0IuZ2V0VHJhbnNjZWl2ZXJzKClbMF0ubWlkIGlzIG51bGwKK0I6
IHJlbW90ZSBvZmZlciBzZXQgKG1pZCBnZXRzIGRlZmluZWQpCitCJ3MgdHJhbnNjZWl2ZXIgc2hv
dWxkIGdldCBpdHMgbWlkIGZyb20gdGhlIHJlbW90ZSBzaWRlIChBKQorUEFTUyBwY0IuZ2V0VHJh
bnNjZWl2ZXJzKClbMF0ubWlkIGlzIG1pZEFzc2lnbmVkQnlBCitQQVNTIE9mZmVyL2Fuc3dlciBk
aWFsb2cgY29tcGxldGVkCitQQVNTIEI6IGdvdCByZW1vdGUgdHJhY2sgZXZlbnQKK1BBU1MgZXZl
bnQudHJhY2sgaXMgYW4gaW5zdGFuY2Ugb2YgTWVkaWFTdHJlYW1UcmFjaworUEFTUyBBOiBnb3Qg
cmVtb3RlIHRyYWNrIGV2ZW50CitQQVNTIEI6IHJlbW90ZSB0cmFjayB1bm11dGUgZXZlbnQKK1BB
U1Mgc3VjY2Vzc2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1n
aXQgYS9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tc2V0UmVtb3RlRGVzY3JpcHRpb24tb2ZmZXItZXhwZWN0ZWQudHh0IGIvTGF5b3V0
VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9uLXNl
dFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLWV4cGVjdGVkLnR4dApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41MjAzZjBi
YmM4ZGJlYjc4OGY3ODU0ODk1NjYwNzYyMTVlM2NkYmZlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5
b3V0VGVzdHMvcGxhdGZvcm0vZ2xpYi9mYXN0L21lZGlhc3RyZWFtL1JUQ1BlZXJDb25uZWN0aW9u
LXNldFJlbW90ZURlc2NyaXB0aW9uLW9mZmVyLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDM5IEBA
CitUZXN0IFJUQ1BlZXJDb25uZWN0aW9uLnNldFJlbW90ZURlc2NyaXB0aW9uIGNhbGxlZCB3aXRo
IGFuIFJUQ1Nlc3Npb25EZXNjcmlwdGlvbiBvZiB0eXBlICdvZmZlcicKKworT24gc3VjY2Vzcywg
eW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQQVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRF
U1QgQ09NUExFVEUiLgorCisKKyoqKiBDcmVhdGUgKHJlbW90ZSkgb2ZmZXIgd2l0aCBhdWRpbyAo
cmVtb3RlT2ZmZXIxKQorKioqIERvbmUsIHN0YXJ0IHRlc3Rpbmcgd2l0aCByZW1vdGVPZmZlcjEK
K1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ3N0YWJsZScKK1BBU1MgcGMucmVtb3RlRGVzY3Jp
cHRpb24gaXMgbnVsbAorUEFTUyBwYy5wZW5kaW5nUmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAor
UEFTUyBwYy5jdXJyZW50UmVtb3RlRGVzY3JpcHRpb24gaXMgbnVsbAorCitQQVNTIHJlbW90ZU9m
ZmVyMSBzZXQgYXMgcmVtb3RlIGRlc2NyaXB0aW9uCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlz
ICdoYXZlLXJlbW90ZS1vZmZlcicKK0ZBSUwgcGMucmVtb3RlRGVzY3JpcHRpb24gc2hvdWxkIGJl
IFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3QgUlRDU2Vzc2lvbkRlc2NyaXB0aW9uXS4KK0ZB
SUwgcGMucGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uIHNob3VsZCBiZSBbb2JqZWN0IE9iamVjdF0u
IFdhcyBbb2JqZWN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbl0uCitQQVNTIHBjLmN1cnJlbnRSZW1v
dGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK1BBU1MgcmVtb3RlT2ZmZXIxIHNldCBhcyByZW1vdGUg
ZGVzY3JpcHRpb24gKGFnYWluKQorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAnaGF2ZS1yZW1v
dGUtb2ZmZXInCisKKyoqKiBUcnkgc2V0dGluZyBsb2NhbCBkZXNjcmlwdGlvbnMgd2l0aCBiYWQg
dHlwZXMgZm9yIHRoZSBjdXJyZW50IHN0YXRlCitQQVNTIHByb21pc2UgcGMuc2V0UmVtb3RlRGVz
Y3JpcHRpb24oe3R5cGU6J2Fuc3dlcicsIHNkcDpyZW1vdGVPZmZlcjEuc2RwfSk7IHJlamVjdGVk
IHdpdGggSW52YWxpZFN0YXRlRXJyb3I6IEZhaWxlZCB0byBzZXQgcmVtb3RlIGFuc3dlciBzZHAK
K1BBU1MgcHJvbWlzZSBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbih7dHlwZToncHJhbnN3ZXInLCBz
ZHA6cmVtb3RlT2ZmZXIxLnNkcH0pOyByZWplY3RlZCB3aXRoIEludmFsaWRTdGF0ZUVycm9yOiBG
YWlsZWQgdG8gc2V0IHJlbW90ZSBhbnN3ZXIgc2RwCisKKyoqKiBDcmVhdGUgKHJlbW90ZSkgb2Zm
ZXIgd2l0aCB2aWRlbyAocmVtb3RlT2ZmZXIyKQorKioqIERvbmUsIHN0YXJ0IHRlc3Rpbmcgd2l0
aCByZW1vdGVPZmZlcjIKK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgJ2hhdmUtcmVtb3RlLW9m
ZmVyJworCitQQVNTIHJlbW90ZU9mZmVyMiBzZXQgYXMgcmVtb3RlIGRlc2NyaXB0aW9uCitQQVNT
IHBjLnNpZ25hbGluZ1N0YXRlIGlzICdoYXZlLXJlbW90ZS1vZmZlcicKK0ZBSUwgcGMucmVtb3Rl
RGVzY3JpcHRpb24gc2hvdWxkIGJlIFtvYmplY3QgT2JqZWN0XS4gV2FzIFtvYmplY3QgUlRDU2Vz
c2lvbkRlc2NyaXB0aW9uXS4KK0ZBSUwgcGMucGVuZGluZ1JlbW90ZURlc2NyaXB0aW9uIHNob3Vs
ZCBiZSBbb2JqZWN0IE9iamVjdF0uIFdhcyBbb2JqZWN0IFJUQ1Nlc3Npb25EZXNjcmlwdGlvbl0u
CitQQVNTIHBjLmN1cnJlbnRSZW1vdGVEZXNjcmlwdGlvbiBpcyBudWxsCisKK1BBU1Mgc3VjY2Vz
c2Z1bGx5UGFyc2VkIGlzIHRydWUKKworVEVTVCBDT01QTEVURQorCmRpZmYgLS1naXQgYS9MYXlv
dXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNvbm5lY3Rpb24t
c3RhYmxlLWV4cGVjdGVkLnR4dCBiL0xheW91dFRlc3RzL3BsYXRmb3JtL2dsaWIvZmFzdC9tZWRp
YXN0cmVhbS9SVENQZWVyQ29ubmVjdGlvbi1zdGFibGUtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI4NDI2OGNlNzhhYWUyYWM5NmMyY2QyZjg0NDA2MzMwNDMwNWU3MTEKLS0tIC9kZXYvbnVsbAor
KysgYi9MYXlvdXRUZXN0cy9wbGF0Zm9ybS9nbGliL2Zhc3QvbWVkaWFzdHJlYW0vUlRDUGVlckNv
bm5lY3Rpb24tc3RhYmxlLWV4cGVjdGVkLnR4dApAQCAtMCwwICsxLDUxIEBACitUZXN0cyBSVENQ
ZWVyQ29ubmVjdGlvbiBpbiBzdGFibGUgc3RhdGUuCisKK09uIHN1Y2Nlc3MsIHlvdSB3aWxsIHNl
ZSBhIHNlcmllcyBvZiAiUEFTUyIgbWVzc2FnZXMsIGZvbGxvd2VkIGJ5ICJURVNUIENPTVBMRVRF
Ii4KKworCitQQVNTIHBjLnNpZ25hbGluZ1N0YXRlIGlzICJzdGFibGUiCitQQVNTIHBjLnNldExv
Y2FsRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZpbmlzaElmU3VjY2VlZGVk
LCByZXF1ZXN0RmFpbGVkMSk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRMb2Nh
bERlc2NyaXB0aW9uIGZhaWxlZC4KK0ZBSUwgZXJyb3JSZWFzb24ubmFtZSBzaG91bGQgYmUgSW52
YWxpZFNlc3Npb25EZXNjcmlwdGlvbkVycm9yLiBXYXMgSW52YWxpZFN0YXRlRXJyb3IuCitGQUlM
IHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFuIGV4Y2VwdGlvbi4gV2FzIG51bGwu
CitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdh
cyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAic3RhYmxlIgorUEFTUyBwYy5zZXRM
b2NhbERlc2NyaXB0aW9uKHNlc3Npb25EZXNjcmlwdGlvbikudGhlbihmaW5pc2hJZlN1Y2NlZWRl
ZCwgcmVxdWVzdEZhaWxlZDIpOyBkaWQgbm90IHRocm93IGV4Y2VwdGlvbi4KK1BBU1Mgc2V0TG9j
YWxEZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVhc29uLm5hbWUgc2hvdWxkIGJlIElu
dmFsaWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIEludmFsaWRTdGF0ZUVycm9yLgorRkFJ
TCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxs
LgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBX
YXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMuc2V0
UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZpbmlzaElmU3VjY2Vl
ZGVkLCByZXF1ZXN0RmFpbGVkMyk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBzZXRS
ZW1vdGVEZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVhc29uLm5hbWUgc2hvdWxkIGJl
IEludmFsaWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIEludmFsaWRTdGF0ZUVycm9yLgor
RkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdhcyBu
dWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9u
LiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1MgcGMu
c2V0UmVtb3RlRGVzY3JpcHRpb24oc2Vzc2lvbkRlc2NyaXB0aW9uKS50aGVuKGZpbmlzaElmU3Vj
Y2VlZGVkLCByZXF1ZXN0RmFpbGVkNCk7IGRpZCBub3QgdGhyb3cgZXhjZXB0aW9uLgorUEFTUyBz
ZXRSZW1vdGVEZXNjcmlwdGlvbiBmYWlsZWQuCitGQUlMIGVycm9yUmVhc29uLm5hbWUgc2hvdWxk
IGJlIEludmFsaWRTZXNzaW9uRGVzY3JpcHRpb25FcnJvci4gV2FzIEludmFsaWRTdGF0ZUVycm9y
LgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uIHNob3VsZCB0aHJvdyBhbiBleGNlcHRpb24uIFdh
cyBudWxsLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0
aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgInN0YWJsZSIKK1BBU1Mg
cGMuc2V0TG9jYWxEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24pLnRoZW4ocmVxdWVzdFN1
Y2NlZWRlZDEsIGZpbmlzaElmRmFpbGVkKTsgZGlkIG5vdCB0aHJvdyBleGNlcHRpb24uCitQQVNT
IHNldExvY2FsRGVzY3JpcHRpb24gc3VjY2VlZGVkLgorUEFTUyBwYy5sb2NhbERlc2NyaXB0aW9u
LnR5cGUgaXMgIm9mZmVyIgorRkFJTCBwYy5sb2NhbERlc2NyaXB0aW9uLnNkcCBzaG91bGQgYmUg
bG9jYWwuIFdhcyB0PTAgMAorLgorRkFJTCBwYy5yZW1vdGVEZXNjcmlwdGlvbiBzaG91bGQgdGhy
b3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BBU1MgcGMuc2lnbmFsaW5nU3RhdGUgaXMgImhh
dmUtbG9jYWwtb2ZmZXIiCitGQUlMIHBjLmxvY2FsRGVzY3JpcHRpb24gc2hvdWxkIHRocm93IGFu
IGV4Y2VwdGlvbi4gV2FzIG51bGwuCitGQUlMIHBjLnJlbW90ZURlc2NyaXB0aW9uIHNob3VsZCB0
aHJvdyBhbiBleGNlcHRpb24uIFdhcyBudWxsLgorUEFTUyBwYy5zaWduYWxpbmdTdGF0ZSBpcyAi
c3RhYmxlIgorUEFTUyBwYy5zZXRSZW1vdGVEZXNjcmlwdGlvbihzZXNzaW9uRGVzY3JpcHRpb24p
LnRoZW4ocmVxdWVzdFN1Y2NlZWRlZDIsIGZpbmlzaElmRmFpbGVkKTsgZGlkIG5vdCB0aHJvdyBl
eGNlcHRpb24uCitQQVNTIHNldFJlbW90ZURlc2NyaXB0aW9uIHN1Y2NlZWRlZC4KK0ZBSUwgcGMu
bG9jYWxEZXNjcmlwdGlvbiBzaG91bGQgdGhyb3cgYW4gZXhjZXB0aW9uLiBXYXMgbnVsbC4KK1BB
U1MgcGMucmVtb3RlRGVzY3JpcHRpb24udHlwZSBpcyAib2ZmZXIiCitGQUlMIHBjLnJlbW90ZURl
c2NyaXB0aW9uLnNkcCBzaG91bGQgYmUgcmVtb3RlLiBXYXMgdD0wIDAKKy4KK1BBU1MgcGMuc2ln
bmFsaW5nU3RhdGUgaXMgImhhdmUtcmVtb3RlLW9mZmVyIgorUEFTUyBzdWNjZXNzZnVsbHlQYXJz
ZWQgaXMgdHJ1ZQorCitURVNUIENPTVBMRVRFCisKZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0No
YW5nZUxvZwppbmRleCA5NjIxYWUxYmQzYmJjMjhjOTcxZmIzOTMyMDY0MzY4OWIwYjRhNDJmLi44
MDQ5NDBlYjAwZGE4YmVjYmIxMTllMmIyOWMyYzM4MmE1ZmMxYTkwIDEwMDY0NAotLS0gYS9DaGFu
Z2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTcgQEAKKzIwMjItMDItMTIgIFBoaWxp
cHBlIE5vcm1hbmQgIDxwbm9ybWFuZEBpZ2FsaWEuY29tPgorCisgICAgICAgIFtHU3RyZWFtZXJd
IEluaXRpYWwgaW1wb3J0IG9mIHRoZSBHc3RXZWJSVEMgYmFja2VuZAorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjM2NTQwCisKKyAgICAgICAgUmV2aWV3
ZWQgYnkgQ2FybG9zIEdhcmNpYSBDYW1wb3MgYW5kIFhhYmllciBSb2RyaWd1ZXotQ2FsdmFyLgor
CisgICAgICAgIEVuYWJsZSBHc3RXZWJSVEMgYnkgZGVmYXVsdCBpZiBhIHJlY2VudC1lbm91Z2gg
KD49IDEuMjApIHZlcnNpb24gaXMgYXZhaWxhYmxlLgorCisgICAgICAgICogU291cmNlL2NtYWtl
L0ZpbmRHU3RyZWFtZXIuY21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL0dTdHJlYW1lckNo
ZWNrcy5jbWFrZToKKyAgICAgICAgKiBTb3VyY2UvY21ha2UvR1N0cmVhbWVyRGVmaW5pdGlvbnMu
Y21ha2U6CisgICAgICAgICogU291cmNlL2NtYWtlL0dTdHJlYW1lckRlcGVuZGVuY2llcy5jbWFr
ZToKKwogMjAyMi0wMy0xOCAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxjZ2FyY2lhQGlnYWxpYS5j
b20+CiAKICAgICAgICAgQWRkIGEgcHVibGljIGJ1aWxkIG9wdGlvbiBmb3IgUERGLmpzCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>